ZGlmZiAtLWdpdCBhL0FVVEhPUlMgYi9BVVRIT1JTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGNhMmMyLi4wMDAwMDAwCi0tLSBhL0FVVEhPUlMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLUluaXRpYWwgcmVsZWFzZToKLS0gUGFzY2FsIE1hc3NpbWlubyAocGFzY2FsLm1hc3NpbWlub0BnbWFpbC5jb20pCi0KLUNvbnRyaWJ1dG9yczoKLS0gcGllcnJlLnBocEBnbWFpbC5jb20gICAoYW5zaS1DIHBvcnQpCi0tIHZpa2Fhcy5hcm9yYUBnbWFpbC5jb20KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3YTcxYWEwLi5hNmU4YjRiIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xMCwzICsxMCw0IEBACiAtIDEvMTQ6IFJlbGVhc2UgdmVyc2lvbiAwLjQuMC1yYzEgKGNoYW5nZSNJMjJiZTEyZDgpCiAtIDcvMTQ6IFJlbGVhc2UgdmVyc2lvbiAwLjQuMS1yYzEgKGNoYW5nZSNJNTM0Njk4NGQyKQogLSAxLzE1OiBSZWxlYXNlIHZlcnNpb24gMC40LjIgKGNoYW5nZSNJMzJhMjI3ODZmKQorLSAzLzE3OiBSZWxlYXNlIHZlcnNpb24gMC40LjMgKHRhZzogdjAuNC4zKQpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYzViNDAuLjAwMDAwMDAKLS0tIGEvSU5TVEFMTAorKysgL2Rldi9udWxsCkBAIC0xLDIzNyArMCwwIEBACi1JbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zCi0qKioqKioqKioqKioqKioqKioqKioqKioqCi0KLUNvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNCwgMjAwNSwKLTIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLVRoaXMgZmlsZSBpcyBmcmVlIGRvY3VtZW50YXRpb247IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKLXVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KLQotQmFzaWMgSW5zdGFsbGF0aW9uCi09PT09PT09PT09PT09PT09PT0KLQotQnJpZWZseSwgdGhlIHNoZWxsIGNvbW1hbmRzIGAuL2NvbmZpZ3VyZTsgbWFrZTsgbWFrZSBpbnN0YWxsJyBzaG91bGQKLWNvbmZpZ3VyZSwgYnVpbGQsIGFuZCBpbnN0YWxsIHRoaXMgcGFja2FnZS4gIFRoZSBmb2xsb3dpbmcKLW1vcmUtZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmljOyBzZWUgdGhlIGBSRUFETUUnIGZpbGUgZm9yCi1pbnN0cnVjdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlLgotCi0gICBUaGUgYGNvbmZpZ3VyZScgc2hlbGwgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGNvcnJlY3QgdmFsdWVzIGZvcgotdmFyaW91cyBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyB1c2VkIGR1cmluZyBjb21waWxhdGlvbi4gIEl0IHVzZXMKLXRob3NlIHZhbHVlcyB0byBjcmVhdGUgYSBgTWFrZWZpbGUnIGluIGVhY2ggZGlyZWN0b3J5IG9mIHRoZSBwYWNrYWdlLgotSXQgbWF5IGFsc28gY3JlYXRlIG9uZSBvciBtb3JlIGAuaCcgZmlsZXMgY29udGFpbmluZyBzeXN0ZW0tZGVwZW5kZW50Ci1kZWZpbml0aW9ucy4gIEZpbmFsbHksIGl0IGNyZWF0ZXMgYSBzaGVsbCBzY3JpcHQgYGNvbmZpZy5zdGF0dXMnIHRoYXQKLXlvdSBjYW4gcnVuIGluIHRoZSBmdXR1cmUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgYW5kIGEKLWZpbGUgYGNvbmZpZy5sb2cnIGNvbnRhaW5pbmcgY29tcGlsZXIgb3V0cHV0ICh1c2VmdWwgbWFpbmx5IGZvcgotZGVidWdnaW5nIGBjb25maWd1cmUnKS4KLQotICAgSXQgY2FuIGFsc28gdXNlIGFuIG9wdGlvbmFsIGZpbGUgKHR5cGljYWxseSBjYWxsZWQgYGNvbmZpZy5jYWNoZScKLWFuZCBlbmFibGVkIHdpdGggYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnIG9yIHNpbXBseSBgLUMnKSB0aGF0IHNhdmVzCi10aGUgcmVzdWx0cyBvZiBpdHMgdGVzdHMgdG8gc3BlZWQgdXAgcmVjb25maWd1cmluZy4gIENhY2hpbmcgaXMKLWRpc2FibGVkIGJ5IGRlZmF1bHQgdG8gcHJldmVudCBwcm9ibGVtcyB3aXRoIGFjY2lkZW50YWwgdXNlIG9mIHN0YWxlCi1jYWNoZSBmaWxlcy4KLQotICAgSWYgeW91IG5lZWQgdG8gZG8gdW51c3VhbCB0aGluZ3MgdG8gY29tcGlsZSB0aGUgcGFja2FnZSwgcGxlYXNlIHRyeQotdG8gZmlndXJlIG91dCBob3cgYGNvbmZpZ3VyZScgY291bGQgY2hlY2sgd2hldGhlciB0byBkbyB0aGVtLCBhbmQgbWFpbAotZGlmZnMgb3IgaW5zdHJ1Y3Rpb25zIHRvIHRoZSBhZGRyZXNzIGdpdmVuIGluIHRoZSBgUkVBRE1FJyBzbyB0aGV5IGNhbgotYmUgY29uc2lkZXJlZCBmb3IgdGhlIG5leHQgcmVsZWFzZS4gIElmIHlvdSBhcmUgdXNpbmcgdGhlIGNhY2hlLCBhbmQgYXQKLXNvbWUgcG9pbnQgYGNvbmZpZy5jYWNoZScgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3Qgd2FudCB0byBrZWVwLCB5b3UKLW1heSByZW1vdmUgb3IgZWRpdCBpdC4KLQotICAgVGhlIGZpbGUgYGNvbmZpZ3VyZS5hYycgKG9yIGBjb25maWd1cmUuaW4nKSBpcyB1c2VkIHRvIGNyZWF0ZQotYGNvbmZpZ3VyZScgYnkgYSBwcm9ncmFtIGNhbGxlZCBgYXV0b2NvbmYnLiAgWW91IG5lZWQgYGNvbmZpZ3VyZS5hYycgaWYKLXlvdSB3YW50IHRvIGNoYW5nZSBpdCBvciByZWdlbmVyYXRlIGBjb25maWd1cmUnIHVzaW5nIGEgbmV3ZXIgdmVyc2lvbgotb2YgYGF1dG9jb25mJy4KLQotVGhlIHNpbXBsZXN0IHdheSB0byBjb21waWxlIHRoaXMgcGFja2FnZSBpczoKLQotICAxLiBgY2QnIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcGFja2FnZSdzIHNvdXJjZSBjb2RlIGFuZCB0eXBlCi0gICAgIGAuL2NvbmZpZ3VyZScgdG8gY29uZmlndXJlIHRoZSBwYWNrYWdlIGZvciB5b3VyIHN5c3RlbS4KLQotICAgICBSdW5uaW5nIGBjb25maWd1cmUnIG1pZ2h0IHRha2UgYSB3aGlsZS4gIFdoaWxlIHJ1bm5pbmcsIGl0IHByaW50cwotICAgICBzb21lIG1lc3NhZ2VzIHRlbGxpbmcgd2hpY2ggZmVhdHVyZXMgaXQgaXMgY2hlY2tpbmcgZm9yLgotCi0gIDIuIFR5cGUgYG1ha2UnIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UuCi0KLSAgMy4gT3B0aW9uYWxseSwgdHlwZSBgbWFrZSBjaGVjaycgdG8gcnVuIGFueSBzZWxmLXRlc3RzIHRoYXQgY29tZSB3aXRoCi0gICAgIHRoZSBwYWNrYWdlLgotCi0gIDQuIFR5cGUgYG1ha2UgaW5zdGFsbCcgdG8gaW5zdGFsbCB0aGUgcHJvZ3JhbXMgYW5kIGFueSBkYXRhIGZpbGVzIGFuZAotICAgICBkb2N1bWVudGF0aW9uLgotCi0gIDUuIFlvdSBjYW4gcmVtb3ZlIHRoZSBwcm9ncmFtIGJpbmFyaWVzIGFuZCBvYmplY3QgZmlsZXMgZnJvbSB0aGUKLSAgICAgc291cmNlIGNvZGUgZGlyZWN0b3J5IGJ5IHR5cGluZyBgbWFrZSBjbGVhbicuICBUbyBhbHNvIHJlbW92ZSB0aGUKLSAgICAgZmlsZXMgdGhhdCBgY29uZmlndXJlJyBjcmVhdGVkIChzbyB5b3UgY2FuIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yCi0gICAgIGEgZGlmZmVyZW50IGtpbmQgb2YgY29tcHV0ZXIpLCB0eXBlIGBtYWtlIGRpc3RjbGVhbicuICBUaGVyZSBpcwotICAgICBhbHNvIGEgYG1ha2UgbWFpbnRhaW5lci1jbGVhbicgdGFyZ2V0LCBidXQgdGhhdCBpcyBpbnRlbmRlZCBtYWlubHkKLSAgICAgZm9yIHRoZSBwYWNrYWdlJ3MgZGV2ZWxvcGVycy4gIElmIHlvdSB1c2UgaXQsIHlvdSBtYXkgaGF2ZSB0byBnZXQKLSAgICAgYWxsIHNvcnRzIG9mIG90aGVyIHByb2dyYW1zIGluIG9yZGVyIHRvIHJlZ2VuZXJhdGUgZmlsZXMgdGhhdCBjYW1lCi0gICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICA2LiBPZnRlbiwgeW91IGNhbiBhbHNvIHR5cGUgYG1ha2UgdW5pbnN0YWxsJyB0byByZW1vdmUgdGhlIGluc3RhbGxlZAotICAgICBmaWxlcyBhZ2Fpbi4KLQotQ29tcGlsZXJzIGFuZCBPcHRpb25zCi09PT09PT09PT09PT09PT09PT09PT0KLQotU29tZSBzeXN0ZW1zIHJlcXVpcmUgdW51c3VhbCBvcHRpb25zIGZvciBjb21waWxhdGlvbiBvciBsaW5raW5nIHRoYXQgdGhlCi1gY29uZmlndXJlJyBzY3JpcHQgZG9lcyBub3Qga25vdyBhYm91dC4gIFJ1biBgLi9jb25maWd1cmUgLS1oZWxwJyBmb3IKLWRldGFpbHMgb24gc29tZSBvZiB0aGUgcGVydGluZW50IGVudmlyb25tZW50IHZhcmlhYmxlcy4KLQotICAgWW91IGNhbiBnaXZlIGBjb25maWd1cmUnIGluaXRpYWwgdmFsdWVzIGZvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKLWJ5IHNldHRpbmcgdmFyaWFibGVzIGluIHRoZSBjb21tYW5kIGxpbmUgb3IgaW4gdGhlIGVudmlyb25tZW50LiAgSGVyZQotaXMgYW4gZXhhbXBsZToKLQotICAgICAuL2NvbmZpZ3VyZSBDQz1jOTkgQ0ZMQUdTPS1nIExJQlM9LWxwb3NpeAotCi0gICAqTm90ZSBEZWZpbmluZyBWYXJpYWJsZXM6OiwgZm9yIG1vcmUgZGV0YWlscy4KLQotQ29tcGlsaW5nIEZvciBNdWx0aXBsZSBBcmNoaXRlY3R1cmVzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotWW91IGNhbiBjb21waWxlIHRoZSBwYWNrYWdlIGZvciBtb3JlIHRoYW4gb25lIGtpbmQgb2YgY29tcHV0ZXIgYXQgdGhlCi1zYW1lIHRpbWUsIGJ5IHBsYWNpbmcgdGhlIG9iamVjdCBmaWxlcyBmb3IgZWFjaCBhcmNoaXRlY3R1cmUgaW4gdGhlaXIKLW93biBkaXJlY3RvcnkuICBUbyBkbyB0aGlzLCB5b3UgY2FuIHVzZSBHTlUgYG1ha2UnLiAgYGNkJyB0byB0aGUKLWRpcmVjdG9yeSB3aGVyZSB5b3Ugd2FudCB0aGUgb2JqZWN0IGZpbGVzIGFuZCBleGVjdXRhYmxlcyB0byBnbyBhbmQgcnVuCi10aGUgYGNvbmZpZ3VyZScgc2NyaXB0LiAgYGNvbmZpZ3VyZScgYXV0b21hdGljYWxseSBjaGVja3MgZm9yIHRoZQotc291cmNlIGNvZGUgaW4gdGhlIGRpcmVjdG9yeSB0aGF0IGBjb25maWd1cmUnIGlzIGluIGFuZCBpbiBgLi4nLgotCi0gICBXaXRoIGEgbm9uLUdOVSBgbWFrZScsIGl0IGlzIHNhZmVyIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yIG9uZQotYXJjaGl0ZWN0dXJlIGF0IGEgdGltZSBpbiB0aGUgc291cmNlIGNvZGUgZGlyZWN0b3J5LiAgQWZ0ZXIgeW91IGhhdmUKLWluc3RhbGxlZCB0aGUgcGFja2FnZSBmb3Igb25lIGFyY2hpdGVjdHVyZSwgdXNlIGBtYWtlIGRpc3RjbGVhbicgYmVmb3JlCi1yZWNvbmZpZ3VyaW5nIGZvciBhbm90aGVyIGFyY2hpdGVjdHVyZS4KLQotSW5zdGFsbGF0aW9uIE5hbWVzCi09PT09PT09PT09PT09PT09PT0KLQotQnkgZGVmYXVsdCwgYG1ha2UgaW5zdGFsbCcgaW5zdGFsbHMgdGhlIHBhY2thZ2UncyBjb21tYW5kcyB1bmRlcgotYC91c3IvbG9jYWwvYmluJywgaW5jbHVkZSBmaWxlcyB1bmRlciBgL3Vzci9sb2NhbC9pbmNsdWRlJywgZXRjLiAgWW91Ci1jYW4gc3BlY2lmeSBhbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gYC91c3IvbG9jYWwnIGJ5IGdpdmluZwotYGNvbmZpZ3VyZScgdGhlIG9wdGlvbiBgLS1wcmVmaXg9UFJFRklYJy4KLQotICAgWW91IGNhbiBzcGVjaWZ5IHNlcGFyYXRlIGluc3RhbGxhdGlvbiBwcmVmaXhlcyBmb3IKLWFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmaWxlcyBhbmQgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzLiAgSWYgeW91Ci1wYXNzIHRoZSBvcHRpb24gYC0tZXhlYy1wcmVmaXg9UFJFRklYJyB0byBgY29uZmlndXJlJywgdGhlIHBhY2thZ2UgdXNlcwotUFJFRklYIGFzIHRoZSBwcmVmaXggZm9yIGluc3RhbGxpbmcgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4KLURvY3VtZW50YXRpb24gYW5kIG90aGVyIGRhdGEgZmlsZXMgc3RpbGwgdXNlIHRoZSByZWd1bGFyIHByZWZpeC4KLQotICAgSW4gYWRkaXRpb24sIGlmIHlvdSB1c2UgYW4gdW51c3VhbCBkaXJlY3RvcnkgbGF5b3V0IHlvdSBjYW4gZ2l2ZQotb3B0aW9ucyBsaWtlIGAtLWJpbmRpcj1ESVInIHRvIHNwZWNpZnkgZGlmZmVyZW50IHZhbHVlcyBmb3IgcGFydGljdWxhcgota2luZHMgb2YgZmlsZXMuICBSdW4gYGNvbmZpZ3VyZSAtLWhlbHAnIGZvciBhIGxpc3Qgb2YgdGhlIGRpcmVjdG9yaWVzCi15b3UgY2FuIHNldCBhbmQgd2hhdCBraW5kcyBvZiBmaWxlcyBnbyBpbiB0aGVtLgotCi0gICBJZiB0aGUgcGFja2FnZSBzdXBwb3J0cyBpdCwgeW91IGNhbiBjYXVzZSBwcm9ncmFtcyB0byBiZSBpbnN0YWxsZWQKLXdpdGggYW4gZXh0cmEgcHJlZml4IG9yIHN1ZmZpeCBvbiB0aGVpciBuYW1lcyBieSBnaXZpbmcgYGNvbmZpZ3VyZScgdGhlCi1vcHRpb24gYC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYJyBvciBgLS1wcm9ncmFtLXN1ZmZpeD1TVUZGSVgnLgotCi1PcHRpb25hbCBGZWF0dXJlcwotPT09PT09PT09PT09PT09PT0KLQotU29tZSBwYWNrYWdlcyBwYXkgYXR0ZW50aW9uIHRvIGAtLWVuYWJsZS1GRUFUVVJFJyBvcHRpb25zIHRvCi1gY29uZmlndXJlJywgd2hlcmUgRkVBVFVSRSBpbmRpY2F0ZXMgYW4gb3B0aW9uYWwgcGFydCBvZiB0aGUgcGFja2FnZS4KLVRoZXkgbWF5IGFsc28gcGF5IGF0dGVudGlvbiB0byBgLS13aXRoLVBBQ0tBR0UnIG9wdGlvbnMsIHdoZXJlIFBBQ0tBR0UKLWlzIHNvbWV0aGluZyBsaWtlIGBnbnUtYXMnIG9yIGB4JyAoZm9yIHRoZSBYIFdpbmRvdyBTeXN0ZW0pLiAgVGhlCi1gUkVBRE1FJyBzaG91bGQgbWVudGlvbiBhbnkgYC0tZW5hYmxlLScgYW5kIGAtLXdpdGgtJyBvcHRpb25zIHRoYXQgdGhlCi1wYWNrYWdlIHJlY29nbml6ZXMuCi0KLSAgIEZvciBwYWNrYWdlcyB0aGF0IHVzZSB0aGUgWCBXaW5kb3cgU3lzdGVtLCBgY29uZmlndXJlJyBjYW4gdXN1YWxseQotZmluZCB0aGUgWCBpbmNsdWRlIGFuZCBsaWJyYXJ5IGZpbGVzIGF1dG9tYXRpY2FsbHksIGJ1dCBpZiBpdCBkb2Vzbid0LAoteW91IGNhbiB1c2UgdGhlIGBjb25maWd1cmUnIG9wdGlvbnMgYC0teC1pbmNsdWRlcz1ESVInIGFuZAotYC0teC1saWJyYXJpZXM9RElSJyB0byBzcGVjaWZ5IHRoZWlyIGxvY2F0aW9ucy4KLQotU3BlY2lmeWluZyB0aGUgU3lzdGVtIFR5cGUKLT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoZXJlIG1heSBiZSBzb21lIGZlYXR1cmVzIGBjb25maWd1cmUnIGNhbm5vdCBmaWd1cmUgb3V0IGF1dG9tYXRpY2FsbHksCi1idXQgbmVlZHMgdG8gZGV0ZXJtaW5lIGJ5IHRoZSB0eXBlIG9mIG1hY2hpbmUgdGhlIHBhY2thZ2Ugd2lsbCBydW4gb24uCi1Vc3VhbGx5LCBhc3N1bWluZyB0aGUgcGFja2FnZSBpcyBidWlsdCB0byBiZSBydW4gb24gdGhlIF9zYW1lXwotYXJjaGl0ZWN0dXJlcywgYGNvbmZpZ3VyZScgY2FuIGZpZ3VyZSB0aGF0IG91dCwgYnV0IGlmIGl0IHByaW50cyBhCi1tZXNzYWdlIHNheWluZyBpdCBjYW5ub3QgZ3Vlc3MgdGhlIG1hY2hpbmUgdHlwZSwgZ2l2ZSBpdCB0aGUKLWAtLWJ1aWxkPVRZUEUnIG9wdGlvbi4gIFRZUEUgY2FuIGVpdGhlciBiZSBhIHNob3J0IG5hbWUgZm9yIHRoZSBzeXN0ZW0KLXR5cGUsIHN1Y2ggYXMgYHN1bjQnLCBvciBhIGNhbm9uaWNhbCBuYW1lIHdoaWNoIGhhcyB0aGUgZm9ybToKLQotICAgICBDUFUtQ09NUEFOWS1TWVNURU0KLQotd2hlcmUgU1lTVEVNIGNhbiBoYXZlIG9uZSBvZiB0aGVzZSBmb3JtczoKLQotICAgICBPUyBLRVJORUwtT1MKLQotICAgU2VlIHRoZSBmaWxlIGBjb25maWcuc3ViJyBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBlYWNoIGZpZWxkLiAgSWYKLWBjb25maWcuc3ViJyBpc24ndCBpbmNsdWRlZCBpbiB0aGlzIHBhY2thZ2UsIHRoZW4gdGhpcyBwYWNrYWdlIGRvZXNuJ3QKLW5lZWQgdG8ga25vdyB0aGUgbWFjaGluZSB0eXBlLgotCi0gICBJZiB5b3UgYXJlIF9idWlsZGluZ18gY29tcGlsZXIgdG9vbHMgZm9yIGNyb3NzLWNvbXBpbGluZywgeW91IHNob3VsZAotdXNlIHRoZSBvcHRpb24gYC0tdGFyZ2V0PVRZUEUnIHRvIHNlbGVjdCB0aGUgdHlwZSBvZiBzeXN0ZW0gdGhleSB3aWxsCi1wcm9kdWNlIGNvZGUgZm9yLgotCi0gICBJZiB5b3Ugd2FudCB0byBfdXNlXyBhIGNyb3NzIGNvbXBpbGVyLCB0aGF0IGdlbmVyYXRlcyBjb2RlIGZvciBhCi1wbGF0Zm9ybSBkaWZmZXJlbnQgZnJvbSB0aGUgYnVpbGQgcGxhdGZvcm0sIHlvdSBzaG91bGQgc3BlY2lmeSB0aGUKLSJob3N0IiBwbGF0Zm9ybSAoaS5lLiwgdGhhdCBvbiB3aGljaCB0aGUgZ2VuZXJhdGVkIHByb2dyYW1zIHdpbGwKLWV2ZW50dWFsbHkgYmUgcnVuKSB3aXRoIGAtLWhvc3Q9VFlQRScuCi0KLVNoYXJpbmcgRGVmYXVsdHMKLT09PT09PT09PT09PT09PT0KLQotSWYgeW91IHdhbnQgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBgY29uZmlndXJlJyBzY3JpcHRzIHRvIHNoYXJlLCB5b3UKLWNhbiBjcmVhdGUgYSBzaXRlIHNoZWxsIHNjcmlwdCBjYWxsZWQgYGNvbmZpZy5zaXRlJyB0aGF0IGdpdmVzIGRlZmF1bHQKLXZhbHVlcyBmb3IgdmFyaWFibGVzIGxpa2UgYENDJywgYGNhY2hlX2ZpbGUnLCBhbmQgYHByZWZpeCcuCi1gY29uZmlndXJlJyBsb29rcyBmb3IgYFBSRUZJWC9zaGFyZS9jb25maWcuc2l0ZScgaWYgaXQgZXhpc3RzLCB0aGVuCi1gUFJFRklYL2V0Yy9jb25maWcuc2l0ZScgaWYgaXQgZXhpc3RzLiAgT3IsIHlvdSBjYW4gc2V0IHRoZQotYENPTkZJR19TSVRFJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgbG9jYXRpb24gb2YgdGhlIHNpdGUgc2NyaXB0LgotQSB3YXJuaW5nOiBub3QgYWxsIGBjb25maWd1cmUnIHNjcmlwdHMgbG9vayBmb3IgYSBzaXRlIHNjcmlwdC4KLQotRGVmaW5pbmcgVmFyaWFibGVzCi09PT09PT09PT09PT09PT09PT0KLQotVmFyaWFibGVzIG5vdCBkZWZpbmVkIGluIGEgc2l0ZSBzaGVsbCBzY3JpcHQgY2FuIGJlIHNldCBpbiB0aGUKLWVudmlyb25tZW50IHBhc3NlZCB0byBgY29uZmlndXJlJy4gIEhvd2V2ZXIsIHNvbWUgcGFja2FnZXMgbWF5IHJ1bgotY29uZmlndXJlIGFnYWluIGR1cmluZyB0aGUgYnVpbGQsIGFuZCB0aGUgY3VzdG9taXplZCB2YWx1ZXMgb2YgdGhlc2UKLXZhcmlhYmxlcyBtYXkgYmUgbG9zdC4gIEluIG9yZGVyIHRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgeW91IHNob3VsZCBzZXQKLXRoZW0gaW4gdGhlIGBjb25maWd1cmUnIGNvbW1hbmQgbGluZSwgdXNpbmcgYFZBUj12YWx1ZScuICBGb3IgZXhhbXBsZToKLQotICAgICAuL2NvbmZpZ3VyZSBDQz0vdXNyL2xvY2FsMi9iaW4vZ2NjCi0KLWNhdXNlcyB0aGUgc3BlY2lmaWVkIGBnY2MnIHRvIGJlIHVzZWQgYXMgdGhlIEMgY29tcGlsZXIgKHVubGVzcyBpdCBpcwotb3ZlcnJpZGRlbiBpbiB0aGUgc2l0ZSBzaGVsbCBzY3JpcHQpLgotCi1VbmZvcnR1bmF0ZWx5LCB0aGlzIHRlY2huaXF1ZSBkb2VzIG5vdCB3b3JrIGZvciBgQ09ORklHX1NIRUxMJyBkdWUgdG8KLWFuIEF1dG9jb25mIGJ1Zy4gIFVudGlsIHRoZSBidWcgaXMgZml4ZWQgeW91IGNhbiB1c2UgdGhpcyB3b3JrYXJvdW5kOgotCi0gICAgIENPTkZJR19TSEVMTD0vYmluL2Jhc2ggL2Jpbi9iYXNoIC4vY29uZmlndXJlIENPTkZJR19TSEVMTD0vYmluL2Jhc2gKLQotYGNvbmZpZ3VyZScgSW52b2NhdGlvbgotPT09PT09PT09PT09PT09PT09PT09PQotCi1gY29uZmlndXJlJyByZWNvZ25pemVzIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBjb250cm9sIGhvdyBpdCBvcGVyYXRlcy4KLQotYC0taGVscCcKLWAtaCcKLSAgICAgUHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBvcHRpb25zIHRvIGBjb25maWd1cmUnLCBhbmQgZXhpdC4KLQotYC0tdmVyc2lvbicKLWAtVicKLSAgICAgUHJpbnQgdGhlIHZlcnNpb24gb2YgQXV0b2NvbmYgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYGNvbmZpZ3VyZScKLSAgICAgc2NyaXB0LCBhbmQgZXhpdC4KLQotYC0tY2FjaGUtZmlsZT1GSUxFJwotICAgICBFbmFibGUgdGhlIGNhY2hlOiB1c2UgYW5kIHNhdmUgdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3RzIGluIEZJTEUsCi0gICAgIHRyYWRpdGlvbmFsbHkgYGNvbmZpZy5jYWNoZScuICBGSUxFIGRlZmF1bHRzIHRvIGAvZGV2L251bGwnIHRvCi0gICAgIGRpc2FibGUgY2FjaGluZy4KLQotYC0tY29uZmlnLWNhY2hlJwotYC1DJwotICAgICBBbGlhcyBmb3IgYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnLgotCi1gLS1xdWlldCcKLWAtLXNpbGVudCcKLWAtcScKLSAgICAgRG8gbm90IHByaW50IG1lc3NhZ2VzIHNheWluZyB3aGljaCBjaGVja3MgYXJlIGJlaW5nIG1hZGUuICBUbwotICAgICBzdXBwcmVzcyBhbGwgbm9ybWFsIG91dHB1dCwgcmVkaXJlY3QgaXQgdG8gYC9kZXYvbnVsbCcgKGFueSBlcnJvcgotICAgICBtZXNzYWdlcyB3aWxsIHN0aWxsIGJlIHNob3duKS4KLQotYC0tc3JjZGlyPURJUicKLSAgICAgTG9vayBmb3IgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZSBpbiBkaXJlY3RvcnkgRElSLiAgVXN1YWxseQotICAgICBgY29uZmlndXJlJyBjYW4gZGV0ZXJtaW5lIHRoYXQgZGlyZWN0b3J5IGF1dG9tYXRpY2FsbHkuCi0KLWBjb25maWd1cmUnIGFsc28gYWNjZXB0cyBzb21lIG90aGVyLCBub3Qgd2lkZWx5IHVzZWZ1bCwgb3B0aW9ucy4gIFJ1bgotYGNvbmZpZ3VyZSAtLWhlbHAnIGZvciBtb3JlIGRldGFpbHMuCi0KZGlmZiAtLWdpdCBhL05FV1MgYi9ORVdTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzQzN2I3Li4wMDAwMDAwCi0tLSBhL05FV1MKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLS0gOS8xMDogaW5pdGlhbCByZWxlYXNlIHZlcnNpb24gMC4xCi0tIDgvMTI6IHJlbGVhc2UgdmVyc2lvbiAwLjIuMC1yYzEgKGhlYWQgY2hhbmdlI0lhNTQ3NTI0NykuCi0tIDMvMTM6IFVwZGF0ZWQgV2ViUCB3aXRoIGhlYWQgY2hhbmdlI0k5ZTVhZTczNwotLSA4LzEzOiByZWxlYXNlIHZlcnNpb24gMC4zLjEgKGhlYWQgY2hhbmdlI0lkZWEzNDY0YikuCi0tIDgvMTM6IFVwZGF0ZWQgV2ViUCB3aXRoIHBhdGNoZXMgcmVxdWlyZWQgZm9yIEFuaW1hdGlvbgotICAgICAgICAoI0k3Mzc0NTFkN2YsICNJYTMwMDM4NWEgJiAjSTk1NjZhOGUyKS4KLS0gMS8xNDogcmVsZWFzZSB2ZXJzaW9uIDAuNC4wLXJjMSAoY2hhbmdlI0kyMmJlMTJkOCkuCi0tIDcvMTQ6IHJlbGVhc2UgdmVyc2lvbiAwLjQuMS1yYzEgKGNoYW5nZSNJNTM0Njk4NGQyKS4KLS0gMS8xNTogcmVsZWFzZSB2ZXJzaW9uIDAuNC4yIChjaGFuZ2UjSTMyYTIyNzg2ZikuCmRpZmYgLS1naXQgYS9QQVRFTlRTIGIvUEFURU5UUwppbmRleCA0NDE0ZDgzLi43OWQxN2Q3IDEwMDY0NAotLS0gYS9QQVRFTlRTCisrKyBiL1BBVEVOVFMKQEAgLTEsMjIgKzEsMjMgQEAKIEFkZGl0aW9uYWwgSVAgUmlnaHRzIEdyYW50IChQYXRlbnRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSJUaGlzIGltcGxlbWVudGF0aW9uIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrcyBkaXN0cmlidXRlZCBieQotR29vZ2xlIGFzIHBhcnQgb2YgdGhlIFdlYk0gUHJvamVjdC4KKyJUaGVzZSBpbXBsZW1lbnRhdGlvbnMiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmtzIHRoYXQgaW1wbGVtZW50IHRoZSBXZWJNCitjb2RlY3MgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIFdlYk0gUHJvamVjdC4KIAotR29vZ2xlIGhlcmVieSBncmFudHMgdG8geW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsCi1uby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKQotcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwKLXRyYW5zZmVyLCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZCBwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIHRoaXMKLWltcGxlbWVudGF0aW9uIG9mIFZQOCwgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQKLWNsYWltcywgYm90aCBjdXJyZW50bHkgb3duZWQgYnkgR29vZ2xlIGFuZCBhY3F1aXJlZCBpbiB0aGUgZnV0dXJlLAotbGljZW5zYWJsZSBieSBHb29nbGUgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoaXMKLWltcGxlbWVudGF0aW9uIG9mIFZQOC4gVGhpcyBncmFudCBkb2VzIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlCi1pbmZyaW5nZWQgb25seSBhcyBhIGNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoaXMKLWltcGxlbWVudGF0aW9uLiBJZiB5b3Ugb3IgeW91ciBhZ2VudCBvciBleGNsdXNpdmUgbGljZW5zZWUgaW5zdGl0dXRlIG9yCi1vcmRlciBvciBhZ3JlZSB0byB0aGUgaW5zdGl0dXRpb24gb2YgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkKLWVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcKLXRoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBWUDggb3IgYW55IGNvZGUgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGlzCi1pbXBsZW1lbnRhdGlvbiBvZiBWUDggY29uc3RpdHV0ZXMgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQKLWluZnJpbmdlbWVudCwgb3IgaW5kdWNlbWVudCBvZiBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQKLXJpZ2h0cyBncmFudGVkIHRvIHlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgVlA4Ci1zaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorR29vZ2xlIGhlcmVieSBncmFudHMgdG8geW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwKK3JveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0bworbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgdHJhbnNmZXIsIGFuZCBvdGhlcndpc2UKK3J1biwgbW9kaWZ5IGFuZCBwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZXNlIGltcGxlbWVudGF0aW9ucyBvZiBXZWJNLCB3aGVyZQorc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zLCBib3RoIGN1cnJlbnRseSBvd25lZCBieQorR29vZ2xlIGFuZCBhY3F1aXJlZCBpbiB0aGUgZnV0dXJlLCBsaWNlbnNhYmxlIGJ5IEdvb2dsZSB0aGF0IGFyZSBuZWNlc3NhcmlseQoraW5mcmluZ2VkIGJ5IHRoZXNlIGltcGxlbWVudGF0aW9ucyBvZiBXZWJNLiBUaGlzIGdyYW50IGRvZXMgbm90IGluY2x1ZGUgY2xhaW1zCit0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlc2UKK2ltcGxlbWVudGF0aW9ucy4gSWYgeW91IG9yIHlvdXIgYWdlbnQgb3IgZXhjbHVzaXZlIGxpY2Vuc2VlIGluc3RpdHV0ZSBvciBvcmRlcgorb3IgYWdyZWUgdG8gdGhlIGluc3RpdHV0aW9uIG9mIHBhdGVudCBsaXRpZ2F0aW9uIG9yIGFueSBvdGhlciBwYXRlbnQKK2VuZm9yY2VtZW50IGFjdGl2aXR5IGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IKK2NvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgYW55IG9mIHRoZXNlIGltcGxlbWVudGF0aW9ucyBvZiBXZWJNCitvciBhbnkgY29kZSBpbmNvcnBvcmF0ZWQgd2l0aGluIGFueSBvZiB0aGVzZSBpbXBsZW1lbnRhdGlvbnMgb2YgV2ViTQorY29uc3RpdHV0ZXMgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCBvciBpbmR1Y2VtZW50IG9mCitwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgdG8geW91IHVuZGVyIHRoaXMgTGljZW5zZQorZm9yIHRoZXNlIGltcGxlbWVudGF0aW9ucyBvZiBXZWJNIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoCitsaXRpZ2F0aW9uIGlzIGZpbGVkLgpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDEzZjMyZWEuLmMzZjMyYzUgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTQsNyArNCw3IEBACiAgICAgICAgICAgXF9fXF9fL1xfX19fL1xfX19fXy9fXy8gX19fXyAgX19fCiAgICAgICAgICAgICAgICAgLyBfLyAvICAgIFwgICAgXCAvICBfIFwvIF8vCiAgICAgICAgICAgICAgICAvICBcXy8gICAvIC8gICBcIFwgICBfXy8gIFxfXwotICAgICAgICAgICAgICAgXF9fX18vX19fXy9cX19fX18vX19fX18vX19fXy92MC40LjIKKyAgICAgICAgICAgICAgIFxfX19fL19fX18vXF9fX19fL19fX19fL19fX18vdjAuNC4zCiAKIERlc2NyaXB0aW9uOgogPT09PT09PT09PT09CmRpZmYgLS1naXQgYS9SRUFETUUuYW5kcm9pZCBiL1JFQURNRS5hbmRyb2lkCmluZGV4IDgxZTdhYzcuLjYzZWYyYmMgMTAwNjQ0Ci0tLSBhL1JFQURNRS5hbmRyb2lkCisrKyBiL1JFQURNRS5hbmRyb2lkCkBAIC0xLDU2ICsxLDIxIEBACi1VUkw6IGh0dHA6Ly9yZXZpZXcud2VibXByb2plY3Qub3JnL2dpdHdlYj9wPWxpYndlYnAuZ2l0Ci1WZXJzaW9uOiA0My8xNDQzLzEKK1VSTDogaHR0cHM6Ly9nZXJyaXQuY2hyb21pdW0ub3JnL2dlcnJpdC9naXR3ZWI/cD13ZWJtJTJGbGlid2VicC5naXQKK1ZlcnNpb246IHYwLjQuMwogTGljZW5zZTogR29vZ2xlIEJTRCBsaWtlCiAKIExvY2FsIG1vZGlmaWNhdGlvbnM6CiAtIFJld3JpdGUgQW5kcm9pZC5tayB0byByZW1vdmUgZHVwbGljYXRlIGRlZmluaXRpb25zIGFuZCBzZXQgbW9kdWxlIG5hbWUKICAgaW4gYSBjb25zaXN0ZW50IHdheSB3aXRoIG90aGVyIGV4dGVybmFsIGxpYnJhcmllcwotLSBNb3ZlIHB1YmxpYyBoZWFkZXJzIGZyb20gc3JjL3dlYnAgdG8gaW5jbHVkZS93ZWJwLCBzbyBwYXRoIHRvIGhlYWRlcnMKKy0gQ29weSBwdWJsaWMgaGVhZGVycyBmcm9tIHNyYy93ZWJwIHRvIGluY2x1ZGUvd2VicCwgc28gcGF0aCB0byBoZWFkZXJzCiAgIG1heSBiZSBhcHBlbmRlZCBpbnRvIENGTEFHUyB3aXRob3V0IHJpc2sgZm9yIG90aGVyIHByaXZhdGUgaGVhZGVycwogICAoZS5nLiBiaXRzLmgpIHRvIGxlYWsgaW50bwotLSBTeW5jLXBhdGNoIHdpdGggbGlid2VicCB2ZXIgMC4xLjIKLS0gUmVtb3ZlZCBCdWlsZCBmaWxlcyBuZWNlc3NhcnkgZm9yIGJ1aWxkaW5nIHZpYSBhdXRvY29uZi9hdXRvbWFrZSB0b29scworLSBSZW1vdmVkIGJ1aWxkIGZpbGVzIG5lY2Vzc2FyeSBmb3IgYnVpbGRpbmcgdmlhIGF1dG9jb25mL2F1dG9tYWtlIHRvb2xzCiAgIFRoZXNlIGZpbGVzIGFyZSBub3QgcmVxdWlyZWQgdG8gYnVpbGQgdmlhIEFuZHJvaWQubWsKLSAgLSBNYWtlZmlsZS5hbSAgTWFrZWZpbGUudmMgTWFrZWZpbGUuaW4KLSAgLSBjb25maWcuaC5pbiBjb25maWd1cmUgY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgY29uZmlndXJlLmFjCi0gIC0gYXV0b2dlbi5zaCBpbnN0YWxsLXNoIG1pc3NpbmcgZGVwY29tcCBsdG1haW4uc2ggYWNsb2NhbC5tNAotLSBBZGRlZCBXZWJQIEVuY29kZXIgKHZlciAwLjEuMikgYXMgd2VsbAotICAtIFJlbW92ZWQgc29tZSBtb3JlIHVudXNlZCBNYWtlZmlsZS5hbSAmIE1ha2VmaWxlLmluCi0gIC0gQWRkZWQgQW5kcm9pZC5tayB0byBlbmNvZGVyICYgZGVjb2RlciBjb2RlIGxldmVscy4KLS0gU3luY2VkIHRoZSBXZWJQIENvZGUgKEVuY29kZXIvRGVjb2Rlcikgd2l0aCB0aGUgaGVhZCBjaGFuZ2UjSWE1M2Y4NDViCi0gIC0gQWRkZWQgdGhyZWUgY29sb3Itc3BhY2VzIHZpeiBBUkdCXzg4ODgsIFJHQkFfNDQ0NCwgUkdCXzU2NQotICAgIHN1cHBvcnRlZCBieSBBbmRyb2lkLgotLSBGaXhlZCB0aGUgRW5kaWFuJ25lc3MgYnVnIGZvciBDb2xvci1Db25maWdzIChSR0JfNTY1ICYgQVJHQl80NDQ0KS4KLSAgVGhlIGZpeCBpcyBzaW1pbGFyIHRvIGpwZWdsaWIgaGFuZGxpbmcgZm9yIEpDU19SR0JfNTY1ICYgSkNTX1JHQkFfODg4OAotICBjb2xvciBjb25maWdzLiBBZGRlZCB0aGUgY29kZSB1bmRlciAiQU5EUk9JRF9XRUJQX1JHQiIgZmxhZy4KLS0gU3luYy1wYXRjaCB3aXRoIGxpYndlYnAgdmVyIDAuMi4wLXJjMSAoaGVhZCBjaGFuZ2UjSWE1NDc1MjQ3KS4KLS0gVXBkYXRlZCBXZWJQIHdpdGggaGVhZCBjaGFuZ2UjSTNkYTIwNjNiCi0tIFVwZGF0ZWQgV2ViUCB3aXRoIGhlYWQgY2hhbmdlI0k5ZTVhZTczNwotICAtIDE2Yml0IHN3YXBwaW5nIG9mIFJHQjU2NSAvIFJHQjQ0NDQgY29sb3JzcGFjZS4gQWRkZWQgY29tcGlsZS10aW1lIGZsYWcKLSAgICBXRUJQX1NXQVBfMTZCSVRfQ1NQIHRvIHN1cHBvcnQgYnl0ZS1zd2FwIChyZXF1aXJlZCBmb3Igc2tpYSBkYXRhIHR5cGUgZm9yCi0gICAgMTZiaXQgdmFsdWVzKSBvdXRwdXQgZm9yIHRoZXNlIGNvbG9yc3BhY2VzLgotICAtIEFkZGVkIEFSTS9ORU9OIGNvZGUgZm9yIGRlY29kZXIvZW5jb2RlciBtb2R1bGVzLgotICAtIFNwZWVkdXAgaW4gV2ViUCBjb21wcmVzc2lvbiAobWV0aG9kIDMgYW5kIGFib3ZlKS4KLSAgLSBBZGRlZCBtdWx0aS10aHJlYWRlZCBhbHBoYSBlbmNvZGluZyBmb3IgbG9zc3kgY29tcHJlc3Npb24uCi0gIC0gVXBkYXRlZCBXZWJQIHdpdGggaGVhZCBjaGFuZ2UjSTllNWFlNzM3Ci0tIFN5bmMtcGF0Y2ggd2l0aCBsaWJ3ZWJwIHZlciAwLjMuMSAoaGVhZCBjaGFuZ2UjSWRlYTM0NjRiKS4KLSAgLSBBZGQgaW5jcmVtZW50YWwgZGVjb2Rpbmcgc3VwcG9ydCBmb3IgaW1hZ2VzIGNvbnRhaW5pbmcgQUxQSCBhbmQgSUNDUCBjaHVua3MuCi0tIFVwZGF0ZWQgV2ViUCB3aXRoIHBhdGNoZXMgcmVxdWlyZWQgZm9yIEFuaW1hdGlvbgotICAgKCNJNzM3NDUxZDdmLCAjSWEzMDAzODVhICYgI0k5NTY2YThlMikuCi0tIEZpeCBtZW1sZWFrIGluIFdlYlBJRGVsZXRlKCkgKGNoYW5nZSNJZDRmYWVmMWIpLgotLSBTeW5jLXBhdGNoIHdpdGggbGlid2VicCB2ZXIgMC40LjAtcmMxIChjaGFuZ2UjSTIyYmUxMmQ4KS4KLS0gQnVnZml4IGZvciBpbmNyZW1lbnRhbCBkZWNvZGUgb2YgbG9zc3ktYWxwaGEgKGNoYW5nZSNJNzE2Y2UwODIpCi0tIFN5bmMtcGF0Y2ggd2l0aCBsaWJ3ZWJwIHZlciAwLjQuMS1yYzEgKGNoYW5nZSNJNTM0Njk4NGQyKS4KLSAgLSBORU9OIGFzc2VtYmx5IG9wdGltaXphdGlvbnM6Ci0gICAgLSB+MjUlIGZhc3RlciBsb3NzeSBkZWNvZGUgLyBlbmNvZGUgKC1tIDQpCi0gICAgLSB+MTAlIGZhc3RlciBsb3NzbGVzcyBkZWNvZGUKLSAgICAtIH41LTEwJSBmYXN0ZXIgbG9zc2xlc3MgZW5jb2RlICgtbSAzLzQpCi0gIC0gQXJjaDY0IChhcm02NCkgJiBNSVBTIHN1cHBvcnQvb3B0aW1pemF0aW9ucy4KLS0gU3luYy1wYXRjaCB3aXRoIGxpYndlYnAgdmVyIDAuNC4yIChjaGFuZ2UjSTMyYTIyNzg2ZikuCi0gIC0gQ2hlcnJ5LXBpY2tlZCBBbHBoYS1kZWNvZGluZyBidWcuCistIEFkZGVkIGEgbG9jYWwgY29weSBvZiBjcHUtZmVhdHVyZXMuW2hjXSB0byBzcmMvZHNwCistIFJlbW92ZWQgV0VCUF9BTkRST0lEX05FT04gY2hlY2sgaW4gZHNwLmggdG8gYXZvaWQgYnJlYWtpbmcgbm9uLU5FT04gYnVpbGRzCisgIHdoZXJlIHRoZSBmbGFncyBpbiBBbmRyb2lkLm1rIGFyZSBub3Qgc2V0IGNvcnJlY3RseSBjdXJyZW50bHkuCiAKLVRoZSBBbmRyb2lkLm1rIGZpbGUgY3JlYXRlcyBXZWJQIERlY29kZXIgYW5kIEVuY29kZXIgc3RhdGljIGxpYnJhcmllcyB3aGljaAotY2FuIGJlIGFkZGVkIHRvIGFueSBhcHBsaWNhdGlvbiBieSBBZGRpbmcgdG8gTE9DQUxfU1RBVElDX0xJQlJBUklFUworVGhlIEFuZHJvaWQubWsgZmlsZSBjcmVhdGVzIFdlYlAgZGVjb2RlciBhbmQgZW5jb2RlciBzdGF0aWMgbGlicmFyaWVzIHdoaWNoCitjYW4gYmUgYWRkZWQgdG8gYW55IGFwcGxpY2F0aW9uIGJ5IGFkZGluZyB0byBMT0NBTF9TVEFUSUNfTElCUkFSSUVTCiBsaWJ3ZWJwLWRlY29kZSBsaWJ3ZWJwLWVuY29kZToKIAogICBMT0NBTF9TVEFUSUNfTElCUkFSSUVTICs9IGxpYndlYnAtZGVjb2RlIGxpYndlYnAtZW5jb2RlCmRpZmYgLS1naXQgYS9leGFtcGxlcy9kd2VicC5jIGIvZXhhbXBsZXMvZHdlYnAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg0YjBkMS4uMDAwMDAwMAotLS0gYS9leGFtcGxlcy9kd2VicC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTI3ICswLDAgQEAKLS8vIENvcHlyaWdodCAyMDEwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0vLwotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotLy8gdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0vLyB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0vLyBpbiB0aGUgZmlsZSBQQVRFTlRTLiBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLS8vIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyAgQ29tbWFuZC1saW5lIHRvb2wgZm9yIGRlY29kaW5nIGEgV2ViUCBpbWFnZS4KLS8vCi0vLyBBdXRob3I6IFNrYWwgKHBhc2NhbC5tYXNzaW1pbm9AZ21haWwuY29tKQotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaWZkZWYgV0VCUF9IQVZFX1BORwotI2luY2x1ZGUgPHBuZy5oPgotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1dJTkNPREVDX0gKLSNpZmRlZiBfX01JTkdXMzJfXwotI2RlZmluZSBJTklUR1VJRCAgLy8gV2l0aG91dCB0aGlzIEdVSURzIGFyZSBkZWNsYXJlZCBleHRlcm4gYW5kIGZhaWwgdG8gbGluawotI2VuZGlmCi0jZGVmaW5lIENJTlRFUkZBQ0UKLSNkZWZpbmUgQ09CSk1BQ1JPUwotI2RlZmluZSBfV0lOMzJfSUUgMHg1MDAgIC8vIFdvcmthcm91bmQgYnVnIGluIHNobHdhcGkuaCB3aGVuIGNvbXBpbGluZyBDKysKLSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2RlIHdpdGggQ09CSk1BQ1JPUy4KLSNpbmNsdWRlIDxzaGx3YXBpLmg+Ci0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgIndlYnAvZGVjb2RlLmgiCi0jaW5jbHVkZSAiLi9leGFtcGxlX3V0aWwuaCIKLSNpbmNsdWRlICIuL3N0b3B3YXRjaC5oIgotCi1zdGF0aWMgaW50IHZlcmJvc2UgPSAwOwotI2lmbmRlZiBXRUJQX0RMTAotI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoY19wbHVzcGx1cykKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLWV4dGVybiB2b2lkKiBWUDhHZXRDUFVJbmZvOyAgIC8vIG9wYXF1ZSBmb3J3YXJkIGRlY2xhcmF0aW9uLgotCi0jaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChjX3BsdXNwbHVzKQotfSAgICAvLyBleHRlcm4gIkMiCi0jZW5kaWYKLSNlbmRpZiAgLy8gV0VCUF9ETEwKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gT3V0cHV0IHR5cGVzCi10eXBlZGVmIGVudW0gewotICBQTkcgPSAwLAotICBQQU0sCi0gIFBQTSwKLSAgUEdNLAotICBZVVYsCi0gIEFMUEhBX1BMQU5FX09OTFkgIC8vIHRoaXMgaXMgZm9yIGV4cGVyaW1lbnRpbmcgb25seQotfSBPdXRwdXRGaWxlRm9ybWF0OwotCi0jaWZkZWYgSEFWRV9XSU5DT0RFQ19ICi0KLSNkZWZpbmUgSUZTKGZuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKFNVQ0NFRURFRChocikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGhyID0gKGZuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYgKEZBSUxFRChocikpIGZwcmludGYoc3RkZXJyLCAjZm4gIiBmYWlsZWQgJTA4bHhcbiIsIGhyKTsgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi0jZGVmaW5lIE1BS0VfUkVGR1VJRCh4KSAoeCkKLSNlbHNlCi0jZGVmaW5lIE1BS0VfUkVGR1VJRCh4KSAmKHgpCi0jZW5kaWYKLQotc3RhdGljIEhSRVNVTFQgQ3JlYXRlT3V0cHV0U3RyZWFtKGNvbnN0IGNoYXIqIG91dF9maWxlX25hbWUsIElTdHJlYW0qKiBzdHJlYW0pIHsKLSAgSFJFU1VMVCBociA9IFNfT0s7Ci0gIElGUyhTSENyZWF0ZVN0cmVhbU9uRmlsZUEob3V0X2ZpbGVfbmFtZSwgU1RHTV9XUklURSB8IFNUR01fQ1JFQVRFLCBzdHJlYW0pKTsKLSAgaWYgKEZBSUxFRChocikpIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIG9wZW5pbmcgb3V0cHV0IGZpbGUgJXMgKCUwOGx4KVxuIiwKLSAgICAgICAgICAgIG91dF9maWxlX25hbWUsIGhyKTsKLSAgfQotICByZXR1cm4gaHI7Ci19Ci0KLXN0YXRpYyBIUkVTVUxUIFdyaXRlVXNpbmdXSUMoY29uc3QgY2hhciogb3V0X2ZpbGVfbmFtZSwgUkVGR1VJRCBjb250YWluZXJfZ3VpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogcmdiLCBpbnQgc3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCBpbnQgaGFzX2FscGhhKSB7Ci0gIEhSRVNVTFQgaHIgPSBTX09LOwotICBJV0lDSW1hZ2luZ0ZhY3RvcnkqIGZhY3RvcnkgPSBOVUxMOwotICBJV0lDQml0bWFwRnJhbWVFbmNvZGUqIGZyYW1lID0gTlVMTDsKLSAgSVdJQ0JpdG1hcEVuY29kZXIqIGVuY29kZXIgPSBOVUxMOwotICBJU3RyZWFtKiBzdHJlYW0gPSBOVUxMOwotICBXSUNQaXhlbEZvcm1hdEdVSUQgcGl4ZWxfZm9ybWF0ID0gaGFzX2FscGhhID8gR1VJRF9XSUNQaXhlbEZvcm1hdDMyYnBwQkdSQQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR1VJRF9XSUNQaXhlbEZvcm1hdDI0YnBwQkdSOwotCi0gIElGUyhDb0luaXRpYWxpemUoTlVMTCkpOwotICBJRlMoQ29DcmVhdGVJbnN0YW5jZShNQUtFX1JFRkdVSUQoQ0xTSURfV0lDSW1hZ2luZ0ZhY3RvcnkpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICBDTFNDVFhfSU5QUk9DX1NFUlZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgTUFLRV9SRUZHVUlEKElJRF9JV0lDSW1hZ2luZ0ZhY3RvcnkpLAotICAgICAgICAgICAgICAgICAgICAgICAoTFBWT0lEKikmZmFjdG9yeSkpOwotICBpZiAoaHIgPT0gUkVHREJfRV9DTEFTU05PVFJFRykgewotICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgIkNvdWxkbid0IGFjY2VzcyBXaW5kb3dzIEltYWdpbmcgQ29tcG9uZW50IChhcmUgeW91IHJ1bm5pbmcgIgotICAgICAgICAgICAgIldpbmRvd3MgWFAgU1AzIG9yIG5ld2VyPykuIFBORyBzdXBwb3J0IG5vdCBhdmFpbGFibGUuICIKLSAgICAgICAgICAgICJVc2UgLXBwbSBvciAtcGdtIGZvciBhdmFpbGFibGUgUFBNIGFuZCBQR00gZm9ybWF0cy5cbiIpOwotICB9Ci0gIElGUyhDcmVhdGVPdXRwdXRTdHJlYW0ob3V0X2ZpbGVfbmFtZSwgJnN0cmVhbSkpOwotICBJRlMoSVdJQ0ltYWdpbmdGYWN0b3J5X0NyZWF0ZUVuY29kZXIoZmFjdG9yeSwgY29udGFpbmVyX2d1aWQsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jb2RlcikpOwotICBJRlMoSVdJQ0JpdG1hcEVuY29kZXJfSW5pdGlhbGl6ZShlbmNvZGVyLCBzdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdJQ0JpdG1hcEVuY29kZXJOb0NhY2hlKSk7Ci0gIElGUyhJV0lDQml0bWFwRW5jb2Rlcl9DcmVhdGVOZXdGcmFtZShlbmNvZGVyLCAmZnJhbWUsIE5VTEwpKTsKLSAgSUZTKElXSUNCaXRtYXBGcmFtZUVuY29kZV9Jbml0aWFsaXplKGZyYW1lLCBOVUxMKSk7Ci0gIElGUyhJV0lDQml0bWFwRnJhbWVFbmNvZGVfU2V0U2l6ZShmcmFtZSwgd2lkdGgsIGhlaWdodCkpOwotICBJRlMoSVdJQ0JpdG1hcEZyYW1lRW5jb2RlX1NldFBpeGVsRm9ybWF0KGZyYW1lLCAmcGl4ZWxfZm9ybWF0KSk7Ci0gIElGUyhJV0lDQml0bWFwRnJhbWVFbmNvZGVfV3JpdGVQaXhlbHMoZnJhbWUsIGhlaWdodCwgc3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCAqIHN0cmlkZSwgcmdiKSk7Ci0gIElGUyhJV0lDQml0bWFwRnJhbWVFbmNvZGVfQ29tbWl0KGZyYW1lKSk7Ci0gIElGUyhJV0lDQml0bWFwRW5jb2Rlcl9Db21taXQoZW5jb2RlcikpOwotCi0gIGlmIChmcmFtZSAhPSBOVUxMKSBJVW5rbm93bl9SZWxlYXNlKGZyYW1lKTsKLSAgaWYgKGVuY29kZXIgIT0gTlVMTCkgSVVua25vd25fUmVsZWFzZShlbmNvZGVyKTsKLSAgaWYgKGZhY3RvcnkgIT0gTlVMTCkgSVVua25vd25fUmVsZWFzZShmYWN0b3J5KTsKLSAgaWYgKHN0cmVhbSAhPSBOVUxMKSBJVW5rbm93bl9SZWxlYXNlKHN0cmVhbSk7Ci0gIHJldHVybiBocjsKLX0KLQotc3RhdGljIGludCBXcml0ZVBORyhjb25zdCBjaGFyKiBvdXRfZmlsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJQRGVjQnVmZmVyKiBjb25zdCBidWZmZXIpIHsKLSAgY29uc3QgdWludDMyX3Qgd2lkdGggPSBidWZmZXItPndpZHRoOwotICBjb25zdCB1aW50MzJfdCBoZWlnaHQgPSBidWZmZXItPmhlaWdodDsKLSAgdW5zaWduZWQgY2hhciogY29uc3QgcmdiID0gYnVmZmVyLT51LlJHQkEucmdiYTsKLSAgY29uc3QgaW50IHN0cmlkZSA9IGJ1ZmZlci0+dS5SR0JBLnN0cmlkZTsKLSAgY29uc3QgaW50IGhhc19hbHBoYSA9IChidWZmZXItPmNvbG9yc3BhY2UgPT0gTU9ERV9CR1JBKTsKLQotICByZXR1cm4gU1VDQ0VFREVEKFdyaXRlVXNpbmdXSUMob3V0X2ZpbGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BS0VfUkVGR1VJRChHVUlEX0NvbnRhaW5lckZvcm1hdFBuZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2IsIHN0cmlkZSwgd2lkdGgsIGhlaWdodCwgaGFzX2FscGhhKSk7Ci19Ci0KLSNlbGlmIGRlZmluZWQoV0VCUF9IQVZFX1BORykgICAgLy8gIUhBVkVfV0lOQ09ERUNfSAotc3RhdGljIHZvaWQgUE5HQVBJIGVycm9yX2Z1bmN0aW9uKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2NvbnN0X2NoYXJwIGR1bW15KSB7Ci0gICh2b2lkKWR1bW15OyAgLy8gcmVtb3ZlIHZhcmlhYmxlLXVudXNlZCB3YXJuaW5nCi0gIGxvbmdqbXAocG5nX2ptcGJ1ZihwbmcpLCAxKTsKLX0KLQotc3RhdGljIGludCBXcml0ZVBORyhGSUxFKiBvdXRfZmlsZSwgY29uc3QgV2ViUERlY0J1ZmZlciogY29uc3QgYnVmZmVyKSB7Ci0gIGNvbnN0IHVpbnQzMl90IHdpZHRoID0gYnVmZmVyLT53aWR0aDsKLSAgY29uc3QgdWludDMyX3QgaGVpZ2h0ID0gYnVmZmVyLT5oZWlnaHQ7Ci0gIHVuc2lnbmVkIGNoYXIqIGNvbnN0IHJnYiA9IGJ1ZmZlci0+dS5SR0JBLnJnYmE7Ci0gIGNvbnN0IGludCBzdHJpZGUgPSBidWZmZXItPnUuUkdCQS5zdHJpZGU7Ci0gIGNvbnN0IGludCBoYXNfYWxwaGEgPSAoYnVmZmVyLT5jb2xvcnNwYWNlID09IE1PREVfUkdCQSk7Ci0gIHBuZ19zdHJ1Y3RwIHBuZzsKLSAgcG5nX2luZm9wIGluZm87Ci0gIHBuZ191aW50XzMyIHk7Ci0KLSAgcG5nID0gcG5nX2NyZWF0ZV93cml0ZV9zdHJ1Y3QoUE5HX0xJQlBOR19WRVJfU1RSSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBlcnJvcl9mdW5jdGlvbiwgTlVMTCk7Ci0gIGlmIChwbmcgPT0gTlVMTCkgewotICAgIHJldHVybiAwOwotICB9Ci0gIGluZm8gPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KHBuZyk7Ci0gIGlmIChpbmZvID09IE5VTEwpIHsKLSAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJnBuZywgTlVMTCk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgaWYgKHNldGptcChwbmdfam1wYnVmKHBuZykpKSB7Ci0gICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZwbmcsICZpbmZvKTsKLSAgICByZXR1cm4gMDsKLSAgfQotICBwbmdfaW5pdF9pbyhwbmcsIG91dF9maWxlKTsKLSAgcG5nX3NldF9JSERSKHBuZywgaW5mbywgd2lkdGgsIGhlaWdodCwgOCwKLSAgICAgICAgICAgICAgIGhhc19hbHBoYSA/IFBOR19DT0xPUl9UWVBFX1JHQkEgOiBQTkdfQ09MT1JfVFlQRV9SR0IsCi0gICAgICAgICAgICAgICBQTkdfSU5URVJMQUNFX05PTkUsIFBOR19DT01QUkVTU0lPTl9UWVBFX0RFRkFVTFQsCi0gICAgICAgICAgICAgICBQTkdfRklMVEVSX1RZUEVfREVGQVVMVCk7Ci0gIHBuZ193cml0ZV9pbmZvKHBuZywgaW5mbyk7Ci0gIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewotICAgIHBuZ19ieXRlcCByb3cgPSByZ2IgKyB5ICogc3RyaWRlOwotICAgIHBuZ193cml0ZV9yb3dzKHBuZywgJnJvdywgMSk7Ci0gIH0KLSAgcG5nX3dyaXRlX2VuZChwbmcsIGluZm8pOwotICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJnBuZywgJmluZm8pOwotICByZXR1cm4gMTsKLX0KLSNlbHNlICAgIC8vICFIQVZFX1dJTkNPREVDX0ggJiYgIVdFQlBfSEFWRV9QTkcKLXN0YXRpYyBpbnQgV3JpdGVQTkcoRklMRSogb3V0X2ZpbGUsIGNvbnN0IFdlYlBEZWNCdWZmZXIqIGNvbnN0IGJ1ZmZlcikgewotICAodm9pZClvdXRfZmlsZTsKLSAgKHZvaWQpYnVmZmVyOwotICBmcHJpbnRmKHN0ZGVyciwgIlBORyBzdXBwb3J0IG5vdCBjb21waWxlZC4gUGxlYXNlIGluc3RhbGwgdGhlIGxpYnBuZyAiCi0gICAgICAgICAgImRldmVsb3BtZW50IHBhY2thZ2UgYmVmb3JlIGJ1aWxkaW5nLlxuIik7Ci0gIGZwcmludGYoc3RkZXJyLCAiWW91IGNhbiBydW4gd2l0aCAtcHBtIGZsYWcgdG8gZGVjb2RlIGluIFBQTSBmb3JtYXQuXG4iKTsKLSAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBXcml0ZVBQTShGSUxFKiBmb3V0LCBjb25zdCBXZWJQRGVjQnVmZmVyKiBjb25zdCBidWZmZXIsIGludCBhbHBoYSkgewotICBjb25zdCB1aW50MzJfdCB3aWR0aCA9IGJ1ZmZlci0+d2lkdGg7Ci0gIGNvbnN0IHVpbnQzMl90IGhlaWdodCA9IGJ1ZmZlci0+aGVpZ2h0OwotICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjb25zdCByZ2IgPSBidWZmZXItPnUuUkdCQS5yZ2JhOwotICBjb25zdCBpbnQgc3RyaWRlID0gYnVmZmVyLT51LlJHQkEuc3RyaWRlOwotICBjb25zdCBzaXplX3QgYnl0ZXNfcGVyX3B4ID0gYWxwaGEgPyA0IDogMzsKLSAgdWludDMyX3QgeTsKLQotICBpZiAoYWxwaGEpIHsKLSAgICBmcHJpbnRmKGZvdXQsICJQN1xuV0lEVEggJWRcbkhFSUdIVCAlZFxuREVQVEggNFxuTUFYVkFMIDI1NVxuIgotICAgICAgICAgICAgICAgICAgIlRVUExUWVBFIFJHQl9BTFBIQVxuRU5ESERSXG4iLCB3aWR0aCwgaGVpZ2h0KTsKLSAgfSBlbHNlIHsKLSAgICBmcHJpbnRmKGZvdXQsICJQNlxuJWQgJWRcbjI1NVxuIiwgd2lkdGgsIGhlaWdodCk7Ci0gIH0KLSAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7Ci0gICAgaWYgKGZ3cml0ZShyZ2IgKyB5ICogc3RyaWRlLCB3aWR0aCwgYnl0ZXNfcGVyX3B4LCBmb3V0KSAhPSBieXRlc19wZXJfcHgpIHsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgfQotICByZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBXcml0ZUFscGhhUGxhbmUoRklMRSogZm91dCwgY29uc3QgV2ViUERlY0J1ZmZlciogY29uc3QgYnVmZmVyKSB7Ci0gIGNvbnN0IHVpbnQzMl90IHdpZHRoID0gYnVmZmVyLT53aWR0aDsKLSAgY29uc3QgdWludDMyX3QgaGVpZ2h0ID0gYnVmZmVyLT5oZWlnaHQ7Ci0gIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbnN0IGEgPSBidWZmZXItPnUuWVVWQS5hOwotICBjb25zdCBpbnQgYV9zdHJpZGUgPSBidWZmZXItPnUuWVVWQS5hX3N0cmlkZTsKLSAgdWludDMyX3QgeTsKLSAgYXNzZXJ0KGEgIT0gTlVMTCk7Ci0gIGZwcmludGYoZm91dCwgIlA1XG4lZCAlZFxuMjU1XG4iLCB3aWR0aCwgaGVpZ2h0KTsKLSAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7Ci0gICAgaWYgKGZ3cml0ZShhICsgeSAqIGFfc3RyaWRlLCB3aWR0aCwgMSwgZm91dCkgIT0gMSkgewotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICB9Ci0gIHJldHVybiAxOwotfQotCi0vLyBmb3JtYXQ9UEdNOiBzYXZlIGEgZ3JheXNjYWxlIFBHTSBmaWxlIHVzaW5nIHRoZSBJTUM0IGxheW91dAotLy8gKGh0dHA6Ly93d3cuZm91cmNjLm9yZy95dXYucGhwI0lNQzQpLiBUaGlzIGlzIGEgdmVyeSBjb252ZW5pZW50IGZvcm1hdCBmb3IKLS8vIHZpZXdpbmcgdGhlIHNhbXBsZXMsIGVzcC4gZm9yIG9kZCBkaW1lbnNpb25zLgotLy8gZm9ybWF0PVlVVjoganVzdCBzYXZlIHRoZSBZL1UvVi9BIHBsYW5lcyBzZXF1ZW50aWFsbHkgd2l0aG91dCBoZWFkZXIuCi1zdGF0aWMgaW50IFdyaXRlUEdNT3JZVVYoRklMRSogZm91dCwgY29uc3QgV2ViUERlY0J1ZmZlciogY29uc3QgYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dEZpbGVGb3JtYXQgZm9ybWF0KSB7Ci0gIGNvbnN0IGludCB3aWR0aCA9IGJ1ZmZlci0+d2lkdGg7Ci0gIGNvbnN0IGludCBoZWlnaHQgPSBidWZmZXItPmhlaWdodDsKLSAgY29uc3QgV2ViUFlVVkFCdWZmZXIqIGNvbnN0IHl1diA9ICZidWZmZXItPnUuWVVWQTsKLSAgaW50IG9rID0gMTsKLSAgaW50IHk7Ci0gIGNvbnN0IGludCBwYWQgPSAoZm9ybWF0ID09IFlVVikgPyAwIDogMTsKLSAgY29uc3QgaW50IHV2X3dpZHRoID0gKHdpZHRoICsgMSkgLyAyOwotICBjb25zdCBpbnQgdXZfaGVpZ2h0ID0gKGhlaWdodCArIDEpIC8gMjsKLSAgY29uc3QgaW50IG91dF9zdHJpZGUgPSAod2lkdGggKyBwYWQpICYgfnBhZDsKLSAgY29uc3QgaW50IGFfaGVpZ2h0ID0geXV2LT5hID8gaGVpZ2h0IDogMDsKLSAgaWYgKGZvcm1hdCA9PSBQR00pIHsKLSAgICBmcHJpbnRmKGZvdXQsICJQNVxuJWQgJWRcbjI1NVxuIiwKLSAgICAgICAgICAgIG91dF9zdHJpZGUsIGhlaWdodCArIHV2X2hlaWdodCArIGFfaGVpZ2h0KTsKLSAgfQotICBmb3IgKHkgPSAwOyBvayAmJiB5IDwgaGVpZ2h0OyArK3kpIHsKLSAgICBvayAmPSAoZndyaXRlKHl1di0+eSArIHkgKiB5dXYtPnlfc3RyaWRlLCB3aWR0aCwgMSwgZm91dCkgPT0gMSk7Ci0gICAgaWYgKGZvcm1hdCA9PSBQR00pIHsKLSAgICAgIGlmICh3aWR0aCAmIDEpIGZwdXRjKDAsIGZvdXQpOyAgICAvLyBwYWRkaW5nIGJ5dGUKLSAgICB9Ci0gIH0KLSAgaWYgKGZvcm1hdCA9PSBQR00pIHsgICAvLyBJTUM0IGxheW91dAotICAgIGZvciAoeSA9IDA7IG9rICYmIHkgPCB1dl9oZWlnaHQ7ICsreSkgewotICAgICAgb2sgJj0gKGZ3cml0ZSh5dXYtPnUgKyB5ICogeXV2LT51X3N0cmlkZSwgdXZfd2lkdGgsIDEsIGZvdXQpID09IDEpOwotICAgICAgb2sgJj0gKGZ3cml0ZSh5dXYtPnYgKyB5ICogeXV2LT52X3N0cmlkZSwgdXZfd2lkdGgsIDEsIGZvdXQpID09IDEpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBmb3IgKHkgPSAwOyBvayAmJiB5IDwgdXZfaGVpZ2h0OyArK3kpIHsKLSAgICAgIG9rICY9IChmd3JpdGUoeXV2LT51ICsgeSAqIHl1di0+dV9zdHJpZGUsIHV2X3dpZHRoLCAxLCBmb3V0KSA9PSAxKTsKLSAgICB9Ci0gICAgZm9yICh5ID0gMDsgb2sgJiYgeSA8IHV2X2hlaWdodDsgKyt5KSB7Ci0gICAgICBvayAmPSAoZndyaXRlKHl1di0+diArIHkgKiB5dXYtPnZfc3RyaWRlLCB1dl93aWR0aCwgMSwgZm91dCkgPT0gMSk7Ci0gICAgfQotICB9Ci0gIGZvciAoeSA9IDA7IG9rICYmIHkgPCBhX2hlaWdodDsgKyt5KSB7Ci0gICAgb2sgJj0gKGZ3cml0ZSh5dXYtPmEgKyB5ICogeXV2LT5hX3N0cmlkZSwgd2lkdGgsIDEsIGZvdXQpID09IDEpOwotICAgIGlmIChmb3JtYXQgPT0gUEdNKSB7Ci0gICAgICBpZiAod2lkdGggJiAxKSBmcHV0YygwLCBmb3V0KTsgICAgLy8gcGFkZGluZyBieXRlCi0gICAgfQotICB9Ci0gIHJldHVybiBvazsKLX0KLQotc3RhdGljIHZvaWQgU2F2ZU91dHB1dChjb25zdCBXZWJQRGVjQnVmZmVyKiBjb25zdCBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIE91dHB1dEZpbGVGb3JtYXQgZm9ybWF0LCBjb25zdCBjaGFyKiBjb25zdCBvdXRfZmlsZSkgewotICBGSUxFKiBmb3V0ID0gTlVMTDsKLSAgaW50IG5lZWRzX29wZW5fZmlsZSA9IDE7Ci0gIGludCBvayA9IDE7Ci0gIFN0b3B3YXRjaCBzdG9wX3dhdGNoOwotCi0gIGlmICh2ZXJib3NlKQotICAgIFN0b3B3YXRjaFJlYWRBbmRSZXNldCgmc3RvcF93YXRjaCk7Ci0KLSNpZmRlZiBIQVZFX1dJTkNPREVDX0gKLSAgbmVlZHNfb3Blbl9maWxlID0gKGZvcm1hdCAhPSBQTkcpOwotI2VuZGlmCi0gIGlmIChuZWVkc19vcGVuX2ZpbGUpIHsKLSAgICBmb3V0ID0gZm9wZW4ob3V0X2ZpbGUsICJ3YiIpOwotICAgIGlmICghZm91dCkgewotICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIG91dHB1dCBmaWxlICVzXG4iLCBvdXRfZmlsZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICB9Ci0KLSAgaWYgKGZvcm1hdCA9PSBQTkcpIHsKLSNpZmRlZiBIQVZFX1dJTkNPREVDX0gKLSAgICBvayAmPSBXcml0ZVBORyhvdXRfZmlsZSwgYnVmZmVyKTsKLSNlbHNlCi0gICAgb2sgJj0gV3JpdGVQTkcoZm91dCwgYnVmZmVyKTsKLSNlbmRpZgotICB9IGVsc2UgaWYgKGZvcm1hdCA9PSBQQU0pIHsKLSAgICBvayAmPSBXcml0ZVBQTShmb3V0LCBidWZmZXIsIDEpOwotICB9IGVsc2UgaWYgKGZvcm1hdCA9PSBQUE0pIHsKLSAgICBvayAmPSBXcml0ZVBQTShmb3V0LCBidWZmZXIsIDApOwotICB9IGVsc2UgaWYgKGZvcm1hdCA9PSBQR00gfHwgZm9ybWF0ID09IFlVVikgewotICAgIG9rICY9IFdyaXRlUEdNT3JZVVYoZm91dCwgYnVmZmVyLCBmb3JtYXQpOwotICB9IGVsc2UgaWYgKGZvcm1hdCA9PSBBTFBIQV9QTEFORV9PTkxZKSB7Ci0gICAgb2sgJj0gV3JpdGVBbHBoYVBsYW5lKGZvdXQsIGJ1ZmZlcik7Ci0gIH0KLSAgaWYgKGZvdXQpIHsKLSAgICBmY2xvc2UoZm91dCk7Ci0gIH0KLSAgaWYgKG9rKSB7Ci0gICAgcHJpbnRmKCJTYXZlZCBmaWxlICVzXG4iLCBvdXRfZmlsZSk7Ci0gICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgIGNvbnN0IGRvdWJsZSB3cml0ZV90aW1lID0gU3RvcHdhdGNoUmVhZEFuZFJlc2V0KCZzdG9wX3dhdGNoKTsKLSAgICAgIHByaW50ZigiVGltZSB0byB3cml0ZSBvdXRwdXQ6ICUuM2ZzXG4iLCB3cml0ZV90aW1lKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZnByaW50ZihzdGRlcnIsICJFcnJvciB3cml0aW5nIGZpbGUgJXMgISFcbiIsIG91dF9maWxlKTsKLSAgfQotfQotCi1zdGF0aWMgdm9pZCBIZWxwKHZvaWQpIHsKLSAgcHJpbnRmKCJVc2FnZTogZHdlYnAgaW5fZmlsZSBbb3B0aW9uc10gWy1vIG91dF9maWxlXVxuXG4iCi0gICAgICAgICAiRGVjb2RlcyB0aGUgV2ViUCBpbWFnZSBmaWxlIHRvIFBORyBmb3JtYXQgW0RlZmF1bHRdXG4iCi0gICAgICAgICAiVXNlIGZvbGxvd2luZyBvcHRpb25zIHRvIGNvbnZlcnQgaW50byBhbHRlcm5hdGUgaW1hZ2UgZm9ybWF0czpcbiIKLSAgICAgICAgICIgIC1wYW0gLi4uLi4uLi4uIHNhdmUgdGhlIHJhdyBSR0JBIHNhbXBsZXMgYXMgYSBjb2xvciBQQU1cbiIKLSAgICAgICAgICIgIC1wcG0gLi4uLi4uLi4uIHNhdmUgdGhlIHJhdyBSR0Igc2FtcGxlcyBhcyBhIGNvbG9yIFBQTVxuIgotICAgICAgICAgIiAgLXBnbSAuLi4uLi4uLi4gc2F2ZSB0aGUgcmF3IFlVViBzYW1wbGVzIGFzIGEgZ3JheXNjYWxlIFBHTVxuIgotICAgICAgICAgIiAgICAgICAgICAgICAgICAgZmlsZSB3aXRoIElNQzQgbGF5b3V0LlxuIgotICAgICAgICAgIiAgLXl1diAuLi4uLi4uLi4gc2F2ZSB0aGUgcmF3IFlVViBzYW1wbGVzIGluIGZsYXQgbGF5b3V0LlxuIgotICAgICAgICAgIlxuIgotICAgICAgICAgIiBPdGhlciBvcHRpb25zIGFyZTpcbiIKLSAgICAgICAgICIgIC12ZXJzaW9uICAuLi4uIHByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBleGl0LlxuIgotICAgICAgICAgIiAgLW5vZmFuY3kgLi4uLi4gZG9uJ3QgdXNlIHRoZSBmYW5jeSBZVVY0MjAgdXBzY2FsZXIuXG4iCi0gICAgICAgICAiICAtbm9maWx0ZXIgLi4uLiBkaXNhYmxlIGluLWxvb3AgZmlsdGVyaW5nLlxuIgotICAgICAgICAgIiAgLW10IC4uLi4uLi4uLi4gdXNlIG11bHRpLXRocmVhZGluZ1xuIgotICAgICAgICAgIiAgLWNyb3AgPHg+IDx5PiA8dz4gPGg+IC4uLiBjcm9wIG91dHB1dCB3aXRoIHRoZSBnaXZlbiByZWN0YW5nbGVcbiIKLSAgICAgICAgICIgIC1zY2FsZSA8dz4gPGg+IC4uLi4uLi4uLi4gc2NhbGUgdGhlIG91dHB1dCAoKmFmdGVyKiBhbnkgY3JvcHBpbmcpXG4iCi0gICAgICAgICAiICAtYWxwaGEgLi4uLi4uLiBvbmx5IHNhdmUgdGhlIGFscGhhIHBsYW5lLlxuIgotICAgICAgICAgIiAgLWggICAgIC4uLi4uLi4gdGhpcyBoZWxwIG1lc3NhZ2UuXG4iCi0gICAgICAgICAiICAtdiAgICAgLi4uLi4uLiB2ZXJib3NlIChlLmcuIHByaW50IGVuY29kaW5nL2RlY29kaW5nIHRpbWVzKVxuIgotI2lmbmRlZiBXRUJQX0RMTAotICAgICAgICAgIiAgLW5vYXNtIC4uLi4uLi4gZGlzYWJsZSBhbGwgYXNzZW1ibHkgb3B0aW1pemF0aW9ucy5cbiIKLSNlbmRpZgotICAgICAgICApOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qga1N0YXR1c01lc3NhZ2VzW10gPSB7Ci0gICJPSyIsICJPVVRfT0ZfTUVNT1JZIiwgIklOVkFMSURfUEFSQU0iLCAiQklUU1RSRUFNX0VSUk9SIiwKLSAgIlVOU1VQUE9SVEVEX0ZFQVRVUkUiLCAiU1VTUEVOREVEIiwgIlVTRVJfQUJPUlQiLCAiTk9UX0VOT1VHSF9EQVRBIgotfTsKLQotaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkgewotICBjb25zdCBjaGFyICppbl9maWxlID0gTlVMTDsKLSAgY29uc3QgY2hhciAqb3V0X2ZpbGUgPSBOVUxMOwotCi0gIFdlYlBEZWNvZGVyQ29uZmlnIGNvbmZpZzsKLSAgV2ViUERlY0J1ZmZlciogY29uc3Qgb3V0cHV0X2J1ZmZlciA9ICZjb25maWcub3V0cHV0OwotICBXZWJQQml0c3RyZWFtRmVhdHVyZXMqIGNvbnN0IGJpdHN0cmVhbSA9ICZjb25maWcuaW5wdXQ7Ci0gIE91dHB1dEZpbGVGb3JtYXQgZm9ybWF0ID0gUE5HOwotICBpbnQgYzsKLQotICBpZiAoIVdlYlBJbml0RGVjb2RlckNvbmZpZygmY29uZmlnKSkgewotICAgIGZwcmludGYoc3RkZXJyLCAiTGlicmFyeSB2ZXJzaW9uIG1pc21hdGNoIVxuIik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgZm9yIChjID0gMTsgYyA8IGFyZ2M7ICsrYykgewotICAgIGlmICghc3RyY21wKGFyZ3ZbY10sICItaCIpIHx8ICFzdHJjbXAoYXJndltjXSwgIi1oZWxwIikpIHsKLSAgICAgIEhlbHAoKTsKLSAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2NdLCAiLW8iKSAmJiBjIDwgYXJnYyAtIDEpIHsKLSAgICAgIG91dF9maWxlID0gYXJndlsrK2NdOwotICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2NdLCAiLWFscGhhIikpIHsKLSAgICAgIGZvcm1hdCA9IEFMUEhBX1BMQU5FX09OTFk7Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbY10sICItbm9mYW5jeSIpKSB7Ci0gICAgICBjb25maWcub3B0aW9ucy5ub19mYW5jeV91cHNhbXBsaW5nID0gMTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltjXSwgIi1ub2ZpbHRlciIpKSB7Ci0gICAgICBjb25maWcub3B0aW9ucy5ieXBhc3NfZmlsdGVyaW5nID0gMTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltjXSwgIi1wYW0iKSkgewotICAgICAgZm9ybWF0ID0gUEFNOwotICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2NdLCAiLXBwbSIpKSB7Ci0gICAgICBmb3JtYXQgPSBQUE07Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbY10sICItdmVyc2lvbiIpKSB7Ci0gICAgICBjb25zdCBpbnQgdmVyc2lvbiA9IFdlYlBHZXREZWNvZGVyVmVyc2lvbigpOwotICAgICAgcHJpbnRmKCIlZC4lZC4lZFxuIiwKLSAgICAgICAgICAgICAodmVyc2lvbiA+PiAxNikgJiAweGZmLCAodmVyc2lvbiA+PiA4KSAmIDB4ZmYsIHZlcnNpb24gJiAweGZmKTsKLSAgICAgIHJldHVybiAwOwotICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2NdLCAiLXBnbSIpKSB7Ci0gICAgICBmb3JtYXQgPSBQR007Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbY10sICIteXV2IikpIHsKLSAgICAgIGZvcm1hdCA9IFlVVjsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltjXSwgIi1tdCIpKSB7Ci0gICAgICBjb25maWcub3B0aW9ucy51c2VfdGhyZWFkcyA9IDE7Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbY10sICItY3JvcCIpICYmIGMgPCBhcmdjIC0gNCkgewotICAgICAgY29uZmlnLm9wdGlvbnMudXNlX2Nyb3BwaW5nID0gMTsKLSAgICAgIGNvbmZpZy5vcHRpb25zLmNyb3BfbGVmdCAgID0gc3RydG9sKGFyZ3ZbKytjXSwgTlVMTCwgMCk7Ci0gICAgICBjb25maWcub3B0aW9ucy5jcm9wX3RvcCAgICA9IHN0cnRvbChhcmd2WysrY10sIE5VTEwsIDApOwotICAgICAgY29uZmlnLm9wdGlvbnMuY3JvcF93aWR0aCAgPSBzdHJ0b2woYXJndlsrK2NdLCBOVUxMLCAwKTsKLSAgICAgIGNvbmZpZy5vcHRpb25zLmNyb3BfaGVpZ2h0ID0gc3RydG9sKGFyZ3ZbKytjXSwgTlVMTCwgMCk7Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbY10sICItc2NhbGUiKSAmJiBjIDwgYXJnYyAtIDIpIHsKLSAgICAgIGNvbmZpZy5vcHRpb25zLnVzZV9zY2FsaW5nID0gMTsKLSAgICAgIGNvbmZpZy5vcHRpb25zLnNjYWxlZF93aWR0aCAgPSBzdHJ0b2woYXJndlsrK2NdLCBOVUxMLCAwKTsKLSAgICAgIGNvbmZpZy5vcHRpb25zLnNjYWxlZF9oZWlnaHQgPSBzdHJ0b2woYXJndlsrK2NdLCBOVUxMLCAwKTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndltjXSwgIi12IikpIHsKLSAgICAgIHZlcmJvc2UgPSAxOwotI2lmbmRlZiBXRUJQX0RMTAotICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2NdLCAiLW5vYXNtIikpIHsKLSAgICAgIFZQOEdldENQVUluZm8gPSBOVUxMOwotI2VuZGlmCi0gICAgfSBlbHNlIGlmIChhcmd2W2NdWzBdID09ICctJykgewotICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbiAnJXMnXG4iLCBhcmd2W2NdKTsKLSAgICAgIEhlbHAoKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9IGVsc2UgewotICAgICAgaW5fZmlsZSA9IGFyZ3ZbY107Ci0gICAgfQotICB9Ci0KLSAgaWYgKGluX2ZpbGUgPT0gTlVMTCkgewotICAgIGZwcmludGYoc3RkZXJyLCAibWlzc2luZyBpbnB1dCBmaWxlISFcbiIpOwotICAgIEhlbHAoKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICB7Ci0gICAgU3RvcHdhdGNoIHN0b3Bfd2F0Y2g7Ci0gICAgVlA4U3RhdHVzQ29kZSBzdGF0dXMgPSBWUDhfU1RBVFVTX09LOwotICAgIGludCBvazsKLSAgICBzaXplX3QgZGF0YV9zaXplID0gMDsKLSAgICBjb25zdCB1aW50OF90KiBkYXRhID0gTlVMTDsKLQotICAgIGlmICghRXhVdGlsUmVhZEZpbGUoaW5fZmlsZSwgJmRhdGEsICZkYXRhX3NpemUpKSByZXR1cm4gLTE7Ci0KLSAgICBpZiAodmVyYm9zZSkKLSAgICAgIFN0b3B3YXRjaFJlYWRBbmRSZXNldCgmc3RvcF93YXRjaCk7Ci0KLSAgICBzdGF0dXMgPSBXZWJQR2V0RmVhdHVyZXMoZGF0YSwgZGF0YV9zaXplLCBiaXRzdHJlYW0pOwotICAgIGlmIChzdGF0dXMgIT0gVlA4X1NUQVRVU19PSykgewotICAgICAgZ290byBlbmQ7Ci0gICAgfQotCi0gICAgaWYgKGJpdHN0cmVhbS0+aGFzX2FuaW1hdGlvbikgewotICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICJFcnJvciEgRGVjb2Rpbmcgb2YgYW4gYW5pbWF0ZWQgV2ViUCBmaWxlIGlzIG5vdCBzdXBwb3J0ZWQuXG4iCi0gICAgICAgICAgICAgICIgICAgICAgVXNlIHdlYnBtdXggdG8gZXh0cmFjdCB0aGUgaW5kaXZpZHVhbCBmcmFtZXMgb3JcbiIKLSAgICAgICAgICAgICAgIiAgICAgICB2d2VicCB0byB2aWV3IHRoaXMgaW1hZ2UuXG4iKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgY2FzZSBQTkc6Ci0jaWZkZWYgSEFWRV9XSU5DT0RFQ19ICi0gICAgICAgIG91dHB1dF9idWZmZXItPmNvbG9yc3BhY2UgPSBiaXRzdHJlYW0tPmhhc19hbHBoYSA/IE1PREVfQkdSQSA6IE1PREVfQkdSOwotI2Vsc2UKLSAgICAgICAgb3V0cHV0X2J1ZmZlci0+Y29sb3JzcGFjZSA9IGJpdHN0cmVhbS0+aGFzX2FscGhhID8gTU9ERV9SR0JBIDogTU9ERV9SR0I7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFBBTToKLSAgICAgICAgb3V0cHV0X2J1ZmZlci0+Y29sb3JzcGFjZSA9IE1PREVfUkdCQTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFBQTToKLSAgICAgICAgb3V0cHV0X2J1ZmZlci0+Y29sb3JzcGFjZSA9IE1PREVfUkdCOyAgLy8gZHJvcHMgYWxwaGEgZm9yIFBQTQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgUEdNOgotICAgICAgY2FzZSBZVVY6Ci0gICAgICAgIG91dHB1dF9idWZmZXItPmNvbG9yc3BhY2UgPSBiaXRzdHJlYW0tPmhhc19hbHBoYSA/IE1PREVfWVVWQSA6IE1PREVfWVVWOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQUxQSEFfUExBTkVfT05MWToKLSAgICAgICAgb3V0cHV0X2J1ZmZlci0+Y29sb3JzcGFjZSA9IE1PREVfWVVWQTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBmcmVlKCh2b2lkKilkYXRhKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBzdGF0dXMgPSBXZWJQRGVjb2RlKGRhdGEsIGRhdGFfc2l6ZSwgJmNvbmZpZyk7Ci0KLSAgICBpZiAodmVyYm9zZSkgewotICAgICAgY29uc3QgZG91YmxlIGRlY29kZV90aW1lID0gU3RvcHdhdGNoUmVhZEFuZFJlc2V0KCZzdG9wX3dhdGNoKTsKLSAgICAgIHByaW50ZigiVGltZSB0byBkZWNvZGUgcGljdHVyZTogJS4zZnNcbiIsIGRlY29kZV90aW1lKTsKLSAgICB9Ci0gZW5kOgotICAgIGZyZWUoKHZvaWQqKWRhdGEpOwotICAgIG9rID0gKHN0YXR1cyA9PSBWUDhfU1RBVFVTX09LKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICBmcHJpbnRmKHN0ZGVyciwgIkRlY29kaW5nIG9mICVzIGZhaWxlZC5cbiIsIGluX2ZpbGUpOwotICAgICAgZnByaW50ZihzdGRlcnIsICJTdGF0dXM6ICVkICglcylcbiIsIHN0YXR1cywga1N0YXR1c01lc3NhZ2VzW3N0YXR1c10pOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgfQotCi0gIGlmIChvdXRfZmlsZSkgewotICAgIHByaW50ZigiRGVjb2RlZCAlcy4gRGltZW5zaW9uczogJWQgeCAlZCVzLiBOb3cgc2F2aW5nLi4uXG4iLCBpbl9maWxlLAotICAgICAgICAgICBvdXRwdXRfYnVmZmVyLT53aWR0aCwgb3V0cHV0X2J1ZmZlci0+aGVpZ2h0LAotICAgICAgICAgICBiaXRzdHJlYW0tPmhhc19hbHBoYSA/ICIgKHdpdGggYWxwaGEpIiA6ICIiKTsKLSAgICBTYXZlT3V0cHV0KG91dHB1dF9idWZmZXIsIGZvcm1hdCwgb3V0X2ZpbGUpOwotICB9IGVsc2UgewotICAgIHByaW50ZigiRmlsZSAlcyBjYW4gYmUgZGVjb2RlZCAoZGltZW5zaW9uczogJWQgeCAlZCklcy5cbiIsCi0gICAgICAgICAgIGluX2ZpbGUsIG91dHB1dF9idWZmZXItPndpZHRoLCBvdXRwdXRfYnVmZmVyLT5oZWlnaHQsCi0gICAgICAgICAgIGJpdHN0cmVhbS0+aGFzX2FscGhhID8gIiAod2l0aCBhbHBoYSkiIDogIiIpOwotICAgIHByaW50ZigiTm90aGluZyB3cml0dGVuOyB1c2UgLW8gZmxhZyB0byBzYXZlIHRoZSByZXN1bHQgYXMgZS5nLiBQTkcuXG4iKTsKLSAgfQotICBXZWJQRnJlZURlY0J1ZmZlcihvdXRwdXRfYnVmZmVyKTsKLQotICByZXR1cm4gMDsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3Rlc3Qud2VicCBiL2V4YW1wbGVzL3Rlc3Qud2VicApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U0YmNhMS4uMDAwMDAwMAotLS0gYS9leGFtcGxlcy90ZXN0LndlYnAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9leGFtcGxlcy90ZXN0X3JlZi5wcG0gYi9leGFtcGxlcy90ZXN0X3JlZi5wcG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3NzE5ZjAuLjAwMDAwMDAKLS0tIGEvZXhhbXBsZXMvdGVzdF9yZWYucHBtCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1QNgotMTI4IDEyOAotMjU1Ci3L4fvL4fvL4fvL4fvL4fvL4fvL4fvL4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvN4v3N4v3N4v3N4v3O4/7O4/7O4/7O4/7O4/7O4/7O4/7O4/7O4/vO4/vO4/vO4/vP5P3P5P3P5P3P5P3Q4/3Q4/3Q4/3Q4/3S5P7S5P7S5P7S5P7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7S5P7S5P7S5P7S5P7T5f/T5f/T5f/T5f/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P3U6P3U6P3U6P3V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7U6vvU6vvU6vvU6vvU6vvU6vvU6vvU6vvT6frT6frT6frT6frQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffL4fvL4fvL4fvL4fvL4fvL4fvL4fvL4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvN4v3N4v3N4v3N4v3O4/7O4/7O4/7O4/7O4/7O4/7O4/7O4/7O4/vO4/vO4/vO4/vP5P3P5P3P5P3P5P3P5P3Q4/3Q4/3Q4/3S5P7S5P7S5P7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7S5P7S5P7S5P7S5P7T5f/T5f/T5f/T5f/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P3U6P3U6P3U6P3V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7U6vvU6vvU6vvU6vvU6vvU6vvU6vvU6vvT6frT6frT6frT6frQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffL4fvL4fvL4fvL4fvL4fvL4fvL4fvL4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvN4v3N4v3N4v3N4v3O4/7O4/7O4/7O4/7O4/7O4/7O4/7O4/7O4/vO4/vO4/vO4/vP5P3P5P3P5P3P5P3P5PvP5PvP5PvP5PvQ5f3Q5f3Q5f3Q5f3Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7S5P7S5P7S5P7S5P7T5f/T5f/T5f/T5f/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P3U6P3U6P3U6P3V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7U6vvU6vvU6vvU6vvU6vvU6vvU6vvU6vvT6frT6frT6frT6frQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffL4fvL4fvL4fvL4fvL4fvL4fvL4fvL4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvM4fvN4v3N4v3N4v3N4v3O4/7O4/7O4/7O4/7O4/7O4/7O4/7O4/7O4/vO4/vO4/vO4/vP5P3P5P3P5P3P5P3O5fvO5fvO5fvO5fvP5v3P5v3P5v3P5v3Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7S5P7S5P7S5P7S5P7T5f/T5f/T5f/T5f/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P3U6P3U6P3U6P3V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7U6vvU6vvU6vvU6vvU6vvU6vvU6vvU6vvT6frT6frT6frT6frQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffP5ffL4fvL4fvL4fvL4fvM4v3M4v3M4v3M4v3N4v3N4v3N4v3N4v3N4v3N4v3N4v3N4v3O4/7O4/7O4/7O4/7O4/7O4/7O4/7O4/7P5P/P5P/P5P/P5P/P5P/P5P/P5P/P5P/P5P3P5P3P5P3P5P3Q5f7Q5f7Q5f7Q5f7O5fvO5fnO5fnO5fnP5vrP5vrP5vrP5v3Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7T5f/T5f/T5f/T5f/U5v/U5v/U5v/U5v/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/V6f/V6f/V6f/V6f/V6f/V6f/V6f/V6f/V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7W6v/W6v/W6v/W6v/U6vvU6vvU6vvU6vvU6vvU6vvU6vvU6vvT6frT6frT6frT6frS6PnS6PnS6PnS6PnQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjP5ffP5ffP5ffP5ffL4fvL4fvL4fvL4fvM4v3M4v3M4v3M4v3N4v3N4v3N4v3N4v3N4v3N4v3N4v3N4v3O4/7O4/7O4/7O4/7O4/7O4/7O4/7O4/7P5P/P5P/P5P/P5P/P5P/P5P/P5P/P5P/P5P3P5P3P5P3P5P3Q5f7Q5f7Q5f7Q5f3S6PvS6PvS6PvS6PvQ5vrQ5vrQ5vrQ5vrQ5f3Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7T5f/T5f/T5f/T5f/U5v/U5v/U5v/U5v/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/V6f/V6f/V6f/V6f/V6f/V6f/V6f/V6f/V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7W6v/W6v/W6v/W6v/U6vvU6vvU6vvU6vvU6vvU6vvU6vvU6vvT6frT6frT6frT6frS6PnS6PnS6PnS6PnQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjP5ffP5ffP5ffP5ffL4fvL4fvL4fvL4fvM4v3M4v3M4v3M4v3N4v3N4v3N4v3N4v3N4v3N4v3N4v3N4v3O4/7O4/7O4/7O4/7O4/7O4/7O4/7O4/7P5P/P5P/P5P/P5P/P5P/P5P/P5P/P5P/P5P3P5P3P5P3P5P3Q5f7Q5f7Q5f7Q5f3Q5vrS5fjS5fjS5fjS5fjS5fjS5fjQ5vrQ5f3Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7T5f/T5f/T5f/T5f/U5v/U5v/U5v/U5v/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/V6f/V6f/V6f/V6f/V6f/V6f/V6f/V6f/V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7W6v/W6v/W6v/W6v/U6vvU6vvU6vvU6vvU6vvU6vvU6vvU6vvT6frT6frT6frT6frS6PnS6PnS6PnS6PnQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjP5ffP5ffP5ffP5ffL4fvL4fvL4fvL4fvM4v3M4v3M4v3M4v3N4v3N4v3N4v3N4v3N4v3N4v3N4v3N4v3O4/7O4/7O4/7O4/7O4/7O4/7O4/7O4/7P5P/P5P/P5P/P5P/P5P/Q4//Q4//Q4//P5P3P5P3P5P3Q4/3S5P7S5f3S5f3S5f3P4fPP4fPP4fPP4fHU5fbU5fbU5fbU5fjS5frS5f3S5f3Q5f3Q5f3Q5f3Q5f3Q5f7T5f/T5f/T5f/T5f/U5v/U5v/U5v/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/U6P/V6f/V6f/V6f/V6f/V6f/V6f/V6f/V6f/V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7W6v/W6v/W6v/W6v/U6vvU6vvU6vvU6vvU6vvU6vvU6vvU6vvT6frT6frT6frT6frS6PnS6PnS6PnS6PnQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjP5ffP5ffP5ffP5ffN4v3N4v3N4v3N4v3O4/7O4/7O4/7O4/7O4/vO4/vO4/vO4/vP5P3P5P3P5P3P5P3Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7S5v/Q5f7S5P7Q4/3O4frS4vvQ4frV5f/O4f3U5v/U5v/T4/3P3/jJ2vC3xtyHlqqJl6mQm62xu86fqrups8XM1ujW4fLT4fHW6PjU5fbX6fvS5fjS5frW6v/Q5vrS5v7T5v7T5v7T5v7T5v7U6P/U6P/U6P/U6P3V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/V6//V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3X6/7X6/7X6/7X6/7W6v3W6v3W6v3W6v3V6fvV6fvV6fvV6fvU6PrU6PrU6PrU6PrT5vnT5vnT5vnT5vnS5fjS5fjS5fjS5fjQ5vjQ5vjQ5vjQ5vjP5ffP5ffP5ffP5ffN4v3N4v3N4v3N4v3O4/7O4/7O4/7O4/7O4/vO4/vO4/vO4/vP5P3P5P3P5P3P5P3Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7S5P7S5P7T4/3X6P/V4/7S3/rV5P/M2/jI2fKdq8Vte5VkcYhodIxsdoxze4+Fi515f5GHjZ+Rl6ikqrqwtsa9xtXO3OrT5PPV5vfU5fbW6PrT5vnQ5PnU6v7T5vvT5vvT5vvT5vvU6P3U6P3U6P3U6P3V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3X6/7X6/7X6/7X6/7W6v3W6v3W6v3W6v3V6fvV6fvV6fvV6fvU6PrU6PrU6PrU6PrT5vnT5vnT5vnT5vnS5fjS5fjS5fjS5fjQ5vjQ5vjQ5vjQ5vjP5ffP5ffP5ffP5ffN4v3N4v3N4v3N4v3O4/7O4/7O4/7O4/7O4/vO4/vO4/vO4/vP5P3P5P3P5P3P5P3Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7M4fnO4/vT5f/V6P/S4vvT4/3U4v3Z5v/T4fupt9JsepVcaoRtepRocYxtd4+Ci6GGiZ6NkKV/gpaHi55/gpSws8W4vcuVm6m/y9nT4/LW5vbX5vjU5fbW6PrV6fvQ5PfT5vvT5vvT5vvT5vvU6P3U6P3U6P3U6P3V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3X6/7X6/7X6/7X6/7W6v3W6v3W6v3W6v3V6fvV6fvV6fvV6fvU6PrU6PrU6PrU6PrT5vnT5vnT5vnT5vnS5fjS5fjS5fjS5fjQ5vjQ5vjQ5vjQ5vjP5ffP5ffP5ffP5ffN4v3N4v3N4v3N4v3O4/7O4/7O4/7O4/7O4/vO4/vO4/vO4/vP5P3P5P3P5P3P5P3Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7T6P/S5v/Q4/3P4vvT4/3V5f+xv9qBj6pygJtXZH5caYJ+i6SYor1qcY2Hjqp6f5iEhZ2bnLKChJqFhpuChZaXmqmytMGvs7+Wn6yxvcvG1OTU4vLZ6PnU4/TW6PrV5vnT5vvT5vvT5vvT5vvU6P3U6P3U6P3U6P3V6f7V6f7V6f7V6f7V6f7V6f7V6f7V6f7W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3V6/3X6/7X6/7X6/7X6/7W6v3W6v3W6v3W6v3V6fvV6fvV6fvV6fvU6PrU6PrU6PrU6PrT5vnT5vnT5vnT5vnS5fjS5fjS5fjS5fjQ5vjQ5vjQ5vjQ5vjP5ffP5ffP5ffP5ffO4/7O4/7O4/7O4/7P5P/P5P/P5P/P5P/P5P3P5P3P5P3P5P3Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7T6P/J3vfa7P/U5v/I2fJ5iaNNW3ZYZoFWY31bZH9lb4lpcIyHjqpmaoeMj6x4epd9fZh+e5Vxb4aRkKWXlqmJiJiXl6Seoa3GzNq9xtWYorGvucvW4fLX5ffa6PnX5vrW5v3U6P3U6P3U6P3U6P3U6P3U6P3U6P3W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7X7f/X7f/X7f/X7f/X6/7X6/7X6/7X6/7X6/7X6/7X6/7X6/7X6/7W6v3V6fvU6PrV6fvV6fvV6fvV6fvT5vnT5vnT5vnT5vnT5vnT5vnT5vnT5vnQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjO4/7O4/7O4/7O4/7P5P/P5P/P5P/P5P/P5P3P5P3P5P3P5P3Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7S5v/S5P7F1/Fmd5BNXXdMWnRNWnNPWHFfZoBqcY1+gZ5ydpNyc5OIiamFhaRzc5F2c49/fZaenbKbmqyAgI2amqWkqLK3u8eLkJ6Rl6iIkaGttsjT3e/a5Pfb6frW6PrU6P3U6P3U6P3U6P3U6P3U6P3U6P3W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7X7f/X7f/X7f/X7f/X6/7X6/7X6/7X6/7X6/7X6/7X6/7X6/7X6/7W6v3V6fvU6PrV6fvV6fvV6fvV6fvT5vnT5vnT5vnT5vnT5vnT5vnT5vnT5vnQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjO4/7O4/7O4/7O4/7P5P/P5P/P5P/P5P/P5P3P5P3P5P3P5P3Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7S5v/P5P29z+lYa4VJWnNMXHZQXnlOW3RiaYJzeJGOk6yAgp9+gJ2CgqKpqMuBgaF9fZtxcY1+f5ecnbKcnq2ChZGxtL+kqLJ/hI+orLp7gI6Jj5+Ynq+zu87X3/LX5ffW6PrU6P3U6P3U6P3U6P3U6P3U6P3U6P3W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7X7f/X7f/X7f/X7f/X6/7X6/7X6/7X6/7X6/7X6/7X6/7X6/7X6/7W6v3V6fvU6PrV6fvV6fvV6fvV6fvT5vnT5vnT5vnT5vnT5vnT5vnT5vnT5vnQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjO4/7O4/7O4/7O4/7P5P/P5P/P5P/P5P/P5P3P5P3P5P3P5P3Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f3Q5f3Q5f7Q5f7N3/lbbYdHV3FMWnRJV3JGUW1veJObn7ShpLiRlap5epBzc4+kpMK9udmysMyJi6NsbYR6e5B2eImcnqurr7nMz9qPk5uMj5qbnqmYm6h/hJGQlaOqsMDU2urX4vPX5vrU6P3U6P3U6P3U6P3U6P3U6P3U6P3W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W6v/W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7W7P7X7f/X7f/X7f/X7f/X6/7X6/7X6/7X6/7X6/7X6/7X6/7X6/7X6/7W6v3V6fvU6PrV6fvV6fvV6fvV6fvT5vnT5vnT5vnT5vnT5vnT5vnT5vnT5vnQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5vjQ5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7P5f/P5f/P5v7P5v7O4/rP5fnW6v/S5f26zeZrfppKWHZMV3ZMVHFGTmtRWHRscYjGyNqjpbLh5O+3t8SFhJajorfOzeLd3O/s6/u4uMWjorJ5eYaXl6Oysru6usaIiJGVlpydnqStrbeVmKOChZGhpbGssb/V3u3W5ffX6fvU6PrT5vnU6v7U6v7U6f/V6f7W6v/Z6v3Z6v3Z6v3Z6v3Z6v3Z6v3Z6v3W6v3W6v3W6v3W6v3X6/7X6/7X6/7X6/7X7f/X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3Z7f3Z7f3Z7f3Z7f3X7PvX7PvX7PvX7PvX7f3W7PvV6/rU6vnU6vnU6vnU6vnU6vnT6fjT6fjT6fjT6fjS6PfS6PfS6PfS6PfQ5vbQ5vbQ5vbQ5vbQ5vbQ5vbQ5vbQ5vbQ5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7P5f/P5f/P5v7Q5f3V6v/Q5PnP4/iswNVWaYJJWHZOXHlIUHBMU3BIT2xlaYaNj6iTlaKysrva2+HS0tuCgZGUk6O6ucnMzNmwsLuXl6OMjJh5eYa3t8Cjo6yenqp/f4ubmqGvrbSqqrO7u8Wqrbicn6qanqqjqbfM2urS4/Pa6/va7f/V6fvU6v7U6f/V6f7Z6v3Z6v3Z6v3Z6v3Z6v3Z6v3Z6v3Z6v3W6v3W6v3W6v3W6v3X6/7X6/7X6/7X6/7X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7/vX7/vX7/vX7/vX7/vX7/vX7/vX7/vZ7fvZ7fvZ7fvZ7fvX7PrX7PrX7PrX7PrX7/vW7frV7PnU6/jU6/jU6/jU6/jU6/jT6vfT6vfT6vfT6vfS6fbS6fbS6fbS6fbQ6PTQ6PTQ6PTQ6PTQ6PTQ6PTQ6PTQ6PTQ5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7P5v7P5v7Q5f7Q5f3Q5PvQ5Pu9zeNTY3tGVnBJV3RTXn1NVXRMU3BIT2xscI2Tla2Ii5qdoamOkZeJjZVqbHmFh5Z3eYaQk59pa3hqbHlzdoWIi5rJzdeFiJN4eoePj5ympa+pqLGamqOtrbeytsCVmKOmq7aHjpimssDI1ubX6PfX6fnZ6v3V6f7V6f7V6f7Z6v3Z6v3Z6v3Z6v3Z6v3Z6v3Z6v3Z6v3W6v3W6v3W6v3W6v3X6/7X6/7X6/7X6/7X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7/vX7/vX7/vX7/vX7/vX7/vX7/vX7/vZ7fvZ7fvZ7fvZ7fvX7PrX7PrX7PrX7PrX7/vW7frV7PnU6/jU6/jU6/jU6/jU6/jT6vfT6vfT6vfT6vfS6fbS6fbS6fbS6fbQ6PTQ6PTQ6PTQ6PTQ6PTQ6PTQ6PTQ6PTQ5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7P5v7Q5f3Q5f3S5f3S5f2js8xUZH1JV3FJV3JRXXtQXHpPV3dMVHFGTWpjZoR6f5ZpbH54e4Z5fYV6fohdX29+gI+lqLRrbXppa3hlaHdeYXJ0d4iOkJ1+gI2HiZhzdoVpaXSjoqvCwsyVlZ6JjZd9gIuRlqGGi5WXnqnM1eLW4vDd6/vc6/3X6fvV6fvV6f7Z6v3Z6v3Z6v3Z6v3Z6v3Z6v3Z6v3Z6v3W6v3W6v3W6v3W6v3X6/7X6/7X6/7X6/7X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7/vX7/vX7/vX7/vX7/vX7/vX7/vX7/vZ7fvZ7fvZ7fvZ7fvX7PrX7PrX7PrX7PrX7/vW7frV7PnU6/jU6/jU6/jU6/jU6/jT6vfT6vfT6vfT6vfS6fbS6fbS6fbS6fbQ6PTQ6PTQ6PTQ6PTQ6PTQ6PTQ6PTQ6PTQ5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7T6P/O4/rV6f/I3PNxgZpJWnJKWHJJV3JPW3lKVnRQWHhUXHtGTmtWXXp2fZhvc41YXHBxdoRma3eCh5NmanuIjJ2BhpFzeISGi5h5fY5oa39laX1YXWt0eYeHi5xjZXdiYm+GhJCwsLu9vcixtL3Hy9O3vcShpq23u8a2usXAx9LX4+/Z5vfZ6PnW6PrZ7P/W6v3W6v3W6v3W6v3X6/7X6/7X6/7X6/7X6/7X6/7X6/7X6/7Z7P/Z7P/Z7P/Z7P/X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7/vX7/vX7/vX7/vX7/vX7/vX7/vX7/vZ7fvZ7fvZ7fvZ7fvX7PrX7PrX7PrX7PrV7PnV7PnV7PnV7PnU6/jU6/jU6/jU6/jU6/jU6/jU6/jU6/jT6vfT6vfT6vfT6vfS6fbS6fbS6fbS6fbQ6PTQ6PTQ6PTQ6PTQ5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f3O5PjT5vvE1+9eb4dIWHFNW3ZEUWxQXHhOWnhJVXNMVHNNVXRIUG1dZYJrco5TWnNTV29XW3BmantxdIZ0eIxqbYFdYXJaXmxtcYJeYnZbXnNkaH1mantkaHlpbIBlaHl+fouYlqOioq2pqbSipa27v8eqsLext77BxcvMz9e2usXByNPa5fPa6Pjb7P3W6v3W6v3W6v3W6v3W6v3X6/7X6/7X6/7X6/7X6/7X6/7X6/7X6/7Z7P/Z7P/Z7P/Z7P/X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7/vX7/vX7/vX7/vX7/vX7/vX7/vX7/vZ7fvZ7fvZ7fvZ7fvX7PrX7PrX7PrX7PrV7PnV7PnV7PnV7PnU6/jU6/jU6/jU6/jU6/jU6/jU6/jU6/jT6vfT6vfT6vfT6vfS6fbS6fbS6fbS6fbQ6PTQ6PTQ6PTQ6PTQ5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f3V6f6yxttUZHpFVW1NW3RBT2pXY4FNWHdKU3JTW3pJUXFKU3JbY4BeZoROV3JMU29QVHFJTmhXXHNpbYJYXXRhZX1WXG9YXnFVW21dYndXXHNdYnlrcYRmbH9WW3BUV2txcICVk6GqqraYmKSIjJSMj5eFi4+ytru3uLvMy8/a3eW9wcy5ws/U4vLb6vvV6fvW6v3V6/3V6/3V6/3W7P7W7P7W7P7W7P7X6/7X6/7X6/7X6/7Z7P/Z7P/Z7P/Z7P/X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7/vX7/vX7/vX7/vX7/vX7/vX7/vX7/vZ7fvZ7fvZ7fvZ7fvX7PrX7PrX7PrX7PrV7PnV7PnV7PnV7PnU6/jU6/jU6/jU6/jU6/jU6/jU6/jU6/jT6vfT6vfT6vfT6vfS6fbS6fbS6fbS6fbQ6PTQ6PTQ6PTQ6PTQ5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7Q5f7S5f2zxNpOXnRJWnBJV3FIVnFRX3pKWHZMV3ZOWnhFUG9MV3ZRWnlWXntXX31VXHlPVnNRVXNUV3R7gJpcYXpTV3FQVW9QVWxPVGlWW3BtcodUWHJPVG1tcod4fZFfZHtYXHF6fYycnKiPj5uWlqJ6foiGiZR7f4l3d4CMi5HGxczMzNWlqrSwt8HF0N7X5fbb6/rZ6vrW6v3W6v3V6/3W7P7W7P7W7P7W7P7X6/7X6/7X6/7X6/7Z7P/Z7P/Z7P/Z7P/X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7f3X7/vX7/vX7/vX7/vX7/vX7/vX7/vX7/vZ7fvZ7fvZ7fvZ7fvX7PrX7PrX7PrX7PrV7PnV7PnV7PnV7PnU6/jU6/jU6/jU6/jU6/jU6/jU6/jU6/jT6vfT6vfT6vfT6vfS6fbS6fbS6fbS6fbQ6PTQ6PTQ6PTQ6PTS5v7S5v7S5v7S5v7T6P/T6P/T6P/T6P/S5P7U5v/V6P/Q4/3Q4/3V6P/V6P+ouNJaaIFOW3ROW3RPXXhRX3pNW3ZMWnRMXHZKWndCUW9QXntRXXtXX39XXX5XW3tVWHdRVXNcX31obIZUWHJMT21JTWtER2RESF9FSV6Ch5xscYtUWHJ+gpp/hJtUV3RhZX9xdoSmqrSHi5V+gI1xcICHhpaNjJyCgJCJh5Shn6nFxdCzt8GhpbCkqbPFzNXZ4uzc6vre7f/a6/vW6/rW7PvX7f3X8P7Z8f/X7f3Z7f3Z7f3Z7f3Z7f3Z7f3Z7f3Z7f3X7f3X7/vX7/vX7/vZ8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8PrZ8PrZ8PrZ8PrX7/nX7/nX7/nX7/nW7frW7frW7frW7frV7PnV7PnV7PnV7PnV7PnU6/jU6/jU6/jT6vfT6vfS6fbS6fbT6vfS6fbS6fbS6fbS6fbQ6PTQ6PTQ6PTS5v7S5v7S5v7S5v7T6P/T6P/T6P/T6P/S5P7W6f/S5P7T5f/Q4/3Q4/19j6lPX3lOWnZOVnNMV3NRXXlMV3NOXHdOXHdIWHJJWnNIV3RTYX5TXn1bYYFiZYZoaYtXWHhXW3lWWndaXnhUV3RQVHJPU3FOUW9CR2FJTmN7gJVeY31bX3mWm7KAhZxYXHlRVnBqb32IjZeipLGtsL93doaJiJuJhpqalqqJh5VycH2Xl6O/v8uEh4+ipa27wcbJ0Nrd6ffZ5vjc6/3d7//a7/7Z7/7W7/3V7fvX7f3Z7f3Z7f3Z7f3Z7f3Z7f3Z7f3Z7f3X7/vX7/vX7/vX7/vZ8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8PrZ8PrZ8PrZ8PrX7/nX7/nX7/nX7/nW7frW7frW7frW7frV7PnV7PnV7PnV7PnV7PnV7PnV7PnU6/jT6vfT6vfT6vfT6vfT6vfT6vfS6fbS6fbS6fbS6fbQ6PTQ6PTS5v7S5v7S5v7S5v7T6P/T6P/T6P/T6P/U5v/T4/3W5v/V5f/b6/93h6FNXXdEUWxMV3NMVHFTW3hWXntPW3dTXnpMV3NCUGtMWnRPXXhVYX1aYn9sc5BfY4FvcI9/gZ5eYn9VWHZcYXpXXHZHSmlITGpNUG1GSmJJT2JYXnFaXnZ5fpWfpbh3e5BVWnFbX3R0eYd0eYWHiZaNj56FhJSJiJijobGsqrq7u8h2doJ/f4ufn6umqrKprLSkqLC5vsjb5vTb6fnb6/rZ6vnb8P7Z8P3W7/vV7frX7f3Z7f3Z7f3Z7f3Z7f3Z7f3Z7f3Z7f3X7/vX7/vX7/vX7/vZ8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8PrZ8PrZ8PrZ8PrX7/nX7/nX7/nX7/nW7frW7frW7frW7frV7PnV7PnV7PnV7PnV7PnV7PnV7PnV7PnU6/jT6vfT6vfT6vfT6vfT6vfT6vfS6fbS6fbS6fbS6fbQ6PTS5v7S5v7S5v7S5v7T6P/T6P/T6P/U6P/W5v/U5P7T4/3X6P9+jqhIWHJIWHJJV3JJVXFNVXJRWndOVnNRWndQWHZOVnNKVnJTX3lPXHZVXnleZYFWWndeYn9zdpOGiKV5fZpVWnNdYnlYXXdQVHFQVHFNUWtOU2pQVmlMUWRTV29+gpeepLdqcIJdYndbX3RydodVWmhaXGtrbX2BgJCamqaxr73AvsypqbZmZnN4eIWJiZWMj5qWmqKYnKSeo63Gz97d6/vc6vrb6/rZ7fvW7frZ8P3a8f7Z7f3Z7f3Z7f3Z7f3Z7f3Z7f3Z7f3Z7f3X7/vX7/vX7/vX7/vZ8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8PrZ8PrZ8PrZ8PrX7/nX7/nX7/nX7/nW7frW7frW7frW7frV7PnV7PnV7PnV7PnV7PnV7PnV7PnV7PnU6/jU6/jU6/jT6vfT6vfT6vfT6vfT6vfS6fbS6fbS6fbS6fbS5v7S5v7S5v7S5v7S5v7S5v7S5v7T5v7a6v/P3fjO3PdodpBIVnFIVnFIVnFHVXBIVHBPV3RVXXpMVHFMVHFPVnNMU3BTXHdPWHFWXXdVXHZdYntwdI5qb4hrbYh6fZdrcIlYXXdMUGhOU2pUV3RPU3BXXHZMUGhNUWZQVWpWW3JhZX1VW21VW21rcIVYXXJeYnZeYnZlaHliZHNlZXKfn6upprOin6yLiZprbX1maXh0d4R/f4yNjZiNjZiipLGfpbPO2ujc6vjZ6fbe8f3Z7fnZ8PrV7Pna7/7a7/7a7/7a7/7a7/7a7/7a7/7a7/7Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3a8f7a8f7a8f7a8f7a8f7a8f7a8f7a8f7a8fva8fva8fva8fvZ8PrZ8PrZ8PrZ8PrX7/vX7/vX7/vX7/vW7frW7frW7frW7frW7frW7frW7frW7frW7frV7PnU6/jU6/jU6/jU6/jU6/jU6/jT6vfS6fbS6fbS6fbS5v7S5v7S5v7S5v7S5v7S5v7S5v7T5v7V5f/O3Pdkco1GVG9JV3JFU21GVG9NWHRTXnpVXXpIUG1MU3BKUW9VXHlcY4Bzd5RbX3dcYXheY3pkaYBjaH9jaH9kZn9fYnpTV29OU2pYXXJcYXhcYXpPVG1QVWxhZX1RVm1ITWRMUGpJTmhNUWZkan15fpNlan9WWm9qbYKAgZaLjZyBgY6Hh5OoprCenqh5e4uFh5iAgpF6fYx9e4yPj5yRkZ6oqreVm6nAydnZ5PLZ5vTa6vfc7/rZ7fnb8v3a7/3a7/7a7/7a7/7a7/7a7/7a7/7a7/7Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3a8f7a8f7a8f7a8f7a8f7a8f7a8f7a8f7a8fva8fva8fva8fvZ8PrZ8PrZ8PrZ8PrX7/vX7/vX7/vX7/vW7frW7frW7frW7frW7frW7frW7frW7frW7frW7frW7frV7PnU6/jU6/jU6/jU6/jU6/jT6vfS6fbS6fbS5v7S5v7S5v7S5v7S5v7S5v7S5v7T5v7V4/53gp5IVHBNWHRPW3dMV3NOWnZUX3tQXHhMVHFJUW9MU3BPU3FcX35pbIuBhKFtcIhTVmtkaH2FiJ1XW3BbXnNVWm9OU2hWW3JfaH5eZnp3f5NxeJFQV3FQWG9ja4FESmRHTmpOVXFGTWlYYXd0fZCAiJxWW3JTVW10d4+QkaaUlqidnaqbm6SxsLeJi5B4eod/gpSEhpeLjZ59e4yUk6Ocmqi0tMGRlqSmsL3L1uLc6/bd7fjd8PnX7fba7/ra7/3a7/7a7/7a7/7a7/7a7/7a7/7a7/7Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3a8f7a8f7a8f7a8f7a8f7a8f7a8f7a8f7a8fva8fva8fva8fvZ8PrZ8PrZ8PrZ8PrX7/vX7/vX7/vX7/vW7frW7frW7frW7frW7frW7frW7frW7frW7frW7frW7frW7frU6/jU6/jU6/jU6/jU6/jU6/jT6vfS6fbS5v/S5v7S5v7S5v7S5v7T5v7T5v7V5f59i6VET2tJVXFNWHRKVnJNWHRQXHhTXnpMV3ZIUHBHTmtFTGlOUW9kaIWMkKqmqcSbnrNbXnJ7f5NpbIFTVmtRVWpNUWZHTGFKU2ZfaHtsdIhXX3ZUW3ReZX9KU2lHTmhOVXFMU29GTWpGTWlJUGpyepBWXnRMUGhPUWx4epOYmrCEhZqHhpaNjZi4t76VlJ2Cgo+EhpeEhpd4d4l0c4SQj5+bm6i0tMGrrbqXnKipsLrN2eLb6vLa6vTf8vvc8vra7/3a7/7a7/7a7/7a7/7a7/7a7/7a7/3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3Z8P3a8f7a8f7a8f7a8f7a8f7a8f7a8f7a8fva8fva8fva8fva8fvZ8PrZ8PrZ8PrZ8PrX7/nX7/vX7/vX7/vW7frW7frW7frW7frW7frW7frW7frW7frW7frW7frW7frW7frU6/jU6/jU6/jU6/jU6/jU6/jU6/jT6vfT6P/Q5f7T5f/T5f/S5f3T4/vU5Ppte5VMV3NKU3BKU3BOVnNUXHlaYn9YYX5OVnZHT3FGTG9HTW1JUGxRWHJian6aorS0us2IjaJma4BpbYJcYXhOU2pKT2ZRVm1MUGVWW3BeY3hjaH9GSWZNVHFIT2xGT2pOVXFaYX1GSWZRVXJNUG1UV3RlaoRNUWtNUWtXWnR9f5p4epNbXHJiYXNmZXaYlqSPjZuNi5iOjJyfnLBdXG9hX3KLiZqfn6zExNC7u8ekpK2hpK+mrbfL197d7PTd8Pfd8Pnc7/rc7f3c7f3c7f3c8f/c8f/b8v/b8v3b8v3b8v3b8v3b8v3b8v3b8v3b8v3b8v3c8/7c8/7c8/7c8/7c8/7c8/7c8/7c8/vb8vrb8vra8fna8fna8fna8fna8fna8fnZ8PjZ8PrZ8PrZ8PrX7/nX7/nX7/nX7/nX7/nX7/nX7/nX7/nW7fjW7fjW7fjW7fjV7PfV7PfV7PfV7PfU6/bU6/bU6/bT6vTQ4/3W6f/T5v7U5P3U5P3X5f9wfpdUYXpOVnNMVHNMVHNOVnZWXn5WXn5OVnZFTWxHTXBOVHdMU3BGTWlbY3lweIydprartMReY3hfZHtcYXhXXHNUWHBOU2pOU2pcYXZpb4FaXnNkaYJGSWZHTmtJT3BHT2xTWnZma4VeY319gZtbX3lQVHFlaYZPVG1OU2xiZH+Nj6pdX3hdXnR7eo96eYycmqqOjJyVkJ+Xk6Sem69dWm1bWmxran2bnayzs7+6ucK+vcSsrLaorbSxu8TQ3eTf8fja6vTd7frd7frc7/rc7/rc8f3c8f3b8v3b8v3b8v3b8v3b8v3b8v3b8v3b8v3b8v3b8v3c8/vc8/vc8/vc8/vc8/vc8/vc8/vc8/vc8/vc8/vb8vrb8vra8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX7/fX7/fX7/fX7/fX7/fX7/fX7/fX7/fW7fbW7fbW7fbW7fbV7PTV7PTV7PTV7PTU6/PU6/PU6/PT6vLX6fvS4/bV5fvX5v3W5P6EkKpJVnBXX31QWHhNVXdNVXdQWHpVXX9OVnhHT3FETG1OVHdJT3BCSWZKUW1MVGptdomvt8lweItXXHNjaH9aXnZNUWlTV29PVGtQVWphZXpcYnRpb4FhZX1BRWJMU3BMU3BHT2xKUWtXXHNzd4yjpb50d49YW3Zpa4ZKTWpRVG9wco1/gZpNT2hcXXN5eIuJiJijobGNi5idmKiNiJpzcIRyb4JhX3JeXXCJjJuvr7qzsru3tr3AwMmdo6qvtr+/zNPb6vLc7Pfd7frd7frc7/rc7/rc8f3c8f3b8v3b8v3b8v3b8v3b8v3b8v3b8v3b8v3b8v3b8v3c8/vc8/vc8/vc8/vc8/vc8/vc8/vc8/vc8/vc8/vc8/vc8/va8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX7/fX7/fX7/fX7/fX7/fX7/fX7/fX7/fW7fbW7fbW7fbW7fbV7PTV7PTV7PTV7PTU6/PU6/PU6/PT6vLV5fTX6PfW5ffX5PmMmLBQWnRTXHdMVHFRWnlOVnhOVnhRWntPV3lIUHJGTnBJUXFRV3hXXntMU29NVG1IT2lTW3F6gpZbY3dYXXdWW3RITWZARVxJTmViZn5QVWpyeItpb39kanpQVWpITWZPVnJIT2xNVXJGTWlITWRYXHFqbYJlaX5/gZqAgptQU2tpa4R3eZFsb4dUV2xfYXZ7eo2OjZ2in62QjpyhnKuTjp+PjJ+QjaFycYRaWGttcH+hoayWlZ66ucDLy9Sbnqaepa+st7/L1t/b6vTd7frd7frc7/rc7/rc8f3c8f3b8v3b8v3b8v3b8v3b8v3b8v3b8v3b8v3b8v3b8v3c8/vc8/vc8/vc8/vc8/vc8/vc8/vc8/vc8/vc8/vc8/vc8/va8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX7/fX7/fX7/fX7/fX7/fX7/fX7/fX7/fW7fbW7fbW7fbW7fbV7PTV7PTV7PTV7PTU6/PU6/PU6/PT6vKVpK+vvsi9y9l6hZZTXHJWXXdRWHRWXXpTW3pUXHtQWHhMVHNGTm1JUXFPV3dUXHtXXnpRWHRKUWtFTGVFTGVOVW9VXXNHTmhHTGVQVHFOU2xVWnFNUWlwdIlbX3R6gJBqcXt9hI5YXm9ITWRUW3dPVnNOVnZTWndVV3JISV9UVWtyc4h/gJV3eI1oaX5zdIlVWG1NUGVVWG1zdImNjJyVlaKtq7mVk5+kn6+qpbeopLiinrKhn7JxcIJtcH+bm6ahn6msq7K0tL6zt7+fpK+rsruqsbvZ5PDh7/3c7Pnh8//h8//c8f3c8f3b8v3b8v3c8/7c8/7c8/7c8/7c8/7c8/7c8/7c8/7d9P3d9P3d9P3d9P3d9P3d9P3d9P3d9P3c8/vc8/vc8/vc8/vb8vrb8vrb8vrb8vra8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX7/fX7/fX7/fX7/fW7fbW7fbW7fbW7fbW7fbW7fbW7fbW7fbV7PTV7PTV7PTU6/NlcXppdH5OWmVPWGhQWGxYXXRYXXdbXntRWHZTW3hTW3hQWHZOVnNRWndUXHlUXHlNVG1NVG1CSWNBSGJNVG1FTGVCSWNAR2NJTWpPU3BPVG1qb4hyd45obIFkan1NU2NQV2FhaHJNU2NWW3BUW3RRWHZPV3RUW3dWWHFWV2xpan9xc4VhY3Rxc4WMjp12eIlTVmpUV2xXW29oanuRkKGmprOcmqadm6i2scCjnrCOi56MiJyQj6KamKuQk6KPj5uamKKNjJO5ucLFxc6mqrSvs76mq7e2v8zh7/3e7/vh8//h8//c8f3c8f3b8v3b8v3c8/7c8/7c8/7c8/7c8/7c8/7c8/7c8/7d9P3d9P3d9P3d9P3d9P3d9P3d9P3d9P3c8/vc8/vc8/vc8/vb8vrb8vrb8vrb8vra8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX7/fX7/fX7/fX7/fW7fbW7fbW7fbW7fbW7fbW7fbW7fbW7fbV7PTV7PTV7PTU6/OAiZR5go1ia3hOVGRWXG9YXHFXW3BeYXlTWnNVXnlVXnlRW3ZTXHdVXnlTXHdOV3BGTmRBSV9CSmE+RV5HTmhHTmo3Plo7Ql8/QmE/Ql9CR2FYXXdJTmVjaH2Jj6JHTV1ESVdPVWVhZnlfZHlKU2lNVG1XYXdkbIBbXW9mZXZzcoJoZndmZXZtbH2amKueobJxdIhfY3hhZHhbXW+Af4+mprOdm6icmqatqbiWkaN9eY16d4t7eo2GhZeVl6aQkJyOjZaMi5GpqbLAwMmytsC4u8a0t8ScorDBz93c7Pnh8//e8f3c8f3c8f3b8v3b8v3c8/7c8/7c8/7c8/7c8/7c8/7c8/7c8/7d9P3d9P3d9P3d9P3d9P3d9P3d9P3d9P3c8/vc8/vc8/vc8/vb8vrb8vrb8vrb8vra8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX7/fX7/fX7/fX7/fW7fbW7fbW7fbW7fbW7fbW7fbW7fbW7fbV7PTV7PTV7PTU6/OFjJZ0e4ZwdIBscX9obHplaHlUVmhfYXZaXnNYYXRVXXNQWG9RWHJUW3ROVW9FTGVBSGJESF9BRl9AR2FFTGg9RGE9RGFAR2Q+QV8+QV5KTmtITWZBRl1QVWpPVGlPVWhYXnFzeYxlan9PVGlTW3FGTmRMVmlUXHBYXHBaXG1eYXJpaHpkY3ZqaXmLiZqjorRyc4h5fZB+gZN4eol3eYaEhJCXl6OJh5R+e4mHhZOJh5eNiZ2GhZeLiZqUlqOMjJeamKK4t767u8W+vse/v8u9vci2tsGqr7qPm6bT4/Dh8f7c7/re8f3c8f3c8f3b8v3c8/7c8/7c8/7c8/7c8/7c8/7c8/7c8/7d9P3d9P3d9P3d9P3d9P3d9P3d9P3d9P3c8/vc8/vc8/vc8/vb8vrb8vrb8vrb8vra8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX7/fX7/fX7/fX7/fW7fbW7fbW7fbW7fbW7fbW7fbW7fbW7fbV7PTV7PTV7PTU6/OPk52VmKOIjJaLjpjGydSxsb2amqWbm6hzdoJoanlwc4VWWm1VWnFQVW9MT2xGSWhGSWhHSGhFRmVBRWNARGJARGQ+RGQ+RWI+RWI/RmJIT2tGTWlBSGJBSGJCSWNOVmxYYXRTW21dZXlkbIBVXXNMU2xKUWtMU2xUV3RISmhPUWpdXnRjZHl4eomxsb6HhpZtcIF9fpORlKOeoa2WmKWChZF/gY52doJ/f4xzc4CLi5ePjp6Af4+FhZGTk5+dnamcm6StrLa6ucK+vcako6y5uMG+vcaytsCXnqmcqLPf7/nh8fvb7fnf8v7d8v/a7/re8//e9P3e9P3e9P3e9P3e9P3e9P3e9P3e9v7e9v7e9v7e9v7e9v7e9v7e9v7e9v7d9vrd9vrd9vrd9vrc9Pnc9Pnc9Pnc9Pnb8vrb8vrb8vrb8vra8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX7/fX7/fX7/fX7/fV7/bV7/bV7/bV7/bU7fTU7fTU7fTT7POPkJaJi5CbnKKio6mztLrZ2t/Iyc+srbO9vsS3t8CoqrdbXW9iY3tiZIFNTm1JTWtKTGtMTWxJSmpGR2lARGRARGQ+RGQ+RWI/RmI+RWFHTmpESmZCSWVBSGQ/RmJGTWZETGJASFxJUWVja4FRWnBJUGpGTWZPVnJNUG9MT21QU21dX3hdXnNwcoSFhZF+fY1/gZN+gJF2eIeHiZaipbCjpbJwcoF2eIeBgY6FhZFzc4CQkJ2Ojpt+fouNjZqdnaqal6Scm6Sko6zT0tuko6ytrLazsruwsLmxtsCCjJbS3enf7/nh8f7h8//f9P/d8v7e9P3e9P3e9P3e9P3e9P3e9P3e9P3e9P3e9v7e9v7e9v7e9v7e9v7e9v7e9v7e9v7d9vrd9vrd9vrd9vrc9Pnc9Pnc9Pnc9Pnb8vrb8vrb8vrb8vra8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX7/fX7/fX7/fX7/fV7/bV7/bV7/bV7/bU7fTU7fTU7fTT7PPBwsakpamMjZCUlZiXmJze3+POz9PFxsm/wMS0tru3t8J7eo1jZH1oaIZWV3lMTW9JTGlKTWpISmhFRmVARGJARGI+RWI+RWI/RmI+RWFFTGhBSGRBSGRBSGQ+RWFAR2NFTGg+RV5FTGVdZXtKU2lHT2NOVmpWXnJQVW9OU2xPUWpYXHFRU2hiZHZvbYB7eo17fZFtcIFRVGNbXWqFiJOLjZqGiJeMjp2GhpNkZHFiYm95eYaIiJWMjJiPj5yTk5+dm6ibmqOenaaysbqenaampa+hn6mQkJq0ucSYn6qstsDi7fnh8fve8f3b8Pvd8v7e9P3e9P3e9P3e9P3e9P3e9P3e9P3e9P3e9v7e9v7e9v7e9v7e9v7e9v7e9v7e9v7d9vrd9vrd9vrd9vrc9Pnc9Pnc9Pnc9Pnb8vrb8vrb8vrb8vra8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX7/fX7/fX7/fX7/fV7/bV7/bV7/bV7/bU7fTU7fTU7fTT7PPJy820trimqKqRk5WLjI63uLrc3d/a2924ubuys7fHx9Cqqbl6eI9kZIBfX39OT29ERmFERmFBRF4/QV5ARGFARGI+RWI+RWJAR2M+RWFESmY/RmI9RF9AR2M+RWFAR2NGTWlAR2NKUWtYYXdQWG9KU2ZYYXNQWGxHTGNRVm1cX3RRVWpTVGlcXnB0c4R2dIeBgpdpa31VV2Zpa3h4e4aFh5SHiZiPkaGQkJ1eXmt6eoeCgo+JiZaHh5SRkZ6UlKGUkZ6joquhn6mxsLmGhY6joquioaqfn6mytsCtsr2LkZza4+3j8v3h8/3e8//h9v/e9P3e9P3e9P3e9P3e9P3e9P3e9P3e9P3e9v7e9v7e9v7e9v7e9v7e9v7e9v7e9v7d9vrd9vrd9vrd9vrc9Pnc9Pnc9Pnc9Pnb8vrb8vrb8vrb8vra8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX7/fX7/fX7/fX7/fV7/bV7/bV7/bV7/bU7fTU7fTU7fTT7POpq6q+wL+RlJOIi4ltcG96fXvLzczf4uHW1tbS0tTBwMfAvsuyscSWlKtkZX5PT2tITGFHSl9ISmNGSGFARV49QF06QV09RF8+RWE/RmI+RWE7Ql4+RWE/RmJAR2NBSGRNVG1TWnNIUGZGTmRTW3FPV21RWnBMVGpKT2lfZHtKTmNfY3ddX3FqbHtsbHl/f4x5e41WWGpXWmlydIFscHqAgo+Vl6aipLOUlKF3d4R9fYmLi5eGhpOUlKGhoa2Tk5+bmKWUk5ybmqPGxc6joquenaaqqbKwr7jf3+m7u8eUmKO6xM7d7PTh8/3f9v7b8vre9P3e9P3e9P3e9P3f9v7f9v7f9v7f9v7e9v7e9v7e9v7e9v7e9v7e9v7e9v7e9v7e9/ve9/ve9/ve9/vd9vrd9vrd9vrd9vrc8/vc8/vc8/vc8/vb8vrb8vrb8vrb8vra8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX8fjX8fjX8fjX8fjW8PfW8PfW8PfV7/Z+f4GxsrSJi42BgoVkZWiQkZSvsLLOzs64trfT0NTc2t7S0Newrbqqqbl3dohXWG1PU2ROUWVOUWVMT2RARVw+Qlw6QV0+RWE/RmI+RWE7Ql49RF9AR2M/RmI+RWE9RF09RVtGTmRETGJNVWtTW3FRWnBUW3RVXHZWW3JlaoFUV2xYXHBjZXdqbHl5eYWOjpt5e41cXnBsb355e4iLjpiUlqN2eId+gI+VlaKRkZ6Cgo+Tk5+VlaKJiZaWlqOYmKWfnaqhn6mmpa+fnqixsLmjoqupqLGqqbKxsLm0s72ssLqLkZvf6/Tb7fTe9P3f9//e9P3e9P3e9P3e9P3f9v7f9v7f9v7f9v7e9v7e9v7e9v7e9v7e9v7e9v7e9v7e9v7e9/ve9/ve9/ve9/vd9vrd9vrd9vrd9vrc8/vc8/vc8/vc8/vb8vrb8vrb8vrb8vra8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX8fjX8fjX8fjX8fjW8PfW8PfW8PfV7/ahoqWUlZiChId7fYBkZWmFhomYmp2ampybmJrFwMHb2dzT0NTNzNDGxcywsLllaXNWW2ZUWGZRVWZPU2ZBRl0+Qlw7Ql4/RmI+RWE7Ql49RF89RF8/RmI+RWE9RF87QlxCSmFFTWFASF5NVWtJUWhKU2lOVW9WXnRkaX57gZRXW29kaHlzdoV6fYyioq9xcIBWWGp4eoxydIR2eIWAhI6TlaJmaXhkZnaOjpuQkJ13d4SHh5Sjo7C+vsuXl6Sbm6icmqaamKKvrbfBwMmlpK20s72trLawr7imo6vNydS9vcaeo62ptr3e8Pfe9Prd9vre9P3e9P3e9P3e9P3f9v7f9v7f9v7f9v7e9v7e9v7e9v7e9v7e9v7e9v7e9v7e9v7e9/ve9/ve9/ve9/vd9vrd9vrd9vrd9vrc8/vc8/vc8/vc8/vb8vrb8vrb8vrb8vra8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX8fjX8fjX8fjX8fjW8PfW8PfW8PfV7/awsbSwsbSlpqqOj5N7fYBlZmptb3JfXmOvrLDV09aXlZimpKiQj5SMi4+VlpyJiZNeYmxWW2ZTV2VQVGVCRls/RFs/Ql8+RWE7Ql49RF89RF8+RWE6QV07Ql49RF8+RWFGTmRBSV87RFpKUWtIT2lCSWM7QlxBSGJWW3BhZnldYXJobHp5e4t/gZCena1qaXl3eYtiZHZqbHt9f4xmaXZ+gI1vcX56eoeYmKSOjpqQkJyHh5N+fomTk5+rq7iTk56cm6Shn6mYl6GjoqudnKWqqbKfnqi2tLuloqrS0NfAwcevtLulsLba6fDf8ffj9v3e9Pre9P3e9P3e9P3f9v7f9vvf9vvf9vve9v7e9v7e9v7e9v7e9v7e9/ve9/ve9/ve9/ve9/ve9/ve9/vd9vrd9vrd9vrd9vrc9Pnc8/vc8/vc8/vb8vrb8vrb8vrb8vra8fna8fna8fna8fnZ8PjZ8PjZ8PjZ8PjX8fjX8fjX8fjX8fjW8PfW8PfW8PfV7/a2tLmopqufnqOamJ1+fYF6eX6LiY50c3hxcHSrqq/EwsmNjJNWVV5XVl9sand5eYVscHpUV2JTVmFVV2ZHSl5HSWJARGE+RWI/RmM+R2I9RmE7RV07RV07RV87RV87RV8/SGE/SGE/SGE/SGNASWQ+R2I+R2JBSGRNUWlOU2hfY3RxdoSHiZZ/gY52dIVzcoJ6eYlranp2dIV/fo55eYaVlaKTk5+WlqKxsLmpqK+enaaVlJ2BgImUkZ6QjpuhnquioaqXlp+LiZCjoqnQz9aqqbClpKuwr7OxsLSqq6+zuLqytruwtr20u8LW4ebf7/bh8/rd9vre9/ve9/vf+P3h+f3i+P3h9/vh9/3h9/3h9/3h9/3i+P7i+P3i+P3i+P3h+f3h+f3f+Pve9/re9/re9/re9/re9/rd9vnd9vrd9vrd9vrc9Pnc9Pnc9Pnc9Pnb8/jb8/jb8/jb8/ja8vfa8vfa8vfa8vfX8fbX8fbX8fbX8fbW8PTW8PTW8PTV7/NycXalpKmbmp6cm597en+TkZaEgod3dnqAf4alpKu6ucKYl6FhXmtfXWpiX21kYnBzc39cX2hOUVxcXmtOUWVHSWJER2Q+QV8/RmM+RmM9RmE7RV07RV07RV87RGE7RGE+R2I+R18+R2I+R2I9RmE9RmE/R2RFTGhVWnNPVGldYXKAhZOChZFzdoJ5eIhranpvbX5kY3N/fo6JiJh+fot9fYmamqWTk5ywr7asq7Copq2bmqGVlJ2sq7SUkZ6UkZ6lpK2WlZ6Uk5qioai0s7jFxMjT0ta9u8CsrbCqq626u7+7v8WkqLDAxs2epKvk7/fi9Pve9/vd9vrc9Pni+v7e9/rf9/jj+f7h9/3h9/3h9/3h9/3i+P3i+P3i+fri+frh+f3h+f3f+Pve9/re9/re9/re9/re9/rd9vnd9vnd9vnd9vnc9Pjc9Pjc9Pjc9Pjb8/jb8/jb8/jb8/ja8vfa8vfa8vfa8vfX8vTX8vTX8vTX8vTW8fPW8fPW8fPV8PJ9e4B3dnpycXZ2dHmBgIWwr7Ohn6SQj5SLiZCJiI+JiJGamKKEgY6MiZZhXmxaV2VeXmpbXmlaXWhdX2xQVGVKTmNHTGVARGI/RmM+RmM9RmE7RV87RV87RV87RGE7RGE9RmE9Rl49RmE9RmE9RmE9RmE/R2RFTGhcYXpPVGljZniAhZNqbHlcXmt7eotfXm9WVWViYXFxcIB/fo59fYlzc4CNjZiNjZapqK+rqq+vrbSdnKOhn6nGxc6opbKQjputrLaRkJqenaSlpKuhn6TCwcbr6u/My8/GxsixsbPFxsm+v8Wvsrq9wMiTmJ/BzNTf8fjf9vve9Prf9vvf9vrj+f7i+vve9/rh9/3h9/3h9/3h9/3i+P3i+P3i+fri+frh+f3h+f3f+Pve9/re9/re9/re9/re9/rd9vnd9vnd9vnd9vnc9Pjc9Pjc9Pjc9Pjb8/jb8/jb8/jb8/ja8vfa8vfa8vfa8vfX8vTX8vTX8vTX8vTW8fPW8fPW8fPV8PK/vsKJiI1cW19lZGmEgoexsLS2tLmXlpuUk5qLiZCEgoxbWmOFgo+/vcmTkJ5jYW9dXWlWWmRrb3lfYm9OUWNOUWZHTGVHSmg/RmI+RmM9RmE7RV87RV87RV87RGE7RV89Rl49Rl49RmE9RmFASWQ+R2I+RmNBSGRHTGVYXXJjZnhkaXddX2xlaHR/fo5iYXFcW2tzcoJ4d4d7eouCgo95eYaJiZWVlZ6joqmqqa2zsrmenaSUk5yqqbKhnqukoq+3tr+Mi5Sko6qqqbCmpaqpqKzHxsvBwMW9vb+/v8G6ub7Gx825ucK+wcm+wcmNlJ3S4ene8fjk9/7k+v/i+P3h9/vf+Pnh+f3h9/3h9/3h9/3h9/3i+P3i+P3i+fri+frh+f3h+f3f+Pve9/re9/re9/re9/re9/rd9vnd9vnd9vnd9vnc9Pjc9Pjc9Pjc9Pjb8/jb8/jb8/jb8/ja8vfa8vfa8vfa8vfX8vTX8vTX8vTX8vTW8fPW8fPW8fPV8PKpqKy0s7hlZGl/foKhn6SXlputrLGsq7CamJ+WlZyenaZ+fYZXVWKsqrfNy9loZXNiYm1wc35aXWVjZnFfZHJNUGRJTmVKT2lBSGQ9RmE9RWI7RGE7RGE7RGE7RV87RV87RV07RV07RV87RV8+R2I7RV9BSWZKUW1KT2lXXHFaXW9scX9fYm96fYmAf49tbH1paHhycYF+fY12dIV0dIF0dIGUlJ+dnaasq7Ksq7CqqbCamJ+TkZuenaalo7C9usempa+WlZ6NjJOamJ+cm5+mpaq/vsLGxcnAvsHFwsa/vsLU09qysru7u8W+wcmfpK+FkJrJ2eHk9v3c7/bh9/vj+f7j+/3k/f/i+P7i+P7i+P7i+P7i+P3i+P3i+fri+frh+f3h+f3h+f3h+f3f+Pvf+Pvf+Pvf+Pve9/re9/re9/re9/rd9vnd9vnd9vnd9vnb8/fb8/fb8/fb8/fa8vba8vba8vba8vbX8vTX8vTX8vTX8vTW8fPW8fPW8fPV8PK7ur/Cwcahn6SMi4+pqKyjoqaWlZqUk5eopq2cm6Kenaawr7iCgI1bWGVeXGq4tsRdXWlYXGZfY2tcX2pscX1mantESF1HTGNESmQ+R2I9RWI7RGE7RGE7RGE7RV87RV87RV07RV07RV87RV89RmE7RV8/R2RHTmpQVW9RVmtTVmhscX92eIV5e4hlZHRlZHR4d4d4d4dzcoKEgpOJiZZxcX6JiZWoqLHGxcy9u8CxsLe9u8KfnqiPjpeTkJ17eYaAf4iQj5iko6qTkZiQj5Smpaq7ur/Lyc7IxsnLyMzCwMXAv8a7usS/v8jCwsywtL99hpCQnKXf7/fo+f/h9Pnh9/vh+frh+f3i+P7i+P7i+P7i+P7i+P3i+P3i+fri+frh+f3h+f3h+f3h+f3f+Pvf+Pvf+Pvf+Pve9/re9/re9/re9/rd9vnd9vnd9vnd9vnb8/fb8/fb8/fb8/fa8vba8vba8vba8vbX8vTX8vTX8vTX8vTW8fPW8fPW8fPV8PLQz9SvrbKlpKmmpaqXlpubmp6dnKGRkJWRkJeIh46WlZ64t8DGxNBeXGliX21xb31TU15aXWhbXmZhZG9obHh9gY9GTF49QVZGTWZASWQ9RWI9RWI7RGE7RGE7RV87RV07RV07RV07RV87RV86RF46RF49RWJBSGRGSmROU2hNUGJdYnCBhJCPkZ6EgpOHhpZ4d4eBgJB5eIiAf4+NjZp/f4x0dICOjpexsLe6ub6mpay5uL+trLaWlZ6lo7CPjZqYl6GamKKVlJuamJ+OjZGpqKy7ur/Lyc7i3+PUztPEwcbMyNDPztfOzda7u8WmqrSjqrR5go2suMHo9//l+f7f9vrf+Pnf+Pvi+P7i+P7i+P7i+P7i+P3i+P3i+fri+frh+f3h+f3h+f3h+f3f+Pvf+Pvf+Pvf+Pve9/re9/re9/re9/rd9vnd9vnd9vnd9vnb8/Tb8/Tb8/Tb8/Ta8vPa8vPa8vPa8vPX8vTX8vTX8vTX8vTW8fPW8fPW8fPV8PLIx8yqqa2WlZqvrbKpqKyjoqazsretrLGjoqZ7en+Hho2cm6Skoq9sandWVGJWVmNOUF1aXWhpbHdiZXBjZnFpbXlydodGTF5CSmFESmQ/RmI+RWI9RGE7RGE7RV87RV07RV07RV87RV87RV85Ql06RF47RGE9RF9AR2E/RFtGSV1wc4WMjp2cnquXl6SCgZGCgZF4d4d/fo6AgI2Hh5SEhJB2doGGho+/vsWysbaqqbCWlZyJiJGhn6m4t8CpqLG7usStrLO4t76hn6aXlputrLG+vcHEwsfNy87Ny865t7u9ur+wr7azsrvBwcvBwcu+wcyiprKCiZTL197l9Pvo+//i+P3f+Pvh+f3h+f7i+P7i+P3i+P3i+P3h+frh+frh+frh+f3h+f3h+f3f+Pvf+Pvf+Pvf+Pve9/re9/re9/re9/rd9vnd9vnd9vnd9vnb8/Tb8/Tb8/Tb8/Ta8vPa8vPa8vPa8vPX8vTX8vTX8vTX8vTW8fPW8fPW8fPV8PLHx8nPz9LAwMKlpaiTk5WoqKq3t7mvr7Gbm5ucnJyBgoVyc3mYmKJoaHROTV1OUF9TVWRhY3JsbHhmZnJsbHhydIF9f45maXpBRVpISmNKTmtER2Q+QV85QF07Ql5AR2E/RmI/RmM+RWI+RWI9RF87Ql47Ql49RF87QlxBRl9ESGJAQltMT2NtcH+OkJ2Ym6iLi5d6eoeBgY5ycn54eIR0dIB/f4uCgoy2t725usCwsbelpqyVlpyrrLKztLqxsrivrbSysba3trq6ub6fnqOhn6S9u8DHxsvBwMWysba0s7i6ub6zsrfQz9bGxczEwsm+vca0tMCOkZyVnKXd6vHo9//l+P/h9/3h+/7h+/7i+v7j+vvk+/3j+/3i/f3i/f3i+vvi+vvi+vvi+vvh+frh+frh+frh+frf+Pnf+Pnf+Pnf+Pne9/je9/je9/je9/jb9vbb9vbb9vbb9vba9PTa9PTa9PTa9PTZ8fLZ8fLZ8fLZ8fLX8PHX8PHX8PHW7/De3uHIyMu9vb+zs7aVlZeTk5XAwMLHx8mrq6uvr6+6u76Ji45bXmZUVmNQU2JYW2xWWGpiZHNvb3uxsb2bm6Z+foloaHRranpeX3RISV9ISmVNT2xGSWY/Ql85QFw7Ql4+RWI+RWI+RWI+RWI+RWE9RF87Ql47Ql47QlxAR2E+QV5ARV5RVWpOUWNVV2SBhY+VlaGFhZCHh5NpaXRmZnJsbHiAgIyJiZWwsLm0truxsrijpKqFhoyvsLamqK2ys7m5uL2ysba4t7vBwMW5uL2bmp6ioaW7ur/JyM25uL2sq7C3trq0s7jZ19zEwsfIx87AvcelpK2ysruHjJalr7nf6/Tm9//k+v/h+/7h+/vi+vvj+vvk+/3j+/3i/f3i/f3i+/ni+/ni+/ni+/nh+vjh+vjh+vjh+vjf+Pnf+Pnf+Pnf+Pne9/je9/je9/je9/jb9vbb9vbb9vbb9vba9PTa9PTa9PTa9PTZ8fLZ8fLZ8fLZ8fLX8PHX8PHX8PHW7/Df3+LS0tSampydnZ+jo6WTk5WtrbCzs7avr6+fn5+XmJuvsLN6foZqbHlOUF9RVGV3eYtoanl6eoeUlKHIyNRcXGhsbHl0c4R5e41QUWZFR19ISmVHSmhBRWI9RF8+RWE+RWI+RWI9RGE9RGE+RWE+RWE9RF87Ql49RF05QFpARGE/RF1QVGleYnNkZnN3eoVdXWltbXmJiZV7e4dqanZ6eoaGhpGTk56ioquztLq5usCys7mWl52Rk5iztLqpqrC4t7uysbatrLGvrbK+vcG4t7uxsLSlpKm+vcHHxsu6ub6Uk5e9u8C3trrAv8TOzdTHxs+wr7i9vcaanql4f4mxvcbp+P/k9/7i+v7h+/vi+vvi+vvj+/3j+/3i/f3i/f3i+/ni+/ni+/ni+/nh+vjh+vjh+vjh+vjf+Pnf+Pnf+Pnf+Pne9/je9/je9/je9/jb9vbb9vbb9vbb9vba9PTa9PTa9PTa9PTZ8fLZ8fLZ8fLZ8fLX8PHX8PHX8PHW7/DMzM7X19qzs7aqqqywsLKsrK+ampyUlJahoaGlpaWjpKakpamYnKSChZFXWmlUVmhwcoRcXm1/fo5mZnOTk59aWmWJiZahoa2kprZ0d4hFSF1GSGFMUGpHSmg/RmI7Ql49RGE9RGE9RGE9RGE9RF8+RWE+RWE9RF8+RV46QVs7P1xARV5OUWZjZniFh5SjprGMjJeAgIx3d4KEhI97e4d/f4uQkJyOjpqYmKK0truztLqztLqkpauBgoikpauhoqi0s7izsrexsLS3trrMy8+9u8C+vcG5uL2/vsK7ur/GxcmYl5zMy8/Cwcbs6/Dh3+bEwszHxs+2tr+ws755gIuJk53r9//j9Pvj+f7h+/vi+vvi+vvj+/3j+/3i/f3i/f3i+/ni+/ni+/ni+/nh+vjh+vjh+vjh+vjf+Pnf+Pnf+Pnf+Pne9/je9/je9/je9/jb9vbb9vbb9vbb9vba9PTa9PTa9PTa9PTZ8fLZ8fLZ8fLZ8fLX8PHX8PHX8PHW7/DExMbMzM7Pz9K4uLq6ur2zs7bCwsWsrK+YmJiQkJCTlJaXmJycn6iHiZZMTl1JTF1xc4Jsb35ranpOTV1GRlNPT1xlZXF+fot5e4iFh5ZfY3c+QFhPVG1GSWZBSGQ+RWE+RWI+RWI+RWI+RWI5QFw6QV0+RWE+RWE9RF09RF07P1xITWZITGFcX3GBhJCssLqvr7qTk56GhpGJiZWOjpqIiJSXl6OIiJSdnaalpqyvsLays7m4ub+am6GNjpSwsbe0s7i5uL2xsLS6ub7FxMjHxsu9u8C5uL3FxMjIx8zFxMiko6iopqvW1drj4ubd3OPU09zLydPAwMnN0NuWm6aQl6LIztzr9//j+f7j+/3i/f3i/f3i/f3i/f3j+/3j+/3j/fri+/nh+vjh+vjh+vjh+vjh+vjh+vjf+Pnf+Pnf+Pnf+Pne9/je9/je9/je9/jc9/fc9/fc9/fc9/fb9vbb9vbb9vbb9vbZ8fLZ8fLZ8fLZ8fLX8PHX8PHX8PHW7/DAwMK3t7nLy82+vsCoqKq2trjIyMvHx8mysrKqqqqsrbCfoaSYnKSbnapHSVhJTF1TVWRlaHeEgpNYV2hNTFxeXmtdXWlwcHuOkZyvscCTlqpJTGRJTmhITGlBSGRBSGQ/RmM+RWI+RWI+RWI6QV06QV09RF8+RWE+RV5AR2E+QV5BRl9BRVpdYXJydIF7f4l9fYiIiJSBgY2FhZCPj5uXl6OlpbGfn6umprCqq7G4ub+2t72tr7SxsriGh42qq7G7ur/My8/Cwcarqq+5uL3NzNDEwse6ub63trq9u8C+vcGxsLS/vsLf3uPEwsfd3OPt7PbCwcvHx9DQ0NzFx9SPlJ+qr73r9P/l+f7i+vvi/f3i/f3i/f3i/f3j+/3j+/3j/fri+/nh+vjh+vjh+vjh+vjh+vjh+vjf+Pnf+Pnf+Pnf+Pne9/je9/je9/je9/jc9/fc9/fc9/fc9/fb9vbb9vbb9vbb9vbZ8fLZ8fLZ8fLZ8fLX8PHX8PHX8PHW7/DBwcS6ur3Fxce+vsCQkJOlpai7u77BwcTFxcW+vr6ztLewsbSssLiUlqNMTl1PUWNcXm1hY3KFhJRqaXtUU2NiYm9aWmVqanOvsrq6vclfY3RWWm9ARV4+QV5GTWlCSWVCSWY/RmM+RWI+RWI6QV07Ql49RF89RF8/Rl8+RV5ARGFARV5HSl9cX3F7fot6fohzc3+GhpGFhZB/f4uLi5aYmKSTk56Pj5ukpK3NztS7vcKztLqkpaufoaatr7SdnqSxsLS/vsLPztOtrLGxsLSenaKvrbLCwca/vsKzsre4t7urqq+6ub6/vsLNzND39v3Z1+HEwsy9vcbGxtLX1+SanKmQk6LJ0Nvo+f/i+vvi/f3f/v3f/v3i/f3j+/3k+/3j/fri+/nh+vjh+vjh+vjh+vjh+vjh+vjf+Pnf+Pnf+Pnf+Pne9/je9/je9/je9/jc9/fc9/fc9/fc9/fb9vbb9vbb9vbb9vbZ8fLZ8fLZ8fLZ8fLX8PHX8PHX8PHW7/DHx8nExMa9vb+9vb+mpqm5ubuxsbOzs7PBwb/Hx8eys7awsbSqqrOhoa1OTV9JTF1VV2lpa31QT2JxcIJlZHReXmthYWxqanOtrbeprLd9f457fZFTVW1GSGNITGlHSmhESmZBSmU+R2I+RWE6QV07Ql4+RWE9RF8/Rl85QFpARGFGSmQ9P1dMT2N+go53eoVvb3qCgo6Xl6OBgY2Cgo6IiJSWlqKFhZCWl52VlpyztLq/wMaMjZOhoqi9vcamqK2opqvFxMjOzdK0s7isq7C3trrAv8Sysba7ur/FxMjHxsu2tLnAv8TOzdLc29/U09fX1t3j4um/wMasrLbAwMy0tMF/f4ycoazh8Pfl+fvi+vvi/f3i/f3i/f3j+/3j/frj/fri+/nh+vjh+vjh+vjh+vjh+vjh+vjf+Pnf+Pnf+Pnf+Pne9/je9/je9/je9/jc9/fc9/fc9/fc9/fb9vbb9vbb9vbb9vbZ8fLZ8fLZ8fLZ8fLX8PHX8PHX8PHW7/CRkZHAwMCrq6vLy8u+vr7BwcG5ubm9vb3ExMG/v7/OztCtrLOvrLmfna1QTWFOTWJIRl1xb4ZcW3B6eYyAf49cXGmCgo5sbHZ9foSCgoyYmKStrL2dm7JOTGVOTGhKTWpKVGxHVGtBTmU9Rl49RF06QVs7P1w9QF0/RF0/RF0/Ql8/Ql9BRl8/RFhmbXh+hItzd392dn+Ojpd+foeQkJ13d4SenquHh5OQj5alpKuLiZOjoquTkZicm6SvrLmhn6mioaWysrTPz9LAwMLGxsixsbOjo6WxsbO9vb/IyMvHx8nCwsXExMbHx8nNzc/MzM7x8PT29PnIx8ytrLO/vsXFxM2Rj5yWmqS4wsvm9v3k9vnr///j/frj/vve/fni/vjk/vnj/fji+/fi+/fh+vbh+vbh+vbh+vjf+fff+fff+fff+ffe+Pbe+Pbe+Pbe+Pbd9/Td9/Td9/Td9/Tc9vPc9vPc9vPb9PLa8/Ha8/Ha8/Ha8/HZ8vDZ8vDZ8vDX8e94eHjMzMzS0tK2trbMzMycnJyHh4ewsLCmpqSioqK4uLqysbiwrbqin61PTF9MSF5WVGtXVWxNTGFoZnmYmKVkZHCcnKVzc31paG+FhIulpK2xr73JxtqJhp1YVG9UVHBETWVOW3JEUGg+R186QVs6QVs+QV4+QV4/RF0/RF0/Ql8/Ql9CRmM9QVhaX215foh0eIJwcHmIiJGJiZWTk5+Li5d6eoeUlJ+PjpefnqWWlZ6NjJWVlJ2Pjpe2s8C7usSamJ2ysrTBwcS4uLq/v8HHx8msrK+hoaO7u77Gxsi+vsDBwcTAwMLFxcfMzM7Hx8nj4+XCwsXS0NW3trrAv8a/vsWrqrOOjpeiqbLh6/Pl9vnp+v7l/fvh+vji//re/ffj//nj/fji+/fi+/fh+vbh+vbh+vbh+vbf+fff+fff+fff+ffe+Pbe+Pbe+Pbe+Pbd9/Td9/Td9/Td9/Tc9vPc9vPc9vPb9PLa8/Ha8/Ha8/Ha8/HZ8vDZ8vDZ8vDX8e9sbGqWlpTPz82/v724uLZ+fnuFhYK/v72hoZ6enpyjo6WxsLSpqLGrqbZIRlRPTV1YV2pYV2pTUWJcXGl0dIF3d4J7e4VmaG1vbXSWlZyvrbe+u8i9usuyr8JbV21WV3BCSWNRW3ZJU21CSWU9RF8+QV4/Ql8+QV4/RF0/RF0/RF0/RF0/Ql9CR15NU2FzeIR4eod6eod/f4yWlqN7e4eamqOFhY6Cgo56eIWYlqOdnKWXlp+Xlp+WlZ6qqbDHxs2wr7Ozs7arq62xsbOysrSrq62/v8HGxsizs7bBwcTHx8nBwcS5ubu9vb/IyMvIyMu9vb/Hx8m4t7vBwMW5uL/JyM+5uMGLi5SMkJvG0Nnt+v/o+f3l+fnl//3f+/bh//nj//nj/fji+/fi+/fh+vbh+vbh+vbh+vbf+fff+fff+fff+ffe+Pbe+Pbe+Pbe+Pbd9/Td9/Td9/Td9/Tc9vPc9vPc9vPb9PLa8/Ha8/Ha8/Ha8/HZ8vDZ8vDZ8vDX8e9hYV55eXfZ2dbLy8jIyMaFhYJ3d3ShoZ6foZy0tLKdnZ2fn6Kmpaycm6RWVGFMSVZOTltVVWJQUFxFRVBhYWxNTVZNTlRoaW9ram+enaK9u8KjoqvEwc+7ucl3c4dRUGVGSmRNVHBOVXFITGlFSGVBRWI+QV49QVs/RFs/RFs/RF0/RF0/Ql9ESGJCSFhxdoFzdoJxcX53doaXl6SFhY6LjJGPj5iUlJ9xb32MiZalpK2oprCdm6ibmqOQj5a7ur+4uLq4uLq7u77ExMa7u760tLeysrTt7fC4uLrFxcfCwsXFxce9vb+0tLe3t7m5ubuoqKrJyczEwse6ub6xsLe4t77Ix9CenqiCh5GTmqPc6e3i8vbm+vrj+vnj//ni/vjk/vnj/fji+/fi+/fh+vbh+vbh+vbh+vbf+fff+fff+fff+ffe+Pbe+Pbe+Pbe+Pbd9/Td9/Td9/Td9/Tc9vPc9vPc9vPb9PLa8/Ha8/Ha8/Ha8/HZ8vDZ8vDZ8vDX8e9WV1NvcGu9vrm9vrmPkIx2d3KAgX2UlZCChH+ys6+zs7GEhIShoaOMi4+WlZxranFkZG1UVF1UVF1PT1haW2FUVVtOT1NkZWlvbXKIh4ylpKmjoqnCwcumpLFxb31lZHRTVms/RF1PVG1PVG1ITGlCRmM7P1w+Qlw/RFg/RFg+Qlo+QlxBRWI+Qlw/RVd6f41zdoJvb3ttbH2NjZqWlp+ChImdnaaTk56PjZtycH2PjpexsLmwrbqenaaMi5GPjpOxsbPBwcTExMa6ur3GxsjGxsjJyczMzM64uLrMzM7Hx8nFxcfAwMLAwMK6ur2ysrS6ur3o6Orc29+/vsK9u8K4t77NzNXIyNKHi5V5gImps7nt+v/k9/fl/fvk/vnh/ffl//rk/vnj/fjj/fji+/fi+/fi+/fi+/ff+fff+fff+fff+ffe+Pbe+Pbe+Pbe+Pbc9vPc9vPc9vPc9vPc9vPc9vPc9vPb9PLa8/Ha8/Ha8/Ha8/HZ8vDZ8vDZ8vDX8e9UVVBiY159fnmrrKiio55iY16HiIRzdHBrbGiLjIeLi4iAgH6AgICHh4mwsLKwr7Npam1dXmJYWl1kZWlaW15cXWFUVVhlZmpvb3F3d3m5ubucm5+5uL+Mi5Swr7iGhpNjZXdMT2RQVGlQU2tPUWxJTWo/Ql8+Qlw/RFhARVo/RFs/RF0/Ql8/RF1CSFtqb32Ago97e4hkZHF4eIWcnKiGho+RkZuYmKSjoa2TkJ14d4CPjpewr7ixsLmYl56GhYyrqq+7u77ExMbJycy+vsDMzM7IyMvi4uTNzc+4uLrLy83JyczHx8nCwsXBwcTCwsW7u77AwMLEwsfIx8zHxs2opq3S0NrFxc6fo617gIuGjZTU4eXl+Pjl+fnj/fjj//nl//rk/vnj/fjj/fji+/fi+/fi+/fi+/ff+fff+fff+fff+ffe+Pbe+Pbe+Pbe+Pbc9vPc9vPc9vPc9vPc9vPc9vPc9vPb9PLa8/Ha8/Ha8/Ha8/HZ8vDZ8vDZ8vDX8e9VVk9lZl9sbWapqqOJi4RXWFGEhX5tb2hkZV5zdHBqa2ZkZGJhYV5lZWWfn5+Ojo5pamxqa21eX2JdXmFlZmmEhYdMTU9pamxycnRra2uenp6Li42Xl5pqaW1mZWyFhI19fYhmaXZVV2lQUWZQU2tPVG1ER2Q7QlxARVpBR1pARVw/RF0/Ql9ARV5CSFtTV2V5fYd5eYJtbXd3d4KFhZGBgY6FhZGamqWNjJWfnqWfnqiCgYuUk5yzsrual6SMi5Sko6i7u77FxcfV1dfPz9LGxsjU1NbIyMvf3+K7u77Nzc/Hx8nIyMvMzM7Ly83GxsjCwsXOztDHxsusq7C2tLurqrG6ucLOzte+wcx7gIuCiZCfrLHj8/Tm+vrm/vrl//rl//rk/vnj/fjj/fji+/fi+/fi+/fi+/ff+fff+fff+fff+ffe+Pbe+Pbe+Pbe+Pbc9vPc9vPc9vPc9vPc9vPc9vPc9vPb9PLa8/Ha8/Ha8/Ha8/HZ8vDZ8vDZ8vDX8e9VVlFbXFdmaGNsbWZmaGFeX1hlZl9jZF1bXFVeX1teX1taW1ZpaWZjY2GOjox0dHJjZWRkZmVdX15UVlVlaGZ7fX9iY2VrbWxzc3NpaWlsbGyRkZF9fX12dnh4eHp7en+JiI2AgYdkZHBWWGhUVWpUVm9JTmhARV5BR1pBR1pARVo/RFs/Ql9ARV4+QldCRldrbXqAgIlsbHZ4eISHh5RqaXl0dIGCgo6JiI+WlZyfnqioprB6eYKIhpOOjJqFgo+Uk5ekpKa3t7nExMbOztDOztDQ0NPX19rU1Nbb293Pz9LOztDPz9LMzM7Ly83Nzc/FxcfIyMvCwca+vcS0s7q3tr2ysbrS0NrS0t2Mj5qEiZB+iI7e7/Dq/f3q//7j/fjl//rk/vnj/fjj/fji+/fi+/fi+/fi+/ff+ffh+Pfh+Pfh+Pff9/bf9/bf9/bf9/bd9PPd9PPd9PPd9PPd9PPd9PPd9PPc8/Lb8vHb8vHb8vHb8vHa8fDa8fDa8fDZ8O9PT01bW1hpaWaFhoFrbGhlZmJjZF1jZF1OT0pUVFFVVVNRUU9wcG1wcG1YWFZkZGJqamhiYl9bW1hXV1VmZmRqampqampmZmRoaGVkZGJhYV5eXlxpaWZ/f394eHhxcXF0dHJtbW1vbXJfX2lQT19MTWJHSWJBRFxBRVZMT2FOUWY/QVpBRFw/QVo/QldCRlphY3KGhpF9fYhra3iJiZaIiJVkZHF/f4uOjpeHh5CPj5iYmKKqqraLi5eYmKWNjZiNjJCenqGwsLLAwMLLy83AwMLPz9LU1NbIyMvb293FxcfS0tTGxsjHx8nGxsjNzc/GxsbLy83JyM++vcStrLGlpKmzsrvGxNDS0Nq3tr+Hi5ORmp3q9/np+/np/vrk/ffm//nl/vjk/ffk/ffj+/bj+/bj+/bj+vfh+PTj+PTj+PTj+PTi9/Pi9/Pi9/Pi9/Ph9vLh9vLh9vLh9vLf9PHf9PHf9PHe8/De8/Dd8u/d8u/d8u/d8u/c8e3c8e3c8e1TU1NOTk5ra2lzc3Fxcm1dXlpiY1xpamVRUU9MTElaWldNTUpiYl+OjoxeXlxaWldpaWZiYl9cXFpbW1hiYl9oaGVhYV5kZGJlZWNWVlRkZGJhYV5fX11lZWNlZWNtbWtzcm9qaWVpaWmFhIhfX2tUU2NUVmhRVWZMUFxVWmVVWGpFSFxBRVo/QVo/QldCRFhJSFhsbHmGhpN9fYmCgo6pqbSkpLCEhI9fX2twcHl/f4iUlJ+VlaKUlKGhoa2qqrOQj5SenqG0tLe3t7nLy83JyczFxcfOztDHx8nb293Nzc/T09XExMbJyczT09Xd3d/a2trGxsjGxczEwsnLyc6dnKGvrbe/vcnLx9LW1d6cnaOPlZrf7ezr/vvp/vnm//nm//nl/vjk/ffk/ffj+/bj+/bj+/bj+/bj+PTj+PTj+PTj+PTi9/Pi9/Pi9/Pi9/Ph9vLh9vLh9vLh9vLf9PHf9PHf9PHe8/De8/Dd8u/d8u/d8u/d8u/c8e3c8e3c8e1KSkpNTU1dXVtoaGVmaGNiY15fYVpmaGNUVFFPT01fX11UVFFVVVOCgoB+fntTU1BiY15dXlpbXFdcXVhiY15lZmJeX1tlZmJpaWZQUE5dXVtlZWNoaGVtbWtqamhkZGJwcG1iYl9fX1+NjpB7fYJeXmhaWmVYXGRVW19cYmlaXmpGSVtARFdARFhCRltISV5UU2VpaXZ6eod3d4KNjZajpKqys7nFxsyJiZViYm9aWmaBgY6Tk56OjpeTk5y2tr+2tLmcnJ64uLq4uLrCwsXS0tTCwsXQ0NPU1NbU1NbT09XQ0NPHx8nGxsjIyMulpai3t7e7u77EwsfJyM2/vsLHxsubmqOysbrNydS+vcbAwceOlJjc6unl+Pbp/vnk/ffm//nl/vjk/ffk/ffj+/bj+/bj+/bj+/bj+PTj+PTj+PTj+PTi9/Pi9/Pi9/Pi9/Ph9vLh9vLh9vLh9vLf9PHf9PHf9PHe8/De8/De8/Dd8u/d8u/d8u/d8u/c8e3c8e1BQUFMTExVVVNjY2FiY15aW1ZeX1hhYl1XV1VYWFZVVVNOTkxYWFZlZWOTk5BMTElbXFdXWFRXWFRaW1ZfYVxcXVhcXVhfYVxeXlxaWlddXVtlZWNlZWNtbWtqamhaWldmZmRbXVxeYV92eHeIiYxrbG9dXmJaW11YXVxdYmNYXGRERlNAQlRERVpMTWJUVmhMSlthYW1+fomAgImFhoyhoqW2t7nGx8vGxtKFhZFYV2hiYm+Li5SEhYuXl6GkpauenaKlpaioqKrAwMK2tri7u77Ly83MzM7AwMLMzM7GxsjGxsjOztDJycyOjpB5eXuLi4uoqKrCwsXAv8S/vsLV1NurqrGTkZu5tsDPztfW192Vm5/N29ro+vjq//ro//rm//nl/vjk/ffk/ffj+/bj+/bj+/bj+/bj+PTj+PTj+PTj+PTi9/Pi9/Pi9/Pi9/Ph9vLh9vLh9vLh9vLf9PHf9PHf9PHe8/De8/De8/Dd8u/d8u/d8u/d8u/c8e3c8e1ISEhOTk5WVlRmZmRdXlpOT0pRU0xfYVxXV1VcXFpQUE5QUE5eXlxjY2F9fXpWVlRYWlVfYVpXWFFfYVphYltcXVZaW1RfYVxiYl9dXVtaWldeXlxlZWNlZWNkZGJVVVNYW1pYW1peYV9jZWRkZGRpaWloaGVUVlNUVlFbXVpeX2NRUVtJSVZFRFRNTFxeXW1dXWphYWxpaXKBgoh9foGJi42vsbC+v8HJydPOztuHhpZRUV5xcXqYmp+YmKKPkJZ+fYHFxcesrK+/v8HLy83AwMLCwsW+vsDNzc/Gxsi4uLq9vb/OztDNzc/T09XOztDMzM6vr7G+vsDJyM24t769u8LQz9aTkZi5tsDNzNXc3ePN09fV4+Lp+/nm+/fj+/bm//nl/vjk/ffk/ffj+/bj+/bj+/bj+/bk+fbk+fbk+fbk+fbj+PTj+PTj+PTj+PTi9/Pi9/Pi9/Pi9/Pf9PHf9PHf9PHe8/Df9PHf9PHe8/De8/Dd8u/d8u/d8u/d8u9PT09HR0dRUU9dXVtWV1NNTklVVk9hYl1dXVtfX11fX11bW1hWVlRhYV5hYV5dXVtUVVBoaWJVVk9iY1xiY1xdXldXWFFeX1tbW1hdXVtWVlRdXVtlZWNkZGJkZGJWWFdTV1hYXV5bXF5iZGNiYmJjY2FsbGpXWFRaW1ZiZF9hYmRUVVtKSlRGRlFKSlZXV2NhYWppanBcXWN/gIR6e359f36lqKaxsrTBwcvQ0N3Nzdpzc4BeXmqbm6Sbm6SioquamJ2/v8Gzs7bFxcezs7bIyMvCwsXLy83T09XS0tSqqqyfn6K5ubvLy83T09XU1Nbj4+Xp6eu3t7nEwsfLydCysbrCwcivrbSvq7bBwMnOz9XZ3uPb6ejo+vjm+/fk/ffm//nl/vjk/ffk/ffj+/bj+/bj+/bj+/bk+fbk+fbk+fbk+fbj+PTj+PTj+PTj+PTi9/Pi9/Pi9/Pi9/Pf9PHf9PHf9PHe8/Df9PHf9PHe8/De8/Dd8u/d8u/d8u/d8u9aWlpQUFBRUU9PT01QUU1OT0pXWFFeX1tbW1heXlxfX11cXFpWVlRjY2FeXlxaWldfYVxkZV5YWlNkZV5hYltfYVpiY1xUVVBaWlddXVtcXFpfX11jY2FfX11hYV5WWFdVWltQVVdOU1VjZGZpaWtdXV1jYWJbWldWV1NjY2FkZGRcW19XVl1UU1pTUVZUU1ddXmJ2d3ljZGZxcnR0d3Z3eXibnZyYmpypqrDJydPX1+G+vslbW2h4eIWIiJWUlJ2JiI29vb/d3d+ioqSwsLK+vsDMzM7CwsXLy83S0tSmpqmWlpi9vb/GxsjV1dfa2tzm5unm5unb29u/v8HNzNW/vsfNzNPIx86jn6q3tr/Awcfd4+jh7+3o+vjo/fjl/vjm//nl/vjk/ffk/ffj+/bj+/bj+/bj+/bk+fbk+fbk+fbk+fbj+PTj+PTj+PTj+PTi9/Pi9/Pi9/Pi9/Pf9PHf9PHf9PHe8/Df9PHf9PHe8/De8/Dd8u/d8u/d8u/d8u9YWFhhYV5YWFZUVFFPUExPUExXWFFaW1ZbXFdlZWNfX11iYl9bW1hfX11YWFZVVlFiY1xkZV5TVE1YWlNkZV5jZF1dXldVVk9XWFRTU1BdXVtYWFZdXVtYWFZbW1hUVlNOU1RHTE1FSUpfYWNhYWNdXV1iX2FfXlxWVlRjY2FeXl5WVlhUVFZXV1paWlxXV1daXFtmaWhfYmFfYmFmaWhxc3KNj46BgoWLjJHFxszW193S09mlpbF2doFlZXGHh5OHho2PjpPi4eWbmp60tLfFxcfNzc/IyMvIyMvS0tTNzc/m5unS0tTNzc/MzM7f3+Ll5ejx8fPk5OTHx8nGxczQz9bIx87Ewse9ucGtrLPFxsnO1Nbf6+vp9/Tq+/jq/fnp/vnl/vjk/ffk/ffj+/bj+/bj+/bl+vbk+fbk+fbk+fbk+fbj+PTj+PTj+PTj+PTi9/Pi9/Pi9/Pi9/Pf9PHf8/Pf8/Pe8vLf9PHf9PHe8/De8/Dd8u/d8fHd8fHd8fFVVVNcXVhfYVxVVlFRU05JSkZPUExcXVhaW1ZdXlpeX1tdXlpdXlpXWFRaW1ZYWlVhYltkZV5bXFVNTkdeX1hXWFFaW1RaW1RWV1NXWFRfYVxYWlVhYl1RU05YWlVcXFpOUE1WWFdHSUhYWFhlZWVeXlxhYV5jY2FVVVNlZWNkZGJaWlpTU1NfX19bW1tPT09bW1toaGhYWFZkZGJqamh5eXeHh4eAgIKMi4+/vsXS0tTIyMu2tLmjoqZ+fYReXWZ2c4CIhpOfnqiTkZienaLe3uHS0tTMzMzHx8nFxcff3+LJyczW1tnQ0NPS0tTZ2dve3t7q6urq6urV1dXFxcfIyMvX19rAwMLAwMK3t7m9vsDJzs/L0tLZ393s9vLs+PTq/fnp/vno/fbl+vPp/vfl+vPk+fLk+fTj9vbk9/fk9/Tl+Pbj9vLl+PTl+PTi9PHi9PHi9PHi9PLh8/Hh8/Ph8vbh8vbh8vbh8/Hh8/Dh8/Hh8/Hf8vLf8fTf8fTf8fRPUExVVlFdXlpaW1ZISUVFRkFNTklYWlVUVVBdXlpeX1tXWFReX1tYWlVUVVBdXlpcXVZdXldYWlNFRj9XWFFVVk9aW1RaW1RYWlVdXlpbXFdaW1ZeX1tTVE9RU05dXlpTU1BcXFpQUE5WVlRaWldRUU9XV1VcXFpQUE5YWFZpaWZeXlxMTElVVVNXV1VTU1BeXl5jY2FfYVxjZF9yc293eHN0dHJxcXN7en+XlpukpKaCgoKfn5+5ubuYl5yBgIlkYnB9eoiHhZGNjJWWlZypqKzCwsXAwMDHx8nQ0NPW1tm6ur3Pz9Lb293IyMvJyczd3d3X19ff39/W1tbExMTNzc3MzMzFxcXBwcHHx8ewsrHFx8bFycjCx8bs8fDv+PTs/vrq//rp/vfp/vfl+vbo/fjl+vPi9/Lm+ffl+Pjj9vPi9PLm+fbj9vLi9u/l+PTi9PHi9PLh8/Hf8vLh8/Ph8vbh8vjh8vbh8/Hh8/Hh8/Hh8/Pf8vLf8fTf8fff8fdJSkZRU05eX1teX1tKTEdCRD9HSERUVVBTVE9cXVhdXlpWV1NeX1tYWlVUVVBdXlpaW1RbXFVdXldHSEFWV1BWV1BbXFVYWlNYWlNeX1haW1RYWlNcXVZOT0hPUEleX1tdXlpaW1ZRU05TVE9eX1tRU05TVE9YWlVRU05XWFRqa2ZYWlVNTklRU05aW1ZbW1hfX11lZWNfYVxkZV5maGFkZWFwcG1sbGxpaGx+fYF/f39ycnCAgH6lpaWJiI2joqllY3BiX2xsane0s720s7qdnKGxsbOWlpi0tLfV1dfb293c3N7Nzc/W1tnIyMvQ0NPT09PQ0NDc3NzT09PNzc3U1NTGxsbIyMjGxsa+vr6LjYy5u7rO09LBxsXX3Nv0/vrs/vjo+/Tl+PTl+PTp+/nl+Pbk9/Tm+ffi9PLj9vPl+PTm+fbj9vLl+PTl+PTi9PHk9/Tj9vPi9PTi9PTh8/Ph8vbh8vbh8vbh8/Hh8/Hh8/Ph8/Pf8vLf8fTf8fTf8fRISUVUVVBiY15eX1tNTkk+PzpFRkFbXFdYWlVcXVhdXlpcXVhdXlpXWFRaW1ZYWlVeX1heX1hiY1xTVE1bXFVbXFVdXldWV1BaW1RdXldaW1RVVk9bXFVISUJRU0xfYVpVVlFXWFRXWFRRU05cXVhPUExTVE9dXlpQUU1cXVhpamVYWlVWV1NVVlFiY15eX1tjY2FhYl1maGFjZF1iY1xkZV5lZmJfX19hYWNxcXNtbW1oaGVxcW9/f397e37CwcZ7eoRcW2RbWmNkY2pqaW2Ih4yoqKqVlZerq63Ly83Hx8nf3+LU1NbV1dfV1dfT09XZ2dnZ2dnf39/h4eHU1NTNzc3V1dXMzMy5ubnJycycnZ+ys7azuLnQ1dbM0NLp8PDt+/nr+/rs/fvp+frp+f3p+P/o9//l9Pvl9/rk9/fk9/fj9vPk9/Ti9PLi9PHk9/Tk9/Tj9vbj9vbi9PTh8/Ph8/Ph8/Ph8/Ph8/Ph8/Ph8/Ph8/Pf8vLf8vLf8vLf8fRJSkZJSkZaW1ZcXVhMTUg5OjZCRD9dXlpWV1NVVlFYWlVcXVhbXFdaW1ZeX1tXWFRhYltcXVZdXldYWlNOT0hUVU5YWlNYWlNaW1FdXlViY1pcXVRcXVRUVUxXWE9aW1RTVE1YWlNdXldMTUZaW1RbXFVfYVpiY1xPUEldXldkZV5iY1xeX1hXWFFhYltdXlpbXFdeX1toaWJkZVxhYlhfYVpdXlpiYl9WVlhqamxqamhfYVxqa2ZjY2FoaGqmparMy8+OjZSVlJt6eX5/foKqqqylpahiYmStrbC+vsCkpKa+vsDAwMLNzc/T09XS0tTc3Nzl5eXf39/i4uLc3NzU1NTIyMjBwcHGxsjFxMidnqKwsbStsrTCx8nb3+Li6Orq9Pjp9vrV4um3wsyXo7GXorSao7mhq763xdOwwMu6zNPN3uTi8/fh8/Pd8O3k9/Td8PDh8/Ph8/Pf8vLh8/Ph8/Ph8/Ph8/Ph8/Ph8/Ph8/Ph8/Ph8/Ph8/Ph8/Ph8/NMTUhMTUhcXVheX1tRU04/QDtFRkFbXFdPUExRU05aW1ZWV1NaW1ZaW1ZaW1ZVVlFcXVZbXFVdXldcXVZKTEVQUUpVVk9VVk9XWE9cXVRhYlhaW1FRU0lUVUxYWlBbXFNPUElXWFFiY1xVVk9UVU5XWFFbXFVbXFVOT0hkZV5hYltbXFVcXVZVVk9dXldYWlNcXVhjZF1aW1FdXlVjZFtdXlVaW1RfX11aWlpmZmZiYl9aW1ZfYVxiYl9fX1+Li42enqG2tLmysbaJiI1+foCcnJ64uLpra22CgoWPj5GcnJ6oqKq0tLeysrS9vb/Nzc/Q0NDa2trf39/p6enm5ubb29vMzMy4uLrOzdK/vsKhoqWpqq2rsLK0ubvO09Xh5uvP1t3HztettL+fpbasscadoruEh6SEi6aEkKWAkJ+Lm6iXqLKoucDG193c7fHe8PPk9vni8/ff8fTe8fHh8/Ph8/Ph8/Hh8/Hh8vbh8vbh8vbh8/Ph8/Ph8/Ph8/Hh8/FWV1NRU05bXFdaW1ZbXFdHSERISUVYWlVOT0pTVE9aW1ZYWlVaW1ZWV1NYWlVPUExXWFFYWlNXWFFYWlNHSEFNTkdQUUpRU0xTVEpbXFNfYVdVVk1NTkVRU0lVVk1aW1FcXVZRU0xYWlNYWlNWV1BaW1RYWlNVVk9PUElkZV5eX1hXWFFcXVZUVU5bXFVVVk9aW1ZaW1RdXlVfYlVeYVRiY1pVVk9hYV5cXFxiYmJcXFpYWlViY15paWZeXl5paWlra2t/f4G0tLehoaOHh4mcnJ6lpahqamyHh4nExMaUlJaGhoiVlZe5ubu5ubuBgYSRkZHS0tLw8PDU1NTZ2dnl5eXZ2dnGxsjCwcbOzdSam6GsrbOws7mlqa+7v8Xe4ujr8fPW3OHHzNa4vcvf4/ixs86Njq2Ei6h+i6J6iZt9jJ1/jp+Onq2Qoa2isr++ztnZ6vHj9Prh8vbd8PDh8/Ph8/Hh8/Hh8/Hh8vbh8vjh8vbh8/Ph8/Ph8/Hh8/Hh8/BXWFRUVVBdXlpcXVhhYl1NTklKTEdXWFRJSkZQUU1OT0pbXFdbXFdQUU1aW1ZJSkZVVk9WV1BPUElQUU1ERUBJSkZOT0pOT0pQUUpaW1FeX1ZTVEpPUEdPUEdOT0ZYWlBbXFVOT0hVVk9WV1BJSkRTVE1XWFFVVk9QUUpcXVZfYVpaW1ReX1hVVk9bXFVUVVBcXVhaW1ZfYVdjZFtXWE9cXVRhYl1eXlxdXVthYV5cXVheX1tkZWFsbWllZWNiYmJUVFFkZGKXl5eioqJ9fX2rq6ubm5tTU1V5eXu7u76FhYdwcHKAgIK+vsCYmJuGhoZwcHC2trbk5OTt7e3m5ubi4uLd3d3Pz8/EwsfEwsfBwsaOj5OxsraXmJyoqazS1tno7O/T19q7v8e9wc24u8+cnreAgp+BhaJ9hp57iJ17iJ15hpt4hZp9iZ6IlaqVo7Shr73L3OPh8vjh8vbh8/Ph8/Hh8/Dh8/Dh8/Ph8vbh8vbh8/Ph8/Ph8/Hh8/Hh8/FTVE9WV1NXWFRVVlFVVlFWV1NQUU1YWlVHSERKTEdPUExhYl1MTUhbXFdQUU1JSkZRU05NTklTVE9UVFFJSUdOTkxMTExNTUpTVE9TVE1VVk9VVk9RU0xXWFFTVE1WV1BWV1BQUUpPUElTVE1HSEFRU0xQUUpTVE1VVk1VVk1cXVZeX1hYWlVVVlFVVlFNTUpUVFFaW1ZdXldfYVphYltbXFVYWlVeXlxbW1hcXFpkZWFkZV5hYltsbWlmZmRfX11VVlFaW1Rqa2Z9fnlvb2yCgoBpaWZYWFhsbGyhoaGBgYGMjIyVlZWenp5+fn5oaGhkZGKTk5C4uLbOzszl5ePV1dPW1tSvr6zHx8e6ur3Q0NOxsbOpqaufn6KdnZ+lpqnNztLm6O2vr7ipq7ibna+Oj6WGh5+EhqGIjaSUmK2fpLukqcCTl6+Jjqh/hJ10e5WFj6KkssLV5fDh8vje8vLf9PDf9O3j+PHi9PHj8/Lj8/Lj8/Ti8vPi8vbi8vbi8vZKTEdQUU1WV1NWV1NbXFdYWlVOT0pTVE9HSERJSkZVVlFfYVxMTUhXWFROT0pFRkFRU05MTUhOTkxVVVNMTExMTExHR0lKSkpPUExQUUpUVU5UVU5TVE1NTkdaW1RbXFVWV1BQUUpPUElTVE1OT0hMTUZTVE1PUElVVk1VVk1YWlNdXldWV1NUVVBPT01ISEZQUE5YWFZdXlphYltjZF1eX1tYWFZdXVteXlxfX11eX1teX1hVVk9eX1tYWFZUVVBRU0xWV05jZF1tb2hiY154eXRmZmRcXFpfX19/f39xcXGHh4eGhoZ2dnZtbW1cXFxeXlxxcm2mqKOJi4bX2dSrrKjExcCNjYvMzMy3t7fOzs7Q0NDb29u9vb26urqqqqzd3OPS0Nq+vsmsq7uUlqiHiJ2IiaKJi6OFh5+GiKGQk6ubnbaipL2WmLGOkKmEiJ95gpiHlaajsb/V5u3e8PPb8Ozh9u/f9O3i9PHj8/Lj8/Lj8/Ti8vPi8vbi8fji8fhGR0JOT0pUVVBWV1NWV1NUVVBKTEdPUExQUU1MTUhaW1ZUVVBKTEdWV1NWV1NOT0pPUExNTklNTUpTU1BQUFBHR0dAQEJHR0dJSkZRU0xNTkdVVk9OT0hXWFFdXldeX1hWV1BQUUpPUElTVE1VVk9ISUJPUElOT0hVVk1VVk1WV05bXFVRU0xVVlFRU05QUU1PT01WVlRXWFRaW1RlZl9kZWFaWldeXlxbW1hhYV5YWlVeX1hbXFVdXlpQUE5KTEdVVk9cXVRhYltiY1xUVVBlZmJbW1hRUU9cXFpfX11lZWVxcXF4eHhpaWlxcXNWVlZcXFpmZmRsbGp5eXe2trN7e3mXl5VycnC0tLSzs7PGxsbBwcHIyMisrKy9vb27u77i4ejHxdLNzNyWlaiRk6l/gJh7e5eEhKKAgp93eZZ+gJuPkaqjpruytsmfo7SQlqmAiJx7hpiCkKGsu8ba6/Hm+fnj+PTh9vHi9PLj8/Lj8/Tj8/Ti8vPi8vbi8vbi8vZAQD5GRkRKSkhKSkhWVlRQUE5CQkBERUBRU05KTEdbXFdUVVBKTEdUVVBVVlFJSkZJSkZQUU1OTkxPT01TU1NFRUU6Oj1FRUVISUVISUVRU05RU05OT0pRU05UVVBaW1ZWV1NQUU1PUExTVE9YWlVJSkZKTEdOT0hKTEJUVUxYWlBdXldOT0hTVE9NTklKTEdQUE5QUE5PUExQUUpdXldiY15YWFZWVlRcXFpjY2FQUU1WV1BXWFFXWFRKSkhHSERWV1BdXlVeX1hYWlNQUU1jZF9iYl9dXVtUVFFcXFpfX19oaGhbW1tUVFZeXmFMTE5OTk5iYl9kZGJpaWaCgoBlZWNtbWtdXVufn5+zs7O6urq+vr6FhYV7e3uenp7CwsXZ19zGxc7GxtKwr7/W1+y/wNmVlbGGhqR3eJd4eZh9f5yAgpuLjqOUl6mdorCan62Nlal0f5F3gZOMm6XP3ubc7fPf8fTk9/fj8/Tj8/Tj8/Tj8/Ti8vPi8vPi8vPi8vY+Pj5BQUFNTU1GRkZISEhKSkpBQUFAQD5QUU1QUU1YWlVNTklAQT1ISUVOT0pFRkFHSERGR0JGRkRHR0VOTk5BQUE5OTs+Pj5EREFAQD5MTElNTUpMTElKSkhOTkxPT01VVVNNTUpJSUdQUE5dXVtTU1BKSkhNTklTVEpXWE9eX1heX1hQUU1FRkFISEZJSUdMTElQUE5WV1NTVE1eX1hdXlpTU1BUVFFVVVNdXVtVVlFVVk9aW1RVVlFISEZNTklXWFFfYVdhYltdXldVVlFcXVhaWldQUE5VVlFYWFZRUU9bW1tVVVVNTU9PTlNHR0lQUFBaWlpaWlpcXFxUVFRbW1tcXFxpaWmLi4vCwsKWlpawsLBzc3OAgICIiIienp69vbrJycfAwcWVlZ7Fx9bQ0uaYmrKHh6V7fZx4eZh4epV9f5eChpqYnK2anqqorbuiqr2Lk6ZyfY5zf42Onai3xtDc7fTb7PLj8/fk9Pbj8/Tk9Pbj8/Ti8vPi8vPi8vM2NjY7OztHR0c+Pj5ERERBQUE+Pj5BQUFNTUpKTEdQUU1OT0pCRD9ISUVMTUhERUBERUBFRkFFRUJEREFTU1NGRkY4ODo6Oj07OztAQD4/Pz1JSUdHR0VMTElHR0VGRkRPT01MTElGRkRRUU9YWFZTU1BOTkxISUVMTUZTVEpcXVZeX1hXWFRHSERGRkREREFHR0VKSkhRU05NTkdbXFVdXlpTU1BPT01WVlRYWFZVVlFQUUpWV1BMTUhJSUdTVE9eX1hmaF5maGFiY1xWV1NRU05TU1BYWFZOT0pUVVBXV1VQUFBRUVRHR0lIR0xBQEVOTlBbW1tVVVVfX19XV1dTU1NdXV1aWlpiYmKcnJx+fn5qampsbGxvb2+CgoKLi4uxsq3HyMSqrKt4eX+mqrR9f46Bgpd4eZFydI95e5Z7fpZ3eo+BhZiNkKKanqyjqLaiqLqQmKxyeo1sd4hyfY6MmqqywM7j8/7i8fjj8/fk9Pji8vPj8/Tj8/Ti8vHi8vE+PkA6Oj1GRkhGRkhKSk1ISEpCQkU5OTlNTUpJSkZHSERERUBCRD9GR0JMTUhHSERCRD9GR0JGRkRCQkBUVFRKSko4ODo5OTs4ODg3Nzc+Pj5CQkJMTExFRUVHR0dHR0dKSkpGRkZHR0dRUVFRUVFVVVVPT09EREFNTkdQUUhWV1BWV1BXWFRJSkZMTElMTElOTkxMTElNTklISUJeX1hmaGNcXFpUVFFXV1VbW1haW1ZVVk9XWFFPUExISEZUVVBiY1xpamFoaWJhYltYWlVGR0JKSkhYWFZPUExYWlVVVVNOTk5TU1VQUFNRUFVEQkdKSk1VVVdQUFNeXmFKSk1ISEpQUFNiYmReXmFjY2VYWFtWVlhbW11kZGZ+foCCgoWvr6+WlpajpKZtb3SNkJh6fohvcX5xc4Jwc4d7f5R7f5Rydot0eI2Eh5yChpuOkaaXnLGNkaZpcYVmb4JzfpCIk6WXpbfE0uLc6/Pi8fji8vbi8vPj8/Tj8/Lj8/Li8/A/Pz8+Pj5JSUlHR0k/P0E7Oz5BQURBQUFFRUJISUVFRkE/QDs/QDtCRD9MTUhNTklERUBJSkZJSUdEREFRUVFOTk46Ojo7Ozs3Nzc2NjY9PT1BQUFKSkpOTk5NTU1OTk5HR0c+Pj5KSkpQUFBNTU1WVlZMTExGRkRHSERNTkdVVk9WV1BdXlpPUExRUU9RUU9KSkhFRUJISUVGR0JVVlFiY15WVlRKSkhPT01aW1ZWV1NYWlVRU05YWlVMTEldXVteX1hkZVxjZF1cXVZhYl1OT0pOTkxTU1BcXVhYWlVYWFZKSkhRUVFQUFNVVFhMSk9GRUlJSE1OTVFaWlxQUFNNTU9PT1FbW11bW11dXV9fX2JXV1pUVFZpaWuOjpBvb3GCgoV5eXuIiY1maGt6foRrb3RmanJpbHdvcX52eIdydIRmaXp3eI2EhZt+f5WEhp6Ii6OFiaF2eo+JkaRxeY1weY+IkaqYpbrF1N7b6vHf8PPf8PHi8vPj8/Lj8/Lj8/I0ODA3OTRCRUFMTk0+P0EyMzY2ODdGSEVAQD5GRkRGRkQ+PjtHR0VBQT9GRkRISEZEREFMTElKSkhKSkhWVlRdXVtUVFFGRkQ0NDI5OTc7OzlAQD5EREFMTElKSkhCQkBCRUFFR0ZJTEpFRkhGR0lOUE9AQkFHSUZEREFJSUdVVlFbXFdPUExMTUg5OTc/Pz9HR0VCQkBGRkRFRUJdXVtbW1hRUU9OTkxMTUhTVE9OT0pXV1VTU1BNTU1JSUlVVVNlZl9kZVxhYltlZl9jZF9UVVBNTUpOTkxXV1VcXFpbW1hUVVBNTUpOTkxVVVVTU1VERUpFRkxGR01WV1tNTlFJSk5JSk1VVlhbW1tRUVFVVVVWVlZPT09dXV1lZWVlZWVlZmleX2JpamxhYmRjZGhvcHNoaWxlZmpkZWtxcXpzc39qandycYGLiZyYl6yHiJ6EhJ9vcYxjZnp3fY17gZRze5F0e5h+h6KQm6zM2d/f7O/i8O/k9Pbh8fLj9vbh8/NBRTpBRT1FR0JERkU5Oj0wMTM2ODdJTEhFRUJMTElHR0U4ODY2NjNAQD5HR0VFRUI/Pz1NTUpQUE5RUU9hYV5iYl9YWFZUVFE/Pz1AQD47OzlEREFGRkRMTElKSkhBQT9KTUlFR0ZHSEpGR0lERUdJSk1KTUxGSEVGRkZHR0dWVlRYWlVRU05UVFE/Pz87OztGRkRAQD5GRkROTkxpaWZfX11TU1BTU1BNTklPUExPT01KSkhRUVFGRkZEREZCQkJWV1BhYlthYltUVVBcXVhWVlRNTUpNTUpTU1NXV1dQUE5YWlVJSkZOTkxOTk5PT1FGR01ERE1HSE5UVVtOT1NFRklFRkhWV1pTU1NNTU1UVFRYWFhRUVFWVlZbW1tXV1deX2JVVlheX2JdXmFdXmFiY2ViY2VdXmFiY2ZkZWl7fYJmZnB2doKNjJyrqr2MiaGJiaVpaoJhZHZzeIajprp7gJd0eJZ0e5eAiJuQnaTb6Ork8vHj8/Tk9Pbb7e3k9/dCRjs9QDg+QDs+QD83ODotLzEyNDNCRUFNTUpPT01GRkQyMjAyMjA/Pz1FRUJHR0VAQD5JSUdKSkhMTElVVVNiYl9jY2FhYV5PT01FRUI5OTdCQkBEREFMTElKSkhCQkBERkI+QD8/QEI/QEI6Oz5AQUROUE9JTEhMTExOTk5aWldcXVhVVlFPT01QUFBAQEBMTElNTUpJSUdKSkhiYl9fX11UVFFMTElVVlFNTklPT01OTkxOTk49PT06Oj0/Pz9QUU1YWlNbXFdHSERcXFpMTElGRkZJSUlRUVFXV1dMTElYWlVKTEdPT01PT09KSk1HSExAQUdFRkxOT1NPUFRGR0lGR0lXWlhNTU1ISEhOTk5UVFRWVlZVVVVTU1NXV1dUVVdVVlhcXV9WV1piY2VdXmFdXmFiY2ViY2ZkZWliY2leXmhoaHNsbHl6eYmLiZ6IiaJxcohpa3qanKmssMGWmq9xc5Byd5Bye4t2gIjF0tTi8O/h8fTj8/fl9vff8PFUV01OUUk/QT1AQkFAQUQzNDcyNDM/QT5OTkxJSUc/Pz03NzQ+Pjs7Ozk9PTpKSkhHR0VISEZISEZRUU9KSkhRUU9TU1BYWFZdXVtISEY3NzRBQT8/Pz1JSUdNTUpHR0U6PTk7Pj1AQUQ9PkA7PT87PT9FR0ZERkJHR0dPT09PT01YWlVXWFRKSkhKSko/Pz9MTElISEZBQT9HR0VaWldUVFFKSkhKSkhISUVISUVISEZHR0VAQEA7Ozs4ODpBQUFcXVhYWlVYWlVVVVNMTEk/Pz9JSUlHR0dKSkpRUVFRUU9fYVxRU05RUU9TU1NGRkhAQUU7PUJCREdHSExQUVRNTlBNT05YW1pKSkpFRUVJSUlOTk5JSUlUVFRUVFRWVlZPUFNOT1FUVVdWV1pYWlxfYWNYWlxbXF5eX2NlZmpmaG1RU1hlZW9kZHB4eIWGhZWRk6h6fY5fYm9tcXuNj56XmK1+f5d0eI1xd4V3gYmfqq3c6evk8fji8fjj8/fh8fJbXlRPU0o4OjY4OjlAQUQxMjQzNjQ+QD1MTElKSkhBQT86OjhISEY7Ozk/Pz1RUU9CQkA/Pz1RUU9TU1BOTkxPT01PT01OTkxaWldFRUI6OjhFRUJFRUJGRkRMTElQUE45OzgwMjE5Oj00NjgwMTM4OTs+QD9AQj9GRkZRUVFTU1BOT0pYWlVTU1A+Pj5CQkJPT01MTElHR0VGRkRPT01ISEZCQkBCQkBFRkE/QDtBQT9EREFEREQ/Pz86Oj1FRUVQUE5QUU1bW1hBQT8+Pj46OjpGRkhQUFNGRkZNTU1OTkxYWlVTVE9NTUpTU1NJSUw/QEQ6Oz9HSExTVFZJSk1NT05OUE9VV1RPT09OTk5GRkZNTU1ISEhRUVFPT09RUVFMTU9OT1FPUFNNTlBYWlxdXmFWV1pQUVRWV1pWV1teX2NdXmJbXGJfYWZmZnBtbXl6fYlhY3BbXmZlaXFtcH2JiJh7eo9vcYJscXtpcHeHj5PFz9Xh6/Pe6/Lf7PHp9vpUV01MT0dERkE7Pj1AQUQ2NzkxMzJAQj9MTElRUU9HR0U3NzRNTUpFRUJBQT9OTkxFRUJBQT9QUE5MTElXV1VMTElGRkRJSUdWVlRBQT80NDI/Pz1CQkBJSUdKSkhUVFE+QD03OTg4OTsvMDIxMjQ+P0E/QUBHSUZHR0dFRUVISEZRU05bXFdeXlxMTExMTExMTElJSUdKSkhFRUJJSUdJSUdBQT9HR0VAQT1ERUBISEZAQD5CQkJISEhFRUdCQkJKSkhNTUpaWldCQkJAQEBOTlBHR0lNTU9ERERBQUE+PjtOT0pYWlVNTUpQUFBJSUlCREZCREdOT1FaW11MTk1MTk1KTUlRVFBWVlZRUVFFRUVMTExISEhOTk5TU1NWVlZQUVRPUFNQUVRGR0lUVVdbXF5VVlhUVVdRU1VUVVdcXV9eX2NPUFRWV1tjZGhrbHJkaHBTVl5XXF5lZmpzc32AgI12dIVvb3tlaXFla3B2foG2vcTc4+y4wczi7PLi7/NNUEZNUEhOUEw9Pz49PkA3ODo4OjlMTkpHR0VOTkxISEY+PjtQUE5OTkw+PjtKSkhCQkBAQD5NTUpGRkRVVVNUVFFOTkxISEZXV1VAQD4zMzE7OzlEREFRUU9JSUdVVVNGSEU7Pj04OTszNDc4OTtAQUQ6PTs+QD1ISEg+Pj5ISEZdXlphYl1cXFpaWlpMTExMTElNTUpISEZAQD5EREFFRUI3NzRJSUdAQT07PThGRkRCQkBERERKSkpOTlBHR0dHR0VMTElbW1tFRUVOTlBRUVRAP0RCQkU7Ozs+Pj4/Pz1RU05eX1tMTElKSkpJSUlHSEpISUxNTlBVV1ZOUE9ISkdFR0RNT0xTU1NWVlZMTExPT09NTU1KSkpXV1dXV1dWV1pNTlBJSk1JSk1QUVRQUVRaW11XWFtMTU9OT1FbXF5fYWNVVlhVVlheX2JiY2VYXV9UWFtkZWhkZWhkY2p2dH53dIFqaXJiZmliaGpqcHSjqbC/xtCNlJ7M1tzZ4+ZJTUJTVk5QU049Pz49PkAxMjQ5OzpISkdNTUpGRkQ/Pz1AQD5BQT9VVVM+PjtUVFFGRkRHR0VVVVNNTUpMTElPT01PT01MTElcXFpFRUI2NjM+PjtGRkRbW1hGRkROTkxCRUE4OjkyMzY0NjgyMzY5OzpISkdJTEhERERGRkRJSkZKTEdbXFdQUU1KSkg/Pz1HR0VUVFFKSkg4ODY+PjtNTUo7OzlISEZGR0I/QDtOTkxJSUdGRkZTU1NVVVU/Pz9HR0dNTU1eXl5KSk1JSUxFREhEQkc7Oj84ODo+Pj49PTpISUVeX1tHR0VGRkZISEpCREZGR0lHSEpTVVRPUVBHSUZAQj9JTEhHR0VYWFhXV1dWVlZTU1NISEhYWFhVVVVRVFNRU1VHSEpNTlBNTlBOT1FYWlxcXV9RU1VQUVRWWFdYW1pbXVxVV1ZeYV9hYmReY2RQVVZhY2JiZGNiYWVoZm1tbHNiYWheY2RlamtpbHJ2e4KCh5N9hI67wsnZ4+ZHSD9QUUpXWFRNTU1AQEIvLzFCQkJCQkBKTUg6PTgzNjI3OTg+QD9UVlNGSERUVlFERUBNTklWV1NPUExOT0pKTEdNTklISUVRUU9PT005OjZGR0JWV1NhYl1HSERMTUhKSko+PkAyMjQyMjRERERJSUk/Pz1EREFMTElISEZNTklOT0pWV1BeX1hTVE1ISUVKSkhNTUpEREE0NDI6Ojg4ODY4ODZFRUJOTkxAQD5FRUJUVFFBQT9MTElYWFZJSUlPT09FRUVUVFZQUFNWVVpGRUlCQUg6OT44ODo/Pz9AQD5KSkhdXVtBQT8/Pz9KSk1BQkZGR0pISU1GR0lYWlxNT05JTEpNT0xJSUdUVFFeXlxNTUpUVFFQUE5OTkxUVFFTVVRRVFNOUE9MTk1JTEpJTEpRVFNcXl1bXF5VVlhVVlhWV1peX2JbXF5bXF5dXmFcXV9fYWNcXV9eX2JhYmReX2NeX2NfYWNeX2JpamxoaW9laXFfZHBeY2+Ah46VnKNAQThNTkdPUExJSUlEREYxMTM6Ojo7OzlQU05BRD8zNjQ0NzY4OjlOUE9AQj5PU0pOT0pMTUhPUExMTUhQUU1GR0JMTUhBQj5VVVNbW1hHSEQ/QDtISUJaW1RISUJKTEdGRkgzMjcyMjRCQkVMTExQUFBBQT8/Pz0/Pz0/Pz1ISEZOT0pQUU1cXVZVVk9OT0hKTEdQUE5OTkw7Ozk0NDI2NjM3NzRHR0VQUE5CQkBBQT9RUU9JSUdFRUJQUE5TU1BXV1dJSUlHR0k/P0FGRUlAP0Q9O0I5OD03Nzk/P0FERERaWldhYV5MTExAQEJKSk05Oj4/QERERUhGR0pPUFNHSEpHSUhKTUxKSkhPUExaW1ZVVlFYWlVWV1NRU05WVlRQU1FYW1pXWlhMTk1ISklGSEdKTUxVV1ZcXV9UVVdRU1VUVVdaW11XWFtTVFZYWlxbXF5YWlxbXF5aW11eX2JRU1VWV1pcXV9iYmJjY2VfYWZhZGxYXGZYXWhzeYB9hItHSD9MTUZUVVBGRkZRUVQxMTMxMTE7OzlNT0pBREAvMTAvMDI0NjhKTUw9PztKTUhOT0pJSkZPUExNTklHSEQ/QDtJSkZFRkFGRkRVVVNXWFRQUU1OT0hXWFFKTEVRU05MTEw5OTssLC87OztVVVVVVVNOTkxAQD5AQD4+Pj5FRUJHR0VMTUhWV1NOT0hHSEFCRD9NTUpQUE5ISEY4ODYyMjA5OTdAQD5TU1BEREE9PTpOTkxKSkhGRkRQUE5UVFFXV1VKSkpOTk5ISEpAQEI7Oj8/PkJJSE1AQEI/P0FNTU1aWldaWldRUVE7Oz5HR0k6Oz87PUA/QERCREdNTlBISUxHSUhISklNTUpOTkxVVVNaWldWVlRVVVNQUE5UVFFRVFNXWlhWWFdPUVBISklHSUhHSUhPUVBYWlxRU1VOT1FWV1pYWlxaW11QUVRXWFtYWlxWV1pYWlxXWFtdXmFQUVRRU1VdXmFfYWNXWFtUVVtbXmZTVl5MT1dfZWpfZWpMTURRU0xOT0pAQEBTU1U+PkA3Nzc7OzlMTkpGSEUyMzYzNDc2NzlMTU8+QD1NT0xQUE5JSUdPT01FRUJCQkBBQT9GRkREREFNTUpWVlRWV1NGR0JGR0BWV1BRU0xWV1NGRkY0NDc7Ozs3NzdMTElUVFFISUVFRkFERERBQUFHR0dJSUdGRkRUVVBRU05NTklNTUpVVVNNTUpQUE49PTorKyk5OTc/Pz1UVFFEREE+PjtMTElMTElJSUdOTkxQUE5cXFpJSUdVVVVMTExXV1pNTU9GRUk4Nzs2Njg9PT9ISEhRUU9cXFpKSkpNTU9ISEo4OT05Oj5AQUVISU1JSk1FRkhBREI/QUBPT09RUVFTU1NWVlZOTk5RUVFOTk5QUFBTVVRMTk1NT05TVVROUE9JTEpISklNT05XWFtUVVdKTE5NTlBUVVdUVVdJSk1UVVdUVVdXWFtUVVdWV1pVVlhTVFZKTE5YWlxXWFtPVFZJTVNQVFpRVV1PU1haXmFXXF5WV05VVk9NTklERERPT1FUVFZISEg6Ojg+QD09Pz4qKy0mKCs2NzpAQURAQkFFR0ZGRkY+Pj5GRkZGRkZNTU1QUFBQUFBNTUpBQT9RUU9XWFRISUVJSkROT0hUVU5QUU1KSkhHR0dUVFRGRkRJSUdWV1NTVE8+Pzo4ODg2Njg+Pj5BQUE+PjtISEZQUE5TU1BTU1BNTUpOTkxRUU9JSUc3NzQ0NDI/Pz1WVlRPT01FRUJGRkRVVVNNTUpJSUdNTUpYWlVYWFZXV1VMTExUVFRMTE4tLTAzMzYxMTM+PkBISEhVVVNcXFpPT09MTE4/P0E2Nzo6Oz89PkFHSExERUdGR0k9Pz5FR0ZMTExUVFZMTE5PT1FMTE5OTlBHR0lRUVFTVVRPUVBRVFNPUVBXWlhQU1FPUVBaXFtWV1pVVlhHSEpMTU9QUVRYWlxGR0lISUxQUVRRU1VUVVdXWFtTVFZaW11NTlBQUVRNUVNQVVdKTlRCRkxMT1VWWl9UWFpUVVdXWE9MTUZISUU/Pz9EREZHR0k+Pj4xMS83OTg3ODopKi0qKy8yMzc0Njk0Njg6PTtEREQ9PT09PT1BQUFERERAQEBAQEBERERFRUJVVVNWV1M/QDtAQTpGR0BWV1BbXFdRUU9bW1tTU1BFRUJOT0pRU05PUEk4OTRBQUE+PkA+PkA9PT09PT1KSkhQUE5KSkhJSUdNTUpISEZOTkxPT01AQD5BQT9CQkBVVVNWVlROTkxISEZTU1BJSUdNTUpKSkhVVlFTVE9MTElRUU9OTk5PT087Oz5JSUw4ODo7Oz5RUVFPT01bW1hcXFxCQkVEREY/QEQ/QEQ7PUA+P0JERUdERUc5Ozo7Pj1FRUdQUFNKSk1HR0lHR0lKSk1GRkhMTE5KTUxNT05RVFNQU1FTVVRTVVRVV1ZUVlVPUFNOT1FFRkhJSk1JSk1QUVRCREZGR0lMTU9QUVRTVFZUVVdNTlBWV1pUVVdPVFVGTU1QVlhQVFpFSE5JTVNUVVhRVFNRVFNVVk1QUUpFRkFCQkI/P0FFRUdCQkI4ODYyNDMyMzYoKSwvMDYzNDo2Nzo3ODo9Pz5GRkg6Oj06Oj0/P0FBQUQ6Oj06Oj1BQUFUVFFWVlRXWFRNTklKTEVGR0BOT0hPUExUVFFeXlxdXVtHSERNTklRU0xFRj85OjZJSUxHRko/P0E6Oj05OTlISEhNTUpHR0VHR0VKSkhHR0VOTkxTU1BHR0U/Pz07OzlPT01XV1VUVFFHR0VJSUdKSkhOTkxGRkRRU05MTUhNTklMTElOTkxOTk5GRkZAQEBHR0lNTU9VVVVHR0VYWFZOTk5BQUQ4ODo3ODs5Oj4/QERAQUU6Oz4+P0E/QUBAQkFFRUdOTlBMTE5GRkhFRUdHR0lFRUdFRUdGSEdNT05PUVBTVVRUVlVRVFNWWFdPUVBUVVdOT1FFRkhFRkhCREZNTlBISUxOT1FISUxKTE5QUVRRU1VISUxQUVRXWFtNUVNBR0lNU1VRV1xJTVNNUVRUVVdUVFFWVlRKTEVJSkRISUU/Pz1CQkJRUVFJSUk0NDQtLzEyMzYrLDAvMDMtLzI5Oj47PT8/QUBKSk00NDdAQEJAQEI+PkA6Oj06Oj0+PkBAQEBVVVNbXFdHSEQ/QDtCRD9PUExXWFRQUE5cXFpcXFpMTUhHSERMTUhERUA9PTpMTE5NTU9BQUQ9PT83NzdBQUFKSkhMTElISEZCQkA+PjtAQD5AQD5CQkA+Pj45OTlISEhQUFBNTUpGRkRKSkhGRkRGRkRMTElNTklOT0pKSkhJSUdNTUpbW1tYWFhVVVVMTE5QUFNRUVFEREFVVVNQUFA5OTs0NDc3ODs9PkFJSk5JSk05Oj0/QEJERUdCREZCQkVFRUdGRkhCQkJCQkJFRUdGRkhBQURFR0ZOUE9OUE9TVVRQU1FJTEpWWFdWWFdVVlhPUFNKTE5KTE5FRkhKTE5GR0lGR0lGR0lISUxMTU9QUVRISUxNTlBXWFtHTE09QkVKUFNPVVdKT1FMUFFQU1FOUE1UVFFOT0pPUExQUU1HSERERUBHR0VCQkU4Nzs6O0EwMTc3ODswMTMxMjQ0Njg6Oz4+P0FFRUc3Nzk3NzlBQURJSUw5OTszMzY6Oj1ISEhaWldVVVNFRUI+PjtGRkRMTElbW1hQUE5aWlpcXFxQUE5CQkBNTUpCQkBCQkJERkVJTEo7Pj1GSEc9Pz44OjlNT05GSEdMTk1AQj85Ozg9Pzs/QT47Pj03ODozNDg9PkFHSEpISklJTEhMTklKTUlISkdGSEdISklOUE9GSEdGSEdGSEdMTU8/QEI6Oz5BQkVJSk1FR0Y/QT5UVlNPUVBAQUQ4OTsvMDM5Oj5GR0lVV1Y9Pz47PT86Oz4/QEQ9PkFFRkhTVVRPUU5FR0Q9Pz5AQUQ/QEJMTk1OUE9QU1FRVFNRVFNKTUxOUE9YW1pUVVdQUVRJSk1OT1FKTE5HSEpHSEpJSk1ERkVHSUhHSUhNT05GSEdMTk1WWFdNTlBJTk9ITU5NUVNMUFFITU5JTk9NUVBRVFNQUE5NTUpMTUhERT47PThBQT8+PkAzMjkxMTovMDY7PUA2Nzk2ODc5Ozo5Oj06Oz4+PkAyMjQ3Nzk/P0E9PT8yMjQvLzE2Njg9PT1JSUdWVlROTkw+PjtFRUJQUE5UVFFaWlpYWFhcXFxJSUlBQUFHR0dGRkZAQEA/QUBCRURERkVCRUQ6PTs4OjlKTUxFR0ZJTEo+QD8zNjIzNjI6PTs4OTs0NjkyMzk2Nz1AQUVERkVFR0RHSUVGSEVFR0ZERkVKTE5OT1FERUdBQkVGR0lRU1VERUc5Oj1CREZBQkVERkVAQj9PUU5UVlVJSk1BQkUyMzc5Oj5FRkhWWFdFR0Y7PT83ODs6Oz8+P0JJSk1UVlNUVlFKTUhCRUFERUc/QERHSEpISklMTk1RVFNNT05ISklMTk1UVlVXWFtPUFNJSk1NTlBQUVRKTE5FRkhBQkVHSUhISklOUE9MTk1KTUxTVVRUVlVNT05GSkxFSUpJTk9ITU5FSUpHTE1JTk9MUFFJSUdRUU9UVVBGR0A5OjY/Pz09PT8zMjksLDYtLzQ/QEQ/QEIyNDM9Pz47PT8+P0E/QEQxMjY2Nzo3ODstLzIrLDAxMjY7PT8+Pj5ISEZVVVNRUU9BQT9BQT9KSkhVVVNVVVVaWlpXV1dQUFBAQEBKSkpFRUVFRUVBREJAQkFISklBREI5Ozo5OzpISklFR0ZNT05ERkU5Ozg3OTY9Pz45Oj00NjkxMjg4OT8/QEQ9Pz47Pjo/QT1CRUFGSEdJTEpHSEpKTE4/QEI/QEI/QEJRU1VOT1FMTU8+P0FFRkhJTEo/QT5OUE1TVVRISUxAQUQ6Oz9BQkZHSEpWWFdTVVQ+P0E3ODs4OT00NjlHSEpRVFBXWlVPUU1JTEhFRkg+P0JKTE5ISUxGR0lHSEpFRkhCREZGR0lMTU9OT1FJSk1HSEpFRkhKTE5KTE5ISUxFRkhFR0ZGSEdKTUxFR0ZCRURNT05RVFNOUE9ITU5HTE1MUFFKT1BCR0hESElHTE1JTk9RUU9VVVNVVlFHSEE9PjlCQkBBQUQ5OD8vLzgrLDI+P0JFRkg2ODdBREI6Oz46Oz4+P0IxMjY6Oz86Oz8yMzcwMTQzNDg6Oz4/Pz9NTUpMTElEREE+PjtGRkRISEZRUU9XV1dVVVVaWlpQUFBFRUVJSUlOTk5HR0dAQkE4Ojk9Pz46PTs3OTg5OzpGSEdERkVISklERkU9Pzs5OzhERkU+P0E0NjkvMDY2Nz0+P0I+QD89PztGSERGSEVGSEdGSEc+P0FGR0k/QEJCREY7PT9FRkg7PT85Oj03ODo/QEI9Pz49Pz5QU1FMTk09PkA2Nzo2NzpBQkZERUdKTUxcXl1HSEo+P0I4OT06Oz9NTlBQU09UVlFPUU1JTEhHSEpBQkZISUxHSEpFRkhFRkg/QEI/QEJCREZGR0lISUxNTlBOT1E/QEJJSk1KTE5JSk1FRkhGSEdOUE9KTUxGSEdJTEpNT05WWFdMTk1FSUpESElITU5HTE0/REVBRkdESElGSkxTU1BXV1VXWFRQUUo9Pjk/Pz1EREZBQEdFRU4xMjg3ODszNDc3OThAQkFAQUQ0Njg3Oz4mKjAzNz0xNDotMTcqLTMqLTMtLzI6OjpOTkxRUU9JSUc/Pz1BQT9HR0VMTElOTk5VVVVXV1dOTk5BQUFISEhRUVFHR0dFR0Y/QUA5OzpBREI4Ojk5OzpERkVAQkFFR0ZCRURAQj89PztHSUg5Oj0xMjYtLzQ3OD47PUBBREI+QD1CRUA/QT46PTs3OTg+P0E7PT82Nzk3ODo2Nzk4OTs3ODozNDc5Oj46Oz85Oj0+P0FHSEpQUVRGR0o0Njk4OT0/QERFRkhFR0ZcXl1MTU89PkExMjY2NzpGR0lRVFBYW1ZeYVxKTUlISUw7PUA/QEQ+P0I/QEQ/QEQ7PUA6Oz9AQUVISU1HSEo/QEJKTE45Oj1BQkVMTU9ERUc9PkBISklPUVBKTUxGSEdGSEdFR0ZOUE9ISklBRkdARUZESElBRkc+QkQ7QEFCR0hHTE1PT01VVVNVVlFPUEk4OTQ4ODY9PT8+PUQ4OEEvMDY4OT02Nzk5OzpBREI+P0ExMjYzNz0kKC0sMDYoKzEqLTMoKzEqLTMwMTQ7OztMTElOTkxISEZAQD49PTo/Pz1ISEZKSkpVVVVUVFRRUVE9PT1HR0dNTU1JSUlAQkE9Pz45OzpISkk/QUA+QD9ERkVCRURBREJCRURFR0RHSUZJTEo7PT80NjkxMjgzNDo3ODs+QD8+QD1HSUVFR0RCRURBREI+P0E5Oj0xMjQzNDc2Nzk4OTs4OTs2Nzo3OD47PUI4OT04OTtERUdOT1NERUoxMjg3ODs9PkFBQkVERkVbXVxQUVRCREc5Oj5GR0pNTlBTVVFXWlVdX1tQU09MTU8/QEQ7PUA6Oz8/QEQ+P0I3ODs5Oj5BQkZJSk5NTlBHSEpQUVRAQURHSEpJSk1HSEpHSEpQU1FPUVBOUE9FR0ZHSUhFR0ZNT05NT05GSkxESElGSkxESEk7QEE7QEFCR0hFSUpTU1BVVVNQUU1HSEEzNDA5OTc7Oz4yMTgrKzQsLTM3ODs2NzkzNjQ+QD8+P0E0NjktMTcmKjIvMjosMDglKTElKTEqLTYyMzlQUFBRUU9CQkA0NDI9PTo/Pz07Ozk9PTpJSUlPT09VVVVTU1M7OztBQUFJSUlERERAQkE9Pz4+QD9KTUxFR0Y/QUA/QUA/QUA5Ozo/QUBHSUZMTkpJTEo7PT80NjkxMjgvMDYwMTQ5Ozo6PTlGSERCRUE9Pz44Ojk5Oj02NzkwMTMzNDc0Njg3ODo3ODo0NjkzNDo4OT80Njk2NzpISU1JSk4/QEY2Nz0zNDg4OT0/QEJERkVTVVRQUVRERUg+P0JHSExJSk1PUU5TVVBaXFdVV1RPUFM/QEQ5OkA5OkA+P0U6O0E3OD44OT89PkRAQUVBQkVBQkVOT1FFRkhFRkhGR0lKTE5MTU9HSUhHSUhNT05KTUxHSUhBREJGSEdISklCR0g/REVARUY9QUI5Pj87QEFCR0hCR0hOTkxRU05PUElGR0A6Ozc6Ojg3NzksKzIlJiwsLTM0NjkxMjQ2ODc+P0E7PT8wMTQpLDQjJi8mKjIiJS0iJS0jJiwqLTMzNDhERkVMTElGRkQ/Pz04ODZEREFMTElHR0VCQkJOTk5QUE5UVFE7OzlJSUdAQEA+Pj45OzpAQkFHSUhQU1FPUVBFR0ZERkU/QUA9Pz5CRURMTkpRVFBHSUg5Oj0xMjYtLzQ2Nz0yMzc6PTs9PztAQj89Pzs5Ozo3ODo4OT02NzowMTQzNDgxMjYzNDgzNDgxMjYyMjszMz0xMjg3ODtJSk5OT1NERUo3OD4xMjg4OT09PkBBQkVTVFZWV1pKTE5GR0pOT1NISUxJTEhKTUhRVE9UVlNNT047PT85Oj42Nz06O0E5OkAxMjg3OD4+P0VBQkg+P0I/QEJISUxBQkU4OTs/QEJKTE5JSk1GSEdKTUxMTk1RVFNOUE9BREJGSEdJSk1ESEk/REU/REU7QEE3Oz07QEFCR0hARUZQUU1NTkdPUElTVE1NTklCQkI9O0A0MzopKjAoKS83ODszNDc0Njg5Oj03ODsvMDYqKjYlJTEkJC0lJS8oKS8xMjYyMzYwMTM+QD9CRURAQkE5Ozo7Pj1BREJGSEdMTk1QUFBISEZRU05RU05ISUVMTUhISEZCQkI3ODpAQURGSEVNT0xMTkpKTUlJSk1AQUQ+P0FERkVPUU5OUE1BREI3ODozNDosLDYxMjgxMjY4OTs5Ozo6PTs4OTs3ODs3OD4xNDoxND0wMzsvMj0tMTs2OUEyNj4wMzswMDkwMDkvMDY3ODtHSEpKTE9AQUczNDoxMjg5OkA/QEQ9PkFGR0pWV1pFRkhFRkhAQEJMTE5GRkZJSUdVVVNVVVNOTkxHR0dFRkg4OT0zNDo2Nz0xMTo4OEE2Nj84OEE/QERFRkhISUxCREY9PkA9PkBHSEpFRkhFRkhCREZJSk1OT1FHSEpHSEpFRkhISUw6Oz89PkE+P0I6Oz85Oj45Oj49PkE6Oz9QUUpJSkRaW1RNTklEREE9PT03NjoyMTgqKzEsLTM6Oz8yMzYtLzEzNDgxMjgoKDEpKTQlJTIlJTEmJjAmKC0tLzI0Njg2ODc/QUA6PTs3OTg3OTg/QUA/QUBCRURBREI/Pz9HR0dKTEdPUEk4OTI+Pzo/Pz87Oz44OT1BQkVGSEVOUExRVE9HSUZGR0lGR0pCREZBQkVHSUhOUE1KTUw9PkAyMzksLDYzNDo2Nz05Oj4yMzY/QEI/QEQ7PUI0NjszNz8sMDorLTowMj8xM0A3OUYxND8sMDgtLTkyMjswMTcyMzc6Oz5RU1ZGR002Nz0zNDo3OD5FRkw9PkRCREdOT1NHSEo+P0E/P0FMTE5ISEhGRkZTU1BXV1VQUU1FRUJOT1E/QEQzNDoyMzkvLzg2Nj8xMT0+Pkc/QERERUdHSEpAQUQ6Oz49PkBERUdERUc+P0E9PkBISUxOT1FNTlBGR0lBQkVHSEpERUhAQUU7PUA3ODs9PkE9PkE+P0I9PkFRU0xHSEFXWFFPUExCQkBJSUk2NDkxMDcrLDIxMjg+P0IwMTMrLC8xMjYvMDYlJS8mJjIkJDElJTEpKTIlJiwqKy85Oj0+QD8+QD85OzozNjQyNDM6PTtCRUQ+QD8+QD9HR0lHR0dOTkxMTUhBQj5JSUc7Ozs9PT85Oj4+P0E+QD1ERkFTVVBAQj87PT9AQUVAQUQ5Oj06PTtHSUZOUE8/QEIwMTcvLzgzNDo4OT89PkE4OTs+P0E4OT0zNDozNDoyNj4rLzkqLDkvMT4xM0A3OUYxND8sMDgyMj4vLzgsLTMzNDg/QEJPUFRAQUcyMzkyMzk2Nz1ERUo7PUJBQkZNTlFISUw7PT9KSk1JSUxGRkZISEhWVlRUVFFNTklISEZYW1pXWFw4OT02Nz0zNDo2Nj8xMTo4OEE9PkFAQUVBQkY6Oz83ODs7PUA/QERBQkY/QEI+P0FISUxOT1FNTlBGR0lBQkVHSEo/QEQ5Oj42Nzo0NjlCREdFRklCREdERUhMTUZRU0xUVU5OT0pNTUpAQEAzMjcvLTQoKS8xMjg9PkEpKiwqKy0vMDMsLTMkJC0lJTEkJDEmJjIqKjMjJComKCs7PT9CRURFR0Y2NzkvMDI2Nzk2Nzk6Oz5BQkVAQUREREZEREZOTkxQUE5PT01NTUpKSk1BQUQ+P0JERUc+QD0+QDtOUEw6PTkxMjQwMTRAQUQ+P0E6PTtCRUFMTk09PkAtLzQwMDk2Nz0yMzkzNDgxMjQ3ODo3ODs2Nz0zNDovMjotMTssLzsrLTotMD02OEUyNkAwMzsxMT0xMTosLTMwMTRGR0lTVFdJSlA2Nz0tLzQ2Nz09PkQ5OkBBQkZRU1ZJSk09PkA+PkBAQEJFRUVGRkZUVFFWVlRPUExGRkRaXFthYmRBQkYyMzcvMDYxMjg5OUI2Nz1CRElFRklFRkk9PkE0Njk6Oz87PUBAQUU/QEI9PkBERUdISUxHSEpHSEpFRkhISUxHSEw9PkE0NjkxMjY+P0JCREdAQUU/QERTVE1JSkRRU0xWV1NFRUJAQEA5OD0vLTQoKS8xMjg7PUArLC8qKy0pKi0jJCokJC0lJTEjIzAkJDAmJjAmKC0pKi1CREZJTEoyMzYvMDMsLTEzNDg7PUA2Nzo3ODszNDg5OD09PT9HR0dMTExBQUE/Pz8zMzYtLDErLDAyMzZBREBISkZUVlFHSUYxMjQvMDM9PkA+P0FBREJFR0RCRUQ4OTssLTMrKzQxMjg0Njs3ODswMTM3ODo4OT04OT83OD4sMDgoKzYtMD0wMj8rLTorLTorLzkrLzctLTksLDYsLTM0NjlMTU9MTVBOT1U6O0EvMDY0Njs4OT85OkBAQUVJSk5AQUQ5Oj1BQUQ9PT86OjpBQUFUVFFbW1hMTUhMTElaXFtUVVdNTlA9PkExMjYvMDYqKzE5OkA7PUI7PUI+P0U0Njs2Nz09PkQ/QEY+P0I7PT87PT9CREZFRkhJSk1JSk1ISUxGR0lERUdFRkg2NzkxMjQ/QEJISUxISUxERUc/QDlAQTpQUUpVVlFUVFFGRkY0MzgoJi0oKS83OD5CREcvMDIpKiwpKi0jJColJS8jIy8iIi8kJDAqKjMoKS8wMTRHSEpUVVc4OT0vMDMrLDAtLzIvMDMwMTQ6Oz8yMzcsKzA7Oj9CQkVISEhFRUVAQEI3NjowLzM0Njk5Oj06PTk/QT1PUU1MTko6Oz43ODs4OTs7PT8+QD89Pzs+QD83ODotLzQsLDY0Njs0Njs0NjksLTA4OTs2NzoxMjgtLzQrLzcpLDcsLzssLzsqLDkqLDkqLTgqLTYtLTksLDYmKC05Oj5KTE5KTE9RU1hMTVMwMTcyMzk5OkA0NjtCREdERUg+P0E7PT9ISEo5OTs4ODg+Pj5NTUpPT01JSkZNTklQU09UVlVVVlhOT1E6Oz8wMTQvMDY0Njs4OT82Nz03OD4zNDowMTc4OT87PUI6O0E5Oj40Njg9PkBFRkhHSEpHSEpFRkhCREZERUdBQkU5Oj04OTs9PkBERUdFRkg+P0E6OzQ+PzhQUUpXWFRNTUpCQkIzMjclJCsqKzE/QEZKTE8zNDcsLTAsLTEpKjArKzQoKDMkJDEqKjY2Nj8kJSsxMjZCREZTVFY6Oz8tLzQsLTMrLDIyMzktLzQwMTcpKjAwLzY5OD1ISEpISEhFRUU/P0E5OD0vLTQ6Oz87PT84Ojc5OzdOUExKTUk5Oj02Nzo4OTtAQURAQkE5Ozg4Ojk2NzkvMDYtLTc0NjsxMjgxMjYsLTA3ODo0Njk5OkBBQkgrLzcpLDcsLzsoKjcpKzgpKzgpLDcpLDQpKTQwMDkrLDI3ODtCREZGR0pGR006O0E5OkAwMTcyMzkzNDo+P0JAQUU7PT86Oz4+PkA6Oj0+Pj49PT1JSUdPT01TVE9RU05MTkpRVFNOUE9JSk00NjktLzIxMjY7PUI6O0E2Nj8zMz0yMjsxMTo3N0A7O0U7PUJAQUU5Oj07PT9AQUQ/QEJERUdHSEpJSk1ISkk9Pz42ODc3OTg9Pz5BREJGSEdBREI+Pzg6OzRJSkRUVVBJSUdISEg6OT4mJSwrLDJERUpRU1Y3ODoxMjQyMzcvMDYyMjslJTEiIi8qKjY5OUIoKS83ODs/QEJRU1U5Oj4rLDIvMDYsLTMsLTM5OkA4OT82Nz00Mzo6OT5BQURISEhCQkI6Oj03NjorKjE4OT03ODo7Pjo6PThRVE9FR0QtLzErLDAyMzY+P0E+QD8yNDEzNjQ0NjgwMTctLTcwMTcsLTMwMTQvMDIyMzY3ODs3OD4zNDoqLTYqLTgrLTokJjMoKjcoKjcoKzYoKzMrKzcpKTIsLTM5Oj5HSEpJSk5PUFZRU1hAQUcwMTcqKzE0Njs7PUA/QEQ4OTs4OTs/P0E9PT83Nzc7OztGRkRPT01UVVBQUU1MTkpTVVFMTk1HSEovMDMtLzIrLDA7PUI/P0g2Nj8yMjszMz0zMz0yMjszMz02Nz03ODs0Njg5Oj05Oj1AQURFRkhISUxJSk1ERkU0NzYzNjQ4OjlAQkFAQkFGSEdISkkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9pbmNsdWRlL3dlYnAvZW5jb2RlLmggYi9pbmNsdWRlL3dlYnAvZW5jb2RlLmgKaW5kZXggM2MyNjM3NC4uYjNmMDViMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS93ZWJwL2VuY29kZS5oCisrKyBiL2luY2x1ZGUvd2VicC9lbmNvZGUuaApAQCAtNDE5LDcgKzQxOSw5IEBACiBXRUJQX0VYVEVSTihpbnQpIFdlYlBQaWN0dXJlSXNWaWV3KGNvbnN0IFdlYlBQaWN0dXJlKiBwaWN0dXJlKTsKIAogLy8gUmVzY2FsZSBhIHBpY3R1cmUgdG8gbmV3IGRpbWVuc2lvbiB3aWR0aCB4IGhlaWdodC4KLS8vIE5vdyBnYW1tYSBjb3JyZWN0aW9uIGlzIGFwcGxpZWQuCisvLyBJZiBlaXRoZXIgJ3dpZHRoJyBvciAnaGVpZ2h0JyAoYnV0IG5vdCBib3RoKSBpcyAwIHRoZSBjb3JyZXNwb25kaW5nCisvLyBkaW1lbnNpb24gd2lsbCBiZSBjYWxjdWxhdGVkIHByZXNlcnZpbmcgdGhlIGFzcGVjdCByYXRpby4KKy8vIE5vIGdhbW1hIGNvcnJlY3Rpb24gaXMgYXBwbGllZC4KIC8vIFJldHVybnMgZmFsc2UgaW4gY2FzZSBvZiBlcnJvciAoaW52YWxpZCBwYXJhbWV0ZXIgb3IgaW5zdWZmaWNpZW50IG1lbW9yeSkuCiBXRUJQX0VYVEVSTihpbnQpIFdlYlBQaWN0dXJlUmVzY2FsZShXZWJQUGljdHVyZSogcGljLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3dlYnAvdHlwZXMuaCBiL2luY2x1ZGUvd2VicC90eXBlcy5oCmluZGV4IDU2OGQxZjIuLjliMDM2ZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvd2VicC90eXBlcy5oCisrKyBiL2luY2x1ZGUvd2VicC90eXBlcy5oCkBAIC0xOCwxMCArMTgsMTEgQEAKIAogI2lmbmRlZiBfTVNDX1ZFUgogI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaWZkZWYgX19TVFJJQ1RfQU5TSV9fCi0jZGVmaW5lIFdFQlBfSU5MSU5FCi0jZWxzZSAgLyogX19TVFJJQ1RfQU5TSV9fICovCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBcCisgICAgKGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKQogI2RlZmluZSBXRUJQX0lOTElORSBpbmxpbmUKKyNlbHNlCisjZGVmaW5lIFdFQlBfSU5MSU5FCiAjZW5kaWYKICNlbHNlCiB0eXBlZGVmIHNpZ25lZCAgIGNoYXIgaW50OF90OwpkaWZmIC0tZ2l0IGEvc3JjL0FuZHJvaWQubWsgYi9zcmMvQW5kcm9pZC5tawppbmRleCAwMjdhMTdiLi42OTRlNGI3IDEwMDY0NAotLS0gYS9zcmMvQW5kcm9pZC5taworKysgYi9zcmMvQW5kcm9pZC5tawpAQCAtMTcsMzAgKzE3LDEwIEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiBMT0NBTF9TUkNfRklMRVMgOj0gXAotICAgICAgICBlbmMvYWxwaGEuYyBcCi0gICAgICAgIGVuYy9hbmFseXNpcy5jIFwKLSAgICAgICAgZW5jL2JhY2t3YXJkX3JlZmVyZW5jZXMuYyBcCi0gICAgICAgIGVuYy9jb25maWcuYyBcCi0gICAgICAgIGVuYy9jb3N0LmMgXAotICAgICAgICBlbmMvZmlsdGVyLmMgXAotICAgICAgICBlbmMvZnJhbWUuY1wKLSAgICAgICAgZW5jL2hpc3RvZ3JhbS5jIFwKLSAgICAgICAgZW5jL2l0ZXJhdG9yLmMgXAotICAgICAgICBlbmMvcGljdHVyZS5jIFwKLSAgICAgICAgZW5jL3BpY3R1cmVfY3NwLmMgXAotICAgICAgICBlbmMvcGljdHVyZV9wc25yLmMgXAotICAgICAgICBlbmMvcGljdHVyZV9yZXNjYWxlLmMgXAotICAgICAgICBlbmMvcGljdHVyZV90b29scy5jIFwKLSAgICAgICAgZW5jL3F1YW50LmMgXAotICAgICAgICBlbmMvc3ludGF4LmMgXAotICAgICAgICBlbmMvdHJlZS5jIFwKLSAgICAgICAgZW5jL3Rva2VuLmMgXAotICAgICAgICBlbmMvdnA4bC5jIFwKLSAgICAgICAgZW5jL3dlYnBlbmMuYyBcCiAgICAgICAgIGRzcC9hbHBoYV9wcm9jZXNzaW5nLmMgXAogICAgICAgICBkc3AvYWxwaGFfcHJvY2Vzc2luZ19zc2UyLmMgXAotICAgICAgICBkc3AvY3B1LmMgXAogICAgICAgICBkc3AvY3B1LWZlYXR1cmVzLmMgXAorICAgICAgICBkc3AvY3B1LmMgXAogICAgICAgICBkc3AvZW5jLmMgXAogICAgICAgICBkc3AvZW5jX2F2eDIuYyBcCiAgICAgICAgIGRzcC9lbmNfbWlwczMyLmMgXApAQCAtNTEsNyArMzEsMjcgQEAKICAgICAgICAgZHNwL2xvc3NsZXNzX25lb24uYyBcCiAgICAgICAgIGRzcC9sb3NzbGVzc19zc2UyLmMgXAogICAgICAgICBkc3AveXV2LmMgXAotICAgICAgICBkc3AveXV2X3NzZTIuYyBcCisgICAgICAgIGVuYy9hbHBoYS5jIFwKKyAgICAgICAgZW5jL2FuYWx5c2lzLmMgXAorICAgICAgICBlbmMvYmFja3dhcmRfcmVmZXJlbmNlcy5jIFwKKyAgICAgICAgZW5jL2NvbmZpZy5jIFwKKyAgICAgICAgZW5jL2Nvc3QuYyBcCisgICAgICAgIGVuYy9maWx0ZXIuYyBcCisgICAgICAgIGVuYy9mcmFtZS5jIFwKKyAgICAgICAgZW5jL2hpc3RvZ3JhbS5jIFwKKyAgICAgICAgZW5jL2l0ZXJhdG9yLmMgXAorICAgICAgICBlbmMvcGljdHVyZS5jIFwKKyAgICAgICAgZW5jL3BpY3R1cmVfY3NwLmMgXAorICAgICAgICBlbmMvcGljdHVyZV9wc25yLmMgXAorICAgICAgICBlbmMvcGljdHVyZV9yZXNjYWxlLmMgXAorICAgICAgICBlbmMvcGljdHVyZV90b29scy5jIFwKKyAgICAgICAgZW5jL3F1YW50LmMgXAorICAgICAgICBlbmMvc3ludGF4LmMgXAorICAgICAgICBlbmMvdG9rZW4uYyBcCisgICAgICAgIGVuYy90cmVlLmMgXAorICAgICAgICBlbmMvdnA4bC5jIFwKKyAgICAgICAgZW5jL3dlYnBlbmMuYyBcCisgICAgICAgIHV0aWxzL2JpdF9yZWFkZXIuYyBcCiAgICAgICAgIHV0aWxzL2JpdF93cml0ZXIuYyBcCiAgICAgICAgIHV0aWxzL2NvbG9yX2NhY2hlLmMgXAogICAgICAgICB1dGlscy9maWx0ZXJzLmMgXApAQCAtODksMTAgKzg5LDExIEBACiAgICAgICAgIGRlYy92cDguYyBcCiAgICAgICAgIGRlYy92cDhsLmMgXAogICAgICAgICBkZWMvd2VicC5jIFwKKyAgICAgICAgZGVtdXgvZGVtdXguYyBcCiAgICAgICAgIGRzcC9hbHBoYV9wcm9jZXNzaW5nLmMgXAogICAgICAgICBkc3AvYWxwaGFfcHJvY2Vzc2luZ19zc2UyLmMgXAotICAgICAgICBkc3AvY3B1LmMgXAogICAgICAgICBkc3AvY3B1LWZlYXR1cmVzLmMgXAorICAgICAgICBkc3AvY3B1LmMgXAogICAgICAgICBkc3AvZGVjLmMgXAogICAgICAgICBkc3AvZGVjX2NsaXBfdGFibGVzLmMgXAogICAgICAgICBkc3AvZGVjX21pcHMzMi5jIFwKQEAgLTEwOCw3ICsxMDksNiBAQAogICAgICAgICBkc3AveXV2LmMgXAogICAgICAgICBkc3AveXV2X21pcHMzMi5jIFwKICAgICAgICAgZHNwL3l1dl9zc2UyLmMgXAotICAgICAgICBkZW11eC9kZW11eC5jIFwKICAgICAgICAgdXRpbHMvYml0X3JlYWRlci5jIFwKICAgICAgICAgdXRpbHMvY29sb3JfY2FjaGUuYyBcCiAgICAgICAgIHV0aWxzL2ZpbHRlcnMuYyBcCmRpZmYgLS1naXQgYS9zcmMvZGVjL2FscGhhLmMgYi9zcmMvZGVjL2FscGhhLmMKaW5kZXggMjRjYTkyZC4uZjIzYmE3ZCAxMDA2NDQKLS0tIGEvc3JjL2RlYy9hbHBoYS5jCisrKyBiL3NyYy9kZWMvYWxwaGEuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgIi4vdnA4bGkuaCIKICNpbmNsdWRlICIuLi91dGlscy9xdWFudF9sZXZlbHNfZGVjLmgiCiAjaW5jbHVkZSAiLi4vdXRpbHMvdXRpbHMuaCIKLSNpbmNsdWRlICJ3ZWJwL2Zvcm1hdF9jb25zdGFudHMuaCIKKyNpbmNsdWRlICIuLi93ZWJwL2Zvcm1hdF9jb25zdGFudHMuaCIKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEFMUEhEZWNvZGVyIG9iamVjdC4KZGlmZiAtLWdpdCBhL3NyYy9kZWMvZGVjb2RlX3ZwOC5oIGIvc3JjL2RlYy9kZWNvZGVfdnA4LmgKaW5kZXggMmJmMWJkYi4uYjkzMzdiYiAxMDA2NDQKLS0tIGEvc3JjL2RlYy9kZWNvZGVfdnA4LmgKKysrIGIvc3JjL2RlYy9kZWNvZGVfdnA4LmgKQEAgLTE0LDcgKzE0LDcgQEAKICNpZm5kZWYgV0VCUF9XRUJQX0RFQ09ERV9WUDhfSF8KICNkZWZpbmUgV0VCUF9XRUJQX0RFQ09ERV9WUDhfSF8KIAotI2luY2x1ZGUgIndlYnAvZGVjb2RlLmgiCisjaW5jbHVkZSAiLi4vd2VicC9kZWNvZGUuaCIKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKZGlmZiAtLWdpdCBhL3NyYy9kZWMvaWRlYy5jIGIvc3JjL2RlYy9pZGVjLmMKaW5kZXggNWQ4YmIwYy4uZTAwMzg1MSAxMDA2NDQKLS0tIGEvc3JjL2RlYy9pZGVjLmMKKysrIGIvc3JjL2RlYy9pZGVjLmMKQEAgLTM1NywzMCArMzU3LDMzIEBACiB9CiAKIC8vIFBhcnRpdGlvbiAjMAotc3RhdGljIGludCBDb3B5UGFydHMwRGF0YShXZWJQSURlY29kZXIqIGNvbnN0IGlkZWMpIHsKK3N0YXRpYyBWUDhTdGF0dXNDb2RlIENvcHlQYXJ0czBEYXRhKFdlYlBJRGVjb2RlciogY29uc3QgaWRlYykgewogICBWUDhEZWNvZGVyKiBjb25zdCBkZWMgPSAoVlA4RGVjb2RlciopaWRlYy0+ZGVjXzsKICAgVlA4Qml0UmVhZGVyKiBjb25zdCBiciA9ICZkZWMtPmJyXzsKLSAgY29uc3Qgc2l6ZV90IHBzaXplID0gYnItPmJ1Zl9lbmRfIC0gYnItPmJ1Zl87CisgIGNvbnN0IHNpemVfdCBwYXJ0X3NpemUgPSBici0+YnVmX2VuZF8gLSBici0+YnVmXzsKICAgTWVtQnVmZmVyKiBjb25zdCBtZW0gPSAmaWRlYy0+bWVtXzsKICAgYXNzZXJ0KCFpZGVjLT5pc19sb3NzbGVzc18pOwogICBhc3NlcnQobWVtLT5wYXJ0MF9idWZfID09IE5VTEwpOwotICBhc3NlcnQocHNpemUgPiAwKTsKLSAgYXNzZXJ0KHBzaXplIDw9IG1lbS0+cGFydDBfc2l6ZV8pOyAgLy8gRm9ybWF0IGxpbWl0OiBubyBuZWVkIGZvciBydW50aW1lIGNoZWNrCisgIC8vIHRoZSBmb2xsb3dpbmcgaXMgYSBmb3JtYXQgbGltaXRhdGlvbiwgbm8gbmVlZCBmb3IgcnVudGltZSBjaGVjazoKKyAgYXNzZXJ0KHBhcnRfc2l6ZSA8PSBtZW0tPnBhcnQwX3NpemVfKTsKKyAgaWYgKHBhcnRfc2l6ZSA9PSAwKSB7ICAgLy8gY2FuJ3QgaGF2ZSB6ZXJvLXNpemUgcGFydGl0aW9uICMwCisgICAgcmV0dXJuIFZQOF9TVEFUVVNfQklUU1RSRUFNX0VSUk9SOworICB9CiAgIGlmIChtZW0tPm1vZGVfID09IE1FTV9NT0RFX0FQUEVORCkgewogICAgIC8vIFdlIGNvcHkgYW5kIGdyYWIgb3duZXJzaGlwIG9mIHRoZSBwYXJ0aXRpb24gIzAgZGF0YS4KLSAgICB1aW50OF90KiBjb25zdCBwYXJ0MF9idWYgPSAodWludDhfdCopV2ViUFNhZmVNYWxsb2MoMVVMTCwgcHNpemUpOworICAgIHVpbnQ4X3QqIGNvbnN0IHBhcnQwX2J1ZiA9ICh1aW50OF90KilXZWJQU2FmZU1hbGxvYygxVUxMLCBwYXJ0X3NpemUpOwogICAgIGlmIChwYXJ0MF9idWYgPT0gTlVMTCkgewotICAgICAgcmV0dXJuIDA7CisgICAgICByZXR1cm4gVlA4X1NUQVRVU19PVVRfT0ZfTUVNT1JZOwogICAgIH0KLSAgICBtZW1jcHkocGFydDBfYnVmLCBici0+YnVmXywgcHNpemUpOworICAgIG1lbWNweShwYXJ0MF9idWYsIGJyLT5idWZfLCBwYXJ0X3NpemUpOwogICAgIG1lbS0+cGFydDBfYnVmXyA9IHBhcnQwX2J1ZjsKICAgICBici0+YnVmXyA9IHBhcnQwX2J1ZjsKLSAgICBici0+YnVmX2VuZF8gPSBwYXJ0MF9idWYgKyBwc2l6ZTsKKyAgICBici0+YnVmX2VuZF8gPSBwYXJ0MF9idWYgKyBwYXJ0X3NpemU7CiAgIH0gZWxzZSB7CiAgICAgLy8gRWxzZToganVzdCBrZWVwIHBvaW50ZXJzIHRvIHRoZSBwYXJ0aXRpb24gIzAncyBkYXRhIGluIGRlY18tPmJyXy4KICAgfQotICBtZW0tPnN0YXJ0XyArPSBwc2l6ZTsKLSAgcmV0dXJuIDE7CisgIG1lbS0+c3RhcnRfICs9IHBhcnRfc2l6ZTsKKyAgcmV0dXJuIFZQOF9TVEFUVVNfT0s7CiB9CiAKIHN0YXRpYyBWUDhTdGF0dXNDb2RlIERlY29kZVBhcnRpdGlvbjAoV2ViUElEZWNvZGVyKiBjb25zdCBpZGVjKSB7CkBAIC00MTQsOCArNDE3LDEwIEBACiAgIGRlYy0+bXRfbWV0aG9kXyA9IFZQOEdldFRocmVhZE1ldGhvZChwYXJhbXMtPm9wdGlvbnMsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpby0+d2lkdGgsIGlvLT5oZWlnaHQpOwogICBWUDhJbml0RGl0aGVyaW5nKHBhcmFtcy0+b3B0aW9ucywgZGVjKTsKLSAgaWYgKCFDb3B5UGFydHMwRGF0YShpZGVjKSkgewotICAgIHJldHVybiBJRGVjRXJyb3IoaWRlYywgVlA4X1NUQVRVU19PVVRfT0ZfTUVNT1JZKTsKKworICBkZWMtPnN0YXR1c18gPSBDb3B5UGFydHMwRGF0YShpZGVjKTsKKyAgaWYgKGRlYy0+c3RhdHVzXyAhPSBWUDhfU1RBVFVTX09LKSB7CisgICAgcmV0dXJuIElEZWNFcnJvcihpZGVjLCBkZWMtPnN0YXR1c18pOwogICB9CiAKICAgLy8gRmluaXNoIHNldHRpbmcgdXAgdGhlIGRlY29kaW5nIHBhcmFtZXRlcnMuIFdpbGwgY2FsbCBpby0+c2V0dXAoKS4KZGlmZiAtLWdpdCBhL3NyYy9kZWMvdHJlZS5jIGIvc3JjL2RlYy90cmVlLmMKaW5kZXggODgyMzg4OC4uMzEyMDhkOSAxMDA2NDQKLS0tIGEvc3JjL2RlYy90cmVlLmMKKysrIGIvc3JjL2RlYy90cmVlLmMKQEAgLTExLDcgKzExLDcgQEAKIC8vCiAvLyBBdXRob3I6IFNrYWwgKHBhc2NhbC5tYXNzaW1pbm9AZ21haWwuY29tKQogCi0jaW5jbHVkZSAidnA4aS5oIgorI2luY2x1ZGUgIi4vdnA4aS5oIgogI2luY2x1ZGUgIi4uL3V0aWxzL2JpdF9yZWFkZXJfaW5sLmgiCiAKICNkZWZpbmUgVVNFX0dFTkVSSUNfVFJFRQpkaWZmIC0tZ2l0IGEvc3JjL2RlYy92cDguYyBiL3NyYy9kZWMvdnA4LmMKaW5kZXggNDcyNDlkNi4uODlkNDc4YSAxMDA2NDQKLS0tIGEvc3JjL2RlYy92cDguYworKysgYi9zcmMvZGVjL3ZwOC5jCkBAIC01NjIsNiArNTYyLDcgQEAKICAgICB9CiAgICAgYmxvY2stPm5vbl96ZXJvX3lfID0gMDsKICAgICBibG9jay0+bm9uX3plcm9fdXZfID0gMDsKKyAgICBibG9jay0+ZGl0aGVyXyA9IDA7CiAgIH0KIAogICBpZiAoZGVjLT5maWx0ZXJfdHlwZV8gPiAwKSB7ICAvLyBzdG9yZSBmaWx0ZXIgaW5mbwpkaWZmIC0tZ2l0IGEvc3JjL2RlYy92cDhpLmggYi9zcmMvZGVjL3ZwOGkuaAppbmRleCAyOTcwMWJlLi5hMDJkOWZmIDEwMDY0NAotLS0gYS9zcmMvZGVjL3ZwOGkuaAorKysgYi9zcmMvZGVjL3ZwOGkuaApAQCAtMzEsNyArMzEsNyBAQAogLy8gdmVyc2lvbiBudW1iZXJzCiAjZGVmaW5lIERFQ19NQUpfVkVSU0lPTiAwCiAjZGVmaW5lIERFQ19NSU5fVkVSU0lPTiA0Ci0jZGVmaW5lIERFQ19SRVZfVkVSU0lPTiAyCisjZGVmaW5lIERFQ19SRVZfVkVSU0lPTiAzCiAKIC8vIGludHJhIHByZWRpY3Rpb24gbW9kZXMKIGVudW0geyBCX0RDX1BSRUQgPSAwLCAgIC8vIDR4NCBtb2RlcwpkaWZmIC0tZ2l0IGEvc3JjL2RlYy93ZWJwLmMgYi9zcmMvZGVjL3dlYnAuYwppbmRleCBjNWY4Zjk0Li41OWUyMWE5IDEwMDY0NAotLS0gYS9zcmMvZGVjL3dlYnAuYworKysgYi9zcmMvZGVjL3dlYnAuYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgIi4vdnA4aS5oIgogI2luY2x1ZGUgIi4vdnA4bGkuaCIKICNpbmNsdWRlICIuL3dlYnBpLmgiCi0jaW5jbHVkZSAid2VicC9tdXhfdHlwZXMuaCIgIC8vIEFMUEhBX0ZMQUcKKyNpbmNsdWRlICIuLi93ZWJwL211eF90eXBlcy5oIiAgLy8gQUxQSEFfRkxBRwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gUklGRiBsYXlvdXQgaXM6CmRpZmYgLS1naXQgYS9zcmMvZGVtdXgvZGVtdXguYyBiL3NyYy9kZW11eC9kZW11eC5jCmluZGV4IDVhYWJkZDIuLjU1YTc5MTggMTAwNjQ0Ci0tLSBhL3NyYy9kZW11eC9kZW11eC5jCisrKyBiL3NyYy9kZW11eC9kZW11eC5jCkBAIC0xMSw3ICsxMSw3IEBACiAvLwogCiAjaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgIndlYnAvY29uZmlnLmgiCisjaW5jbHVkZSAiLi4vd2VicC9jb25maWcuaCIKICNlbmRpZgogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CkBAIC0xOSw5ICsxOSw5IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNpbmNsdWRlICIuLi91dGlscy91dGlscy5oIgotI2luY2x1ZGUgIndlYnAvZGVjb2RlLmgiICAgICAvLyBXZWJQR2V0RmVhdHVyZXMKLSNpbmNsdWRlICJ3ZWJwL2RlbXV4LmgiCi0jaW5jbHVkZSAid2VicC9mb3JtYXRfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAiLi4vd2VicC9kZWNvZGUuaCIgICAgIC8vIFdlYlBHZXRGZWF0dXJlcworI2luY2x1ZGUgIi4uL3dlYnAvZGVtdXguaCIKKyNpbmNsdWRlICIuLi93ZWJwL2Zvcm1hdF9jb25zdGFudHMuaCIKIAogI2RlZmluZSBETVVYX01BSl9WRVJTSU9OIDAKICNkZWZpbmUgRE1VWF9NSU5fVkVSU0lPTiAyCmRpZmYgLS1naXQgYS9zcmMvZHNwL2FscGhhX3Byb2Nlc3NpbmcuYyBiL3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2luZy5jCmluZGV4IGQwZjdhNmMuLmM4ZTBiNGIgMTAwNjQ0Ci0tLSBhL3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2luZy5jCisrKyBiL3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2luZy5jCkBAIC0zMTEsNyArMzExLDEyIEBACiAKIGV4dGVybiB2b2lkIFdlYlBJbml0QWxwaGFQcm9jZXNzaW5nU1NFMih2b2lkKTsKIAorc3RhdGljIHZvbGF0aWxlIFZQOENQVUluZm8gYWxwaGFfcHJvY2Vzc2luZ19sYXN0X2NwdWluZm9fdXNlZCA9CisgICAgKFZQOENQVUluZm8pJmFscGhhX3Byb2Nlc3NpbmdfbGFzdF9jcHVpbmZvX3VzZWQ7CisKIHZvaWQgV2ViUEluaXRBbHBoYVByb2Nlc3Npbmcodm9pZCkgeworICBpZiAoYWxwaGFfcHJvY2Vzc2luZ19sYXN0X2NwdWluZm9fdXNlZCA9PSBWUDhHZXRDUFVJbmZvKSByZXR1cm47CisKICAgV2ViUE11bHRBUkdCUm93ID0gTXVsdEFSR0JSb3c7CiAgIFdlYlBNdWx0Um93ID0gTXVsdFJvdzsKICAgV2ViUEFwcGx5QWxwaGFNdWx0aXBseSA9IEFwcGx5QWxwaGFNdWx0aXBseTsKQEAgLTMyNiw0ICszMzEsNSBAQAogICAgIH0KICNlbmRpZgogICB9CisgIGFscGhhX3Byb2Nlc3NpbmdfbGFzdF9jcHVpbmZvX3VzZWQgPSBWUDhHZXRDUFVJbmZvOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2RzcC9jcHUuYyBiL3NyYy9kc3AvY3B1LmMKaW5kZXggNzBiYTJhYi4uNDUzMjkzNCAxMDA2NDQKLS0tIGEvc3JjL2RzcC9jcHUuYworKysgYi9zcmMvZHNwL2NwdS5jCkBAIC0yOSwxNiArMjksMTggQEAKICAgICAiY3B1aWRcbiIKICAgICAieGNoZyAlJWVkaSwgJSVlYnhcbiIKICAgICA6ICI9YSIoY3B1X2luZm9bMF0pLCAiPUQiKGNwdV9pbmZvWzFdKSwgIj1jIihjcHVfaW5mb1syXSksICI9ZCIoY3B1X2luZm9bM10pCi0gICAgOiAiYSIoaW5mb190eXBlKSk7CisgICAgOiAiYSIoaW5mb190eXBlKSwgImMiKDApKTsKIH0KICNlbGlmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKIHN0YXRpYyBXRUJQX0lOTElORSB2b2lkIEdldENQVUluZm8oaW50IGNwdV9pbmZvWzRdLCBpbnQgaW5mb190eXBlKSB7CiAgIF9fYXNtX18gdm9sYXRpbGUgKAogICAgICJjcHVpZFxuIgogICAgIDogIj1hIihjcHVfaW5mb1swXSksICI9YiIoY3B1X2luZm9bMV0pLCAiPWMiKGNwdV9pbmZvWzJdKSwgIj1kIihjcHVfaW5mb1szXSkKLSAgICA6ICJhIihpbmZvX3R5cGUpKTsKKyAgICA6ICJhIihpbmZvX3R5cGUpLCAiYyIoMCkpOwogfQotI2VsaWYgZGVmaW5lZChfTVNDX0ZVTExfVkVSKSAmJiBfTVNDX0ZVTExfVkVSID49IDE1MDAzMDcyOSAgLy8gPj0gVlMyMDA4IFNQMQorI2VsaWYgKGRlZmluZWQoX01fWDY0KSB8fCBkZWZpbmVkKF9NX0lYODYpKSAmJiBcCisgICAgICBkZWZpbmVkKF9NU0NfRlVMTF9WRVIpICYmIF9NU0NfRlVMTF9WRVIgPj0gMTUwMDMwNzI5ICAvLyA+PSBWUzIwMDggU1AxCisjaW5jbHVkZSA8aW50cmluLmg+CiAjZGVmaW5lIEdldENQVUluZm8oaW5mbywgdHlwZSkgX19jcHVpZGV4KGluZm8sIHR5cGUsIDApICAvLyBzZXQgZWN4PTAKICNlbGlmIGRlZmluZWQoV0VCUF9NU0NfU1NFMikKICNkZWZpbmUgR2V0Q1BVSW5mbyBfX2NwdWlkCkBAIC01NSw3ICs1Nyw5IEBACiAgICAgOiAiPWEiKGVheCksICI9ZCIoZWR4KSA6ICJjIiAoZWN4KSk7CiAgIHJldHVybiAoKHVpbnQ2NF90KWVkeCA8PCAzMikgfCBlYXg7CiB9Ci0jZWxpZiBkZWZpbmVkKF9NU0NfRlVMTF9WRVIpICYmIF9NU0NfRlVMTF9WRVIgPj0gMTYwMDQwMjE5ICAvLyA+PSBWUzIwMTAgU1AxCisjZWxpZiAoZGVmaW5lZChfTV9YNjQpIHx8IGRlZmluZWQoX01fSVg4NikpICYmIFwKKyAgICAgIGRlZmluZWQoX01TQ19GVUxMX1ZFUikgJiYgX01TQ19GVUxMX1ZFUiA+PSAxNjAwNDAyMTkgIC8vID49IFZTMjAxMCBTUDEKKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KICNkZWZpbmUgeGdldGJ2KCkgX3hnZXRidigwKQogI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChfTV9JWDg2KQogc3RhdGljIFdFQlBfSU5MSU5FIHVpbnQ2NF90IHhnZXRidih2b2lkKSB7CmRpZmYgLS1naXQgYS9zcmMvZHNwL2RlYy5jIGIvc3JjL2RzcC9kZWMuYwppbmRleCA2NWEyYTg4Li4zYThkYzgxIDEwMDY0NAotLS0gYS9zcmMvZHNwL2RlYy5jCisrKyBiL3NyYy9kc3AvZGVjLmMKQEAgLTY4OCw3ICs2ODgsMTIgQEAKIGV4dGVybiB2b2lkIFZQOERzcEluaXRORU9OKHZvaWQpOwogZXh0ZXJuIHZvaWQgVlA4RHNwSW5pdE1JUFMzMih2b2lkKTsKIAorc3RhdGljIHZvbGF0aWxlIFZQOENQVUluZm8gZGVjX2xhc3RfY3B1aW5mb191c2VkID0KKyAgICAoVlA4Q1BVSW5mbykmZGVjX2xhc3RfY3B1aW5mb191c2VkOworCiB2b2lkIFZQOERzcEluaXQodm9pZCkgeworICBpZiAoZGVjX2xhc3RfY3B1aW5mb191c2VkID09IFZQOEdldENQVUluZm8pIHJldHVybjsKKwogICBWUDhJbml0Q2xpcFRhYmxlcygpOwogCiAgIFZQOFRyYW5zZm9ybVdIVCA9IFRyYW5zZm9ybVdIVDsKQEAgLTcyNyw1ICs3MzIsNSBAQAogICAgIH0KICNlbmRpZgogICB9CisgIGRlY19sYXN0X2NwdWluZm9fdXNlZCA9IFZQOEdldENQVUluZm87CiB9Ci0KZGlmZiAtLWdpdCBhL3NyYy9kc3AvZHNwLmggYi9zcmMvZHNwL2RzcC5oCmluZGV4IDNiMzFhZTAuLjgzOGE3MGEgMTAwNjQ0Ci0tLSBhL3NyYy9kc3AvZHNwLmgKKysrIGIvc3JjL2RzcC9kc3AuaApAQCAtMTUsMTAgKzE1LDEwIEBACiAjZGVmaW5lIFdFQlBfRFNQX0RTUF9IXwogCiAjaWZkZWYgSEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIi4uL3dlYnAvY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgIndlYnAvdHlwZXMuaCIKKyNpbmNsdWRlICIuLi93ZWJwL3R5cGVzLmgiCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC02Niw3ICs2NiwxMCBAQAogI2RlZmluZSBXRUJQX0FORFJPSURfTkVPTiAgLy8gQW5kcm9pZCB0YXJnZXRzIHRoYXQgbWlnaHQgc3VwcG9ydCBORU9OCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX19BUk1fTkVPTl9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKQorLy8gVGhlIGludHJpbnNpY3MgY3VycmVudGx5IGNhdXNlIGNvbXBpbGVyIGVycm9ycyB3aXRoIGFybS1uYWNsLWdjYyBhbmQgdGhlCisvLyBpbmxpbmUgYXNzZW1ibHkgd291bGQgbmVlZCB0byBiZSBtb2RpZmllZCBmb3IgdXNlIHdpdGggTmF0aXZlIENsaWVudC4KKyNpZiAoZGVmaW5lZChfX0FSTV9ORU9OX18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pKSBcCisgICAgJiYgIWRlZmluZWQoX19uYXRpdmVfY2xpZW50X18pCiAjZGVmaW5lIFdFQlBfVVNFX05FT04KICNlbmRpZgogCmRpZmYgLS1naXQgYS9zcmMvZHNwL2VuYy5jIGIvc3JjL2RzcC9lbmMuYwppbmRleCBlNGVhOGNiLi5mNGU3MmQ0IDEwMDY0NAotLS0gYS9zcmMvZHNwL2VuYy5jCisrKyBiL3NyYy9kc3AvZW5jLmMKQEAgLTY5Miw3ICs2OTIsMTIgQEAKIGV4dGVybiB2b2lkIFZQOEVuY0RzcEluaXRORU9OKHZvaWQpOwogZXh0ZXJuIHZvaWQgVlA4RW5jRHNwSW5pdE1JUFMzMih2b2lkKTsKIAorc3RhdGljIHZvbGF0aWxlIFZQOENQVUluZm8gZW5jX2xhc3RfY3B1aW5mb191c2VkID0KKyAgICAoVlA4Q1BVSW5mbykmZW5jX2xhc3RfY3B1aW5mb191c2VkOworCiB2b2lkIFZQOEVuY0RzcEluaXQodm9pZCkgeworICBpZiAoZW5jX2xhc3RfY3B1aW5mb191c2VkID09IFZQOEdldENQVUluZm8pIHJldHVybjsKKwogICBWUDhEc3BJbml0KCk7ICAvLyBjb21tb24gaW52ZXJzZSB0cmFuc2Zvcm1zCiAgIEluaXRUYWJsZXMoKTsKIApAQCAtNzM3LDUgKzc0Miw2IEBACiAgICAgfQogI2VuZGlmCiAgIH0KKyAgZW5jX2xhc3RfY3B1aW5mb191c2VkID0gVlA4R2V0Q1BVSW5mbzsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2RzcC9lbmNfbmVvbi5jIGIvc3JjL2RzcC9lbmNfbmVvbi5jCmluZGV4IDQyMDQxZjcuLjU4MTRmYWMgMTAwNjQ0Ci0tLSBhL3NyYy9kc3AvZW5jX25lb24uYworKysgYi9zcmMvZHNwL2VuY19uZW9uLmMKQEAgLTEwMTIsOCArMTAxMiwxMCBAQAogICBjb25zdCBpbnQxNng4X3Qgb3V0MCA9IFF1YW50aXplKGluLCBtdHgsIDApOwogICBjb25zdCBpbnQxNng4X3Qgb3V0MSA9IFF1YW50aXplKGluLCBtdHgsIDgpOwogICB1aW50OHg4eDRfdCBzaHVmZmxlczsKLSAgLy8gdnRibDRfdTggaXMgbWFya2VkIHVuYXZhaWxhYmxlIGZvciBpT1MgYXJtNjQsIHVzZSB3aWRlciB2ZXJzaW9ucyB0aGVyZS4KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX2FhcmNoNjRfXykKKyAgLy8gdnRibD9fdTggYXJlIG1hcmtlZCB1bmF2YWlsYWJsZSBmb3IgaU9TIGFybTY0IHdpdGggWGNvZGUgPCA2LjMsIHVzZQorICAvLyBub24tc3RhbmRhcmQgdmVyc2lvbnMgdGhlcmUuCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19hYXJjaDY0X18pICYmIFwKKyAgICBkZWZpbmVkKF9fYXBwbGVfYnVpbGRfdmVyc2lvbl9fKSAmJiAoX19hcHBsZV9idWlsZF92ZXJzaW9uX188IDYwMjAwMzcpCiAgIHVpbnQ4eDE2eDJfdCBhbGxfb3V0OwogICBJTklUX1ZFQ1RPUjIoYWxsX291dCwgdnJlaW50ZXJwcmV0cV91OF9zMTYob3V0MCksIHZyZWludGVycHJldHFfdThfczE2KG91dDEpKTsKICAgSU5JVF9WRUNUT1I0KHNodWZmbGVzLApkaWZmIC0tZ2l0IGEvc3JjL2RzcC9sb3NzbGVzcy5jIGIvc3JjL2RzcC9sb3NzbGVzcy5jCmluZGV4IGExYmYzNTguLmVlMzM0YmMgMTAwNjQ0Ci0tLSBhL3NyYy9kc3AvbG9zc2xlc3MuYworKysgYi9zcmMvZHNwL2xvc3NsZXNzLmMKQEAgLTE1OTAsNyArMTU5MCwxMiBAQAogZXh0ZXJuIHZvaWQgVlA4TERzcEluaXRORU9OKHZvaWQpOwogZXh0ZXJuIHZvaWQgVlA4TERzcEluaXRNSVBTMzIodm9pZCk7CiAKK3N0YXRpYyB2b2xhdGlsZSBWUDhDUFVJbmZvIGxvc3NsZXNzX2xhc3RfY3B1aW5mb191c2VkID0KKyAgICAoVlA4Q1BVSW5mbykmbG9zc2xlc3NfbGFzdF9jcHVpbmZvX3VzZWQ7CisKIHZvaWQgVlA4TERzcEluaXQodm9pZCkgeworICBpZiAobG9zc2xlc3NfbGFzdF9jcHVpbmZvX3VzZWQgPT0gVlA4R2V0Q1BVSW5mbykgcmV0dXJuOworCiAgIG1lbWNweShWUDhMUHJlZGljdG9ycywga1ByZWRpY3RvcnNDLCBzaXplb2YoVlA4TFByZWRpY3RvcnMpKTsKIAogICBWUDhMU3VidHJhY3RHcmVlbkZyb21CbHVlQW5kUmVkID0gVlA4TFN1YnRyYWN0R3JlZW5Gcm9tQmx1ZUFuZFJlZF9DOwpAQCAtMTYzNCw2ICsxNjM5LDcgQEAKICAgICB9CiAjZW5kaWYKICAgfQorICBsb3NzbGVzc19sYXN0X2NwdWluZm9fdXNlZCA9IFZQOEdldENQVUluZm87CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvZHNwL2xvc3NsZXNzLmggYi9zcmMvZHNwL2xvc3NsZXNzLmgKaW5kZXggMDhiZTkzNy4uOGM3NTUxYyAxMDA2NDQKLS0tIGEvc3JjL2RzcC9sb3NzbGVzcy5oCisrKyBiL3NyYy9kc3AvbG9zc2xlc3MuaApAQCAtMTUsOCArMTUsOCBAQAogI2lmbmRlZiBXRUJQX0RTUF9MT1NTTEVTU19IXwogI2RlZmluZSBXRUJQX0RTUF9MT1NTTEVTU19IXwogCi0jaW5jbHVkZSAid2VicC90eXBlcy5oIgotI2luY2x1ZGUgIndlYnAvZGVjb2RlLmgiCisjaW5jbHVkZSAiLi4vd2VicC90eXBlcy5oIgorI2luY2x1ZGUgIi4uL3dlYnAvZGVjb2RlLmgiCiAKICNpbmNsdWRlICIuLi9lbmMvaGlzdG9ncmFtLmgiCiAjaW5jbHVkZSAiLi4vdXRpbHMvdXRpbHMuaCIKZGlmZiAtLWdpdCBhL3NyYy9kc3AvbG9zc2xlc3NfbmVvbi5jIGIvc3JjL2RzcC9sb3NzbGVzc19uZW9uLmMKaW5kZXggOTg3NzY3Yi4uOGM4MmIxOSAxMDA2NDQKLS0tIGEvc3JjL2RzcC9sb3NzbGVzc19uZW9uLmMKKysrIGIvc3JjL2RzcC9sb3NzbGVzc19uZW9uLmMKQEAgLTI1OSwyMCArMjU5LDQ1IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gU3VidHJhY3QtR3JlZW4gVHJhbnNmb3JtCiAKLS8vIHZ0Ymw/IGFyZSB1bmF2YWlsYWJsZSBpbiBpT1MvYXJtNjQgYnVpbGRzLgotI2lmICFkZWZpbmVkKF9fYWFyY2g2NF9fKQorLy8gdnRibD9fdTggYXJlIG1hcmtlZCB1bmF2YWlsYWJsZSBmb3IgaU9TIGFybTY0IHdpdGggWGNvZGUgPCA2LjMsIHVzZQorLy8gbm9uLXN0YW5kYXJkIHZlcnNpb25zIHRoZXJlLgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKF9fYWFyY2g2NF9fKSAmJiBcCisgICAgZGVmaW5lZChfX2FwcGxlX2J1aWxkX3ZlcnNpb25fXykgJiYgKF9fYXBwbGVfYnVpbGRfdmVyc2lvbl9fPCA2MDIwMDM3KQorI2RlZmluZSBVU0VfVlRCTFEKKyNlbmRpZgogCi0vLyAyNTUgPSBieXRlIHdpbGwgYmUgemVybydkCisjaWZkZWYgVVNFX1ZUQkxRCisvLyAyNTUgPSBieXRlIHdpbGwgYmUgemVyb2VkCitzdGF0aWMgY29uc3QgdWludDhfdCBrR3JlZW5TaHVmZmxlWzE2XSA9IHsKKyAgMSwgMjU1LCAxLCAyNTUsIDUsIDI1NSwgNSwgMjU1LCA5LCAyNTUsIDksIDI1NSwgMTMsIDI1NSwgMTMsIDI1NQorfTsKKworc3RhdGljIFdFQlBfSU5MSU5FIHVpbnQ4eDE2X3QgRG9HcmVlblNodWZmbGUoY29uc3QgdWludDh4MTZfdCBhcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDh4MTZfdCBzaHVmZmxlKSB7CisgIHJldHVybiB2Y29tYmluZV91OCh2dGJsMXFfdTgoYXJnYiwgdmdldF9sb3dfdTgoc2h1ZmZsZSkpLAorICAgICAgICAgICAgICAgICAgICAgdnRibDFxX3U4KGFyZ2IsIHZnZXRfaGlnaF91OChzaHVmZmxlKSkpOworfQorI2Vsc2UgIC8vICFVU0VfVlRCTFEKKy8vIDI1NSA9IGJ5dGUgd2lsbCBiZSB6ZXJvZWQKIHN0YXRpYyBjb25zdCB1aW50OF90IGtHcmVlblNodWZmbGVbOF0gPSB7IDEsIDI1NSwgMSwgMjU1LCA1LCAyNTUsIDUsIDI1NSAgfTsKIAorc3RhdGljIFdFQlBfSU5MSU5FIHVpbnQ4eDE2X3QgRG9HcmVlblNodWZmbGUoY29uc3QgdWludDh4MTZfdCBhcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDh4OF90IHNodWZmbGUpIHsKKyAgcmV0dXJuIHZjb21iaW5lX3U4KHZ0YmwxX3U4KHZnZXRfbG93X3U4KGFyZ2IpLCBzaHVmZmxlKSwKKyAgICAgICAgICAgICAgICAgICAgIHZ0YmwxX3U4KHZnZXRfaGlnaF91OChhcmdiKSwgc2h1ZmZsZSkpOworfQorI2VuZGlmICAvLyBVU0VfVlRCTFEKKwogc3RhdGljIHZvaWQgU3VidHJhY3RHcmVlbkZyb21CbHVlQW5kUmVkKHVpbnQzMl90KiBhcmdiX2RhdGEsIGludCBudW1fcGl4ZWxzKSB7CiAgIGNvbnN0IHVpbnQzMl90KiBjb25zdCBlbmQgPSBhcmdiX2RhdGEgKyAobnVtX3BpeGVscyAmIH4zKTsKKyNpZmRlZiBVU0VfVlRCTFEKKyAgY29uc3QgdWludDh4MTZfdCBzaHVmZmxlID0gdmxkMXFfdTgoa0dyZWVuU2h1ZmZsZSk7CisjZWxzZQogICBjb25zdCB1aW50OHg4X3Qgc2h1ZmZsZSA9IHZsZDFfdTgoa0dyZWVuU2h1ZmZsZSk7CisjZW5kaWYKICAgZm9yICg7IGFyZ2JfZGF0YSA8IGVuZDsgYXJnYl9kYXRhICs9IDQpIHsKICAgICBjb25zdCB1aW50OHgxNl90IGFyZ2IgPSB2bGQxcV91OCgodWludDhfdCopYXJnYl9kYXRhKTsKLSAgICBjb25zdCB1aW50OHgxNl90IGdyZWVucyA9Ci0gICAgICAgIHZjb21iaW5lX3U4KHZ0YmwxX3U4KHZnZXRfbG93X3U4KGFyZ2IpLCBzaHVmZmxlKSwKLSAgICAgICAgICAgICAgICAgICAgdnRibDFfdTgodmdldF9oaWdoX3U4KGFyZ2IpLCBzaHVmZmxlKSk7CisgICAgY29uc3QgdWludDh4MTZfdCBncmVlbnMgPSBEb0dyZWVuU2h1ZmZsZShhcmdiLCBzaHVmZmxlKTsKICAgICB2c3QxcV91OCgodWludDhfdCopYXJnYl9kYXRhLCB2c3VicV91OChhcmdiLCBncmVlbnMpKTsKICAgfQogICAvLyBmYWxsdGhyb3VnaCBhbmQgZmluaXNoIG9mZiB3aXRoIHBsYWluLUMKQEAgLTI4MSwxOSArMzA2LDIxIEBACiAKIHN0YXRpYyB2b2lkIEFkZEdyZWVuVG9CbHVlQW5kUmVkKHVpbnQzMl90KiBhcmdiX2RhdGEsIGludCBudW1fcGl4ZWxzKSB7CiAgIGNvbnN0IHVpbnQzMl90KiBjb25zdCBlbmQgPSBhcmdiX2RhdGEgKyAobnVtX3BpeGVscyAmIH4zKTsKKyNpZmRlZiBVU0VfVlRCTFEKKyAgY29uc3QgdWludDh4MTZfdCBzaHVmZmxlID0gdmxkMXFfdTgoa0dyZWVuU2h1ZmZsZSk7CisjZWxzZQogICBjb25zdCB1aW50OHg4X3Qgc2h1ZmZsZSA9IHZsZDFfdTgoa0dyZWVuU2h1ZmZsZSk7CisjZW5kaWYKICAgZm9yICg7IGFyZ2JfZGF0YSA8IGVuZDsgYXJnYl9kYXRhICs9IDQpIHsKICAgICBjb25zdCB1aW50OHgxNl90IGFyZ2IgPSB2bGQxcV91OCgodWludDhfdCopYXJnYl9kYXRhKTsKLSAgICBjb25zdCB1aW50OHgxNl90IGdyZWVucyA9Ci0gICAgICAgIHZjb21iaW5lX3U4KHZ0YmwxX3U4KHZnZXRfbG93X3U4KGFyZ2IpLCBzaHVmZmxlKSwKLSAgICAgICAgICAgICAgICAgICAgdnRibDFfdTgodmdldF9oaWdoX3U4KGFyZ2IpLCBzaHVmZmxlKSk7CisgICAgY29uc3QgdWludDh4MTZfdCBncmVlbnMgPSBEb0dyZWVuU2h1ZmZsZShhcmdiLCBzaHVmZmxlKTsKICAgICB2c3QxcV91OCgodWludDhfdCopYXJnYl9kYXRhLCB2YWRkcV91OChhcmdiLCBncmVlbnMpKTsKICAgfQogICAvLyBmYWxsdGhyb3VnaCBhbmQgZmluaXNoIG9mZiB3aXRoIHBsYWluLUMKICAgVlA4TEFkZEdyZWVuVG9CbHVlQW5kUmVkX0MoYXJnYl9kYXRhLCBudW1fcGl4ZWxzICYgMyk7CiB9CiAKLSNlbmRpZiAgIC8vICFfX2FhcmNoNjRfXworI3VuZGVmIFVTRV9WVEJMUQogCiAjZW5kaWYgICAvLyBVU0VfSU5UUklOU0lDUwogCkBAIC0zMjAsMTEgKzM0Nyw5IEBACiAgIFZQOExQcmVkaWN0b3JzWzEyXSA9IFByZWRpY3RvcjEyOwogICBWUDhMUHJlZGljdG9yc1sxM10gPSBQcmVkaWN0b3IxMzsKIAotI2lmICFkZWZpbmVkKF9fYWFyY2g2NF9fKQogICBWUDhMU3VidHJhY3RHcmVlbkZyb21CbHVlQW5kUmVkID0gU3VidHJhY3RHcmVlbkZyb21CbHVlQW5kUmVkOwogICBWUDhMQWRkR3JlZW5Ub0JsdWVBbmRSZWQgPSBBZGRHcmVlblRvQmx1ZUFuZFJlZDsKICNlbmRpZgotI2VuZGlmCiAKICNlbmRpZiAgIC8vIFdFQlBfVVNFX05FT04KIH0KZGlmZiAtLWdpdCBhL3NyYy9kc3AvdXBzYW1wbGluZy5jIGIvc3JjL2RzcC91cHNhbXBsaW5nLmMKaW5kZXggMmIxNjU2Yi4uNTNjNjhkNSAxMDA2NDQKLS0tIGEvc3JjL2RzcC91cHNhbXBsaW5nLmMKKysrIGIvc3JjL2RzcC91cHNhbXBsaW5nLmMKQEAgLTE4OSw3ICsxODksMTIgQEAKIGV4dGVybiB2b2lkIFdlYlBJbml0VXBzYW1wbGVyc1NTRTIodm9pZCk7CiBleHRlcm4gdm9pZCBXZWJQSW5pdFVwc2FtcGxlcnNORU9OKHZvaWQpOwogCitzdGF0aWMgdm9sYXRpbGUgVlA4Q1BVSW5mbyB1cHNhbXBsaW5nX2xhc3RfY3B1aW5mb191c2VkMiA9CisgICAgKFZQOENQVUluZm8pJnVwc2FtcGxpbmdfbGFzdF9jcHVpbmZvX3VzZWQyOworCiB2b2lkIFdlYlBJbml0VXBzYW1wbGVycyh2b2lkKSB7CisgIGlmICh1cHNhbXBsaW5nX2xhc3RfY3B1aW5mb191c2VkMiA9PSBWUDhHZXRDUFVJbmZvKSByZXR1cm47CisKICNpZmRlZiBGQU5DWV9VUFNBTVBMSU5HCiAgIFdlYlBVcHNhbXBsZXJzW01PREVfUkdCXSAgICAgICA9IFVwc2FtcGxlUmdiTGluZVBhaXI7CiAgIFdlYlBVcHNhbXBsZXJzW01PREVfUkdCQV0gICAgICA9IFVwc2FtcGxlUmdiYUxpbmVQYWlyOwpAQCAtMjE3LDYgKzIyMiw3IEBACiAjZW5kaWYKICAgfQogI2VuZGlmICAvLyBGQU5DWV9VUFNBTVBMSU5HCisgIHVwc2FtcGxpbmdfbGFzdF9jcHVpbmZvX3VzZWQyID0gVlA4R2V0Q1BVSW5mbzsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9kc3AveXV2LmMgYi9zcmMvZHNwL3l1di5jCmluZGV4IGQ3Y2I0ZWIuLjZmNDIyZGEgMTAwNjQ0Ci0tLSBhL3NyYy9kc3AveXV2LmMKKysrIGIvc3JjL2RzcC95dXYuYwpAQCAtMTIzLDcgKzEyMywxMiBAQAogZXh0ZXJuIHZvaWQgV2ViUEluaXRTYW1wbGVyc1NTRTIodm9pZCk7CiBleHRlcm4gdm9pZCBXZWJQSW5pdFNhbXBsZXJzTUlQUzMyKHZvaWQpOwogCitzdGF0aWMgdm9sYXRpbGUgVlA4Q1BVSW5mbyB5dXZfbGFzdF9jcHVpbmZvX3VzZWQgPQorICAgIChWUDhDUFVJbmZvKSZ5dXZfbGFzdF9jcHVpbmZvX3VzZWQ7CisKIHZvaWQgV2ViUEluaXRTYW1wbGVycyh2b2lkKSB7CisgIGlmICh5dXZfbGFzdF9jcHVpbmZvX3VzZWQgPT0gVlA4R2V0Q1BVSW5mbykgcmV0dXJuOworCiAgIFdlYlBTYW1wbGVyc1tNT0RFX1JHQl0gICAgICAgPSBZdXZUb1JnYlJvdzsKICAgV2ViUFNhbXBsZXJzW01PREVfUkdCQV0gICAgICA9IFl1dlRvUmdiYVJvdzsKICAgV2ViUFNhbXBsZXJzW01PREVfQkdSXSAgICAgICA9IFl1dlRvQmdyUm93OwpAQCAtMTQ5LDYgKzE1NCw3IEBACiAgICAgfQogI2VuZGlmICAvLyBXRUJQX1VTRV9NSVBTMzIKICAgfQorICB5dXZfbGFzdF9jcHVpbmZvX3VzZWQgPSBWUDhHZXRDUFVJbmZvOwogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvdXRpbHMvYml0X3JlYWRlci5jIGIvc3JjL3V0aWxzL2JpdF9yZWFkZXIuYwppbmRleCBiYmRkZDQyLi42NDUwM2U2IDEwMDY0NAotLS0gYS9zcmMvdXRpbHMvYml0X3JlYWRlci5jCisrKyBiL3NyYy91dGlscy9iaXRfcmVhZGVyLmMKQEAgLTEyLDcgKzEyLDcgQEAKIC8vIEF1dGhvcjogU2thbCAocGFzY2FsLm1hc3NpbWlub0BnbWFpbC5jb20pCiAKICNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAid2VicC9jb25maWcuaCIKKyNpbmNsdWRlICIuLi93ZWJwL2NvbmZpZy5oIgogI2VuZGlmCiAKICNpbmNsdWRlICIuL2JpdF9yZWFkZXJfaW5sLmgiCmRpZmYgLS1naXQgYS9zcmMvdXRpbHMvYml0X3JlYWRlci5oIGIvc3JjL3V0aWxzL2JpdF9yZWFkZXIuaAppbmRleCBhNmFlODVlLi5mNTY5NzM0IDEwMDY0NAotLS0gYS9zcmMvdXRpbHMvYml0X3JlYWRlci5oCisrKyBiL3NyYy91dGlscy9iaXRfcmVhZGVyLmgKQEAgLTE5LDcgKzE5LDcgQEAKICNpZmRlZiBfTVNDX1ZFUgogI2luY2x1ZGUgPHN0ZGxpYi5oPiAgLy8gX2J5dGVzd2FwX3Vsb25nCiAjZW5kaWYKLSNpbmNsdWRlICJ3ZWJwL3R5cGVzLmgiCisjaW5jbHVkZSAiLi4vd2VicC90eXBlcy5oIgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpkaWZmIC0tZ2l0IGEvc3JjL3V0aWxzL2JpdF9yZWFkZXJfaW5sLmggYi9zcmMvdXRpbHMvYml0X3JlYWRlcl9pbmwuaAppbmRleCA5ZjU5Y2EzLi44MTQyN2M2IDEwMDY0NAotLS0gYS9zcmMvdXRpbHMvYml0X3JlYWRlcl9pbmwuaAorKysgYi9zcmMvdXRpbHMvYml0X3JlYWRlcl9pbmwuaApAQCAtMTcsNyArMTcsNyBAQAogI2RlZmluZSBXRUJQX1VUSUxTX0JJVF9SRUFERVJfSU5MX0hfCiAKICNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAid2VicC9jb25maWcuaCIKKyNpbmNsdWRlICIuLi93ZWJwL2NvbmZpZy5oIgogI2VuZGlmCiAKICNpZmRlZiBXRUJQX0ZPUkNFX0FMSUdORUQKZGlmZiAtLWdpdCBhL3NyYy91dGlscy9iaXRfd3JpdGVyLmggYi9zcmMvdXRpbHMvYml0X3dyaXRlci5oCmluZGV4IDEwN2EyYjEuLmM4MGQyMmEgMTAwNjQ0Ci0tLSBhL3NyYy91dGlscy9iaXRfd3JpdGVyLmgKKysrIGIvc3JjL3V0aWxzL2JpdF93cml0ZXIuaApAQCAtMTQsNyArMTQsNyBAQAogI2lmbmRlZiBXRUJQX1VUSUxTX0JJVF9XUklURVJfSF8KICNkZWZpbmUgV0VCUF9VVElMU19CSVRfV1JJVEVSX0hfCiAKLSNpbmNsdWRlICJ3ZWJwL3R5cGVzLmgiCisjaW5jbHVkZSAiLi4vd2VicC90eXBlcy5oIgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpkaWZmIC0tZ2l0IGEvc3JjL3V0aWxzL2NvbG9yX2NhY2hlLmggYi9zcmMvdXRpbHMvY29sb3JfY2FjaGUuaAppbmRleCAyNmFhYzk5Li4wZjgyNGVkIDEwMDY0NAotLS0gYS9zcmMvdXRpbHMvY29sb3JfY2FjaGUuaAorKysgYi9zcmMvdXRpbHMvY29sb3JfY2FjaGUuaApAQCAtMTUsNyArMTUsNyBAQAogI2lmbmRlZiBXRUJQX1VUSUxTX0NPTE9SX0NBQ0hFX0hfCiAjZGVmaW5lIFdFQlBfVVRJTFNfQ09MT1JfQ0FDSEVfSF8KIAotI2luY2x1ZGUgIndlYnAvdHlwZXMuaCIKKyNpbmNsdWRlICIuLi93ZWJwL3R5cGVzLmgiCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CmRpZmYgLS1naXQgYS9zcmMvdXRpbHMvZW5kaWFuX2lubC5oIGIvc3JjL3V0aWxzL2VuZGlhbl9pbmwuaAppbmRleCBmMzYyYTZlLi5jZDU2YzM3IDEwMDY0NAotLS0gYS9zcmMvdXRpbHMvZW5kaWFuX2lubC5oCisrKyBiL3NyYy91dGlscy9lbmRpYW5faW5sLmgKQEAgLTEzLDExICsxMywxMSBAQAogI2RlZmluZSBXRUJQX1VUSUxTX0VORElBTl9JTkxfSF8KIAogI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJ3ZWJwL2NvbmZpZy5oIgorI2luY2x1ZGUgIi4uL3dlYnAvY29uZmlnLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgIi4uL2RzcC9kc3AuaCIKLSNpbmNsdWRlICJ3ZWJwL3R5cGVzLmgiCisjaW5jbHVkZSAiLi4vd2VicC90eXBlcy5oIgogCiAvLyBzb21lIGVuZGlhbiBmaXggKGUuZy46IG1pcHMtZ2NjIGRvZXNuJ3QgZGVmaW5lIF9fQklHX0VORElBTl9fKQogI2lmICFkZWZpbmVkKFdPUkRTX0JJR0VORElBTikgJiYgXApkaWZmIC0tZ2l0IGEvc3JjL3V0aWxzL2ZpbHRlcnMuaCBiL3NyYy91dGlscy9maWx0ZXJzLmgKaW5kZXggNTY3NjI3OS4uZGRlMzljYiAxMDA2NDQKLS0tIGEvc3JjL3V0aWxzL2ZpbHRlcnMuaAorKysgYi9zcmMvdXRpbHMvZmlsdGVycy5oCkBAIC0xNCw3ICsxNCw3IEBACiAjaWZuZGVmIFdFQlBfVVRJTFNfRklMVEVSU19IXwogI2RlZmluZSBXRUJQX1VUSUxTX0ZJTFRFUlNfSF8KIAotI2luY2x1ZGUgIndlYnAvdHlwZXMuaCIKKyNpbmNsdWRlICIuLi93ZWJwL3R5cGVzLmgiCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CmRpZmYgLS1naXQgYS9zcmMvdXRpbHMvaHVmZm1hbi5jIGIvc3JjL3V0aWxzL2h1ZmZtYW4uYwppbmRleCAxOTE2YTAwLi5jNGMxNmQ5IDEwMDY0NAotLS0gYS9zcmMvdXRpbHMvaHVmZm1hbi5jCisrKyBiL3NyYy91dGlscy9odWZmbWFuLmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICIuL2h1ZmZtYW4uaCIKICNpbmNsdWRlICIuLi91dGlscy91dGlscy5oIgotI2luY2x1ZGUgIndlYnAvZm9ybWF0X2NvbnN0YW50cy5oIgorI2luY2x1ZGUgIi4uL3dlYnAvZm9ybWF0X2NvbnN0YW50cy5oIgogCiAvLyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyB0byB1c2UgbG9vay11cCB0YWJsZSBmb3IgUmV2ZXJzZUJpdHMoKQogLy8gKG1pZ2h0IGJlIGZhc3RlciBvbiBzb21lIHBsYXRmb3JtKQpkaWZmIC0tZ2l0IGEvc3JjL3V0aWxzL2h1ZmZtYW4uaCBiL3NyYy91dGlscy9odWZmbWFuLmgKaW5kZXggYmYxNTg4ZC4uNjI0YmMxNyAxMDA2NDQKLS0tIGEvc3JjL3V0aWxzL2h1ZmZtYW4uaAorKysgYi9zcmMvdXRpbHMvaHVmZm1hbi5oCkBAIC0xNSw4ICsxNSw4IEBACiAjZGVmaW5lIFdFQlBfVVRJTFNfSFVGRk1BTl9IXwogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSAid2VicC9mb3JtYXRfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAid2VicC90eXBlcy5oIgorI2luY2x1ZGUgIi4uL3dlYnAvZm9ybWF0X2NvbnN0YW50cy5oIgorI2luY2x1ZGUgIi4uL3dlYnAvdHlwZXMuaCIKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKZGlmZiAtLWdpdCBhL3NyYy91dGlscy9odWZmbWFuX2VuY29kZS5jIGIvc3JjL3V0aWxzL2h1ZmZtYW5fZW5jb2RlLmMKaW5kZXggZDdhYWQ2Zi4uNjQyMWMyYiAxMDA2NDQKLS0tIGEvc3JjL3V0aWxzL2h1ZmZtYW5fZW5jb2RlLmMKKysrIGIvc3JjL3V0aWxzL2h1ZmZtYW5fZW5jb2RlLmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlICIuL2h1ZmZtYW5fZW5jb2RlLmgiCiAjaW5jbHVkZSAiLi4vdXRpbHMvdXRpbHMuaCIKLSNpbmNsdWRlICJ3ZWJwL2Zvcm1hdF9jb25zdGFudHMuaCIKKyNpbmNsdWRlICIuLi93ZWJwL2Zvcm1hdF9jb25zdGFudHMuaCIKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFV0aWwgZnVuY3Rpb24gdG8gb3B0aW1pemUgdGhlIHN5bWJvbCBtYXAgZm9yIFJMRSBjb2RpbmcKZGlmZiAtLWdpdCBhL3NyYy91dGlscy9odWZmbWFuX2VuY29kZS5oIGIvc3JjL3V0aWxzL2h1ZmZtYW5fZW5jb2RlLmgKaW5kZXggZGFlYTM5Zi4uOTFhYTE4ZiAxMDA2NDQKLS0tIGEvc3JjL3V0aWxzL2h1ZmZtYW5fZW5jb2RlLmgKKysrIGIvc3JjL3V0aWxzL2h1ZmZtYW5fZW5jb2RlLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNpZm5kZWYgV0VCUF9VVElMU19IVUZGTUFOX0VOQ09ERV9IXwogI2RlZmluZSBXRUJQX1VUSUxTX0hVRkZNQU5fRU5DT0RFX0hfCiAKLSNpbmNsdWRlICJ3ZWJwL3R5cGVzLmgiCisjaW5jbHVkZSAiLi4vd2VicC90eXBlcy5oIgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpkaWZmIC0tZ2l0IGEvc3JjL3V0aWxzL3F1YW50X2xldmVscy5oIGIvc3JjL3V0aWxzL3F1YW50X2xldmVscy5oCmluZGV4IDM5MTZiOTcuLjFjYjVhMzIgMTAwNjQ0Ci0tLSBhL3NyYy91dGlscy9xdWFudF9sZXZlbHMuaAorKysgYi9zcmMvdXRpbHMvcXVhbnRfbGV2ZWxzLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0jaW5jbHVkZSAid2VicC90eXBlcy5oIgorI2luY2x1ZGUgIi4uL3dlYnAvdHlwZXMuaCIKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKZGlmZiAtLWdpdCBhL3NyYy91dGlscy9xdWFudF9sZXZlbHNfZGVjLmggYi9zcmMvdXRpbHMvcXVhbnRfbGV2ZWxzX2RlYy5oCmluZGV4IDI5YzdlNmUuLjlhYWIwNjggMTAwNjQ0Ci0tLSBhL3NyYy91dGlscy9xdWFudF9sZXZlbHNfZGVjLmgKKysrIGIvc3JjL3V0aWxzL3F1YW50X2xldmVsc19kZWMuaApAQCAtMTQsNyArMTQsNyBAQAogI2lmbmRlZiBXRUJQX1VUSUxTX1FVQU5UX0xFVkVMU19ERUNfSF8KICNkZWZpbmUgV0VCUF9VVElMU19RVUFOVF9MRVZFTFNfREVDX0hfCiAKLSNpbmNsdWRlICJ3ZWJwL3R5cGVzLmgiCisjaW5jbHVkZSAiLi4vd2VicC90eXBlcy5oIgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpkaWZmIC0tZ2l0IGEvc3JjL3V0aWxzL3JhbmRvbS5oIGIvc3JjL3V0aWxzL3JhbmRvbS5oCmluZGV4IDc0NWYzZTIuLmMzOTJhNjEgMTAwNjQ0Ci0tLSBhL3NyYy91dGlscy9yYW5kb20uaAorKysgYi9zcmMvdXRpbHMvcmFuZG9tLmgKQEAgLTE1LDcgKzE1LDcgQEAKICNkZWZpbmUgV0VCUF9VVElMU19SQU5ET01fSF8KIAogI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgIndlYnAvdHlwZXMuaCIKKyNpbmNsdWRlICIuLi93ZWJwL3R5cGVzLmgiCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CmRpZmYgLS1naXQgYS9zcmMvdXRpbHMvcmVzY2FsZXIuaCBiL3NyYy91dGlscy9yZXNjYWxlci5oCmluZGV4IDY2OTljNWIuLmE2ZjM3ODcgMTAwNjQ0Ci0tLSBhL3NyYy91dGlscy9yZXNjYWxlci5oCisrKyBiL3NyYy91dGlscy9yZXNjYWxlci5oCkBAIC0xOCw3ICsxOCw3IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaW5jbHVkZSAid2VicC90eXBlcy5oIgorI2luY2x1ZGUgIi4uL3dlYnAvdHlwZXMuaCIKIAogLy8gU3RydWN0dXJlIHVzZWQgZm9yIG9uLXRoZS1mbHkgcmVzY2FsaW5nCiB0eXBlZGVmIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9zcmMvdXRpbHMvdGhyZWFkLmggYi9zcmMvdXRpbHMvdGhyZWFkLmgKaW5kZXggZWI3MTRlMS4uN2JkNDUxYiAxMDA2NDQKLS0tIGEvc3JjL3V0aWxzL3RocmVhZC5oCisrKyBiL3NyYy91dGlscy90aHJlYWQuaApAQCAtMTUsMTAgKzE1LDEwIEBACiAjZGVmaW5lIFdFQlBfVVRJTFNfVEhSRUFEX0hfCiAKICNpZmRlZiBIQVZFX0NPTkZJR19ICi0jaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiLi4vd2VicC9jb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSAid2VicC90eXBlcy5oIgorI2luY2x1ZGUgIi4uL3dlYnAvdHlwZXMuaCIKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKZGlmZiAtLWdpdCBhL3NyYy91dGlscy91dGlscy5oIGIvc3JjL3V0aWxzL3V0aWxzLmgKaW5kZXggYThlOGMzZC4uZjJjNDk4YSAxMDA2NDQKLS0tIGEvc3JjL3V0aWxzL3V0aWxzLmgKKysrIGIvc3JjL3V0aWxzL3V0aWxzLmgKQEAgLTE3LDcgKzE3LDcgQEAKIAogI2luY2x1ZGUgPGFzc2VydC5oPgogCi0jaW5jbHVkZSAid2VicC90eXBlcy5oIgorI2luY2x1ZGUgIi4uL3dlYnAvdHlwZXMuaCIKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKZGlmZiAtLWdpdCBhL3NyYy93ZWJwL2RlY29kZS5oIGIvc3JjL3dlYnAvZGVjb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzZjdiZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy93ZWJwL2RlY29kZS5oCkBAIC0wLDAgKzEsNTAzIEBACisvLyBDb3B5cmlnaHQgMjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKKy8vIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQorLy8gdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAorLy8gaW4gdGhlIGZpbGUgUEFURU5UUy4gQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5CisvLyBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gIE1haW4gZGVjb2RpbmcgZnVuY3Rpb25zIGZvciBXZWJQIGltYWdlcy4KKy8vCisvLyBBdXRob3I6IFNrYWwgKHBhc2NhbC5tYXNzaW1pbm9AZ21haWwuY29tKQorCisjaWZuZGVmIFdFQlBfV0VCUF9ERUNPREVfSF8KKyNkZWZpbmUgV0VCUF9XRUJQX0RFQ09ERV9IXworCisjaW5jbHVkZSAiLi90eXBlcy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgV0VCUF9ERUNPREVSX0FCSV9WRVJTSU9OIDB4MDIwMyAgICAvLyBNQUpPUig4YikgKyBNSU5PUig4YikKKworLy8gTm90ZTogZm9yd2FyZCBkZWNsYXJpbmcgZW51bWVyYXRpb25zIGlzIG5vdCBhbGxvd2VkIGluIChzdHJpY3QpIEMgYW5kIEMrKywKKy8vIHRoZSB0eXBlcyBhcmUgbGVmdCBoZXJlIGZvciByZWZlcmVuY2UuCisvLyB0eXBlZGVmIGVudW0gVlA4U3RhdHVzQ29kZSBWUDhTdGF0dXNDb2RlOworLy8gdHlwZWRlZiBlbnVtIFdFQlBfQ1NQX01PREUgV0VCUF9DU1BfTU9ERTsKK3R5cGVkZWYgc3RydWN0IFdlYlBSR0JBQnVmZmVyIFdlYlBSR0JBQnVmZmVyOwordHlwZWRlZiBzdHJ1Y3QgV2ViUFlVVkFCdWZmZXIgV2ViUFlVVkFCdWZmZXI7Cit0eXBlZGVmIHN0cnVjdCBXZWJQRGVjQnVmZmVyIFdlYlBEZWNCdWZmZXI7Cit0eXBlZGVmIHN0cnVjdCBXZWJQSURlY29kZXIgV2ViUElEZWNvZGVyOwordHlwZWRlZiBzdHJ1Y3QgV2ViUEJpdHN0cmVhbUZlYXR1cmVzIFdlYlBCaXRzdHJlYW1GZWF0dXJlczsKK3R5cGVkZWYgc3RydWN0IFdlYlBEZWNvZGVyT3B0aW9ucyBXZWJQRGVjb2Rlck9wdGlvbnM7Cit0eXBlZGVmIHN0cnVjdCBXZWJQRGVjb2RlckNvbmZpZyBXZWJQRGVjb2RlckNvbmZpZzsKKworLy8gUmV0dXJuIHRoZSBkZWNvZGVyJ3MgdmVyc2lvbiBudW1iZXIsIHBhY2tlZCBpbiBoZXhhZGVjaW1hbCB1c2luZyA4Yml0cyBmb3IKKy8vIGVhY2ggb2YgbWFqb3IvbWlub3IvcmV2aXNpb24uIEUuZzogdjIuNS43IGlzIDB4MDIwNTA3LgorV0VCUF9FWFRFUk4oaW50KSBXZWJQR2V0RGVjb2RlclZlcnNpb24odm9pZCk7CisKKy8vIFJldHJpZXZlIGJhc2ljIGhlYWRlciBpbmZvcm1hdGlvbjogd2lkdGgsIGhlaWdodC4KKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIHZhbGlkYXRlIHRoZSBoZWFkZXIgYW5kIHJldHVybiAwIGluCisvLyBjYXNlIG9mIGZvcm1hdHRpbmcgZXJyb3IuCisvLyBQb2ludGVycyAnd2lkdGgnIGFuZCAnaGVpZ2h0JyBjYW4gYmUgcGFzc2VkIE5VTEwgaWYgZGVlbWVkIGlycmVsZXZhbnQuCitXRUJQX0VYVEVSTihpbnQpIFdlYlBHZXRJbmZvKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogd2lkdGgsIGludCogaGVpZ2h0KTsKKworLy8gRGVjb2RlcyBXZWJQIGltYWdlcyBwb2ludGVkIHRvIGJ5ICdkYXRhJyBhbmQgcmV0dXJucyBSR0JBIHNhbXBsZXMsIGFsb25nCisvLyB3aXRoIHRoZSBkaW1lbnNpb25zIGluICp3aWR0aCBhbmQgKmhlaWdodC4gVGhlIG9yZGVyaW5nIG9mIHNhbXBsZXMgaW4KKy8vIG1lbW9yeSBpcyBSLCBHLCBCLCBBLCBSLCBHLCBCLCBBLi4uIGluIHNjYW4gb3JkZXIgKGVuZGlhbi1pbmRlcGVuZGVudCkuCisvLyBUaGUgcmV0dXJuZWQgcG9pbnRlciBzaG91bGQgYmUgZGVsZXRlZCBjYWxsaW5nIGZyZWUoKS4KKy8vIFJldHVybnMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorV0VCUF9FWFRFUk4odWludDhfdCopIFdlYlBEZWNvZGVSR0JBKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQpOworCisvLyBTYW1lIGFzIFdlYlBEZWNvZGVSR0JBLCBidXQgcmV0dXJuaW5nIEEsIFIsIEcsIEIsIEEsIFIsIEcsIEIuLi4gb3JkZXJlZCBkYXRhLgorV0VCUF9FWFRFUk4odWludDhfdCopIFdlYlBEZWNvZGVBUkdCKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQpOworCisvLyBTYW1lIGFzIFdlYlBEZWNvZGVSR0JBLCBidXQgcmV0dXJuaW5nIEIsIEcsIFIsIEEsIEIsIEcsIFIsIEEuLi4gb3JkZXJlZCBkYXRhLgorV0VCUF9FWFRFUk4odWludDhfdCopIFdlYlBEZWNvZGVCR1JBKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQpOworCisvLyBTYW1lIGFzIFdlYlBEZWNvZGVSR0JBLCBidXQgcmV0dXJuaW5nIFIsIEcsIEIsIFIsIEcsIEIuLi4gb3JkZXJlZCBkYXRhLgorLy8gSWYgdGhlIGJpdHN0cmVhbSBjb250YWlucyB0cmFuc3BhcmVuY3ksIGl0IGlzIGlnbm9yZWQuCitXRUJQX0VYVEVSTih1aW50OF90KikgV2ViUERlY29kZVJHQihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQpOworCisvLyBTYW1lIGFzIFdlYlBEZWNvZGVSR0IsIGJ1dCByZXR1cm5pbmcgQiwgRywgUiwgQiwgRywgUi4uLiBvcmRlcmVkIGRhdGEuCitXRUJQX0VYVEVSTih1aW50OF90KikgV2ViUERlY29kZUJHUihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQpOworCisKKy8vIERlY29kZSBXZWJQIGltYWdlcyBwb2ludGVkIHRvIGJ5ICdkYXRhJyB0byBZJ1VWIGZvcm1hdCgqKS4gVGhlIHBvaW50ZXIKKy8vIHJldHVybmVkIGlzIHRoZSBZIHNhbXBsZXMgYnVmZmVyLiBVcG9uIHJldHVybiwgKnUgYW5kICp2IHdpbGwgcG9pbnQgdG8KKy8vIHRoZSBVIGFuZCBWIGNocm9tYSBkYXRhLiBUaGVzZSBVIGFuZCBWIGJ1ZmZlcnMgbmVlZCBOT1QgYmUgZnJlZSgpJ2QsCisvLyB1bmxpa2UgdGhlIHJldHVybmVkIFkgbHVtYSBvbmUuIFRoZSBkaW1lbnNpb24gb2YgdGhlIFUgYW5kIFYgcGxhbmVzCisvLyBhcmUgYm90aCAoKndpZHRoICsgMSkgLyAyIGFuZCAoKmhlaWdodCArIDEpLyAyLgorLy8gVXBvbiByZXR1cm4sIHRoZSBZIGJ1ZmZlciBoYXMgYSBzdHJpZGUgcmV0dXJuZWQgYXMgJypzdHJpZGUnLCB3aGlsZSBVIGFuZCBWCisvLyBoYXZlIGEgY29tbW9uIHN0cmlkZSByZXR1cm5lZCBhcyAnKnV2X3N0cmlkZScuCisvLyBSZXR1cm4gTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorLy8gKCopIEFsc28gbmFtZWQgWSdDYkNyLiBTZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWUNiQ3IKK1dFQlBfRVhURVJOKHVpbnQ4X3QqKSBXZWJQRGVjb2RlWVVWKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqKiB1LCB1aW50OF90KiogdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogc3RyaWRlLCBpbnQqIHV2X3N0cmlkZSk7CisKKy8vIFRoZXNlIGZpdmUgZnVuY3Rpb25zIGFyZSB2YXJpYW50cyBvZiB0aGUgYWJvdmUgb25lcywgdGhhdCBkZWNvZGUgdGhlIGltYWdlCisvLyBkaXJlY3RseSBpbnRvIGEgcHJlLWFsbG9jYXRlZCBidWZmZXIgJ291dHB1dF9idWZmZXInLiBUaGUgbWF4aW11bSBzdG9yYWdlCisvLyBhdmFpbGFibGUgaW4gdGhpcyBidWZmZXIgaXMgaW5kaWNhdGVkIGJ5ICdvdXRwdXRfYnVmZmVyX3NpemUnLiBJZiB0aGlzCisvLyBzdG9yYWdlIGlzIG5vdCBzdWZmaWNpZW50IChvciBhbiBlcnJvciBvY2N1cnJlZCksIE5VTEwgaXMgcmV0dXJuZWQuCisvLyBPdGhlcndpc2UsIG91dHB1dF9idWZmZXIgaXMgcmV0dXJuZWQsIGZvciBjb252ZW5pZW5jZS4KKy8vIFRoZSBwYXJhbWV0ZXIgJ291dHB1dF9zdHJpZGUnIHNwZWNpZmllcyB0aGUgZGlzdGFuY2UgKGluIGJ5dGVzKQorLy8gYmV0d2VlbiBzY2FubGluZXMuIEhlbmNlLCBvdXRwdXRfYnVmZmVyX3NpemUgaXMgZXhwZWN0ZWQgdG8gYmUgYXQgbGVhc3QKKy8vIG91dHB1dF9zdHJpZGUgeCBwaWN0dXJlLWhlaWdodC4KK1dFQlBfRVhURVJOKHVpbnQ4X3QqKSBXZWJQRGVjb2RlUkdCQUludG8oCisgICAgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICB1aW50OF90KiBvdXRwdXRfYnVmZmVyLCBzaXplX3Qgb3V0cHV0X2J1ZmZlcl9zaXplLCBpbnQgb3V0cHV0X3N0cmlkZSk7CitXRUJQX0VYVEVSTih1aW50OF90KikgV2ViUERlY29kZUFSR0JJbnRvKAorICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsCisgICAgdWludDhfdCogb3V0cHV0X2J1ZmZlciwgc2l6ZV90IG91dHB1dF9idWZmZXJfc2l6ZSwgaW50IG91dHB1dF9zdHJpZGUpOworV0VCUF9FWFRFUk4odWludDhfdCopIFdlYlBEZWNvZGVCR1JBSW50bygKKyAgICBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAorICAgIHVpbnQ4X3QqIG91dHB1dF9idWZmZXIsIHNpemVfdCBvdXRwdXRfYnVmZmVyX3NpemUsIGludCBvdXRwdXRfc3RyaWRlKTsKKworLy8gUkdCIGFuZCBCR1IgdmFyaWFudHMuIEhlcmUgdG9vIHRoZSB0cmFuc3BhcmVuY3kgaW5mb3JtYXRpb24sIGlmIHByZXNlbnQsCisvLyB3aWxsIGJlIGRyb3BwZWQgYW5kIGlnbm9yZWQuCitXRUJQX0VYVEVSTih1aW50OF90KikgV2ViUERlY29kZVJHQkludG8oCisgICAgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICB1aW50OF90KiBvdXRwdXRfYnVmZmVyLCBzaXplX3Qgb3V0cHV0X2J1ZmZlcl9zaXplLCBpbnQgb3V0cHV0X3N0cmlkZSk7CitXRUJQX0VYVEVSTih1aW50OF90KikgV2ViUERlY29kZUJHUkludG8oCisgICAgY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICB1aW50OF90KiBvdXRwdXRfYnVmZmVyLCBzaXplX3Qgb3V0cHV0X2J1ZmZlcl9zaXplLCBpbnQgb3V0cHV0X3N0cmlkZSk7CisKKy8vIFdlYlBEZWNvZGVZVVZJbnRvKCkgaXMgYSB2YXJpYW50IG9mIFdlYlBEZWNvZGVZVVYoKSB0aGF0IG9wZXJhdGVzIGRpcmVjdGx5CisvLyBpbnRvIHByZS1hbGxvY2F0ZWQgbHVtYS9jaHJvbWEgcGxhbmUgYnVmZmVycy4gVGhpcyBmdW5jdGlvbiByZXF1aXJlcyB0aGUKKy8vIHN0cmlkZXMgdG8gYmUgcGFzc2VkOiBvbmUgZm9yIHRoZSBsdW1hIHBsYW5lIGFuZCBvbmUgZm9yIGVhY2ggb2YgdGhlCisvLyBjaHJvbWEgb25lcy4gVGhlIHNpemUgb2YgZWFjaCBwbGFuZSBidWZmZXIgaXMgcGFzc2VkIGFzICdsdW1hX3NpemUnLAorLy8gJ3Vfc2l6ZScgYW5kICd2X3NpemUnIHJlc3BlY3RpdmVseS4KKy8vIFBvaW50ZXIgdG8gdGhlIGx1bWEgcGxhbmUgKCcqbHVtYScpIGlzIHJldHVybmVkIG9yIE5VTEwgaWYgYW4gZXJyb3Igb2NjdXJyZWQKKy8vIGR1cmluZyBkZWNvZGluZyAob3IgYmVjYXVzZSBzb21lIGJ1ZmZlcnMgd2VyZSBmb3VuZCB0byBiZSB0b28gc21hbGwpLgorV0VCUF9FWFRFUk4odWludDhfdCopIFdlYlBEZWNvZGVZVVZJbnRvKAorICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsCisgICAgdWludDhfdCogbHVtYSwgc2l6ZV90IGx1bWFfc2l6ZSwgaW50IGx1bWFfc3RyaWRlLAorICAgIHVpbnQ4X3QqIHUsIHNpemVfdCB1X3NpemUsIGludCB1X3N0cmlkZSwKKyAgICB1aW50OF90KiB2LCBzaXplX3Qgdl9zaXplLCBpbnQgdl9zdHJpZGUpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gT3V0cHV0IGNvbG9yc3BhY2VzIGFuZCBidWZmZXIKKworLy8gQ29sb3JzcGFjZXMKKy8vIE5vdGU6IHRoZSBuYW1pbmcgZGVzY3JpYmVzIHRoZSBieXRlLW9yZGVyaW5nIG9mIHBhY2tlZCBzYW1wbGVzIGluIG1lbW9yeS4KKy8vIEZvciBpbnN0YW5jZSwgTU9ERV9CR1JBIHJlbGF0ZXMgdG8gc2FtcGxlcyBvcmRlcmVkIGFzIEIsRyxSLEEsQixHLFIsQSwuLi4KKy8vIE5vbi1jYXBpdGFsIG5hbWVzIChlLmcuOk1PREVfQXJnYikgcmVsYXRlcyB0byBwcmUtbXVsdGlwbGllZCBSR0IgY2hhbm5lbHMuCisvLyBSR0JBLTQ0NDQgYW5kIFJHQi01NjUgY29sb3JzcGFjZXMgYXJlIHJlcHJlc2VudGVkIGJ5IGZvbGxvd2luZyBieXRlLW9yZGVyOgorLy8gUkdCQS00NDQ0OiBbcjMgcjIgcjEgcjAgZzMgZzIgZzEgZzBdLCBbYjMgYjIgYjEgYjAgYTMgYTIgYTEgYTBdLCAuLi4KKy8vIFJHQi01NjU6IFtyNCByMyByMiByMSByMCBnNSBnNCBnM10sIFtnMiBnMSBnMCBiNCBiMyBiMiBiMSBiMF0sIC4uLgorLy8gSW4gdGhlIGNhc2UgV0VCUF9TV0FQXzE2QklUU19DU1AgaXMgZGVmaW5lZCwgdGhlIGJ5dGVzIGFyZSBzd2FwcGVkIGZvcgorLy8gdGhlc2UgdHdvIG1vZGVzOgorLy8gUkdCQS00NDQ0OiBbYjMgYjIgYjEgYjAgYTMgYTIgYTEgYTBdLCBbcjMgcjIgcjEgcjAgZzMgZzIgZzEgZzBdLCAuLi4KKy8vIFJHQi01NjU6IFtnMiBnMSBnMCBiNCBiMyBiMiBiMSBiMF0sIFtyNCByMyByMiByMSByMCBnNSBnNCBnM10sIC4uLgorCit0eXBlZGVmIGVudW0gV0VCUF9DU1BfTU9ERSB7CisgIE1PREVfUkdCID0gMCwgTU9ERV9SR0JBID0gMSwKKyAgTU9ERV9CR1IgPSAyLCBNT0RFX0JHUkEgPSAzLAorICBNT0RFX0FSR0IgPSA0LCBNT0RFX1JHQkFfNDQ0NCA9IDUsCisgIE1PREVfUkdCXzU2NSA9IDYsCisgIC8vIFJHQi1wcmVtdWx0aXBsaWVkIHRyYW5zcGFyZW50IG1vZGVzIChhbHBoYSB2YWx1ZSBpcyBwcmVzZXJ2ZWQpCisgIE1PREVfcmdiQSA9IDcsCisgIE1PREVfYmdyQSA9IDgsCisgIE1PREVfQXJnYiA9IDksCisgIE1PREVfcmdiQV80NDQ0ID0gMTAsCisgIC8vIFlVViBtb2RlcyBtdXN0IGNvbWUgYWZ0ZXIgUkdCIG9uZXMuCisgIE1PREVfWVVWID0gMTEsIE1PREVfWVVWQSA9IDEyLCAgLy8geXV2IDQ6MjowCisgIE1PREVfTEFTVCA9IDEzCit9IFdFQlBfQ1NQX01PREU7CisKKy8vIFNvbWUgdXNlZnVsIG1hY3JvczoKK3N0YXRpYyBXRUJQX0lOTElORSBpbnQgV2ViUElzUHJlbXVsdGlwbGllZE1vZGUoV0VCUF9DU1BfTU9ERSBtb2RlKSB7CisgIHJldHVybiAobW9kZSA9PSBNT0RFX3JnYkEgfHwgbW9kZSA9PSBNT0RFX2JnckEgfHwgbW9kZSA9PSBNT0RFX0FyZ2IgfHwKKyAgICAgICAgICBtb2RlID09IE1PREVfcmdiQV80NDQ0KTsKK30KKworc3RhdGljIFdFQlBfSU5MSU5FIGludCBXZWJQSXNBbHBoYU1vZGUoV0VCUF9DU1BfTU9ERSBtb2RlKSB7CisgIHJldHVybiAobW9kZSA9PSBNT0RFX1JHQkEgfHwgbW9kZSA9PSBNT0RFX0JHUkEgfHwgbW9kZSA9PSBNT0RFX0FSR0IgfHwKKyAgICAgICAgICBtb2RlID09IE1PREVfUkdCQV80NDQ0IHx8IG1vZGUgPT0gTU9ERV9ZVVZBIHx8CisgICAgICAgICAgV2ViUElzUHJlbXVsdGlwbGllZE1vZGUobW9kZSkpOworfQorCitzdGF0aWMgV0VCUF9JTkxJTkUgaW50IFdlYlBJc1JHQk1vZGUoV0VCUF9DU1BfTU9ERSBtb2RlKSB7CisgIHJldHVybiAobW9kZSA8IE1PREVfWVVWKTsKK30KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdlYlBEZWNCdWZmZXI6IEdlbmVyaWMgc3RydWN0dXJlIGZvciBkZXNjcmliaW5nIHRoZSBvdXRwdXQgc2FtcGxlIGJ1ZmZlci4KKworc3RydWN0IFdlYlBSR0JBQnVmZmVyIHsgICAgLy8gdmlldyBhcyBSR0JBCisgIHVpbnQ4X3QqIHJnYmE7ICAgIC8vIHBvaW50ZXIgdG8gUkdCQSBzYW1wbGVzCisgIGludCBzdHJpZGU7ICAgICAgIC8vIHN0cmlkZSBpbiBieXRlcyBmcm9tIG9uZSBzY2FubGluZSB0byB0aGUgbmV4dC4KKyAgc2l6ZV90IHNpemU7ICAgICAgLy8gdG90YWwgc2l6ZSBvZiB0aGUgKnJnYmEgYnVmZmVyLgorfTsKKworc3RydWN0IFdlYlBZVVZBQnVmZmVyIHsgICAgICAgICAgICAgIC8vIHZpZXcgYXMgWVVWQQorICB1aW50OF90KiB5LCAqdSwgKnYsICphOyAgICAgLy8gcG9pbnRlciB0byBsdW1hLCBjaHJvbWEgVS9WLCBhbHBoYSBzYW1wbGVzCisgIGludCB5X3N0cmlkZTsgICAgICAgICAgICAgICAvLyBsdW1hIHN0cmlkZQorICBpbnQgdV9zdHJpZGUsIHZfc3RyaWRlOyAgICAgLy8gY2hyb21hIHN0cmlkZXMKKyAgaW50IGFfc3RyaWRlOyAgICAgICAgICAgICAgIC8vIGFscGhhIHN0cmlkZQorICBzaXplX3QgeV9zaXplOyAgICAgICAgICAgICAgLy8gbHVtYSBwbGFuZSBzaXplCisgIHNpemVfdCB1X3NpemUsIHZfc2l6ZTsgICAgICAvLyBjaHJvbWEgcGxhbmVzIHNpemUKKyAgc2l6ZV90IGFfc2l6ZTsgICAgICAgICAgICAgIC8vIGFscGhhLXBsYW5lIHNpemUKK307CisKKy8vIE91dHB1dCBidWZmZXIKK3N0cnVjdCBXZWJQRGVjQnVmZmVyIHsKKyAgV0VCUF9DU1BfTU9ERSBjb2xvcnNwYWNlOyAgLy8gQ29sb3JzcGFjZS4KKyAgaW50IHdpZHRoLCBoZWlnaHQ7ICAgICAgICAgLy8gRGltZW5zaW9ucy4KKyAgaW50IGlzX2V4dGVybmFsX21lbW9yeTsgICAgLy8gSWYgdHJ1ZSwgJ2ludGVybmFsX21lbW9yeScgcG9pbnRlciBpcyBub3QgdXNlZC4KKyAgdW5pb24geworICAgIFdlYlBSR0JBQnVmZmVyIFJHQkE7CisgICAgV2ViUFlVVkFCdWZmZXIgWVVWQTsKKyAgfSB1OyAgICAgICAgICAgICAgICAgICAgICAgLy8gTmFtZWxlc3MgdW5pb24gb2YgYnVmZmVyIHBhcmFtZXRlcnMuCisgIHVpbnQzMl90ICAgICAgIHBhZFs0XTsgICAgIC8vIHBhZGRpbmcgZm9yIGxhdGVyIHVzZQorCisgIHVpbnQ4X3QqIHByaXZhdGVfbWVtb3J5OyAgIC8vIEludGVybmFsbHkgYWxsb2NhdGVkIG1lbW9yeSAob25seSB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzX2V4dGVybmFsX21lbW9yeSBpcyBmYWxzZSkuIFNob3VsZCBub3QgYmUgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBleHRlcm5hbGx5LCBidXQgYWNjZXNzZWQgdmlhIHRoZSBidWZmZXIgdW5pb24uCit9OworCisvLyBJbnRlcm5hbCwgdmVyc2lvbi1jaGVja2VkLCBlbnRyeSBwb2ludAorV0VCUF9FWFRFUk4oaW50KSBXZWJQSW5pdERlY0J1ZmZlckludGVybmFsKFdlYlBEZWNCdWZmZXIqLCBpbnQpOworCisvLyBJbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmUgYXMgZW1wdHkuIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgdXNlLgorLy8gUmV0dXJucyBmYWxzZSBpbiBjYXNlIG9mIHZlcnNpb24gbWlzbWF0Y2gKK3N0YXRpYyBXRUJQX0lOTElORSBpbnQgV2ViUEluaXREZWNCdWZmZXIoV2ViUERlY0J1ZmZlciogYnVmZmVyKSB7CisgIHJldHVybiBXZWJQSW5pdERlY0J1ZmZlckludGVybmFsKGJ1ZmZlciwgV0VCUF9ERUNPREVSX0FCSV9WRVJTSU9OKTsKK30KKworLy8gRnJlZSBhbnkgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYnVmZmVyLiBNdXN0IGFsd2F5cyBiZSBjYWxsZWQgbGFzdC4KKy8vIE5vdGU6IGRvZXNuJ3QgZnJlZSB0aGUgJ2J1ZmZlcicgc3RydWN0dXJlIGl0c2VsZi4KK1dFQlBfRVhURVJOKHZvaWQpIFdlYlBGcmVlRGVjQnVmZmVyKFdlYlBEZWNCdWZmZXIqIGJ1ZmZlcik7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFbnVtZXJhdGlvbiBvZiB0aGUgc3RhdHVzIGNvZGVzCisKK3R5cGVkZWYgZW51bSBWUDhTdGF0dXNDb2RlIHsKKyAgVlA4X1NUQVRVU19PSyA9IDAsCisgIFZQOF9TVEFUVVNfT1VUX09GX01FTU9SWSwKKyAgVlA4X1NUQVRVU19JTlZBTElEX1BBUkFNLAorICBWUDhfU1RBVFVTX0JJVFNUUkVBTV9FUlJPUiwKKyAgVlA4X1NUQVRVU19VTlNVUFBPUlRFRF9GRUFUVVJFLAorICBWUDhfU1RBVFVTX1NVU1BFTkRFRCwKKyAgVlA4X1NUQVRVU19VU0VSX0FCT1JULAorICBWUDhfU1RBVFVTX05PVF9FTk9VR0hfREFUQQorfSBWUDhTdGF0dXNDb2RlOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW5jcmVtZW50YWwgZGVjb2RpbmcKKy8vCisvLyBUaGlzIEFQSSBhbGxvd3Mgc3RyZWFtbGluZWQgZGVjb2Rpbmcgb2YgcGFydGlhbCBkYXRhLgorLy8gUGljdHVyZSBjYW4gYmUgaW5jcmVtZW50YWxseSBkZWNvZGVkIGFzIGRhdGEgYmVjb21lIGF2YWlsYWJsZSB0aGFua3MgdG8gdGhlCisvLyBXZWJQSURlY29kZXIgb2JqZWN0LiBUaGlzIG9iamVjdCBjYW4gYmUgbGVmdCBpbiBhIFNVU1BFTkRFRCBzdGF0ZSBpZiB0aGUKKy8vIHBpY3R1cmUgaXMgb25seSBwYXJ0aWFsbHkgZGVjb2RlZCwgcGVuZGluZyBhZGRpdGlvbmFsIGlucHV0LgorLy8gQ29kZSBleGFtcGxlOgorLy8KKy8vICAgV2ViUEluaXREZWNCdWZmZXIoJmJ1ZmZlcik7CisvLyAgIGJ1ZmZlci5jb2xvcnNwYWNlID0gbW9kZTsKKy8vICAgLi4uCisvLyAgIFdlYlBJRGVjb2RlciogaWRlYyA9IFdlYlBJTmV3RGVjb2RlcigmYnVmZmVyKTsKKy8vICAgd2hpbGUgKGhhc19tb3JlX2RhdGEpIHsKKy8vICAgICAvLyAuLi4gKGdldCBhZGRpdGlvbmFsIGRhdGEpCisvLyAgICAgc3RhdHVzID0gV2ViUElBcHBlbmQoaWRlYywgbmV3X2RhdGEsIG5ld19kYXRhX3NpemUpOworLy8gICAgIGlmIChzdGF0dXMgIT0gVlA4X1NUQVRVU19TVVNQRU5ERUQgfHwKKy8vICAgICAgIGJyZWFrOworLy8gICAgIH0KKy8vCisvLyAgICAgLy8gVGhlIGFib3ZlIGNhbGwgZGVjb2RlcyB0aGUgY3VycmVudCBhdmFpbGFibGUgYnVmZmVyLgorLy8gICAgIC8vIFBhcnQgb2YgdGhlIGltYWdlIGNhbiBub3cgYmUgcmVmcmVzaGVkIGJ5IGNhbGxpbmcgdG8KKy8vICAgICAvLyBXZWJQSURlY0dldFJHQigpL1dlYlBJRGVjR2V0WVVWQSgpIGV0Yy4KKy8vICAgfQorLy8gICBXZWJQSURlbGV0ZShpZGVjKTsKKworLy8gQ3JlYXRlcyBhIG5ldyBpbmNyZW1lbnRhbCBkZWNvZGVyIHdpdGggdGhlIHN1cHBsaWVkIGJ1ZmZlciBwYXJhbWV0ZXIuCisvLyBUaGlzIG91dHB1dF9idWZmZXIgY2FuIGJlIHBhc3NlZCBOVUxMLCBpbiB3aGljaCBjYXNlIGEgZGVmYXVsdCBvdXRwdXQgYnVmZmVyCisvLyBpcyB1c2VkICh3aXRoIE1PREVfUkdCKS4gT3RoZXJ3aXNlLCBhbiBpbnRlcm5hbCByZWZlcmVuY2UgdG8gJ291dHB1dF9idWZmZXInCisvLyBpcyBrZXB0LCB3aGljaCBtZWFucyB0aGF0IHRoZSBsaWZlc3BhbiBvZiAnb3V0cHV0X2J1ZmZlcicgbXVzdCBiZSBsYXJnZXIgdGhhbgorLy8gdGhhdCBvZiB0aGUgcmV0dXJuZWQgV2ViUElEZWNvZGVyIG9iamVjdC4KKy8vIFRoZSBzdXBwbGllZCAnb3V0cHV0X2J1ZmZlcicgY29udGVudCBNVVNUIE5PVCBiZSBjaGFuZ2VkIGJldHdlZW4gY2FsbHMgdG8KKy8vIFdlYlBJQXBwZW5kKCkgb3IgV2ViUElVcGRhdGUoKSB1bmxlc3MgJ291dHB1dF9idWZmZXIuaXNfZXh0ZXJuYWxfbWVtb3J5JyBpcworLy8gc2V0IHRvIDEuIEluIHN1Y2ggYSBjYXNlLCBpdCBpcyBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgcG9pbnRlcnMsIHNpemUgYW5kCisvLyBzdHJpZGUgb2Ygb3V0cHV0X2J1ZmZlci51LlJHQkEgb3Igb3V0cHV0X2J1ZmZlci51LllVVkEsIHByb3ZpZGVkIHRoZXkgcmVtYWluCisvLyB3aXRoaW4gdmFsaWQgYm91bmRzLgorLy8gQWxsIG90aGVyIGZpZWxkcyBvZiBXZWJQRGVjQnVmZmVyIE1VU1QgcmVtYWluIGNvbnN0YW50IGJldHdlZW4gY2FsbHMuCisvLyBSZXR1cm5zIE5VTEwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLgorV0VCUF9FWFRFUk4oV2ViUElEZWNvZGVyKikgV2ViUElOZXdEZWNvZGVyKFdlYlBEZWNCdWZmZXIqIG91dHB1dF9idWZmZXIpOworCisvLyBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYW4gaW5jcmVtZW50YWwtZGVjb2RlciBvYmplY3QsIHdoaWNoCisvLyB3aWxsIG91dHB1dCB0aGUgUkdCL0Egc2FtcGxlcyBzcGVjaWZpZWQgYnkgJ2NzcCcgaW50byBhIHByZWFsbG9jYXRlZAorLy8gYnVmZmVyICdvdXRwdXRfYnVmZmVyJy4gVGhlIHNpemUgb2YgdGhpcyBidWZmZXIgaXMgYXQgbGVhc3QKKy8vICdvdXRwdXRfYnVmZmVyX3NpemUnIGFuZCB0aGUgc3RyaWRlIChkaXN0YW5jZSBpbiBieXRlcyBiZXR3ZWVuIHR3byBzY2FubGluZXMpCisvLyBpcyBzcGVjaWZpZWQgYnkgJ291dHB1dF9zdHJpZGUnLgorLy8gQWRkaXRpb25hbGx5LCBvdXRwdXRfYnVmZmVyIGNhbiBiZSBwYXNzZWQgTlVMTCBpbiB3aGljaCBjYXNlIHRoZSBvdXRwdXQKKy8vIGJ1ZmZlciB3aWxsIGJlIGFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGRlY29kaW5nIHN0YXJ0cy4gVGhlCisvLyBjb2xvcnNwYWNlICdjc3AnIGlzIHRha2VuIGludG8gYWNjb3VudCBmb3IgYWxsb2NhdGluZyB0aGlzIGJ1ZmZlci4gQWxsIG90aGVyCisvLyBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkLgorLy8gUmV0dXJucyBOVUxMIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZCwgb3IgaWYgc29tZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgorV0VCUF9FWFRFUk4oV2ViUElEZWNvZGVyKikgV2ViUElOZXdSR0IoCisgICAgV0VCUF9DU1BfTU9ERSBjc3AsCisgICAgdWludDhfdCogb3V0cHV0X2J1ZmZlciwgc2l6ZV90IG91dHB1dF9idWZmZXJfc2l6ZSwgaW50IG91dHB1dF9zdHJpZGUpOworCisvLyBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYW4gaW5jcmVtZW50YWwtZGVjb2RlciBvYmplY3QsIHdoaWNoCisvLyB3aWxsIG91dHB1dCB0aGUgcmF3IGx1bWEvY2hyb21hIHNhbXBsZXMgaW50byBhIHByZWFsbG9jYXRlZCBwbGFuZXMgaWYKKy8vIHN1cHBsaWVkLiBUaGUgbHVtYSBwbGFuZSBpcyBzcGVjaWZpZWQgYnkgaXRzIHBvaW50ZXIgJ2x1bWEnLCBpdHMgc2l6ZQorLy8gJ2x1bWFfc2l6ZScgYW5kIGl0cyBzdHJpZGUgJ2x1bWFfc3RyaWRlJy4gU2ltaWxhcmx5LCB0aGUgY2hyb21hLXUgcGxhbmUKKy8vIGlzIHNwZWNpZmllZCBieSB0aGUgJ3UnLCAndV9zaXplJyBhbmQgJ3Vfc3RyaWRlJyBwYXJhbWV0ZXJzLCBhbmQgdGhlIGNocm9tYS12CisvLyBwbGFuZSBieSAndicgYW5kICd2X3NpemUnLiBBbmQgc2FtZSBmb3IgdGhlIGFscGhhLXBsYW5lLiBUaGUgJ2EnIHBvaW50ZXIKKy8vIGNhbiBiZSBwYXNzIE5VTEwgaW4gY2FzZSBvbmUgaXMgbm90IGludGVyZXN0ZWQgaW4gdGhlIHRyYW5zcGFyZW5jeSBwbGFuZS4KKy8vIENvbnZlcnNlbHksICdsdW1hJyBjYW4gYmUgcGFzc2VkIE5VTEwgaWYgbm8gcHJlYWxsb2NhdGVkIHBsYW5lcyBhcmUgc3VwcGxpZWQuCisvLyBJbiB0aGlzIGNhc2UsIHRoZSBvdXRwdXQgYnVmZmVyIHdpbGwgYmUgYXV0b21hdGljYWxseSBhbGxvY2F0ZWQgKHVzaW5nCisvLyBNT0RFX1lVVkEpIHdoZW4gZGVjb2Rpbmcgc3RhcnRzLiBBbGwgcGFyYW1ldGVycyBhcmUgdGhlbiBpZ25vcmVkLgorLy8gUmV0dXJucyBOVUxMIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZCBvciBpZiBhIHBhcmFtZXRlciBpcyBpbnZhbGlkLgorV0VCUF9FWFRFUk4oV2ViUElEZWNvZGVyKikgV2ViUElOZXdZVVZBKAorICAgIHVpbnQ4X3QqIGx1bWEsIHNpemVfdCBsdW1hX3NpemUsIGludCBsdW1hX3N0cmlkZSwKKyAgICB1aW50OF90KiB1LCBzaXplX3QgdV9zaXplLCBpbnQgdV9zdHJpZGUsCisgICAgdWludDhfdCogdiwgc2l6ZV90IHZfc2l6ZSwgaW50IHZfc3RyaWRlLAorICAgIHVpbnQ4X3QqIGEsIHNpemVfdCBhX3NpemUsIGludCBhX3N0cmlkZSk7CisKKy8vIERlcHJlY2F0ZWQgdmVyc2lvbiBvZiB0aGUgYWJvdmUsIHdpdGhvdXQgdGhlIGFscGhhIHBsYW5lLgorLy8gS2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KK1dFQlBfRVhURVJOKFdlYlBJRGVjb2RlciopIFdlYlBJTmV3WVVWKAorICAgIHVpbnQ4X3QqIGx1bWEsIHNpemVfdCBsdW1hX3NpemUsIGludCBsdW1hX3N0cmlkZSwKKyAgICB1aW50OF90KiB1LCBzaXplX3QgdV9zaXplLCBpbnQgdV9zdHJpZGUsCisgICAgdWludDhfdCogdiwgc2l6ZV90IHZfc2l6ZSwgaW50IHZfc3RyaWRlKTsKKworLy8gRGVsZXRlcyB0aGUgV2ViUElEZWNvZGVyIG9iamVjdCBhbmQgYXNzb2NpYXRlZCBtZW1vcnkuIE11c3QgYWx3YXlzIGJlIGNhbGxlZAorLy8gaWYgV2ViUElOZXdEZWNvZGVyLCBXZWJQSU5ld1JHQiBvciBXZWJQSU5ld1lVViBzdWNjZWVkZWQuCitXRUJQX0VYVEVSTih2b2lkKSBXZWJQSURlbGV0ZShXZWJQSURlY29kZXIqIGlkZWMpOworCisvLyBDb3BpZXMgYW5kIGRlY29kZXMgdGhlIG5leHQgYXZhaWxhYmxlIGRhdGEuIFJldHVybnMgVlA4X1NUQVRVU19PSyB3aGVuCisvLyB0aGUgaW1hZ2UgaXMgc3VjY2Vzc2Z1bGx5IGRlY29kZWQuIFJldHVybnMgVlA4X1NUQVRVU19TVVNQRU5ERUQgd2hlbiBtb3JlCisvLyBkYXRhIGlzIGV4cGVjdGVkLiBSZXR1cm5zIGVycm9yIGluIG90aGVyIGNhc2VzLgorV0VCUF9FWFRFUk4oVlA4U3RhdHVzQ29kZSkgV2ViUElBcHBlbmQoCisgICAgV2ViUElEZWNvZGVyKiBpZGVjLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplKTsKKworLy8gQSB2YXJpYW50IG9mIHRoZSBhYm92ZSBmdW5jdGlvbiB0byBiZSB1c2VkIHdoZW4gZGF0YSBidWZmZXIgY29udGFpbnMKKy8vIHBhcnRpYWwgZGF0YSBmcm9tIHRoZSBiZWdpbm5pbmcuIEluIHRoaXMgY2FzZSBkYXRhIGJ1ZmZlciBpcyBub3QgY29waWVkCisvLyB0byB0aGUgaW50ZXJuYWwgbWVtb3J5LgorLy8gTm90ZSB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgJ2RhdGEnIHBvaW50ZXIgY2FuIGNoYW5nZSBiZXR3ZWVuIGNhbGxzIHRvCisvLyBXZWJQSVVwZGF0ZSwgZm9yIGluc3RhbmNlIHdoZW4gdGhlIGRhdGEgYnVmZmVyIGlzIHJlc2l6ZWQgdG8gZml0IGxhcmdlciBkYXRhLgorV0VCUF9FWFRFUk4oVlA4U3RhdHVzQ29kZSkgV2ViUElVcGRhdGUoCisgICAgV2ViUElEZWNvZGVyKiBpZGVjLCBjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplKTsKKworLy8gUmV0dXJucyB0aGUgUkdCL0EgaW1hZ2UgZGVjb2RlZCBzbyBmYXIuIFJldHVybnMgTlVMTCBpZiBvdXRwdXQgcGFyYW1zCisvLyBhcmUgbm90IGluaXRpYWxpemVkIHlldC4gVGhlIFJHQi9BIG91dHB1dCB0eXBlIGNvcnJlc3BvbmRzIHRvIHRoZSBjb2xvcnNwYWNlCisvLyBzcGVjaWZpZWQgZHVyaW5nIGNhbGwgdG8gV2ViUElOZXdEZWNvZGVyKCkgb3IgV2ViUElOZXdSR0IoKS4KKy8vICpsYXN0X3kgaXMgdGhlIGluZGV4IG9mIGxhc3QgZGVjb2RlZCByb3cgaW4gcmFzdGVyIHNjYW4gb3JkZXIuIFNvbWUgcG9pbnRlcnMKKy8vICgqbGFzdF95LCAqd2lkdGggZXRjLikgY2FuIGJlIE5VTEwgaWYgY29ycmVzcG9uZGluZyBpbmZvcm1hdGlvbiBpcyBub3QKKy8vIG5lZWRlZC4KK1dFQlBfRVhURVJOKHVpbnQ4X3QqKSBXZWJQSURlY0dldFJHQigKKyAgICBjb25zdCBXZWJQSURlY29kZXIqIGlkZWMsIGludCogbGFzdF95LAorICAgIGludCogd2lkdGgsIGludCogaGVpZ2h0LCBpbnQqIHN0cmlkZSk7CisKKy8vIFNhbWUgYXMgYWJvdmUgZnVuY3Rpb24gdG8gZ2V0IGEgWVVWQSBpbWFnZS4gUmV0dXJucyBwb2ludGVyIHRvIHRoZSBsdW1hCisvLyBwbGFuZSBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuIElmIHRoZXJlIGlzIG5vIGFscGhhIGluZm9ybWF0aW9uCisvLyB0aGUgYWxwaGEgcG9pbnRlciAnKmEnIHdpbGwgYmUgcmV0dXJuZWQgTlVMTC4KK1dFQlBfRVhURVJOKHVpbnQ4X3QqKSBXZWJQSURlY0dldFlVVkEoCisgICAgY29uc3QgV2ViUElEZWNvZGVyKiBpZGVjLCBpbnQqIGxhc3RfeSwKKyAgICB1aW50OF90KiogdSwgdWludDhfdCoqIHYsIHVpbnQ4X3QqKiBhLAorICAgIGludCogd2lkdGgsIGludCogaGVpZ2h0LCBpbnQqIHN0cmlkZSwgaW50KiB1dl9zdHJpZGUsIGludCogYV9zdHJpZGUpOworCisvLyBEZXByZWNhdGVkIGFscGhhLWxlc3MgdmVyc2lvbiBvZiBXZWJQSURlY0dldFlVVkEoKTogaXQgd2lsbCBpZ25vcmUgdGhlCisvLyBhbHBoYSBpbmZvcm1hdGlvbiAoaWYgcHJlc2VudCkuIEtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCitzdGF0aWMgV0VCUF9JTkxJTkUgdWludDhfdCogV2ViUElEZWNHZXRZVVYoCisgICAgY29uc3QgV2ViUElEZWNvZGVyKiBpZGVjLCBpbnQqIGxhc3RfeSwgdWludDhfdCoqIHUsIHVpbnQ4X3QqKiB2LAorICAgIGludCogd2lkdGgsIGludCogaGVpZ2h0LCBpbnQqIHN0cmlkZSwgaW50KiB1dl9zdHJpZGUpIHsKKyAgcmV0dXJuIFdlYlBJRGVjR2V0WVVWQShpZGVjLCBsYXN0X3ksIHUsIHYsIE5VTEwsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlLCB1dl9zdHJpZGUsIE5VTEwpOworfQorCisvLyBHZW5lcmljIGNhbGwgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRpc3BsYXlhYmxlIGFyZWEuCisvLyBJZiBub24gTlVMTCwgdGhlIGxlZnQvcmlnaHQvd2lkdGgvaGVpZ2h0IHBvaW50ZXJzIGFyZSBmaWxsZWQgd2l0aCB0aGUgdmlzaWJsZQorLy8gcmVjdGFuZ3VsYXIgYXJlYSBzbyBmYXIuCisvLyBSZXR1cm5zIE5VTEwgaW4gY2FzZSB0aGUgaW5jcmVtZW50YWwgZGVjb2RlciBvYmplY3QgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS4KKy8vIE90aGVyd2lzZSByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4gVGhpcyBzdHJ1Y3R1cmUKKy8vIGlzIHJlYWQtb25seSwgdGllZCB0byBXZWJQSURlY29kZXIncyBsaWZlc3BhbiBhbmQgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4KK1dFQlBfRVhURVJOKGNvbnN0IFdlYlBEZWNCdWZmZXIqKSBXZWJQSURlY29kZWRBcmVhKAorICAgIGNvbnN0IFdlYlBJRGVjb2RlciogaWRlYywgaW50KiBsZWZ0LCBpbnQqIHRvcCwgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQWR2YW5jZWQgZGVjb2RpbmcgcGFyYW1ldHJpemF0aW9uCisvLworLy8gIENvZGUgc2FtcGxlIGZvciB1c2luZyB0aGUgYWR2YW5jZWQgZGVjb2RpbmcgQVBJCisvKgorICAgICAvLyBBKSBJbml0IGEgY29uZmlndXJhdGlvbiBvYmplY3QKKyAgICAgV2ViUERlY29kZXJDb25maWcgY29uZmlnOworICAgICBDSEVDSyhXZWJQSW5pdERlY29kZXJDb25maWcoJmNvbmZpZykpOworCisgICAgIC8vIEIpIG9wdGlvbmFsOiByZXRyaWV2ZSB0aGUgYml0c3RyZWFtJ3MgZmVhdHVyZXMuCisgICAgIENIRUNLKFdlYlBHZXRGZWF0dXJlcyhkYXRhLCBkYXRhX3NpemUsICZjb25maWcuaW5wdXQpID09IFZQOF9TVEFUVVNfT0spOworCisgICAgIC8vIEMpIEFkanVzdCAnY29uZmlnJywgaWYgbmVlZGVkCisgICAgIGNvbmZpZy5ub19mYW5jeV91cHNhbXBsaW5nID0gMTsKKyAgICAgY29uZmlnLm91dHB1dC5jb2xvcnNwYWNlID0gTU9ERV9CR1JBOworICAgICAvLyBldGMuCisKKyAgICAgLy8gTm90ZSB0aGF0IHlvdSBjYW4gYWxzbyBtYWtlIGNvbmZpZy5vdXRwdXQgcG9pbnQgdG8gYW4gZXh0ZXJuYWxseQorICAgICAvLyBzdXBwbGllZCBtZW1vcnkgYnVmZmVyLCBwcm92aWRlZCBpdCdzIGJpZyBlbm91Z2ggdG8gc3RvcmUgdGhlIGRlY29kZWQKKyAgICAgLy8gcGljdHVyZS4gT3RoZXJ3aXNlLCBjb25maWcub3V0cHV0IHdpbGwganVzdCBiZSB1c2VkIHRvIGFsbG9jYXRlIG1lbW9yeQorICAgICAvLyBhbmQgc3RvcmUgdGhlIGRlY29kZWQgcGljdHVyZS4KKworICAgICAvLyBEKSBEZWNvZGUhCisgICAgIENIRUNLKFdlYlBEZWNvZGUoZGF0YSwgZGF0YV9zaXplLCAmY29uZmlnKSA9PSBWUDhfU1RBVFVTX09LKTsKKworICAgICAvLyBFKSBEZWNvZGVkIGltYWdlIGlzIG5vdyBpbiBjb25maWcub3V0cHV0IChhbmQgY29uZmlnLm91dHB1dC51LlJHQkEpCisKKyAgICAgLy8gRikgUmVjbGFpbSBtZW1vcnkgYWxsb2NhdGVkIGluIGNvbmZpZydzIG9iamVjdC4gSXQncyBzYWZlIHRvIGNhbGwKKyAgICAgLy8gdGhpcyBmdW5jdGlvbiBldmVuIGlmIHRoZSBtZW1vcnkgaXMgZXh0ZXJuYWwgYW5kIHdhc24ndCBhbGxvY2F0ZWQKKyAgICAgLy8gYnkgV2ViUERlY29kZSgpLgorICAgICBXZWJQRnJlZURlY0J1ZmZlcigmY29uZmlnLm91dHB1dCk7CisqLworCisvLyBGZWF0dXJlcyBnYXRoZXJlZCBmcm9tIHRoZSBiaXRzdHJlYW0KK3N0cnVjdCBXZWJQQml0c3RyZWFtRmVhdHVyZXMgeworICBpbnQgd2lkdGg7ICAgICAgICAgIC8vIFdpZHRoIGluIHBpeGVscywgYXMgcmVhZCBmcm9tIHRoZSBiaXRzdHJlYW0uCisgIGludCBoZWlnaHQ7ICAgICAgICAgLy8gSGVpZ2h0IGluIHBpeGVscywgYXMgcmVhZCBmcm9tIHRoZSBiaXRzdHJlYW0uCisgIGludCBoYXNfYWxwaGE7ICAgICAgLy8gVHJ1ZSBpZiB0aGUgYml0c3RyZWFtIGNvbnRhaW5zIGFuIGFscGhhIGNoYW5uZWwuCisgIGludCBoYXNfYW5pbWF0aW9uOyAgLy8gVHJ1ZSBpZiB0aGUgYml0c3RyZWFtIGlzIGFuIGFuaW1hdGlvbi4KKyAgaW50IGZvcm1hdDsgICAgICAgICAvLyAwID0gdW5kZWZpbmVkICgvbWl4ZWQpLCAxID0gbG9zc3ksIDIgPSBsb3NzbGVzcworCisgIC8vIFVudXNlZCBmb3Igbm93OgorICBpbnQgbm9faW5jcmVtZW50YWxfZGVjb2Rpbmc7ICAvLyBpZiB0cnVlLCB1c2luZyBpbmNyZW1lbnRhbCBkZWNvZGluZyBpcyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVjb21tZW5kZWQuCisgIGludCByb3RhdGU7ICAgICAgICAgICAgICAgICAgIC8vIFRPRE8obGF0ZXIpCisgIGludCB1dl9zYW1wbGluZzsgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSAwIGZvciBub3cuIFRPRE8obGF0ZXIpCisgIHVpbnQzMl90IHBhZFsyXTsgICAgICAgICAgICAgIC8vIHBhZGRpbmcgZm9yIGxhdGVyIHVzZQorfTsKKworLy8gSW50ZXJuYWwsIHZlcnNpb24tY2hlY2tlZCwgZW50cnkgcG9pbnQKK1dFQlBfRVhURVJOKFZQOFN0YXR1c0NvZGUpIFdlYlBHZXRGZWF0dXJlc0ludGVybmFsKAorICAgIGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QsIFdlYlBCaXRzdHJlYW1GZWF0dXJlcyosIGludCk7CisKKy8vIFJldHJpZXZlIGZlYXR1cmVzIGZyb20gdGhlIGJpdHN0cmVhbS4gVGhlICpmZWF0dXJlcyBzdHJ1Y3R1cmUgaXMgZmlsbGVkCisvLyB3aXRoIGluZm9ybWF0aW9uIGdhdGhlcmVkIGZyb20gdGhlIGJpdHN0cmVhbS4KKy8vIFJldHVybnMgVlA4X1NUQVRVU19PSyB3aGVuIHRoZSBmZWF0dXJlcyBhcmUgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZC4gUmV0dXJucworLy8gVlA4X1NUQVRVU19OT1RfRU5PVUdIX0RBVEEgd2hlbiBtb3JlIGRhdGEgaXMgbmVlZGVkIHRvIHJldHJpZXZlIHRoZQorLy8gZmVhdHVyZXMgZnJvbSBoZWFkZXJzLiBSZXR1cm5zIGVycm9yIGluIG90aGVyIGNhc2VzLgorc3RhdGljIFdFQlBfSU5MSU5FIFZQOFN0YXR1c0NvZGUgV2ViUEdldEZlYXR1cmVzKAorICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBkYXRhX3NpemUsCisgICAgV2ViUEJpdHN0cmVhbUZlYXR1cmVzKiBmZWF0dXJlcykgeworICByZXR1cm4gV2ViUEdldEZlYXR1cmVzSW50ZXJuYWwoZGF0YSwgZGF0YV9zaXplLCBmZWF0dXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQlBfREVDT0RFUl9BQklfVkVSU0lPTik7Cit9CisKKy8vIERlY29kaW5nIG9wdGlvbnMKK3N0cnVjdCBXZWJQRGVjb2Rlck9wdGlvbnMgeworICBpbnQgYnlwYXNzX2ZpbHRlcmluZzsgICAgICAgICAgICAgICAvLyBpZiB0cnVlLCBza2lwIHRoZSBpbi1sb29wIGZpbHRlcmluZworICBpbnQgbm9fZmFuY3lfdXBzYW1wbGluZzsgICAgICAgICAgICAvLyBpZiB0cnVlLCB1c2UgZmFzdGVyIHBvaW50d2lzZSB1cHNhbXBsZXIKKyAgaW50IHVzZV9jcm9wcGluZzsgICAgICAgICAgICAgICAgICAgLy8gaWYgdHJ1ZSwgY3JvcHBpbmcgaXMgYXBwbGllZCBfZmlyc3RfCisgIGludCBjcm9wX2xlZnQsIGNyb3BfdG9wOyAgICAgICAgICAgIC8vIHRvcC1sZWZ0IHBvc2l0aW9uIGZvciBjcm9wcGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2lsbCBiZSBzbmFwcGVkIHRvIGV2ZW4gdmFsdWVzLgorICBpbnQgY3JvcF93aWR0aCwgY3JvcF9oZWlnaHQ7ICAgICAgICAvLyBkaW1lbnNpb24gb2YgdGhlIGNyb3BwaW5nIGFyZWEKKyAgaW50IHVzZV9zY2FsaW5nOyAgICAgICAgICAgICAgICAgICAgLy8gaWYgdHJ1ZSwgc2NhbGluZyBpcyBhcHBsaWVkIF9hZnRlcndhcmRfCisgIGludCBzY2FsZWRfd2lkdGgsIHNjYWxlZF9oZWlnaHQ7ICAgIC8vIGZpbmFsIHJlc29sdXRpb24KKyAgaW50IHVzZV90aHJlYWRzOyAgICAgICAgICAgICAgICAgICAgLy8gaWYgdHJ1ZSwgdXNlIG11bHRpLXRocmVhZGVkIGRlY29kaW5nCisgIGludCBkaXRoZXJpbmdfc3RyZW5ndGg7ICAgICAgICAgICAgIC8vIGRpdGhlcmluZyBzdHJlbmd0aCAoMD1PZmYsIDEwMD1mdWxsKQorI2lmIFdFQlBfREVDT0RFUl9BQklfVkVSU0lPTiA+IDB4MDIwMworICBpbnQgZmxpcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbGlwIG91dHB1dCB2ZXJ0aWNhbGx5CisjZW5kaWYKKyNpZiBXRUJQX0RFQ09ERVJfQUJJX1ZFUlNJT04gPiAweDAyMDQKKyAgaW50IGFscGhhX2RpdGhlcmluZ19zdHJlbmd0aDsgICAgICAgLy8gYWxwaGEgZGl0aGVyaW5nIHN0cmVuZ3RoIGluIFswLi4xMDBdCisjZW5kaWYKKworICAvLyBVbnVzZWQgZm9yIG5vdzoKKyAgaW50IGZvcmNlX3JvdGF0aW9uOyAgICAgICAgICAgICAgICAgLy8gZm9yY2VkIHJvdGF0aW9uICh0byBiZSBhcHBsaWVkIF9sYXN0XykKKyAgaW50IG5vX2VuaGFuY2VtZW50OyAgICAgICAgICAgICAgICAgLy8gaWYgdHJ1ZSwgZGlzY2FyZCBlbmhhbmNlbWVudCBsYXllcgorI2lmIFdFQlBfREVDT0RFUl9BQklfVkVSU0lPTiA8IDB4MDIwMworICB1aW50MzJfdCBwYWRbNV07ICAgICAgICAgICAgICAgICAgICAvLyBwYWRkaW5nIGZvciBsYXRlciB1c2UKKyNlbGlmIFdFQlBfREVDT0RFUl9BQklfVkVSU0lPTiA8IDB4MDIwNAorICB1aW50MzJfdCBwYWRbNF07ICAgICAgICAgICAgICAgICAgICAvLyBwYWRkaW5nIGZvciBsYXRlciB1c2UKKyNlbHNlCisgIHVpbnQzMl90IHBhZFszXTsgICAgICAgICAgICAgICAgICAgIC8vIHBhZGRpbmcgZm9yIGxhdGVyIHVzZQorI2VuZGlmCit9OworCisvLyBNYWluIG9iamVjdCBzdG9yaW5nIHRoZSBjb25maWd1cmF0aW9uIGZvciBhZHZhbmNlZCBkZWNvZGluZy4KK3N0cnVjdCBXZWJQRGVjb2RlckNvbmZpZyB7CisgIFdlYlBCaXRzdHJlYW1GZWF0dXJlcyBpbnB1dDsgIC8vIEltbXV0YWJsZSBiaXRzdHJlYW0gZmVhdHVyZXMgKG9wdGlvbmFsKQorICBXZWJQRGVjQnVmZmVyIG91dHB1dDsgICAgICAgICAvLyBPdXRwdXQgYnVmZmVyIChjYW4gcG9pbnQgdG8gZXh0ZXJuYWwgbWVtKQorICBXZWJQRGVjb2Rlck9wdGlvbnMgb3B0aW9uczsgICAvLyBEZWNvZGluZyBvcHRpb25zCit9OworCisvLyBJbnRlcm5hbCwgdmVyc2lvbi1jaGVja2VkLCBlbnRyeSBwb2ludAorV0VCUF9FWFRFUk4oaW50KSBXZWJQSW5pdERlY29kZXJDb25maWdJbnRlcm5hbChXZWJQRGVjb2RlckNvbmZpZyosIGludCk7CisKKy8vIEluaXRpYWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gYXMgZW1wdHkuIFRoaXMgZnVuY3Rpb24gbXVzdCBhbHdheXMgYmUKKy8vIGNhbGxlZCBmaXJzdCwgdW5sZXNzIFdlYlBHZXRGZWF0dXJlcygpIGlzIHRvIGJlIGNhbGxlZC4KKy8vIFJldHVybnMgZmFsc2UgaW4gY2FzZSBvZiBtaXNtYXRjaGVkIHZlcnNpb24uCitzdGF0aWMgV0VCUF9JTkxJTkUgaW50IFdlYlBJbml0RGVjb2RlckNvbmZpZyhXZWJQRGVjb2RlckNvbmZpZyogY29uZmlnKSB7CisgIHJldHVybiBXZWJQSW5pdERlY29kZXJDb25maWdJbnRlcm5hbChjb25maWcsIFdFQlBfREVDT0RFUl9BQklfVkVSU0lPTik7Cit9CisKKy8vIEluc3RhbnRpYXRlIGEgbmV3IGluY3JlbWVudGFsIGRlY29kZXIgb2JqZWN0IHdpdGggdGhlIHJlcXVlc3RlZAorLy8gY29uZmlndXJhdGlvbi4gVGhlIGJpdHN0cmVhbSBjYW4gYmUgcGFzc2VkIHVzaW5nICdkYXRhJyBhbmQgJ2RhdGFfc2l6ZScKKy8vIHBhcmFtZXRlciwgaW4gd2hpY2ggY2FzZSB0aGUgZmVhdHVyZXMgd2lsbCBiZSBwYXJzZWQgYW5kIHN0b3JlZCBpbnRvCisvLyBjb25maWctPmlucHV0LiBPdGhlcndpc2UsICdkYXRhJyBjYW4gYmUgTlVMTCBhbmQgbm8gcGFyc2luZyB3aWxsIG9jY3VyLgorLy8gTm90ZSB0aGF0ICdjb25maWcnIGNhbiBiZSBOVUxMIHRvbywgaW4gd2hpY2ggY2FzZSBhIGRlZmF1bHQgY29uZmlndXJhdGlvbgorLy8gaXMgdXNlZC4KKy8vIFRoZSByZXR1cm4gV2ViUElEZWNvZGVyIG9iamVjdCBtdXN0IGFsd2F5cyBiZSBkZWxldGVkIGNhbGxpbmcgV2ViUElEZWxldGUoKS4KKy8vIFJldHVybnMgTlVMTCBpbiBjYXNlIG9mIGVycm9yIChhbmQgY29uZmlnLT5zdGF0dXMgd2lsbCB0aGVuIHJlZmxlY3QKKy8vIHRoZSBlcnJvciBjb25kaXRpb24pLgorV0VCUF9FWFRFUk4oV2ViUElEZWNvZGVyKikgV2ViUElEZWNvZGUoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBEZWNvZGVyQ29uZmlnKiBjb25maWcpOworCisvLyBOb24taW5jcmVtZW50YWwgdmVyc2lvbi4gVGhpcyB2ZXJzaW9uIGRlY29kZXMgdGhlIGZ1bGwgZGF0YSBhdCBvbmNlLCB0YWtpbmcKKy8vICdjb25maWcnIGludG8gYWNjb3VudC4gUmV0dXJucyBkZWNvZGluZyBzdGF0dXMgKHdoaWNoIHNob3VsZCBiZSBWUDhfU1RBVFVTX09LCisvLyBpZiB0aGUgZGVjb2Rpbmcgd2FzIHN1Y2Nlc3NmdWwpLgorV0VCUF9FWFRFUk4oVlA4U3RhdHVzQ29kZSkgV2ViUERlY29kZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQRGVjb2RlckNvbmZpZyogY29uZmlnKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAgIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8qIFdFQlBfV0VCUF9ERUNPREVfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy93ZWJwL2RlbXV4LmggYi9zcmMvd2VicC9kZW11eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYTMyMzkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvd2VicC9kZW11eC5oCkBAIC0wLDAgKzEsMjI0IEBACisvLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKKy8vIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQorLy8gdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAorLy8gaW4gdGhlIGZpbGUgUEFURU5UUy4gQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5CisvLyBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gRGVtdXggQVBJLgorLy8gRW5hYmxlcyBleHRyYWN0aW9uIG9mIGltYWdlIGFuZCBleHRlbmRlZCBmb3JtYXQgZGF0YSBmcm9tIFdlYlAgZmlsZXMuCisKKy8vIENvZGUgRXhhbXBsZTogRGVtdXhpbmcgV2ViUCBkYXRhIHRvIGV4dHJhY3QgYWxsIHRoZSBmcmFtZXMsIElDQyBwcm9maWxlCisvLyBhbmQgRVhJRi9YTVAgbWV0YWRhdGEuCisvKgorICBXZWJQRGVtdXhlciogZGVtdXggPSBXZWJQRGVtdXgoJndlYnBfZGF0YSk7CisKKyAgdWludDMyX3Qgd2lkdGggPSBXZWJQRGVtdXhHZXRJKGRlbXV4LCBXRUJQX0ZGX0NBTlZBU19XSURUSCk7CisgIHVpbnQzMl90IGhlaWdodCA9IFdlYlBEZW11eEdldEkoZGVtdXgsIFdFQlBfRkZfQ0FOVkFTX0hFSUdIVCk7CisgIC8vIC4uLiAoR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBmZWF0dXJlcyBwcmVzZW50IGluIHRoZSBXZWJQIGZpbGUpLgorICB1aW50MzJfdCBmbGFncyA9IFdlYlBEZW11eEdldEkoZGVtdXgsIFdFQlBfRkZfRk9STUFUX0ZMQUdTKTsKKworICAvLyAuLi4gKEl0ZXJhdGUgb3ZlciBhbGwgZnJhbWVzKS4KKyAgV2ViUEl0ZXJhdG9yIGl0ZXI7CisgIGlmIChXZWJQRGVtdXhHZXRGcmFtZShkZW11eCwgMSwgJml0ZXIpKSB7CisgICAgZG8geworICAgICAgLy8gLi4uIChDb25zdW1lICdpdGVyJzsgZS5nLiBEZWNvZGUgJ2l0ZXIuZnJhZ21lbnQnIHdpdGggV2ViUERlY29kZSgpLAorICAgICAgLy8gLi4uIGFuZCBnZXQgb3RoZXIgZnJhbWUgcHJvcGVydGllcyBsaWtlIHdpZHRoLCBoZWlnaHQsIG9mZnNldHMgZXRjLgorICAgICAgLy8gLi4uIHNlZSAnc3RydWN0IFdlYlBJdGVyYXRvcicgYmVsb3cgZm9yIG1vcmUgaW5mbykuCisgICAgfSB3aGlsZSAoV2ViUERlbXV4TmV4dEZyYW1lKCZpdGVyKSk7CisgICAgV2ViUERlbXV4UmVsZWFzZUl0ZXJhdG9yKCZpdGVyKTsKKyAgfQorCisgIC8vIC4uLiAoRXh0cmFjdCBtZXRhZGF0YSkuCisgIFdlYlBDaHVua0l0ZXJhdG9yIGNodW5rX2l0ZXI7CisgIGlmIChmbGFncyAmIElDQ1BfRkxBRykgV2ViUERlbXV4R2V0Q2h1bmsoZGVtdXgsICJJQ0NQIiwgMSwgJmNodW5rX2l0ZXIpOworICAvLyAuLi4gKENvbnN1bWUgdGhlIElDQyBwcm9maWxlIGluICdjaHVua19pdGVyLmNodW5rJykuCisgIFdlYlBEZW11eFJlbGVhc2VDaHVua0l0ZXJhdG9yKCZjaHVua19pdGVyKTsKKyAgaWYgKGZsYWdzICYgRVhJRl9GTEFHKSBXZWJQRGVtdXhHZXRDaHVuayhkZW11eCwgIkVYSUYiLCAxLCAmY2h1bmtfaXRlcik7CisgIC8vIC4uLiAoQ29uc3VtZSB0aGUgRVhJRiBtZXRhZGF0YSBpbiAnY2h1bmtfaXRlci5jaHVuaycpLgorICBXZWJQRGVtdXhSZWxlYXNlQ2h1bmtJdGVyYXRvcigmY2h1bmtfaXRlcik7CisgIGlmIChmbGFncyAmIFhNUF9GTEFHKSBXZWJQRGVtdXhHZXRDaHVuayhkZW11eCwgIlhNUCAiLCAxLCAmY2h1bmtfaXRlcik7CisgIC8vIC4uLiAoQ29uc3VtZSB0aGUgWE1QIG1ldGFkYXRhIGluICdjaHVua19pdGVyLmNodW5rJykuCisgIFdlYlBEZW11eFJlbGVhc2VDaHVua0l0ZXJhdG9yKCZjaHVua19pdGVyKTsKKyAgV2ViUERlbXV4RGVsZXRlKGRlbXV4KTsKKyovCisKKyNpZm5kZWYgV0VCUF9XRUJQX0RFTVVYX0hfCisjZGVmaW5lIFdFQlBfV0VCUF9ERU1VWF9IXworCisjaW5jbHVkZSAiLi9tdXhfdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIFdFQlBfREVNVVhfQUJJX1ZFUlNJT04gMHgwMTAxICAgIC8vIE1BSk9SKDhiKSArIE1JTk9SKDhiKQorCisvLyBOb3RlOiBmb3J3YXJkIGRlY2xhcmluZyBlbnVtZXJhdGlvbnMgaXMgbm90IGFsbG93ZWQgaW4gKHN0cmljdCkgQyBhbmQgQysrLAorLy8gdGhlIHR5cGVzIGFyZSBsZWZ0IGhlcmUgZm9yIHJlZmVyZW5jZS4KKy8vIHR5cGVkZWYgZW51bSBXZWJQRGVtdXhTdGF0ZSBXZWJQRGVtdXhTdGF0ZTsKKy8vIHR5cGVkZWYgZW51bSBXZWJQRm9ybWF0RmVhdHVyZSBXZWJQRm9ybWF0RmVhdHVyZTsKK3R5cGVkZWYgc3RydWN0IFdlYlBEZW11eGVyIFdlYlBEZW11eGVyOwordHlwZWRlZiBzdHJ1Y3QgV2ViUEl0ZXJhdG9yIFdlYlBJdGVyYXRvcjsKK3R5cGVkZWYgc3RydWN0IFdlYlBDaHVua0l0ZXJhdG9yIFdlYlBDaHVua0l0ZXJhdG9yOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBSZXR1cm5zIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgZGVtdXggbGlicmFyeSwgcGFja2VkIGluIGhleGFkZWNpbWFsIHVzaW5nCisvLyA4Yml0cyBmb3IgZWFjaCBvZiBtYWpvci9taW5vci9yZXZpc2lvbi4gRS5nOiB2Mi41LjcgaXMgMHgwMjA1MDcuCitXRUJQX0VYVEVSTihpbnQpIFdlYlBHZXREZW11eFZlcnNpb24odm9pZCk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMaWZlIG9mIGEgRGVtdXggb2JqZWN0CisKK3R5cGVkZWYgZW51bSBXZWJQRGVtdXhTdGF0ZSB7CisgIFdFQlBfREVNVVhfUEFSU0VfRVJST1IgICAgPSAtMSwgIC8vIEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHBhcnNpbmcuCisgIFdFQlBfREVNVVhfUEFSU0lOR19IRUFERVIgPSAgMCwgIC8vIE5vdCBlbm91Z2ggZGF0YSB0byBwYXJzZSBmdWxsIGhlYWRlci4KKyAgV0VCUF9ERU1VWF9QQVJTRURfSEVBREVSICA9ICAxLCAgLy8gSGVhZGVyIHBhcnNpbmcgY29tcGxldGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhdGEgbWF5IGJlIGF2YWlsYWJsZS4KKyAgV0VCUF9ERU1VWF9ET05FICAgICAgICAgICA9ICAyICAgLy8gRW50aXJlIGZpbGUgaGFzIGJlZW4gcGFyc2VkLgorfSBXZWJQRGVtdXhTdGF0ZTsKKworLy8gSW50ZXJuYWwsIHZlcnNpb24tY2hlY2tlZCwgZW50cnkgcG9pbnQKK1dFQlBfRVhURVJOKFdlYlBEZW11eGVyKikgV2ViUERlbXV4SW50ZXJuYWwoCisgICAgY29uc3QgV2ViUERhdGEqLCBpbnQsIFdlYlBEZW11eFN0YXRlKiwgaW50KTsKKworLy8gUGFyc2VzIHRoZSBmdWxsIFdlYlAgZmlsZSBnaXZlbiBieSAnZGF0YScuCisvLyBSZXR1cm5zIGEgV2ViUERlbXV4ZXIgb2JqZWN0IG9uIHN1Y2Nlc3NmdWwgcGFyc2UsIE5VTEwgb3RoZXJ3aXNlLgorc3RhdGljIFdFQlBfSU5MSU5FIFdlYlBEZW11eGVyKiBXZWJQRGVtdXgoY29uc3QgV2ViUERhdGEqIGRhdGEpIHsKKyAgcmV0dXJuIFdlYlBEZW11eEludGVybmFsKGRhdGEsIDAsIE5VTEwsIFdFQlBfREVNVVhfQUJJX1ZFUlNJT04pOworfQorCisvLyBQYXJzZXMgdGhlIHBvc3NpYmx5IGluY29tcGxldGUgV2ViUCBmaWxlIGdpdmVuIGJ5ICdkYXRhJy4KKy8vIElmICdzdGF0ZScgaXMgbm9uLU5VTEwgaXQgd2lsbCBiZSBzZXQgdG8gaW5kaWNhdGUgdGhlIHN0YXR1cyBvZiB0aGUgZGVtdXhlci4KKy8vIFJldHVybnMgTlVMTCBpbiBjYXNlIG9mIGVycm9yIG9yIGlmIHRoZXJlIGlzbid0IGVub3VnaCBkYXRhIHRvIHN0YXJ0IHBhcnNpbmc7CisvLyBhbmQgYSBXZWJQRGVtdXhlciBvYmplY3Qgb24gc3VjY2Vzc2Z1bCBwYXJzZS4KKy8vIE5vdGUgdGhhdCBXZWJQRGVtdXhlciBrZWVwcyBpbnRlcm5hbCBwb2ludGVycyB0byAnZGF0YScgbWVtb3J5IHNlZ21lbnQuCisvLyBJZiB0aGlzIGRhdGEgaXMgdm9sYXRpbGUsIHRoZSBkZW11eGVyIG9iamVjdCBzaG91bGQgYmUgZGVsZXRlZCAoYnkgY2FsbGluZworLy8gV2ViUERlbXV4RGVsZXRlKCkpIGFuZCBXZWJQRGVtdXhQYXJ0aWFsKCkgY2FsbGVkIGFnYWluIG9uIHRoZSBuZXcgZGF0YS4KKy8vIFRoaXMgaXMgdXN1YWxseSBhbiBpbmV4cGVuc2l2ZSBvcGVyYXRpb24uCitzdGF0aWMgV0VCUF9JTkxJTkUgV2ViUERlbXV4ZXIqIFdlYlBEZW11eFBhcnRpYWwoCisgICAgY29uc3QgV2ViUERhdGEqIGRhdGEsIFdlYlBEZW11eFN0YXRlKiBzdGF0ZSkgeworICByZXR1cm4gV2ViUERlbXV4SW50ZXJuYWwoZGF0YSwgMSwgc3RhdGUsIFdFQlBfREVNVVhfQUJJX1ZFUlNJT04pOworfQorCisvLyBGcmVlcyBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoICdkbXV4Jy4KK1dFQlBfRVhURVJOKHZvaWQpIFdlYlBEZW11eERlbGV0ZShXZWJQRGVtdXhlciogZG11eCk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEYXRhL2luZm9ybWF0aW9uIGV4dHJhY3Rpb24uCisKK3R5cGVkZWYgZW51bSBXZWJQRm9ybWF0RmVhdHVyZSB7CisgIFdFQlBfRkZfRk9STUFUX0ZMQUdTLCAgLy8gRXh0ZW5kZWQgZm9ybWF0IGZsYWdzIHByZXNlbnQgaW4gdGhlICdWUDhYJyBjaHVuay4KKyAgV0VCUF9GRl9DQU5WQVNfV0lEVEgsCisgIFdFQlBfRkZfQ0FOVkFTX0hFSUdIVCwKKyAgV0VCUF9GRl9MT09QX0NPVU5ULAorICBXRUJQX0ZGX0JBQ0tHUk9VTkRfQ09MT1IsCisgIFdFQlBfRkZfRlJBTUVfQ09VTlQgICAgLy8gTnVtYmVyIG9mIGZyYW1lcyBwcmVzZW50IGluIHRoZSBkZW11eCBvYmplY3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBhIHBhcnRpYWwgZGVtdXgsIHRoaXMgaXMgdGhlIG51bWJlciBvZgorICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyYW1lcyBzZWVuIHNvIGZhciwgd2l0aCB0aGUgbGFzdCBmcmFtZSBwb3NzaWJseQorICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlaW5nIHBhcnRpYWwuCit9IFdlYlBGb3JtYXRGZWF0dXJlOworCisvLyBHZXQgdGhlICdmZWF0dXJlJyB2YWx1ZSBmcm9tIHRoZSAnZG11eCcuCisvLyBOT1RFOiB2YWx1ZXMgYXJlIG9ubHkgdmFsaWQgaWYgV2ViUERlbXV4KCkgd2FzIHVzZWQgb3IgV2ViUERlbXV4UGFydGlhbCgpCisvLyByZXR1cm5lZCBhIHN0YXRlID4gV0VCUF9ERU1VWF9QQVJTSU5HX0hFQURFUi4KK1dFQlBfRVhURVJOKHVpbnQzMl90KSBXZWJQRGVtdXhHZXRJKAorICAgIGNvbnN0IFdlYlBEZW11eGVyKiBkbXV4LCBXZWJQRm9ybWF0RmVhdHVyZSBmZWF0dXJlKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEZyYW1lIGl0ZXJhdGlvbi4KKworc3RydWN0IFdlYlBJdGVyYXRvciB7CisgIGludCBmcmFtZV9udW07CisgIGludCBudW1fZnJhbWVzOyAgICAgICAgICAvLyBlcXVpdmFsZW50IHRvIFdFQlBfRkZfRlJBTUVfQ09VTlQuCisgIGludCBmcmFnbWVudF9udW07CisgIGludCBudW1fZnJhZ21lbnRzOworICBpbnQgeF9vZmZzZXQsIHlfb2Zmc2V0OyAgLy8gb2Zmc2V0IHJlbGF0aXZlIHRvIHRoZSBjYW52YXMuCisgIGludCB3aWR0aCwgaGVpZ2h0OyAgICAgICAvLyBkaW1lbnNpb25zIG9mIHRoaXMgZnJhbWUgb3IgZnJhZ21lbnQuCisgIGludCBkdXJhdGlvbjsgICAgICAgICAgICAvLyBkaXNwbGF5IGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy4KKyAgV2ViUE11eEFuaW1EaXNwb3NlIGRpc3Bvc2VfbWV0aG9kOyAgLy8gZGlzcG9zZSBtZXRob2QgZm9yIHRoZSBmcmFtZS4KKyAgaW50IGNvbXBsZXRlOyAgIC8vIHRydWUgaWYgJ2ZyYWdtZW50JyBjb250YWlucyBhIGZ1bGwgZnJhbWUuIHBhcnRpYWwgaW1hZ2VzCisgICAgICAgICAgICAgICAgICAvLyBtYXkgc3RpbGwgYmUgZGVjb2RlZCB3aXRoIHRoZSBXZWJQIGluY3JlbWVudGFsIGRlY29kZXIuCisgIFdlYlBEYXRhIGZyYWdtZW50OyAgLy8gVGhlIGZyYW1lIG9yIGZyYWdtZW50IGdpdmVuIGJ5ICdmcmFtZV9udW0nIGFuZAorICAgICAgICAgICAgICAgICAgICAgIC8vICdmcmFnbWVudF9udW0nLgorICBpbnQgaGFzX2FscGhhOyAgICAgIC8vIFRydWUgaWYgdGhlIGZyYW1lIG9yIGZyYWdtZW50IGNvbnRhaW5zIHRyYW5zcGFyZW5jeS4KKyAgV2ViUE11eEFuaW1CbGVuZCBibGVuZF9tZXRob2Q7ICAvLyBCbGVuZCBvcGVyYXRpb24gZm9yIHRoZSBmcmFtZS4KKworICB1aW50MzJfdCBwYWRbMl07ICAgICAgICAgLy8gcGFkZGluZyBmb3IgbGF0ZXIgdXNlLgorICB2b2lkKiBwcml2YXRlXzsgICAgICAgICAgLy8gZm9yIGludGVybmFsIHVzZSBvbmx5LgorfTsKKworLy8gUmV0cmlldmVzIGZyYW1lICdmcmFtZV9udW1iZXInIGZyb20gJ2RtdXgnLgorLy8gJ2l0ZXItPmZyYWdtZW50JyBwb2ludHMgdG8gdGhlIGZpcnN0IGZyYWdtZW50IG9uIHJldHVybiBmcm9tIHRoaXMgZnVuY3Rpb24uCisvLyBJbmRpdmlkdWFsIGZyYWdtZW50cyBtYXkgYmUgZXh0cmFjdGVkIHVzaW5nIFdlYlBEZW11eFNlbGVjdEZyYWdtZW50KCkuCisvLyBTZXR0aW5nICdmcmFtZV9udW1iZXInIGVxdWFsIHRvIDAgd2lsbCByZXR1cm4gdGhlIGxhc3QgZnJhbWUgb2YgdGhlIGltYWdlLgorLy8gUmV0dXJucyBmYWxzZSBpZiAnZG11eCcgaXMgTlVMTCBvciBmcmFtZSAnZnJhbWVfbnVtYmVyJyBpcyBub3QgcHJlc2VudC4KKy8vIENhbGwgV2ViUERlbXV4UmVsZWFzZUl0ZXJhdG9yKCkgd2hlbiB1c2Ugb2YgdGhlIGl0ZXJhdG9yIGlzIGNvbXBsZXRlLgorLy8gTk9URTogJ2RtdXgnIG11c3QgcGVyc2lzdCBmb3IgdGhlIGxpZmV0aW1lIG9mICdpdGVyJy4KK1dFQlBfRVhURVJOKGludCkgV2ViUERlbXV4R2V0RnJhbWUoCisgICAgY29uc3QgV2ViUERlbXV4ZXIqIGRtdXgsIGludCBmcmFtZV9udW1iZXIsIFdlYlBJdGVyYXRvciogaXRlcik7CisKKy8vIFNldHMgJ2l0ZXItPmZyYWdtZW50JyB0byBwb2ludCB0byB0aGUgbmV4dCAoJ2l0ZXItPmZyYW1lX251bScgKyAxKSBvcgorLy8gcHJldmlvdXMgKCdpdGVyLT5mcmFtZV9udW0nIC0gMSkgZnJhbWUuIFRoZXNlIGZ1bmN0aW9ucyBkbyBub3QgbG9vcC4KKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCitXRUJQX0VYVEVSTihpbnQpIFdlYlBEZW11eE5leHRGcmFtZShXZWJQSXRlcmF0b3IqIGl0ZXIpOworV0VCUF9FWFRFUk4oaW50KSBXZWJQRGVtdXhQcmV2RnJhbWUoV2ViUEl0ZXJhdG9yKiBpdGVyKTsKKworLy8gU2V0cyAnaXRlci0+ZnJhZ21lbnQnIHRvIHJlZmxlY3QgZnJhZ21lbnQgbnVtYmVyICdmcmFnbWVudF9udW0nLgorLy8gUmV0dXJucyB0cnVlIGlmIGZyYWdtZW50ICdmcmFnbWVudF9udW0nIGlzIHByZXNlbnQsIGZhbHNlIG90aGVyd2lzZS4KK1dFQlBfRVhURVJOKGludCkgV2ViUERlbXV4U2VsZWN0RnJhZ21lbnQoV2ViUEl0ZXJhdG9yKiBpdGVyLCBpbnQgZnJhZ21lbnRfbnVtKTsKKworLy8gUmVsZWFzZXMgYW55IG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggJ2l0ZXInLgorLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBzdWJzZXF1ZW50IGNhbGxzIHRvIFdlYlBEZW11eEdldENodW5rKCkgb24gdGhlIHNhbWUKKy8vIGl0ZXIuIEFsc28sIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBhc3NvY2lhdGVkIFdlYlBEZW11eGVyIHdpdGgKKy8vIFdlYlBEZW11eERlbGV0ZSgpLgorV0VCUF9FWFRFUk4odm9pZCkgV2ViUERlbXV4UmVsZWFzZUl0ZXJhdG9yKFdlYlBJdGVyYXRvciogaXRlcik7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDaHVuayBpdGVyYXRpb24uCisKK3N0cnVjdCBXZWJQQ2h1bmtJdGVyYXRvciB7CisgIC8vIFRoZSBjdXJyZW50IGFuZCB0b3RhbCBudW1iZXIgb2YgY2h1bmtzIHdpdGggdGhlIGZvdXJjYyBnaXZlbiB0bworICAvLyBXZWJQRGVtdXhHZXRDaHVuaygpLgorICBpbnQgY2h1bmtfbnVtOworICBpbnQgbnVtX2NodW5rczsKKyAgV2ViUERhdGEgY2h1bms7ICAgIC8vIFRoZSBwYXlsb2FkIG9mIHRoZSBjaHVuay4KKworICB1aW50MzJfdCBwYWRbNl07ICAgLy8gcGFkZGluZyBmb3IgbGF0ZXIgdXNlCisgIHZvaWQqIHByaXZhdGVfOworfTsKKworLy8gUmV0cmlldmVzIHRoZSAnY2h1bmtfbnVtYmVyJyBpbnN0YW5jZSBvZiB0aGUgY2h1bmsgd2l0aCBpZCAnZm91cmNjJyBmcm9tCisvLyAnZG11eCcuCisvLyAnZm91cmNjJyBpcyBhIGNoYXJhY3RlciBhcnJheSBjb250YWluaW5nIHRoZSBmb3VyY2Mgb2YgdGhlIGNodW5rIHRvIHJldHVybiwKKy8vIGUuZy4sICJJQ0NQIiwgIlhNUCAiLCAiRVhJRiIsIGV0Yy4KKy8vIFNldHRpbmcgJ2NodW5rX251bWJlcicgZXF1YWwgdG8gMCB3aWxsIHJldHVybiB0aGUgbGFzdCBjaHVuayBpbiBhIHNldC4KKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2h1bmsgaXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4gSW1hZ2UgcmVsYXRlZCBjaHVuaworLy8gcGF5bG9hZHMgYXJlIGFjY2Vzc2VkIHRocm91Z2ggV2ViUERlbXV4R2V0RnJhbWUoKSBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuCisvLyBDYWxsIFdlYlBEZW11eFJlbGVhc2VDaHVua0l0ZXJhdG9yKCkgd2hlbiB1c2Ugb2YgdGhlIGl0ZXJhdG9yIGlzIGNvbXBsZXRlLgorLy8gTk9URTogJ2RtdXgnIG11c3QgcGVyc2lzdCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBpdGVyYXRvci4KK1dFQlBfRVhURVJOKGludCkgV2ViUERlbXV4R2V0Q2h1bmsoY29uc3QgV2ViUERlbXV4ZXIqIGRtdXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgZm91cmNjWzRdLCBpbnQgY2h1bmtfbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQQ2h1bmtJdGVyYXRvciogaXRlcik7CisKKy8vIFNldHMgJ2l0ZXItPmNodW5rJyB0byBwb2ludCB0byB0aGUgbmV4dCAoJ2l0ZXItPmNodW5rX251bScgKyAxKSBvciBwcmV2aW91cworLy8gKCdpdGVyLT5jaHVua19udW0nIC0gMSkgY2h1bmsuIFRoZXNlIGZ1bmN0aW9ucyBkbyBub3QgbG9vcC4KKy8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCitXRUJQX0VYVEVSTihpbnQpIFdlYlBEZW11eE5leHRDaHVuayhXZWJQQ2h1bmtJdGVyYXRvciogaXRlcik7CitXRUJQX0VYVEVSTihpbnQpIFdlYlBEZW11eFByZXZDaHVuayhXZWJQQ2h1bmtJdGVyYXRvciogaXRlcik7CisKKy8vIFJlbGVhc2VzIGFueSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoICdpdGVyJy4KKy8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZXN0cm95aW5nIHRoZSBhc3NvY2lhdGVkIFdlYlBEZW11eGVyIHdpdGgKKy8vIFdlYlBEZW11eERlbGV0ZSgpLgorV0VCUF9FWFRFUk4odm9pZCkgV2ViUERlbXV4UmVsZWFzZUNodW5rSXRlcmF0b3IoV2ViUENodW5rSXRlcmF0b3IqIGl0ZXIpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30gICAgLy8gZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAgLyogV0VCUF9XRUJQX0RFTVVYX0hfICovCmRpZmYgLS1naXQgYS9zcmMvd2VicC9lbmNvZGUuaCBiL3NyYy93ZWJwL2VuY29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZjA1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvd2VicC9lbmNvZGUuaApAQCAtMCwwICsxLDUyMCBAQAorLy8gQ29weXJpZ2h0IDIwMTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCisvLyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKKy8vIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKKy8vIGluIHRoZSBmaWxlIFBBVEVOVFMuIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQorLy8gYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vICAgV2ViUCBlbmNvZGVyOiBtYWluIGludGVyZmFjZQorLy8KKy8vIEF1dGhvcjogU2thbCAocGFzY2FsLm1hc3NpbWlub0BnbWFpbC5jb20pCisKKyNpZm5kZWYgV0VCUF9XRUJQX0VOQ09ERV9IXworI2RlZmluZSBXRUJQX1dFQlBfRU5DT0RFX0hfCisKKyNpbmNsdWRlICIuL3R5cGVzLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBXRUJQX0VOQ09ERVJfQUJJX1ZFUlNJT04gMHgwMjAyICAgIC8vIE1BSk9SKDhiKSArIE1JTk9SKDhiKQorCisvLyBOb3RlOiBmb3J3YXJkIGRlY2xhcmluZyBlbnVtZXJhdGlvbnMgaXMgbm90IGFsbG93ZWQgaW4gKHN0cmljdCkgQyBhbmQgQysrLAorLy8gdGhlIHR5cGVzIGFyZSBsZWZ0IGhlcmUgZm9yIHJlZmVyZW5jZS4KKy8vIHR5cGVkZWYgZW51bSBXZWJQSW1hZ2VIaW50IFdlYlBJbWFnZUhpbnQ7CisvLyB0eXBlZGVmIGVudW0gV2ViUEVuY0NTUCBXZWJQRW5jQ1NQOworLy8gdHlwZWRlZiBlbnVtIFdlYlBQcmVzZXQgV2ViUFByZXNldDsKKy8vIHR5cGVkZWYgZW51bSBXZWJQRW5jb2RpbmdFcnJvciBXZWJQRW5jb2RpbmdFcnJvcjsKK3R5cGVkZWYgc3RydWN0IFdlYlBDb25maWcgV2ViUENvbmZpZzsKK3R5cGVkZWYgc3RydWN0IFdlYlBQaWN0dXJlIFdlYlBQaWN0dXJlOyAgIC8vIG1haW4gc3RydWN0dXJlIGZvciBJL08KK3R5cGVkZWYgc3RydWN0IFdlYlBBdXhTdGF0cyBXZWJQQXV4U3RhdHM7Cit0eXBlZGVmIHN0cnVjdCBXZWJQTWVtb3J5V3JpdGVyIFdlYlBNZW1vcnlXcml0ZXI7CisKKy8vIFJldHVybiB0aGUgZW5jb2RlcidzIHZlcnNpb24gbnVtYmVyLCBwYWNrZWQgaW4gaGV4YWRlY2ltYWwgdXNpbmcgOGJpdHMgZm9yCisvLyBlYWNoIG9mIG1ham9yL21pbm9yL3JldmlzaW9uLiBFLmc6IHYyLjUuNyBpcyAweDAyMDUwNy4KK1dFQlBfRVhURVJOKGludCkgV2ViUEdldEVuY29kZXJWZXJzaW9uKHZvaWQpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gT25lLXN0b3Atc2hvcCBjYWxsISBObyBxdWVzdGlvbnMgYXNrZWQ6CisKKy8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSAocG9pbnRlZCB0byBieSAqb3V0cHV0KSwgb3IgMCBpZgorLy8gYW4gZXJyb3Igb2NjdXJyZWQuIFRoZSBjb21wcmVzc2VkIGRhdGEgbXVzdCBiZSByZWxlYXNlZCBieSB0aGUgY2FsbGVyCisvLyB1c2luZyB0aGUgY2FsbCAnZnJlZSgqb3V0cHV0KScuCisvLyBUaGVzZSBmdW5jdGlvbnMgY29tcHJlc3MgdXNpbmcgdGhlIGxvc3N5IGZvcm1hdCwgYW5kIHRoZSBxdWFsaXR5X2ZhY3RvcgorLy8gY2FuIGdvIGZyb20gMCAoc21hbGxlciBvdXRwdXQsIGxvd2VyIHF1YWxpdHkpIHRvIDEwMCAoYmVzdCBxdWFsaXR5LAorLy8gbGFyZ2VyIG91dHB1dCkuCitXRUJQX0VYVEVSTihzaXplX3QpIFdlYlBFbmNvZGVSR0IoY29uc3QgdWludDhfdCogcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHN0cmlkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBxdWFsaXR5X2ZhY3RvciwgdWludDhfdCoqIG91dHB1dCk7CitXRUJQX0VYVEVSTihzaXplX3QpIFdlYlBFbmNvZGVCR1IoY29uc3QgdWludDhfdCogYmdyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHN0cmlkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBxdWFsaXR5X2ZhY3RvciwgdWludDhfdCoqIG91dHB1dCk7CitXRUJQX0VYVEVSTihzaXplX3QpIFdlYlBFbmNvZGVSR0JBKGNvbnN0IHVpbnQ4X3QqIHJnYmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHN0cmlkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcXVhbGl0eV9mYWN0b3IsIHVpbnQ4X3QqKiBvdXRwdXQpOworV0VCUF9FWFRFUk4oc2l6ZV90KSBXZWJQRW5jb2RlQkdSQShjb25zdCB1aW50OF90KiBiZ3JhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBzdHJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHF1YWxpdHlfZmFjdG9yLCB1aW50OF90Kiogb3V0cHV0KTsKKworLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUgZXF1aXZhbGVudCBvZiB0aGUgYWJvdmUsIGJ1dCBjb21wcmVzc2luZyBpbiBhCisvLyBsb3NzbGVzcyBtYW5uZXIuIEZpbGVzIGFyZSB1c3VhbGx5IGxhcmdlciB0aGFuIGxvc3N5IGZvcm1hdCwgYnV0IHdpbGwKKy8vIG5vdCBzdWZmZXIgYW55IGNvbXByZXNzaW9uIGxvc3MuCitXRUJQX0VYVEVSTihzaXplX3QpIFdlYlBFbmNvZGVMb3NzbGVzc1JHQihjb25zdCB1aW50OF90KiByZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBzdHJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90Kiogb3V0cHV0KTsKK1dFQlBfRVhURVJOKHNpemVfdCkgV2ViUEVuY29kZUxvc3NsZXNzQkdSKGNvbnN0IHVpbnQ4X3QqIGJnciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHN0cmlkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqKiBvdXRwdXQpOworV0VCUF9FWFRFUk4oc2l6ZV90KSBXZWJQRW5jb2RlTG9zc2xlc3NSR0JBKGNvbnN0IHVpbnQ4X3QqIHJnYmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqKiBvdXRwdXQpOworV0VCUF9FWFRFUk4oc2l6ZV90KSBXZWJQRW5jb2RlTG9zc2xlc3NCR1JBKGNvbnN0IHVpbnQ4X3QqIGJncmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqKiBvdXRwdXQpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29kaW5nIHBhcmFtZXRlcnMKKworLy8gSW1hZ2UgY2hhcmFjdGVyaXN0aWNzIGhpbnQgZm9yIHRoZSB1bmRlcmx5aW5nIGVuY29kZXIuCit0eXBlZGVmIGVudW0gV2ViUEltYWdlSGludCB7CisgIFdFQlBfSElOVF9ERUZBVUxUID0gMCwgIC8vIGRlZmF1bHQgcHJlc2V0LgorICBXRUJQX0hJTlRfUElDVFVSRSwgICAgICAvLyBkaWdpdGFsIHBpY3R1cmUsIGxpa2UgcG9ydHJhaXQsIGlubmVyIHNob3QKKyAgV0VCUF9ISU5UX1BIT1RPLCAgICAgICAgLy8gb3V0ZG9vciBwaG90b2dyYXBoLCB3aXRoIG5hdHVyYWwgbGlnaHRpbmcKKyAgV0VCUF9ISU5UX0dSQVBILCAgICAgICAgLy8gRGlzY3JldGUgdG9uZSBpbWFnZSAoZ3JhcGgsIG1hcC10aWxlIGV0YykuCisgIFdFQlBfSElOVF9MQVNUCit9IFdlYlBJbWFnZUhpbnQ7CisKKy8vIENvbXByZXNzaW9uIHBhcmFtZXRlcnMuCitzdHJ1Y3QgV2ViUENvbmZpZyB7CisgIGludCBsb3NzbGVzczsgICAgICAgICAgIC8vIExvc3NsZXNzIGVuY29kaW5nICgwPWxvc3N5KGRlZmF1bHQpLCAxPWxvc3NsZXNzKS4KKyAgZmxvYXQgcXVhbGl0eTsgICAgICAgICAgLy8gYmV0d2VlbiAwIChzbWFsbGVzdCBmaWxlKSBhbmQgMTAwIChiaWdnZXN0KQorICBpbnQgbWV0aG9kOyAgICAgICAgICAgICAvLyBxdWFsaXR5L3NwZWVkIHRyYWRlLW9mZiAoMD1mYXN0LCA2PXNsb3dlci1iZXR0ZXIpCisKKyAgV2ViUEltYWdlSGludCBpbWFnZV9oaW50OyAgLy8gSGludCBmb3IgaW1hZ2UgdHlwZSAobG9zc2xlc3Mgb25seSBmb3Igbm93KS4KKworICAvLyBQYXJhbWV0ZXJzIHJlbGF0ZWQgdG8gbG9zc3kgY29tcHJlc3Npb24gb25seToKKyAgaW50IHRhcmdldF9zaXplOyAgICAgICAgLy8gaWYgbm9uLXplcm8sIHNldCB0aGUgZGVzaXJlZCB0YXJnZXQgc2l6ZSBpbiBieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSAnY29tcHJlc3Npb24nIHBhcmFtZXRlci4KKyAgZmxvYXQgdGFyZ2V0X1BTTlI7ICAgICAgLy8gaWYgbm9uLXplcm8sIHNwZWNpZmllcyB0aGUgbWluaW1hbCBkaXN0b3J0aW9uIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBhY2hpZXZlLiBUYWtlcyBwcmVjZWRlbmNlIG92ZXIgdGFyZ2V0X3NpemUuCisgIGludCBzZWdtZW50czsgICAgICAgICAgIC8vIG1heGltdW0gbnVtYmVyIG9mIHNlZ21lbnRzIHRvIHVzZSwgaW4gWzEuLjRdCisgIGludCBzbnNfc3RyZW5ndGg7ICAgICAgIC8vIFNwYXRpYWwgTm9pc2UgU2hhcGluZy4gMD1vZmYsIDEwMD1tYXhpbXVtLgorICBpbnQgZmlsdGVyX3N0cmVuZ3RoOyAgICAvLyByYW5nZTogWzAgPSBvZmYgLi4gMTAwID0gc3Ryb25nZXN0XQorICBpbnQgZmlsdGVyX3NoYXJwbmVzczsgICAvLyByYW5nZTogWzAgPSBvZmYgLi4gNyA9IGxlYXN0IHNoYXJwXQorICBpbnQgZmlsdGVyX3R5cGU7ICAgICAgICAvLyBmaWx0ZXJpbmcgdHlwZTogMCA9IHNpbXBsZSwgMSA9IHN0cm9uZyAob25seSB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGZpbHRlcl9zdHJlbmd0aCA+IDAgb3IgYXV0b2ZpbHRlciA+IDApCisgIGludCBhdXRvZmlsdGVyOyAgICAgICAgIC8vIEF1dG8gYWRqdXN0IGZpbHRlcidzIHN0cmVuZ3RoIFswID0gb2ZmLCAxID0gb25dCisgIGludCBhbHBoYV9jb21wcmVzc2lvbjsgIC8vIEFsZ29yaXRobSBmb3IgZW5jb2RpbmcgdGhlIGFscGhhIHBsYW5lICgwID0gbm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMSA9IGNvbXByZXNzZWQgd2l0aCBXZWJQIGxvc3NsZXNzKS4gRGVmYXVsdCBpcyAxLgorICBpbnQgYWxwaGFfZmlsdGVyaW5nOyAgICAvLyBQcmVkaWN0aXZlIGZpbHRlcmluZyBtZXRob2QgZm9yIGFscGhhIHBsYW5lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgMDogbm9uZSwgMTogZmFzdCwgMjogYmVzdC4gRGVmYXVsdCBpZiAxLgorICBpbnQgYWxwaGFfcXVhbGl0eTsgICAgICAvLyBCZXR3ZWVuIDAgKHNtYWxsZXN0IHNpemUpIGFuZCAxMDAgKGxvc3NsZXNzKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCBpcyAxMDAuCisgIGludCBwYXNzOyAgICAgICAgICAgICAgIC8vIG51bWJlciBvZiBlbnRyb3B5LWFuYWx5c2lzIHBhc3NlcyAoaW4gWzEuLjEwXSkuCisKKyAgaW50IHNob3dfY29tcHJlc3NlZDsgICAgLy8gaWYgdHJ1ZSwgZXhwb3J0IHRoZSBjb21wcmVzc2VkIHBpY3R1cmUgYmFjay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4tbG9vcCBmaWx0ZXJpbmcgaXMgbm90IGFwcGxpZWQuCisgIGludCBwcmVwcm9jZXNzaW5nOyAgICAgIC8vIHByZXByb2Nlc3NpbmcgZmlsdGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwPW5vbmUsIDE9c2VnbWVudC1zbW9vdGgsIDI9cHNldWRvLXJhbmRvbSBkaXRoZXJpbmcKKyAgaW50IHBhcnRpdGlvbnM7ICAgICAgICAgLy8gbG9nMihudW1iZXIgb2YgdG9rZW4gcGFydGl0aW9ucykgaW4gWzAuLjNdLiBEZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHNldCB0byAwIGZvciBlYXNpZXIgcHJvZ3Jlc3NpdmUgZGVjb2RpbmcuCisgIGludCBwYXJ0aXRpb25fbGltaXQ7ICAgIC8vIHF1YWxpdHkgZGVncmFkYXRpb24gYWxsb3dlZCB0byBmaXQgdGhlIDUxMmsgbGltaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb24gcHJlZGljdGlvbiBtb2RlcyBjb2RpbmcgKDA6IG5vIGRlZ3JhZGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMDA6IG1heGltdW0gcG9zc2libGUgZGVncmFkYXRpb24pLgorICBpbnQgZW11bGF0ZV9qcGVnX3NpemU7ICAvLyBJZiB0cnVlLCBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIHdpbGwgYmUgcmVtYXBwZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmV0dGVyIG1hdGNoIHRoZSBleHBlY3RlZCBvdXRwdXQgc2l6ZSBmcm9tCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEpQRUcgY29tcHJlc3Npb24uIEdlbmVyYWxseSwgdGhlIG91dHB1dCBzaXplIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmUgc2ltaWxhciBidXQgdGhlIGRlZ3JhZGF0aW9uIHdpbGwgYmUgbG93ZXIuCisgIGludCB0aHJlYWRfbGV2ZWw7ICAgICAgIC8vIElmIG5vbi16ZXJvLCB0cnkgYW5kIHVzZSBtdWx0aS10aHJlYWRlZCBlbmNvZGluZy4KKyAgaW50IGxvd19tZW1vcnk7ICAgICAgICAgLy8gSWYgc2V0LCByZWR1Y2UgbWVtb3J5IHVzYWdlIChidXQgaW5jcmVhc2UgQ1BVIHVzZSkuCisKKyAgdWludDMyX3QgcGFkWzVdOyAgICAgICAgLy8gcGFkZGluZyBmb3IgbGF0ZXIgdXNlCit9OworCisvLyBFbnVtZXJhdGUgc29tZSBwcmVkZWZpbmVkIHNldHRpbmdzIGZvciBXZWJQQ29uZmlnLCBkZXBlbmRpbmcgb24gdGhlIHR5cGUKKy8vIG9mIHNvdXJjZSBwaWN0dXJlLiBUaGVzZSBwcmVzZXRzIGFyZSB1c2VkIHdoZW4gY2FsbGluZyBXZWJQQ29uZmlnUHJlc2V0KCkuCit0eXBlZGVmIGVudW0gV2ViUFByZXNldCB7CisgIFdFQlBfUFJFU0VUX0RFRkFVTFQgPSAwLCAgLy8gZGVmYXVsdCBwcmVzZXQuCisgIFdFQlBfUFJFU0VUX1BJQ1RVUkUsICAgICAgLy8gZGlnaXRhbCBwaWN0dXJlLCBsaWtlIHBvcnRyYWl0LCBpbm5lciBzaG90CisgIFdFQlBfUFJFU0VUX1BIT1RPLCAgICAgICAgLy8gb3V0ZG9vciBwaG90b2dyYXBoLCB3aXRoIG5hdHVyYWwgbGlnaHRpbmcKKyAgV0VCUF9QUkVTRVRfRFJBV0lORywgICAgICAvLyBoYW5kIG9yIGxpbmUgZHJhd2luZywgd2l0aCBoaWdoLWNvbnRyYXN0IGRldGFpbHMKKyAgV0VCUF9QUkVTRVRfSUNPTiwgICAgICAgICAvLyBzbWFsbC1zaXplZCBjb2xvcmZ1bCBpbWFnZXMKKyAgV0VCUF9QUkVTRVRfVEVYVCAgICAgICAgICAvLyB0ZXh0LWxpa2UKK30gV2ViUFByZXNldDsKKworLy8gSW50ZXJuYWwsIHZlcnNpb24tY2hlY2tlZCwgZW50cnkgcG9pbnQKK1dFQlBfRVhURVJOKGludCkgV2ViUENvbmZpZ0luaXRJbnRlcm5hbChXZWJQQ29uZmlnKiwgV2ViUFByZXNldCwgZmxvYXQsIGludCk7CisKKy8vIFNob3VsZCBhbHdheXMgYmUgY2FsbGVkLCB0byBpbml0aWFsaXplIGEgZnJlc2ggV2ViUENvbmZpZyBzdHJ1Y3R1cmUgYmVmb3JlCisvLyBtb2RpZmljYXRpb24uIFJldHVybnMgZmFsc2UgaW4gY2FzZSBvZiB2ZXJzaW9uIG1pc21hdGNoLiBXZWJQQ29uZmlnSW5pdCgpCisvLyBtdXN0IGhhdmUgc3VjY2VlZGVkIGJlZm9yZSB1c2luZyB0aGUgJ2NvbmZpZycgb2JqZWN0LgorLy8gTm90ZSB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgbG9zc2xlc3M9MCBhbmQgcXVhbGl0eT03NS4KK3N0YXRpYyBXRUJQX0lOTElORSBpbnQgV2ViUENvbmZpZ0luaXQoV2ViUENvbmZpZyogY29uZmlnKSB7CisgIHJldHVybiBXZWJQQ29uZmlnSW5pdEludGVybmFsKGNvbmZpZywgV0VCUF9QUkVTRVRfREVGQVVMVCwgNzUuZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCUF9FTkNPREVSX0FCSV9WRVJTSU9OKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGluaXRpYWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nIHRvIGEgcHJlZGVmaW5lZAorLy8gc2V0IG9mIHBhcmFtZXRlcnMgKHJlZmVycmVkIHRvIGJ5ICdwcmVzZXQnKSBhbmQgYSBnaXZlbiBxdWFsaXR5IGZhY3Rvci4KKy8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhcyBhIHJlcGxhY2VtZW50IHRvIFdlYlBDb25maWdJbml0KCkuIFdpbGwKKy8vIHJldHVybiBmYWxzZSBpbiBjYXNlIG9mIGVycm9yLgorc3RhdGljIFdFQlBfSU5MSU5FIGludCBXZWJQQ29uZmlnUHJlc2V0KFdlYlBDb25maWcqIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQUHJlc2V0IHByZXNldCwgZmxvYXQgcXVhbGl0eSkgeworICByZXR1cm4gV2ViUENvbmZpZ0luaXRJbnRlcm5hbChjb25maWcsIHByZXNldCwgcXVhbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCUF9FTkNPREVSX0FCSV9WRVJTSU9OKTsKK30KKworI2lmIFdFQlBfRU5DT0RFUl9BQklfVkVSU0lPTiA+IDB4MDIwMgorLy8gQWN0aXZhdGUgdGhlIGxvc3NsZXNzIGNvbXByZXNzaW9uIG1vZGUgd2l0aCB0aGUgZGVzaXJlZCBlZmZpY2llbmN5IGxldmVsCisvLyBiZXR3ZWVuIDAgKGZhc3Rlc3QsIGxvd2VzdCBjb21wcmVzc2lvbikgYW5kIDkgKHNsb3dlciwgYmVzdCBjb21wcmVzc2lvbikuCisvLyBBIGdvb2QgZGVmYXVsdCBsZXZlbCBpcyAnNicsIHByb3ZpZGluZyBhIGZhaXIgdHJhZGVvZmYgYmV0d2VlbiBjb21wcmVzc2lvbgorLy8gc3BlZWQgYW5kIGZpbmFsIGNvbXByZXNzZWQgc2l6ZS4KKy8vIFRoaXMgZnVuY3Rpb24gd2lsbCBvdmVyd3JpdGUgc2V2ZXJhbCBmaWVsZHMgZnJvbSBjb25maWc6ICdtZXRob2QnLCAncXVhbGl0eScKKy8vIGFuZCAnbG9zc2xlc3MnLiBSZXR1cm5zIGZhbHNlIGluIGNhc2Ugb2YgcGFyYW1ldGVyIGVycm9yLgorV0VCUF9FWFRFUk4oaW50KSBXZWJQQ29uZmlnTG9zc2xlc3NQcmVzZXQoV2ViUENvbmZpZyogY29uZmlnLCBpbnQgbGV2ZWwpOworI2VuZGlmCisKKy8vIFJldHVybnMgdHJ1ZSBpZiAnY29uZmlnJyBpcyBub24tTlVMTCBhbmQgYWxsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcmUKKy8vIHdpdGhpbiB0aGVpciB2YWxpZCByYW5nZXMuCitXRUJQX0VYVEVSTihpbnQpIFdlYlBWYWxpZGF0ZUNvbmZpZyhjb25zdCBXZWJQQ29uZmlnKiBjb25maWcpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW5wdXQgLyBPdXRwdXQKKy8vIFN0cnVjdHVyZSBmb3Igc3RvcmluZyBhdXhpbGlhcnkgc3RhdGlzdGljcyAobW9zdGx5IGZvciBsb3NzeSBlbmNvZGluZykuCisKK3N0cnVjdCBXZWJQQXV4U3RhdHMgeworICBpbnQgY29kZWRfc2l6ZTsgICAgICAgICAvLyBmaW5hbCBzaXplCisKKyAgZmxvYXQgUFNOUls1XTsgICAgICAgICAgLy8gcGVhay1zaWduYWwtdG8tbm9pc2UgcmF0aW8gZm9yIFkvVS9WL0FsbC9BbHBoYQorICBpbnQgYmxvY2tfY291bnRbM107ICAgICAvLyBudW1iZXIgb2YgaW50cmE0L2ludHJhMTYvc2tpcHBlZCBtYWNyb2Jsb2NrcworICBpbnQgaGVhZGVyX2J5dGVzWzJdOyAgICAvLyBhcHByb3hpbWF0ZSBudW1iZXIgb2YgYnl0ZXMgc3BlbnQgZm9yIGhlYWRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbW9kZS1wYXJ0aXRpb24gIzAKKyAgaW50IHJlc2lkdWFsX2J5dGVzWzNdWzRdOyAgLy8gYXBwcm94aW1hdGUgbnVtYmVyIG9mIGJ5dGVzIHNwZW50IGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEQy9BQy91diBjb2VmZmljaWVudHMgZm9yIGVhY2ggKDAuLjMpIHNlZ21lbnRzLgorICBpbnQgc2VnbWVudF9zaXplWzRdOyAgICAvLyBudW1iZXIgb2YgbWFjcm9ibG9ja3MgaW4gZWFjaCBzZWdtZW50cworICBpbnQgc2VnbWVudF9xdWFudFs0XTsgICAvLyBxdWFudGl6ZXIgdmFsdWVzIGZvciBlYWNoIHNlZ21lbnRzCisgIGludCBzZWdtZW50X2xldmVsWzRdOyAgIC8vIGZpbHRlcmluZyBzdHJlbmd0aCBmb3IgZWFjaCBzZWdtZW50cyBbMC4uNjNdCisKKyAgaW50IGFscGhhX2RhdGFfc2l6ZTsgICAgLy8gc2l6ZSBvZiB0aGUgdHJhbnNwYXJlbmN5IGRhdGEKKyAgaW50IGxheWVyX2RhdGFfc2l6ZTsgICAgLy8gc2l6ZSBvZiB0aGUgZW5oYW5jZW1lbnQgbGF5ZXIgZGF0YQorCisgIC8vIGxvc3NsZXNzIGVuY29kZXIgc3RhdGlzdGljcworICB1aW50MzJfdCBsb3NzbGVzc19mZWF0dXJlczsgIC8vIGJpdDA6cHJlZGljdG9yIGJpdDE6Y3Jvc3MtY29sb3IgdHJhbnNmb3JtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0MjpzdWJ0cmFjdC1ncmVlbiBiaXQzOmNvbG9yIGluZGV4aW5nCisgIGludCBoaXN0b2dyYW1fYml0czsgICAgICAgICAgLy8gbnVtYmVyIG9mIHByZWNpc2lvbiBiaXRzIG9mIGhpc3RvZ3JhbQorICBpbnQgdHJhbnNmb3JtX2JpdHM7ICAgICAgICAgIC8vIHByZWNpc2lvbiBiaXRzIGZvciB0cmFuc2Zvcm0KKyAgaW50IGNhY2hlX2JpdHM7ICAgICAgICAgICAgICAvLyBudW1iZXIgb2YgYml0cyBmb3IgY29sb3IgY2FjaGUgbG9va3VwCisgIGludCBwYWxldHRlX3NpemU7ICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGNvbG9yIGluIHBhbGV0dGUsIGlmIHVzZWQKKyAgaW50IGxvc3NsZXNzX3NpemU7ICAgICAgICAgICAvLyBmaW5hbCBsb3NzbGVzcyBzaXplCisKKyAgdWludDMyX3QgcGFkWzRdOyAgICAgICAgLy8gcGFkZGluZyBmb3IgbGF0ZXIgdXNlCit9OworCisvLyBTaWduYXR1cmUgZm9yIG91dHB1dCBmdW5jdGlvbi4gU2hvdWxkIHJldHVybiB0cnVlIGlmIHdyaXRpbmcgd2FzIHN1Y2Nlc3NmdWwuCisvLyBkYXRhL2RhdGFfc2l6ZSBpcyB0aGUgc2VnbWVudCBvZiBkYXRhIHRvIHdyaXRlLCBhbmQgJ3BpY3R1cmUnIGlzIGZvcgorLy8gcmVmZXJlbmNlIChhbmQgc28gb25lIGNhbiBtYWtlIHVzZSBvZiBwaWN0dXJlLT5jdXN0b21fcHRyKS4KK3R5cGVkZWYgaW50ICgqV2ViUFdyaXRlckZ1bmN0aW9uKShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlBQaWN0dXJlKiBwaWN0dXJlKTsKKworLy8gV2ViUE1lbW9yeVdyaXRlOiBhIHNwZWNpYWwgV2ViUFdyaXRlckZ1bmN0aW9uIHRoYXQgd3JpdGVzIHRvIG1lbW9yeSB1c2luZworLy8gdGhlIGZvbGxvd2luZyBXZWJQTWVtb3J5V3JpdGVyIG9iamVjdCAodG8gYmUgc2V0IGFzIGEgY3VzdG9tX3B0cikuCitzdHJ1Y3QgV2ViUE1lbW9yeVdyaXRlciB7CisgIHVpbnQ4X3QqIG1lbTsgICAgICAgLy8gZmluYWwgYnVmZmVyIChvZiBzaXplICdtYXhfc2l6ZScsIGxhcmdlciB0aGFuICdzaXplJykuCisgIHNpemVfdCAgIHNpemU7ICAgICAgLy8gZmluYWwgc2l6ZQorICBzaXplX3QgICBtYXhfc2l6ZTsgIC8vIHRvdGFsIGNhcGFjaXR5CisgIHVpbnQzMl90IHBhZFsxXTsgICAgLy8gcGFkZGluZyBmb3IgbGF0ZXIgdXNlCit9OworCisvLyBUaGUgZm9sbG93aW5nIG11c3QgYmUgY2FsbGVkIGZpcnN0IGJlZm9yZSBhbnkgdXNlLgorV0VCUF9FWFRFUk4odm9pZCkgV2ViUE1lbW9yeVdyaXRlckluaXQoV2ViUE1lbW9yeVdyaXRlciogd3JpdGVyKTsKKworI2lmIFdFQlBfRU5DT0RFUl9BQklfVkVSU0lPTiA+IDB4MDIwMworLy8gVGhlIGZvbGxvd2luZyBtdXN0IGJlIGNhbGxlZCB0byBkZWFsbG9jYXRlIHdyaXRlci0+bWVtIG1lbW9yeS4gVGhlICd3cml0ZXInCisvLyBvYmplY3QgaXRzZWxmIGlzIG5vdCBkZWFsbG9jYXRlZC4KK1dFQlBfRVhURVJOKHZvaWQpIFdlYlBNZW1vcnlXcml0ZXJDbGVhcihXZWJQTWVtb3J5V3JpdGVyKiB3cml0ZXIpOworI2VuZGlmCisvLyBUaGUgY3VzdG9tIHdyaXRlciB0byBiZSB1c2VkIHdpdGggV2ViUE1lbW9yeVdyaXRlciBhcyBjdXN0b21fcHRyLiBVcG9uCisvLyBjb21wbGV0aW9uLCB3cml0ZXIubWVtIGFuZCB3cml0ZXIuc2l6ZSB3aWxsIGhvbGQgdGhlIGNvZGVkIGRhdGEuCisjaWYgV0VCUF9FTkNPREVSX0FCSV9WRVJTSU9OID4gMHgwMjAzCisvLyB3cml0ZXIubWVtIG11c3QgYmUgZnJlZWQgYnkgY2FsbGluZyBXZWJQTWVtb3J5V3JpdGVyQ2xlYXIuCisjZWxzZQorLy8gd3JpdGVyLm1lbSBtdXN0IGJlIGZyZWVkIGJ5IGNhbGxpbmcgJ2ZyZWUod3JpdGVyLm1lbSknLgorI2VuZGlmCitXRUJQX0VYVEVSTihpbnQpIFdlYlBNZW1vcnlXcml0ZShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgZGF0YV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViUFBpY3R1cmUqIHBpY3R1cmUpOworCisvLyBQcm9ncmVzcyBob29rLCBjYWxsZWQgZnJvbSB0aW1lIHRvIHRpbWUgdG8gcmVwb3J0IHByb2dyZXNzLiBJdCBjYW4gcmV0dXJuCisvLyBmYWxzZSB0byByZXF1ZXN0IGFuIGFib3J0IG9mIHRoZSBlbmNvZGluZyBwcm9jZXNzLCBvciB0cnVlIG90aGVyd2lzZSBpZgorLy8gZXZlcnl0aGluZyBpcyBPSy4KK3R5cGVkZWYgaW50ICgqV2ViUFByb2dyZXNzSG9vaykoaW50IHBlcmNlbnQsIGNvbnN0IFdlYlBQaWN0dXJlKiBwaWN0dXJlKTsKKworLy8gQ29sb3Igc3BhY2VzLgordHlwZWRlZiBlbnVtIFdlYlBFbmNDU1AgeworICAvLyBjaHJvbWEgc2FtcGxpbmcKKyAgV0VCUF9ZVVY0MjAgID0gMCwgICAgICAgIC8vIDQ6MjowCisgIFdFQlBfWVVWNDIwQSA9IDQsICAgICAgICAvLyBhbHBoYSBjaGFubmVsIHZhcmlhbnQKKyAgV0VCUF9DU1BfVVZfTUFTSyA9IDMsICAgIC8vIGJpdC1tYXNrIHRvIGdldCB0aGUgVVYgc2FtcGxpbmcgZmFjdG9ycworICBXRUJQX0NTUF9BTFBIQV9CSVQgPSA0ICAgLy8gYml0IHRoYXQgaXMgc2V0IGlmIGFscGhhIGlzIHByZXNlbnQKK30gV2ViUEVuY0NTUDsKKworLy8gRW5jb2RpbmcgZXJyb3IgY29uZGl0aW9ucy4KK3R5cGVkZWYgZW51bSBXZWJQRW5jb2RpbmdFcnJvciB7CisgIFZQOF9FTkNfT0sgPSAwLAorICBWUDhfRU5DX0VSUk9SX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgLy8gbWVtb3J5IGVycm9yIGFsbG9jYXRpbmcgb2JqZWN0cworICBWUDhfRU5DX0VSUk9SX0JJVFNUUkVBTV9PVVRfT0ZfTUVNT1JZLCAgLy8gbWVtb3J5IGVycm9yIHdoaWxlIGZsdXNoaW5nIGJpdHMKKyAgVlA4X0VOQ19FUlJPUl9OVUxMX1BBUkFNRVRFUiwgICAgICAgICAgIC8vIGEgcG9pbnRlciBwYXJhbWV0ZXIgaXMgTlVMTAorICBWUDhfRU5DX0VSUk9SX0lOVkFMSURfQ09ORklHVVJBVElPTiwgICAgLy8gY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkCisgIFZQOF9FTkNfRVJST1JfQkFEX0RJTUVOU0lPTiwgICAgICAgICAgICAvLyBwaWN0dXJlIGhhcyBpbnZhbGlkIHdpZHRoL2hlaWdodAorICBWUDhfRU5DX0VSUk9SX1BBUlRJVElPTjBfT1ZFUkZMT1csICAgICAgLy8gcGFydGl0aW9uIGlzIGJpZ2dlciB0aGFuIDUxMmsKKyAgVlA4X0VOQ19FUlJPUl9QQVJUSVRJT05fT1ZFUkZMT1csICAgICAgIC8vIHBhcnRpdGlvbiBpcyBiaWdnZXIgdGhhbiAxNk0KKyAgVlA4X0VOQ19FUlJPUl9CQURfV1JJVEUsICAgICAgICAgICAgICAgIC8vIGVycm9yIHdoaWxlIGZsdXNoaW5nIGJ5dGVzCisgIFZQOF9FTkNfRVJST1JfRklMRV9UT09fQklHLCAgICAgICAgICAgICAvLyBmaWxlIGlzIGJpZ2dlciB0aGFuIDRHCisgIFZQOF9FTkNfRVJST1JfVVNFUl9BQk9SVCwgICAgICAgICAgICAgICAvLyBhYm9ydCByZXF1ZXN0IGJ5IHVzZXIKKyAgVlA4X0VOQ19FUlJPUl9MQVNUICAgICAgICAgICAgICAgICAgICAgIC8vIGxpc3QgdGVybWluYXRvci4gYWx3YXlzIGxhc3QuCit9IFdlYlBFbmNvZGluZ0Vycm9yOworCisvLyBtYXhpbXVtIHdpZHRoL2hlaWdodCBhbGxvd2VkIChpbmNsdXNpdmUpLCBpbiBwaXhlbHMKKyNkZWZpbmUgV0VCUF9NQVhfRElNRU5TSU9OIDE2MzgzCisKKy8vIE1haW4gZXhjaGFuZ2Ugc3RydWN0dXJlIChpbnB1dCBzYW1wbGVzLCBvdXRwdXQgYnl0ZXMsIHN0YXRpc3RpY3MpCitzdHJ1Y3QgV2ViUFBpY3R1cmUgeworICAvLyAgIElOUFVUCisgIC8vLy8vLy8vLy8vLy8vCisgIC8vIE1haW4gZmxhZyBmb3IgZW5jb2RlciBzZWxlY3RpbmcgYmV0d2VlbiBBUkdCIG9yIFlVViBpbnB1dC4KKyAgLy8gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIEFSR0IgaW5wdXQgKCphcmdiLCBhcmdiX3N0cmlkZSkgZm9yIGxvc3NsZXNzCisgIC8vIGNvbXByZXNzaW9uLCBhbmQgWVVWIGlucHV0ICgqeSwgKnUsICp2LCBldGMuKSBmb3IgbG9zc3kgY29tcHJlc3Npb24KKyAgLy8gc2luY2UgdGhlc2UgYXJlIHRoZSByZXNwZWN0aXZlIG5hdGl2ZSBjb2xvcnNwYWNlIGZvciB0aGVzZSBmb3JtYXRzLgorICBpbnQgdXNlX2FyZ2I7CisKKyAgLy8gWVVWIGlucHV0IChtb3N0bHkgdXNlZCBmb3IgaW5wdXQgdG8gbG9zc3kgY29tcHJlc3Npb24pCisgIFdlYlBFbmNDU1AgY29sb3JzcGFjZTsgICAgIC8vIGNvbG9yc3BhY2U6IHNob3VsZCBiZSBZVVY0MjAgZm9yIG5vdyAoPVknQ2JDcikuCisgIGludCB3aWR0aCwgaGVpZ2h0OyAgICAgICAgIC8vIGRpbWVuc2lvbnMgKGxlc3Mgb3IgZXF1YWwgdG8gV0VCUF9NQVhfRElNRU5TSU9OKQorICB1aW50OF90ICp5LCAqdSwgKnY7ICAgICAgICAvLyBwb2ludGVycyB0byBsdW1hL2Nocm9tYSBwbGFuZXMuCisgIGludCB5X3N0cmlkZSwgdXZfc3RyaWRlOyAgIC8vIGx1bWEvY2hyb21hIHN0cmlkZXMuCisgIHVpbnQ4X3QqIGE7ICAgICAgICAgICAgICAgIC8vIHBvaW50ZXIgdG8gdGhlIGFscGhhIHBsYW5lCisgIGludCBhX3N0cmlkZTsgICAgICAgICAgICAgIC8vIHN0cmlkZSBvZiB0aGUgYWxwaGEgcGxhbmUKKyAgdWludDMyX3QgcGFkMVsyXTsgICAgICAgICAgLy8gcGFkZGluZyBmb3IgbGF0ZXIgdXNlCisKKyAgLy8gQVJHQiBpbnB1dCAobW9zdGx5IHVzZWQgZm9yIGlucHV0IHRvIGxvc3NsZXNzIGNvbXByZXNzaW9uKQorICB1aW50MzJfdCogYXJnYjsgICAgICAgICAgICAvLyBQb2ludGVyIHRvIGFyZ2IgKDMyIGJpdCkgcGxhbmUuCisgIGludCBhcmdiX3N0cmlkZTsgICAgICAgICAgIC8vIFRoaXMgaXMgc3RyaWRlIGluIHBpeGVscyB1bml0cywgbm90IGJ5dGVzLgorICB1aW50MzJfdCBwYWQyWzNdOyAgICAgICAgICAvLyBwYWRkaW5nIGZvciBsYXRlciB1c2UKKworICAvLyAgIE9VVFBVVAorICAvLy8vLy8vLy8vLy8vLy8KKyAgLy8gQnl0ZS1lbWlzc2lvbiBob29rLCB0byBzdG9yZSBjb21wcmVzc2VkIGJ5dGVzIGFzIHRoZXkgYXJlIHJlYWR5LgorICBXZWJQV3JpdGVyRnVuY3Rpb24gd3JpdGVyOyAgLy8gY2FuIGJlIE5VTEwKKyAgdm9pZCogY3VzdG9tX3B0cjsgICAgICAgICAgIC8vIGNhbiBiZSB1c2VkIGJ5IHRoZSB3cml0ZXIuCisKKyAgLy8gbWFwIGZvciBleHRyYSBpbmZvcm1hdGlvbiAob25seSBmb3IgbG9zc3kgY29tcHJlc3Npb24gbW9kZSkKKyAgaW50IGV4dHJhX2luZm9fdHlwZTsgICAgLy8gMTogaW50cmEgdHlwZSwgMjogc2VnbWVudCwgMzogcXVhbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNDogaW50cmEtMTYgcHJlZGljdGlvbiBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA1OiBjaHJvbWEgcHJlZGljdGlvbiBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA2OiBiaXQgY29zdCwgNzogZGlzdG9ydGlvbgorICB1aW50OF90KiBleHRyYV9pbmZvOyAgICAvLyBpZiBub3QgTlVMTCwgcG9pbnRzIHRvIGFuIGFycmF5IG9mIHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKCh3aWR0aCArIDE1KSAvIDE2KSAqICgoaGVpZ2h0ICsgMTUpIC8gMTYpIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBiZSBmaWxsZWQgd2l0aCBhIG1hY3JvYmxvY2sgbWFwLCBkZXBlbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb24gZXh0cmFfaW5mb190eXBlLgorCisgIC8vICAgU1RBVFMgQU5EIFJFUE9SVFMKKyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgIC8vIFBvaW50ZXIgdG8gc2lkZSBzdGF0aXN0aWNzICh1cGRhdGVkIG9ubHkgaWYgbm90IE5VTEwpCisgIFdlYlBBdXhTdGF0cyogc3RhdHM7CisKKyAgLy8gRXJyb3IgY29kZSBmb3IgdGhlIGxhdGVzdCBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgZW5jb2RpbmcKKyAgV2ViUEVuY29kaW5nRXJyb3IgZXJyb3JfY29kZTsKKworICAvLyBJZiBub3QgTlVMTCwgcmVwb3J0IHByb2dyZXNzIGR1cmluZyBlbmNvZGluZy4KKyAgV2ViUFByb2dyZXNzSG9vayBwcm9ncmVzc19ob29rOworCisgIHZvaWQqIHVzZXJfZGF0YTsgICAgICAgIC8vIHRoaXMgZmllbGQgaXMgZnJlZSB0byBiZSBzZXQgdG8gYW55IHZhbHVlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2VkIGR1cmluZyBjYWxsYmFja3MgKGxpa2UgcHJvZ3Jlc3MtcmVwb3J0IGUuZy4pLgorCisgIHVpbnQzMl90IHBhZDNbM107ICAgICAgIC8vIHBhZGRpbmcgZm9yIGxhdGVyIHVzZQorCisgIC8vIFVudXNlZCBmb3Igbm93CisgIHVpbnQ4X3QgKnBhZDQsICpwYWQ1OworICB1aW50MzJfdCBwYWQ2WzhdOyAgICAgICAvLyBwYWRkaW5nIGZvciBsYXRlciB1c2UKKworICAvLyBQUklWQVRFIEZJRUxEUworICAvLy8vLy8vLy8vLy8vLy8vLy8vLworICB2b2lkKiBtZW1vcnlfOyAgICAgICAgICAvLyByb3cgY2h1bmsgb2YgbWVtb3J5IGZvciB5dXZhIHBsYW5lcworICB2b2lkKiBtZW1vcnlfYXJnYl87ICAgICAvLyBhbmQgZm9yIGFyZ2IgdG9vLgorICB2b2lkKiBwYWQ3WzJdOyAgICAgICAgICAvLyBwYWRkaW5nIGZvciBsYXRlciB1c2UKK307CisKKy8vIEludGVybmFsLCB2ZXJzaW9uLWNoZWNrZWQsIGVudHJ5IHBvaW50CitXRUJQX0VYVEVSTihpbnQpIFdlYlBQaWN0dXJlSW5pdEludGVybmFsKFdlYlBQaWN0dXJlKiwgaW50KTsKKworLy8gU2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQsIHRvIGluaXRpYWxpemUgdGhlIHN0cnVjdHVyZS4gUmV0dXJucyBmYWxzZSBpbiBjYXNlCisvLyBvZiB2ZXJzaW9uIG1pc21hdGNoLiBXZWJQUGljdHVyZUluaXQoKSBtdXN0IGhhdmUgc3VjY2VlZGVkIGJlZm9yZSB1c2luZyB0aGUKKy8vICdwaWN0dXJlJyBvYmplY3QuCisvLyBOb3RlIHRoYXQsIGJ5IGRlZmF1bHQsIHVzZV9hcmdiIGlzIGZhbHNlIGFuZCBjb2xvcnNwYWNlIGlzIFdFQlBfWVVWNDIwLgorc3RhdGljIFdFQlBfSU5MSU5FIGludCBXZWJQUGljdHVyZUluaXQoV2ViUFBpY3R1cmUqIHBpY3R1cmUpIHsKKyAgcmV0dXJuIFdlYlBQaWN0dXJlSW5pdEludGVybmFsKHBpY3R1cmUsIFdFQlBfRU5DT0RFUl9BQklfVkVSU0lPTik7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBXZWJQUGljdHVyZSB1dGlscworCisvLyBDb252ZW5pZW5jZSBhbGxvY2F0aW9uIC8gZGVhbGxvY2F0aW9uIGJhc2VkIG9uIHBpY3R1cmUtPndpZHRoL2hlaWdodDoKKy8vIEFsbG9jYXRlIHkvdS92IGJ1ZmZlcnMgYXMgcGVyIGNvbG9yc3BhY2Uvd2lkdGgvaGVpZ2h0IHNwZWNpZmljYXRpb24uCisvLyBOb3RlISBUaGlzIGZ1bmN0aW9uIHdpbGwgZnJlZSB0aGUgcHJldmlvdXMgYnVmZmVyIGlmIG5lZWRlZC4KKy8vIFJldHVybnMgZmFsc2UgaW4gY2FzZSBvZiBtZW1vcnkgZXJyb3IuCitXRUJQX0VYVEVSTihpbnQpIFdlYlBQaWN0dXJlQWxsb2MoV2ViUFBpY3R1cmUqIHBpY3R1cmUpOworCisvLyBSZWxlYXNlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IFdlYlBQaWN0dXJlQWxsb2MoKSBvciBXZWJQUGljdHVyZUltcG9ydCooKS4KKy8vIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgX25vdF8gZnJlZSB0aGUgbWVtb3J5IHVzZWQgYnkgdGhlICdwaWN0dXJlJworLy8gb2JqZWN0IGl0c2VsZi4KKy8vIEJlc2lkZXMgbWVtb3J5ICh3aGljaCBpcyByZWNsYWltZWQpIGFsbCBvdGhlciBmaWVsZHMgb2YgJ3BpY3R1cmUnIGFyZQorLy8gcHJlc2VydmVkLgorV0VCUF9FWFRFUk4odm9pZCkgV2ViUFBpY3R1cmVGcmVlKFdlYlBQaWN0dXJlKiBwaWN0dXJlKTsKKworLy8gQ29weSB0aGUgcGl4ZWxzIG9mICpzcmMgaW50byAqZHN0LCB1c2luZyBXZWJQUGljdHVyZUFsbG9jLiBVcG9uIHJldHVybiwgKmRzdAorLy8gd2lsbCBmdWxseSBvd24gdGhlIGNvcGllZCBwaXhlbHMgKHRoaXMgaXMgbm90IGEgdmlldykuIFRoZSAnZHN0JyBwaWN0dXJlIG5lZWQKKy8vIG5vdCBiZSBpbml0aWFsaXplZCBhcyBpdHMgY29udGVudCBpcyBvdmVyd3JpdHRlbi4KKy8vIFJldHVybnMgZmFsc2UgaW4gY2FzZSBvZiBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4KK1dFQlBfRVhURVJOKGludCkgV2ViUFBpY3R1cmVDb3B5KGNvbnN0IFdlYlBQaWN0dXJlKiBzcmMsIFdlYlBQaWN0dXJlKiBkc3QpOworCisvLyBDb21wdXRlIFBTTlIsIFNTSU0gb3IgTFNJTSBkaXN0b3J0aW9uIG1ldHJpYyBiZXR3ZWVuIHR3byBwaWN0dXJlcy4KKy8vIFJlc3VsdCBpcyBpbiBkQiwgc3RvcmVzIGluIHJlc3VsdFtdIGluIHRoZSBZL1UvVi9BbHBoYS9BbGwgb3JkZXIuCisvLyBSZXR1cm5zIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IgKHNyYyBhbmQgcmVmIGRvbid0IGhhdmUgc2FtZSBkaW1lbnNpb24sIC4uLikKKy8vIFdhcm5pbmc6IHRoaXMgZnVuY3Rpb24gaXMgcmF0aGVyIENQVS1pbnRlbnNpdmUuCitXRUJQX0VYVEVSTihpbnQpIFdlYlBQaWN0dXJlRGlzdG9ydGlvbigKKyAgICBjb25zdCBXZWJQUGljdHVyZSogc3JjLCBjb25zdCBXZWJQUGljdHVyZSogcmVmLAorICAgIGludCBtZXRyaWNfdHlwZSwgICAgICAgICAgIC8vIDAgPSBQU05SLCAxID0gU1NJTSwgMiA9IExTSU0KKyAgICBmbG9hdCByZXN1bHRbNV0pOworCisvLyBzZWxmLWNyb3BzIGEgcGljdHVyZSB0byB0aGUgcmVjdGFuZ2xlIGRlZmluZWQgYnkgdG9wL2xlZnQvd2lkdGgvaGVpZ2h0LgorLy8gUmV0dXJucyBmYWxzZSBpbiBjYXNlIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLCBvciBpZiB0aGUgcmVjdGFuZ2xlIGlzCisvLyBvdXRzaWRlIG9mIHRoZSBzb3VyY2UgcGljdHVyZS4KKy8vIFRoZSByZWN0YW5nbGUgZm9yIHRoZSB2aWV3IGlzIGRlZmluZWQgYnkgdGhlIHRvcC1sZWZ0IGNvcm5lciBwaXhlbAorLy8gY29vcmRpbmF0ZXMgKGxlZnQsIHRvcCkgYXMgd2VsbCBhcyBpdHMgd2lkdGggYW5kIGhlaWdodC4gVGhpcyByZWN0YW5nbGUKKy8vIG11c3QgYmUgZnVsbHkgYmUgY29tcHJpc2VkIGluc2lkZSB0aGUgJ3NyYycgc291cmNlIHBpY3R1cmUuIElmIHRoZSBzb3VyY2UKKy8vIHBpY3R1cmUgdXNlcyB0aGUgWVVWNDIwIGNvbG9yc3BhY2UsIHRoZSB0b3AgYW5kIGxlZnQgY29vcmRpbmF0ZXMgd2lsbCBiZQorLy8gc25hcHBlZCB0byBldmVuIHZhbHVlcy4KK1dFQlBfRVhURVJOKGludCkgV2ViUFBpY3R1cmVDcm9wKFdlYlBQaWN0dXJlKiBwaWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlZnQsIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKy8vIEV4dHJhY3RzIGEgdmlldyBmcm9tICdzcmMnIHBpY3R1cmUgaW50byAnZHN0Jy4gVGhlIHJlY3RhbmdsZSBmb3IgdGhlIHZpZXcKKy8vIGlzIGRlZmluZWQgYnkgdGhlIHRvcC1sZWZ0IGNvcm5lciBwaXhlbCBjb29yZGluYXRlcyAobGVmdCwgdG9wKSBhcyB3ZWxsCisvLyBhcyBpdHMgd2lkdGggYW5kIGhlaWdodC4gVGhpcyByZWN0YW5nbGUgbXVzdCBiZSBmdWxseSBiZSBjb21wcmlzZWQgaW5zaWRlCisvLyB0aGUgJ3NyYycgc291cmNlIHBpY3R1cmUuIElmIHRoZSBzb3VyY2UgcGljdHVyZSB1c2VzIHRoZSBZVVY0MjAgY29sb3JzcGFjZSwKKy8vIHRoZSB0b3AgYW5kIGxlZnQgY29vcmRpbmF0ZXMgd2lsbCBiZSBzbmFwcGVkIHRvIGV2ZW4gdmFsdWVzLgorLy8gUGljdHVyZSAnc3JjJyBtdXN0IG91dC1saXZlICdkc3QnIHBpY3R1cmUuIFNlbGYtZXh0cmFjdGlvbiBvZiB2aWV3IGlzIGFsbG93ZWQKKy8vICgnc3JjJyBlcXVhbCB0byAnZHN0JykgYXMgYSBtZWFuIG9mIGZhc3QtY3JvcHBpbmcgKGJ1dCBub3RlIHRoYXQgZG9pbmcgc28sCisvLyB0aGUgb3JpZ2luYWwgZGltZW5zaW9uIHdpbGwgYmUgbG9zdCkuIFBpY3R1cmUgJ2RzdCcgbmVlZCBub3QgYmUgaW5pdGlhbGl6ZWQKKy8vIHdpdGggV2ViUFBpY3R1cmVJbml0KCkgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gJ3NyYycsIHNpbmNlIGl0cyBjb250ZW50IHdpbGwKKy8vIGJlIG92ZXJ3cml0dGVuLgorLy8gUmV0dXJucyBmYWxzZSBpbiBjYXNlIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIG9yIGludmFsaWQgcGFyYW1ldGVycy4KK1dFQlBfRVhURVJOKGludCkgV2ViUFBpY3R1cmVWaWV3KGNvbnN0IFdlYlBQaWN0dXJlKiBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUFBpY3R1cmUqIGRzdCk7CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgJ3BpY3R1cmUnIGlzIGFjdHVhbGx5IGEgdmlldyBhbmQgdGhlcmVmb3JlIGRvZXMKKy8vIG5vdCBvd24gdGhlIG1lbW9yeSBmb3IgcGl4ZWxzLgorV0VCUF9FWFRFUk4oaW50KSBXZWJQUGljdHVyZUlzVmlldyhjb25zdCBXZWJQUGljdHVyZSogcGljdHVyZSk7CisKKy8vIFJlc2NhbGUgYSBwaWN0dXJlIHRvIG5ldyBkaW1lbnNpb24gd2lkdGggeCBoZWlnaHQuCisvLyBJZiBlaXRoZXIgJ3dpZHRoJyBvciAnaGVpZ2h0JyAoYnV0IG5vdCBib3RoKSBpcyAwIHRoZSBjb3JyZXNwb25kaW5nCisvLyBkaW1lbnNpb24gd2lsbCBiZSBjYWxjdWxhdGVkIHByZXNlcnZpbmcgdGhlIGFzcGVjdCByYXRpby4KKy8vIE5vIGdhbW1hIGNvcnJlY3Rpb24gaXMgYXBwbGllZC4KKy8vIFJldHVybnMgZmFsc2UgaW4gY2FzZSBvZiBlcnJvciAoaW52YWxpZCBwYXJhbWV0ZXIgb3IgaW5zdWZmaWNpZW50IG1lbW9yeSkuCitXRUJQX0VYVEVSTihpbnQpIFdlYlBQaWN0dXJlUmVzY2FsZShXZWJQUGljdHVyZSogcGljLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisvLyBDb2xvcnNwYWNlIGNvbnZlcnNpb24gZnVuY3Rpb24gdG8gaW1wb3J0IFJHQiBzYW1wbGVzLgorLy8gUHJldmlvdXMgYnVmZmVyIHdpbGwgYmUgZnJlZSdkLCBpZiBhbnkuCisvLyAqcmdiIGJ1ZmZlciBzaG91bGQgaGF2ZSBhIHNpemUgb2YgYXQgbGVhc3QgaGVpZ2h0ICogcmdiX3N0cmlkZS4KKy8vIFJldHVybnMgZmFsc2UgaW4gY2FzZSBvZiBtZW1vcnkgZXJyb3IuCitXRUJQX0VYVEVSTihpbnQpIFdlYlBQaWN0dXJlSW1wb3J0UkdCKAorICAgIFdlYlBQaWN0dXJlKiBwaWN0dXJlLCBjb25zdCB1aW50OF90KiByZ2IsIGludCByZ2Jfc3RyaWRlKTsKKy8vIFNhbWUsIGJ1dCBmb3IgUkdCQSBidWZmZXIuCitXRUJQX0VYVEVSTihpbnQpIFdlYlBQaWN0dXJlSW1wb3J0UkdCQSgKKyAgICBXZWJQUGljdHVyZSogcGljdHVyZSwgY29uc3QgdWludDhfdCogcmdiYSwgaW50IHJnYmFfc3RyaWRlKTsKKy8vIFNhbWUsIGJ1dCBmb3IgUkdCQSBidWZmZXIuIEltcG9ydHMgdGhlIFJHQiBkaXJlY3QgZnJvbSB0aGUgMzItYml0IGZvcm1hdAorLy8gaW5wdXQgYnVmZmVyIGlnbm9yaW5nIHRoZSBhbHBoYSBjaGFubmVsLiBBdm9pZHMgbmVlZGluZyB0byBjb3B5IHRoZSBkYXRhCisvLyB0byBhIHRlbXBvcmFyeSAyNC1iaXQgUkdCIGJ1ZmZlciB0byBpbXBvcnQgdGhlIFJHQiBvbmx5LgorV0VCUF9FWFRFUk4oaW50KSBXZWJQUGljdHVyZUltcG9ydFJHQlgoCisgICAgV2ViUFBpY3R1cmUqIHBpY3R1cmUsIGNvbnN0IHVpbnQ4X3QqIHJnYngsIGludCByZ2J4X3N0cmlkZSk7CisKKy8vIFZhcmlhbnRzIG9mIHRoZSBhYm92ZSwgYnV0IHRha2luZyBCR1IoQXxYKSBpbnB1dC4KK1dFQlBfRVhURVJOKGludCkgV2ViUFBpY3R1cmVJbXBvcnRCR1IoCisgICAgV2ViUFBpY3R1cmUqIHBpY3R1cmUsIGNvbnN0IHVpbnQ4X3QqIGJnciwgaW50IGJncl9zdHJpZGUpOworV0VCUF9FWFRFUk4oaW50KSBXZWJQUGljdHVyZUltcG9ydEJHUkEoCisgICAgV2ViUFBpY3R1cmUqIHBpY3R1cmUsIGNvbnN0IHVpbnQ4X3QqIGJncmEsIGludCBiZ3JhX3N0cmlkZSk7CitXRUJQX0VYVEVSTihpbnQpIFdlYlBQaWN0dXJlSW1wb3J0QkdSWCgKKyAgICBXZWJQUGljdHVyZSogcGljdHVyZSwgY29uc3QgdWludDhfdCogYmdyeCwgaW50IGJncnhfc3RyaWRlKTsKKworLy8gQ29udmVydHMgcGljdHVyZS0+YXJnYiBkYXRhIHRvIHRoZSBZVVY0MjBBIGZvcm1hdC4gVGhlICdjb2xvcnNwYWNlJworLy8gcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBiZSBlcXVhbCB0byBXRUJQX1lVVjQyMC4KKy8vIFVwb24gcmV0dXJuLCBwaWN0dXJlLT51c2VfYXJnYiBpcyBzZXQgdG8gZmFsc2UuIFRoZSBwcmVzZW5jZSBvZiByZWFsCisvLyBub24tb3BhcXVlIHRyYW5zcGFyZW50IHZhbHVlcyBpcyBkZXRlY3RlZCwgYW5kICdjb2xvcnNwYWNlJyB3aWxsIGJlCisvLyBhZGp1c3RlZCBhY2NvcmRpbmdseS4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIGxvc3N5LgorLy8gUmV0dXJucyBmYWxzZSBpbiBjYXNlIG9mIGVycm9yLgorV0VCUF9FWFRFUk4oaW50KSBXZWJQUGljdHVyZUFSR0JUb1lVVkEoV2ViUFBpY3R1cmUqIHBpY3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQRW5jQ1NQIC8qY29sb3JzcGFjZSA9IFdFQlBfWVVWNDIwKi8pOworCisvLyBTYW1lIGFzIFdlYlBQaWN0dXJlQVJHQlRvWVVWQSgpLCBidXQgdGhlIGNvbnZlcnNpb24gaXMgZG9uZSB1c2luZworLy8gcHNldWRvLXJhbmRvbSBkaXRoZXJpbmcgd2l0aCBhIHN0cmVuZ3RoICdkaXRoZXJpbmcnIGJldHdlZW4KKy8vIDAuMCAobm8gZGl0aGVyaW5nKSBhbmQgMS4wIChtYXhpbXVtIGRpdGhlcmluZykuIFRoaXMgaXMgdXNlZnVsCisvLyBmb3IgcGhvdG9ncmFwaGljIHBpY3R1cmUuCitXRUJQX0VYVEVSTihpbnQpIFdlYlBQaWN0dXJlQVJHQlRvWVVWQURpdGhlcmVkKAorICAgIFdlYlBQaWN0dXJlKiBwaWN0dXJlLCBXZWJQRW5jQ1NQIGNvbG9yc3BhY2UsIGZsb2F0IGRpdGhlcmluZyk7CisKKyNpZiBXRUJQX0VOQ09ERVJfQUJJX1ZFUlNJT04gPiAweDAyMDQKKy8vIFBlcmZvcm1zICdzbWFydCcgUkdCQS0+WVVWQTQyMCBkb3duc2FtcGxpbmcgYW5kIGNvbG9yc3BhY2UgY29udmVyc2lvbi4KKy8vIERvd25zYW1wbGluZyBpcyBoYW5kbGVkIHdpdGggZXh0cmEgY2FyZSBpbiBjYXNlIG9mIGNvbG9yIGNsaXBwaW5nLiBUaGlzCisvLyBtZXRob2QgaXMgcm91Z2hseSAyeCBzbG93ZXIgdGhhbiBXZWJQUGljdHVyZUFSR0JUb1lVVkEoKSBidXQgcHJvZHVjZXMgYmV0dGVyCisvLyBZVVYgcmVwcmVzZW50YXRpb24uCisvLyBSZXR1cm5zIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IuCitXRUJQX0VYVEVSTihpbnQpIFdlYlBQaWN0dXJlU21hcnRBUkdCVG9ZVVZBKFdlYlBQaWN0dXJlKiBwaWN0dXJlKTsKKyNlbmRpZgorCisvLyBDb252ZXJ0cyBwaWN0dXJlLT55dXYgdG8gcGljdHVyZS0+YXJnYiBhbmQgc2V0cyBwaWN0dXJlLT51c2VfYXJnYiB0byB0cnVlLgorLy8gVGhlIGlucHV0IGZvcm1hdCBtdXN0IGJlIFlVVl80MjAgb3IgWVVWXzQyMEEuCisvLyBOb3RlIHRoYXQgdGhlIHVzZSBvZiB0aGlzIG1ldGhvZCBpcyBkaXNjb3VyYWdlZCBpZiBvbmUgaGFzIGFjY2VzcyB0byB0aGUKKy8vIHJhdyBBUkdCIHNhbXBsZXMsIHNpbmNlIHVzaW5nIFlVVjQyMCBpcyBjb21wYXJhdGl2ZWx5IGxvc3N5LiBBbHNvLCB0aGUKKy8vIGNvbnZlcnNpb24gZnJvbSBZVVY0MjAgdG8gQVJHQiBpbmN1cnMgYSBzbWFsbCBsb3NzIHRvby4KKy8vIFJldHVybnMgZmFsc2UgaW4gY2FzZSBvZiBlcnJvci4KK1dFQlBfRVhURVJOKGludCkgV2ViUFBpY3R1cmVZVVZBVG9BUkdCKFdlYlBQaWN0dXJlKiBwaWN0dXJlKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uOiBnaXZlbiBhIHdpZHRoIHggaGVpZ2h0IHBsYW5lIG9mIFJHQkEgb3IgWVVWKEEpIHNhbXBsZXMKKy8vIGNsZWFuLXVwIHRoZSBZVVYgb3IgUkdCIHNhbXBsZXMgdW5kZXIgZnVsbHkgdHJhbnNwYXJlbnQgYXJlYSwgdG8gaGVscAorLy8gY29tcHJlc3NpYmlsaXR5IChubyBndWFyYW50ZWUsIHRob3VnaCkuCitXRUJQX0VYVEVSTih2b2lkKSBXZWJQQ2xlYW51cFRyYW5zcGFyZW50QXJlYShXZWJQUGljdHVyZSogcGljdHVyZSk7CisKKy8vIFNjYW4gdGhlIHBpY3R1cmUgJ3BpY3R1cmUnIGZvciB0aGUgcHJlc2VuY2Ugb2Ygbm9uIGZ1bGx5IG9wYXF1ZSBhbHBoYSB2YWx1ZXMuCisvLyBSZXR1cm5zIHRydWUgaW4gc3VjaCBjYXNlLiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZSAoaW5kaWNhdGluZyB0aGF0IHRoZQorLy8gYWxwaGEgcGxhbmUgY2FuIGJlIGlnbm9yZWQgYWx0b2dldGhlciBlLmcuKS4KK1dFQlBfRVhURVJOKGludCkgV2ViUFBpY3R1cmVIYXNUcmFuc3BhcmVuY3koY29uc3QgV2ViUFBpY3R1cmUqIHBpY3R1cmUpOworCisvLyBSZW1vdmUgdGhlIHRyYW5zcGFyZW5jeSBpbmZvcm1hdGlvbiAoaWYgcHJlc2VudCkgYnkgYmxlbmRpbmcgdGhlIGNvbG9yIHdpdGgKKy8vIHRoZSBiYWNrZ3JvdW5kIGNvbG9yICdiYWNrZ3JvdW5kX3JnYicgKHNwZWNpZmllZCBhcyAyNGJpdCBSR0IgdHJpcGxldCkuCisvLyBBZnRlciB0aGlzIGNhbGwsIGFsbCBhbHBoYSB2YWx1ZXMgYXJlIHJlc2V0IHRvIDB4ZmYuCitXRUJQX0VYVEVSTih2b2lkKSBXZWJQQmxlbmRBbHBoYShXZWJQUGljdHVyZSogcGljLCB1aW50MzJfdCBiYWNrZ3JvdW5kX3JnYik7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNYWluIGNhbGwKKworLy8gTWFpbiBlbmNvZGluZyBjYWxsLCBhZnRlciBjb25maWcgYW5kIHBpY3R1cmUgaGF2ZSBiZWVuIGluaXRpYWxpemVkLgorLy8gJ3BpY3R1cmUnIG11c3QgYmUgbGVzcyB0aGFuIDE2Mzg0eDE2Mzg0IGluIGRpbWVuc2lvbiAoY2YgV0VCUF9NQVhfRElNRU5TSU9OKSwKKy8vIGFuZCB0aGUgJ2NvbmZpZycgb2JqZWN0IG11c3QgYmUgYSB2YWxpZCBvbmUuCisvLyBSZXR1cm5zIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IsIHRydWUgb3RoZXJ3aXNlLgorLy8gSW4gY2FzZSBvZiBlcnJvciwgcGljdHVyZS0+ZXJyb3JfY29kZSBpcyB1cGRhdGVkIGFjY29yZGluZ2x5LgorLy8gJ3BpY3R1cmUnIGNhbiBob2xkIHRoZSBzb3VyY2Ugc2FtcGxlcyBpbiBib3RoIFlVVihBKSBvciBBUkdCIGlucHV0LCBkZXBlbmRpbmcKKy8vIG9uIHRoZSB2YWx1ZSBvZiAncGljdHVyZS0+dXNlX2FyZ2InLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gdXNlCisvLyB0aGUgZm9ybWVyIGZvciBsb3NzeSBlbmNvZGluZywgYW5kIHRoZSBsYXR0ZXIgZm9yIGxvc3NsZXNzIGVuY29kaW5nCisvLyAod2hlbiBjb25maWcubG9zc2xlc3MgaXMgdHJ1ZSkuIEF1dG9tYXRpYyBjb252ZXJzaW9uIGZyb20gb25lIGZvcm1hdCB0bworLy8gYW5vdGhlciBpcyBwcm92aWRlZCBidXQgdGhleSBib3RoIGluY3VyIHNvbWUgbG9zcy4KK1dFQlBfRVhURVJOKGludCkgV2ViUEVuY29kZShjb25zdCBXZWJQQ29uZmlnKiBjb25maWcsIFdlYlBQaWN0dXJlKiBwaWN0dXJlKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAgIC8vIGV4dGVybiAiQyIKKyNlbmRpZgorCisjZW5kaWYgIC8qIFdFQlBfV0VCUF9FTkNPREVfSF8gKi8KZGlmZiAtLWdpdCBhL3NyYy93ZWJwL2Zvcm1hdF9jb25zdGFudHMuaCBiL3NyYy93ZWJwL2Zvcm1hdF9jb25zdGFudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzA0YjUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3dlYnAvZm9ybWF0X2NvbnN0YW50cy5oCkBAIC0wLDAgKzEsODggQEAKKy8vIENvcHlyaWdodCAyMDEyIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQorLy8gdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCisvLyB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCisvLyBpbiB0aGUgZmlsZSBQQVRFTlRTLiBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKKy8vIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLyAgSW50ZXJuYWwgaGVhZGVyIGZvciBjb25zdGFudHMgcmVsYXRlZCB0byBXZWJQIGZpbGUgZm9ybWF0LgorLy8KKy8vIEF1dGhvcjogVXJ2YW5nICh1cnZhbmdAZ29vZ2xlLmNvbSkKKworI2lmbmRlZiBXRUJQX1dFQlBfRk9STUFUX0NPTlNUQU5UU19IXworI2RlZmluZSBXRUJQX1dFQlBfRk9STUFUX0NPTlNUQU5UU19IXworCisvLyBDcmVhdGUgZm91cmNjIG9mIHRoZSBjaHVuayBmcm9tIHRoZSBjaHVuayB0YWcgY2hhcmFjdGVycy4KKyNkZWZpbmUgTUtGT1VSQ0MoYSwgYiwgYywgZCkgKCh1aW50MzJfdCkoYSkgfCAoYikgPDwgOCB8IChjKSA8PCAxNiB8IChkKSA8PCAyNCkKKworLy8gVlA4IHJlbGF0ZWQgY29uc3RhbnRzLgorI2RlZmluZSBWUDhfU0lHTkFUVVJFIDB4OWQwMTJhICAgICAgICAgICAgICAvLyBTaWduYXR1cmUgaW4gVlA4IGRhdGEuCisjZGVmaW5lIFZQOF9NQVhfUEFSVElUSU9OMF9TSVpFICgxIDw8IDE5KSAgIC8vIG1heCBzaXplIG9mIG1vZGUgcGFydGl0aW9uCisjZGVmaW5lIFZQOF9NQVhfUEFSVElUSU9OX1NJWkUgICgxIDw8IDI0KSAgIC8vIG1heCBzaXplIGZvciB0b2tlbiBwYXJ0aXRpb24KKyNkZWZpbmUgVlA4X0ZSQU1FX0hFQURFUl9TSVpFIDEwICAvLyBTaXplIG9mIHRoZSBmcmFtZSBoZWFkZXIgd2l0aGluIFZQOCBkYXRhLgorCisvLyBWUDhMIHJlbGF0ZWQgY29uc3RhbnRzLgorI2RlZmluZSBWUDhMX1NJR05BVFVSRV9TSVpFICAgICAgICAgIDEgICAgICAvLyBWUDhMIHNpZ25hdHVyZSBzaXplLgorI2RlZmluZSBWUDhMX01BR0lDX0JZVEUgICAgICAgICAgICAgIDB4MmYgICAvLyBWUDhMIHNpZ25hdHVyZSBieXRlLgorI2RlZmluZSBWUDhMX0lNQUdFX1NJWkVfQklUUyAgICAgICAgIDE0ICAgICAvLyBOdW1iZXIgb2YgYml0cyB1c2VkIHRvIHN0b3JlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQuCisjZGVmaW5lIFZQOExfVkVSU0lPTl9CSVRTICAgICAgICAgICAgMyAgICAgIC8vIDMgYml0cyByZXNlcnZlZCBmb3IgdmVyc2lvbi4KKyNkZWZpbmUgVlA4TF9WRVJTSU9OICAgICAgICAgICAgICAgICAwICAgICAgLy8gdmVyc2lvbiAwCisjZGVmaW5lIFZQOExfRlJBTUVfSEVBREVSX1NJWkUgICAgICAgNSAgICAgIC8vIFNpemUgb2YgdGhlIFZQOEwgZnJhbWUgaGVhZGVyLgorCisjZGVmaW5lIE1BWF9QQUxFVFRFX1NJWkUgICAgICAgICAgICAgMjU2CisjZGVmaW5lIE1BWF9DQUNIRV9CSVRTICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgSFVGRk1BTl9DT0RFU19QRVJfTUVUQV9DT0RFICA1CisjZGVmaW5lIEFSR0JfQkxBQ0sgICAgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAorCisjZGVmaW5lIERFRkFVTFRfQ09ERV9MRU5HVEggICAgICAgICAgOAorI2RlZmluZSBNQVhfQUxMT1dFRF9DT0RFX0xFTkdUSCAgICAgIDE1CisKKyNkZWZpbmUgTlVNX0xJVEVSQUxfQ09ERVMgICAgICAgICAgICAyNTYKKyNkZWZpbmUgTlVNX0xFTkdUSF9DT0RFUyAgICAgICAgICAgICAyNAorI2RlZmluZSBOVU1fRElTVEFOQ0VfQ09ERVMgICAgICAgICAgIDQwCisjZGVmaW5lIENPREVfTEVOR1RIX0NPREVTICAgICAgICAgICAgMTkKKworI2RlZmluZSBNSU5fSFVGRk1BTl9CSVRTICAgICAgICAgICAgIDIgIC8vIG1pbiBudW1iZXIgb2YgSHVmZm1hbiBiaXRzCisjZGVmaW5lIE1BWF9IVUZGTUFOX0JJVFMgICAgICAgICAgICAgOSAgLy8gbWF4IG51bWJlciBvZiBIdWZmbWFuIGJpdHMKKworI2RlZmluZSBUUkFOU0ZPUk1fUFJFU0VOVCAgICAgICAgICAgIDEgIC8vIFRoZSBiaXQgdG8gYmUgd3JpdHRlbiB3aGVuIG5leHQgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGJlIHJlYWQgaXMgYSB0cmFuc2Zvcm0uCisjZGVmaW5lIE5VTV9UUkFOU0ZPUk1TICAgICAgICAgICAgICAgNCAgLy8gTWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZCB0cmFuc2Zvcm0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBhIGJpdHN0cmVhbS4KK3R5cGVkZWYgZW51bSB7CisgIFBSRURJQ1RPUl9UUkFOU0ZPUk0gICAgICA9IDAsCisgIENST1NTX0NPTE9SX1RSQU5TRk9STSAgICA9IDEsCisgIFNVQlRSQUNUX0dSRUVOICAgICAgICAgICA9IDIsCisgIENPTE9SX0lOREVYSU5HX1RSQU5TRk9STSA9IDMKK30gVlA4TEltYWdlVHJhbnNmb3JtVHlwZTsKKworLy8gQWxwaGEgcmVsYXRlZCBjb25zdGFudHMuCisjZGVmaW5lIEFMUEhBX0hFQURFUl9MRU4gICAgICAgICAgICAxCisjZGVmaW5lIEFMUEhBX05PX0NPTVBSRVNTSU9OICAgICAgICAwCisjZGVmaW5lIEFMUEhBX0xPU1NMRVNTX0NPTVBSRVNTSU9OICAxCisjZGVmaW5lIEFMUEhBX1BSRVBST0NFU1NFRF9MRVZFTFMgICAxCisKKy8vIE11eCByZWxhdGVkIGNvbnN0YW50cy4KKyNkZWZpbmUgVEFHX1NJWkUgICAgICAgICAgIDQgICAgIC8vIFNpemUgb2YgYSBjaHVuayB0YWcgKGUuZy4gIlZQOEwiKS4KKyNkZWZpbmUgQ0hVTktfU0laRV9CWVRFUyAgIDQgICAgIC8vIFNpemUgbmVlZGVkIHRvIHN0b3JlIGNodW5rJ3Mgc2l6ZS4KKyNkZWZpbmUgQ0hVTktfSEVBREVSX1NJWkUgIDggICAgIC8vIFNpemUgb2YgYSBjaHVuayBoZWFkZXIuCisjZGVmaW5lIFJJRkZfSEVBREVSX1NJWkUgICAxMiAgICAvLyBTaXplIG9mIHRoZSBSSUZGIGhlYWRlciAoIlJJRkZubm5uV0VCUCIpLgorI2RlZmluZSBBTk1GX0NIVU5LX1NJWkUgICAgMTYgICAgLy8gU2l6ZSBvZiBhbiBBTk1GIGNodW5rLgorI2RlZmluZSBBTklNX0NIVU5LX1NJWkUgICAgNiAgICAgLy8gU2l6ZSBvZiBhbiBBTklNIGNodW5rLgorI2RlZmluZSBGUkdNX0NIVU5LX1NJWkUgICAgNiAgICAgLy8gU2l6ZSBvZiBhIEZSR00gY2h1bmsuCisjZGVmaW5lIFZQOFhfQ0hVTktfU0laRSAgICAxMCAgICAvLyBTaXplIG9mIGEgVlA4WCBjaHVuay4KKworI2RlZmluZSBNQVhfQ0FOVkFTX1NJWkUgICAgICgxIDw8IDI0KSAgICAgLy8gMjQtYml0IG1heCBmb3IgVlA4WCB3aWR0aC9oZWlnaHQuCisjZGVmaW5lIE1BWF9JTUFHRV9BUkVBICAgICAgKDFVTEwgPDwgMzIpICAvLyAzMi1iaXQgbWF4IGZvciB3aWR0aCB4IGhlaWdodC4KKyNkZWZpbmUgTUFYX0xPT1BfQ09VTlQgICAgICAoMSA8PCAxNikgICAgIC8vIG1heGltdW0gdmFsdWUgZm9yIGxvb3AtY291bnQKKyNkZWZpbmUgTUFYX0RVUkFUSU9OICAgICAgICAoMSA8PCAyNCkgICAgIC8vIG1heGltdW0gZHVyYXRpb24KKyNkZWZpbmUgTUFYX1BPU0lUSU9OX09GRlNFVCAoMSA8PCAyNCkgICAgIC8vIG1heGltdW0gZnJhbWUvZnJhZ21lbnQgeC95IG9mZnNldAorCisvLyBNYXhpbXVtIGNodW5rIHBheWxvYWQgaXMgc3VjaCB0aGF0IGFkZGluZyB0aGUgaGVhZGVyIGFuZCBwYWRkaW5nIHdvbid0CisvLyBvdmVyZmxvdyBhIHVpbnQzMl90LgorI2RlZmluZSBNQVhfQ0hVTktfUEFZTE9BRCAofjBVIC0gQ0hVTktfSEVBREVSX1NJWkUgLSAxKQorCisjZW5kaWYgIC8qIFdFQlBfV0VCUF9GT1JNQVRfQ09OU1RBTlRTX0hfICovCmRpZmYgLS1naXQgYS9zcmMvd2VicC9tdXhfdHlwZXMuaCBiL3NyYy93ZWJwL211eF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NDA0M2EKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvd2VicC9tdXhfdHlwZXMuaApAQCAtMCwwICsxLDk3IEBACisvLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKKy8vIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQorLy8gdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAorLy8gaW4gdGhlIGZpbGUgUEFURU5UUy4gQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5CisvLyBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gRGF0YS10eXBlcyBjb21tb24gdG8gdGhlIG11eCBhbmQgZGVtdXggbGlicmFyaWVzLgorLy8KKy8vIEF1dGhvcjogVXJ2YW5nICh1cnZhbmdAZ29vZ2xlLmNvbSkKKworI2lmbmRlZiBXRUJQX1dFQlBfTVVYX1RZUEVTX0hfCisjZGVmaW5lIFdFQlBfV0VCUF9NVVhfVFlQRVNfSF8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPiAgLy8gZnJlZSgpCisjaW5jbHVkZSA8c3RyaW5nLmg+ICAvLyBtZW1zZXQoKQorI2luY2x1ZGUgIi4vdHlwZXMuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvLyBOb3RlOiBmb3J3YXJkIGRlY2xhcmluZyBlbnVtZXJhdGlvbnMgaXMgbm90IGFsbG93ZWQgaW4gKHN0cmljdCkgQyBhbmQgQysrLAorLy8gdGhlIHR5cGVzIGFyZSBsZWZ0IGhlcmUgZm9yIHJlZmVyZW5jZS4KKy8vIHR5cGVkZWYgZW51bSBXZWJQRmVhdHVyZUZsYWdzIFdlYlBGZWF0dXJlRmxhZ3M7CisvLyB0eXBlZGVmIGVudW0gV2ViUE11eEFuaW1EaXNwb3NlIFdlYlBNdXhBbmltRGlzcG9zZTsKKy8vIHR5cGVkZWYgZW51bSBXZWJQTXV4QW5pbUJsZW5kIFdlYlBNdXhBbmltQmxlbmQ7Cit0eXBlZGVmIHN0cnVjdCBXZWJQRGF0YSBXZWJQRGF0YTsKKworLy8gVlA4WCBGZWF0dXJlIEZsYWdzLgordHlwZWRlZiBlbnVtIFdlYlBGZWF0dXJlRmxhZ3MgeworICBGUkFHTUVOVFNfRkxBRyAgPSAweDAwMDAwMDAxLAorICBBTklNQVRJT05fRkxBRyAgPSAweDAwMDAwMDAyLAorICBYTVBfRkxBRyAgICAgICAgPSAweDAwMDAwMDA0LAorICBFWElGX0ZMQUcgICAgICAgPSAweDAwMDAwMDA4LAorICBBTFBIQV9GTEFHICAgICAgPSAweDAwMDAwMDEwLAorICBJQ0NQX0ZMQUcgICAgICAgPSAweDAwMDAwMDIwCit9IFdlYlBGZWF0dXJlRmxhZ3M7CisKKy8vIERpc3Bvc2UgbWV0aG9kIChhbmltYXRpb24gb25seSkuIEluZGljYXRlcyBob3cgdGhlIGFyZWEgdXNlZCBieSB0aGUgY3VycmVudAorLy8gZnJhbWUgaXMgdG8gYmUgdHJlYXRlZCBiZWZvcmUgcmVuZGVyaW5nIHRoZSBuZXh0IGZyYW1lIG9uIHRoZSBjYW52YXMuCit0eXBlZGVmIGVudW0gV2ViUE11eEFuaW1EaXNwb3NlIHsKKyAgV0VCUF9NVVhfRElTUE9TRV9OT05FLCAgICAgICAvLyBEbyBub3QgZGlzcG9zZS4KKyAgV0VCUF9NVVhfRElTUE9TRV9CQUNLR1JPVU5EICAvLyBEaXNwb3NlIHRvIGJhY2tncm91bmQgY29sb3IuCit9IFdlYlBNdXhBbmltRGlzcG9zZTsKKworLy8gQmxlbmQgb3BlcmF0aW9uIChhbmltYXRpb24gb25seSkuIEluZGljYXRlcyBob3cgdHJhbnNwYXJlbnQgcGl4ZWxzIG9mIHRoZQorLy8gY3VycmVudCBmcmFtZSBhcmUgYmxlbmRlZCB3aXRoIHRob3NlIG9mIHRoZSBwcmV2aW91cyBjYW52YXMuCit0eXBlZGVmIGVudW0gV2ViUE11eEFuaW1CbGVuZCB7CisgIFdFQlBfTVVYX0JMRU5ELCAgICAgICAgICAgICAgLy8gQmxlbmQuCisgIFdFQlBfTVVYX05PX0JMRU5EICAgICAgICAgICAgLy8gRG8gbm90IGJsZW5kLgorfSBXZWJQTXV4QW5pbUJsZW5kOworCisvLyBEYXRhIHR5cGUgdXNlZCB0byBkZXNjcmliZSAncmF3JyBkYXRhLCBlLmcuLCBjaHVuayBkYXRhCisvLyAoSUNDIHByb2ZpbGUsIG1ldGFkYXRhKSBhbmQgV2ViUCBjb21wcmVzc2VkIGltYWdlIGRhdGEuCitzdHJ1Y3QgV2ViUERhdGEgeworICBjb25zdCB1aW50OF90KiBieXRlczsKKyAgc2l6ZV90IHNpemU7Cit9OworCisvLyBJbml0aWFsaXplcyB0aGUgY29udGVudHMgb2YgdGhlICd3ZWJwX2RhdGEnIG9iamVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzLgorc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQgV2ViUERhdGFJbml0KFdlYlBEYXRhKiB3ZWJwX2RhdGEpIHsKKyAgaWYgKHdlYnBfZGF0YSAhPSBOVUxMKSB7CisgICAgbWVtc2V0KHdlYnBfZGF0YSwgMCwgc2l6ZW9mKCp3ZWJwX2RhdGEpKTsKKyAgfQorfQorCisvLyBDbGVhcnMgdGhlIGNvbnRlbnRzIG9mIHRoZSAnd2VicF9kYXRhJyBvYmplY3QgYnkgY2FsbGluZyBmcmVlKCkuIERvZXMgbm90CisvLyBkZWFsbG9jYXRlIHRoZSBvYmplY3QgaXRzZWxmLgorc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQgV2ViUERhdGFDbGVhcihXZWJQRGF0YSogd2VicF9kYXRhKSB7CisgIGlmICh3ZWJwX2RhdGEgIT0gTlVMTCkgeworICAgIGZyZWUoKHZvaWQqKXdlYnBfZGF0YS0+Ynl0ZXMpOworICAgIFdlYlBEYXRhSW5pdCh3ZWJwX2RhdGEpOworICB9Cit9CisKKy8vIEFsbG9jYXRlcyBuZWNlc3Nhcnkgc3RvcmFnZSBmb3IgJ2RzdCcgYW5kIGNvcGllcyB0aGUgY29udGVudHMgb2YgJ3NyYycuCisvLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4KK3N0YXRpYyBXRUJQX0lOTElORSBpbnQgV2ViUERhdGFDb3B5KGNvbnN0IFdlYlBEYXRhKiBzcmMsIFdlYlBEYXRhKiBkc3QpIHsKKyAgaWYgKHNyYyA9PSBOVUxMIHx8IGRzdCA9PSBOVUxMKSByZXR1cm4gMDsKKyAgV2ViUERhdGFJbml0KGRzdCk7CisgIGlmIChzcmMtPmJ5dGVzICE9IE5VTEwgJiYgc3JjLT5zaXplICE9IDApIHsKKyAgICBkc3QtPmJ5dGVzID0gKHVpbnQ4X3QqKW1hbGxvYyhzcmMtPnNpemUpOworICAgIGlmIChkc3QtPmJ5dGVzID09IE5VTEwpIHJldHVybiAwOworICAgIG1lbWNweSgodm9pZCopZHN0LT5ieXRlcywgc3JjLT5ieXRlcywgc3JjLT5zaXplKTsKKyAgICBkc3QtPnNpemUgPSBzcmMtPnNpemU7CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgICAvLyBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlmICAvKiBXRUJQX1dFQlBfTVVYX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9zcmMvd2VicC90eXBlcy5oIGIvc3JjL3dlYnAvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjAzNmUwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3dlYnAvdHlwZXMuaApAQCAtMCwwICsxLDQ4IEBACisvLyBDb3B5cmlnaHQgMjAxMCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKKy8vIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQorLy8gdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAorLy8gaW4gdGhlIGZpbGUgUEFURU5UUy4gQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5CisvLyBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gIENvbW1vbiB0eXBlcworLy8KKy8vIEF1dGhvcjogU2thbCAocGFzY2FsLm1hc3NpbWlub0BnbWFpbC5jb20pCisKKyNpZm5kZWYgV0VCUF9XRUJQX1RZUEVTX0hfCisjZGVmaW5lIFdFQlBfV0VCUF9UWVBFU19IXworCisjaW5jbHVkZSA8c3RkZGVmLmg+ICAvLyBmb3Igc2l6ZV90CisKKyNpZm5kZWYgX01TQ19WRVIKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpIHx8ICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgXAorICAgIChkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKyNkZWZpbmUgV0VCUF9JTkxJTkUgaW5saW5lCisjZWxzZQorI2RlZmluZSBXRUJQX0lOTElORQorI2VuZGlmCisjZWxzZQordHlwZWRlZiBzaWduZWQgICBjaGFyIGludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90OwordHlwZWRlZiBzaWduZWQgICBzaG9ydCBpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsKK3R5cGVkZWYgc2lnbmVkICAgaW50IGludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50NjRfdDsKK3R5cGVkZWYgbG9uZyBsb25nIGludCBpbnQ2NF90OworI2RlZmluZSBXRUJQX0lOTElORSBfX2ZvcmNlaW5saW5lCisjZW5kaWYgIC8qIF9NU0NfVkVSICovCisKKyNpZm5kZWYgV0VCUF9FWFRFUk4KKy8vIFRoaXMgZXhwbGljaXRseSBtYXJrcyBsaWJyYXJ5IGZ1bmN0aW9ucyBhbmQgYWxsb3dzIGZvciBjaGFuZ2luZyB0aGUKKy8vIHNpZ25hdHVyZSBmb3IgZS5nLiwgV2luZG93cyBETEwgYnVpbGRzLgorI2RlZmluZSBXRUJQX0VYVEVSTih0eXBlKSBleHRlcm4gdHlwZQorI2VuZGlmICAvKiBXRUJQX0VYVEVSTiAqLworCisvLyBNYWNybyB0byBjaGVjayBBQkkgY29tcGF0aWJpbGl0eSAoc2FtZSBtYWpvciByZXZpc2lvbiBudW1iZXIpCisjZGVmaW5lIFdFQlBfQUJJX0lTX0lOQ09NUEFUSUJMRShhLCBiKSAoKChhKSA+PiA4KSAhPSAoKGIpID4+IDgpKQorCisjZW5kaWYgIC8qIFdFQlBfV0VCUF9UWVBFU19IXyAqLwo=