ZGlmZiAtLWdpdCBhL3JybHAtZXBoZW1lcmlzLy5naXRpZ25vcmUgYi9ycmxwLWVwaGVtZXJpcy8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGI0NWU0Li4wMDAwMDAwCi0tLSBhL3JybHAtZXBoZW1lcmlzLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWFzbjFfZ2VuLyoKLSoubwotKi5hCi1ycmxwLXRlc3QKZGlmZiAtLWdpdCBhL3JybHAtZXBoZW1lcmlzL0NPUFlJTkcgYi9ycmxwLWVwaGVtZXJpcy9DT1BZSU5HCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDcwODhlLi4wMDAwMDAwCi0tLSBhL3JybHAtZXBoZW1lcmlzL0NPUFlJTkcKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLVNlZSB0aGUgaW5jbHVkZWQgZ3BsLTIuMC50eHQgb3IgZ3BsLTMuMC50eHQgZGVwZW5kaW5nIG9uIHlvdXIKLXByZWZlcmVuY2VzLgpkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvTWFrZWZpbGUgYi9ycmxwLWVwaGVtZXJpcy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQyY2FjNy4uMDAwMDAwMAotLS0gYS9ycmxwLWVwaGVtZXJpcy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLQotQVNOMUM9Li4vLi4vLi4vdG1wL3JybHAvYXNuMWMvYXNuMWMvYXNuMWMKLUFTTjFfSU5DTFVERT0vaG9tZS90bnQvdG1wL3JybHAvYXNuMWMvc2tlbGV0b25zCi1DQz1nY2MKLUNGTEFHUz0tSSQoQVNOMV9JTkNMVURFKSAtSWFzbjFfZ2VuIC1PMyAtV2FsbAotCi1BU04xX0ZJTEVTPSQod2lsZGNhcmQgYXNuMS8qLmFzbikKLQotCi1hbGw6IHJybHAtdGVzdAotCi0KLXJybHAtdGVzdDogbGliZ3NtLWFzbjEuYSBncHMubyB1YngubyB1YngtcGFyc2UubyBycmxwLm8gbWFpbi5vCi0JJChDQykgLW8gJEAgZ3BzLm8gdWJ4Lm8gdWJ4LXBhcnNlLm8gcnJscC5vIG1haW4ubyAtTC4gLWxnc20tYXNuMSAtbG0KLQotCi0jCi0jIEFTTjEgZmlsZSBhdXRvZ2VuZXJhdGlvbiAobmVlZCByZWN1cnNpdmUgbWFrZWZpbGUgY2FsbCkKLSMKLQotQVNOMV9TT1VSQ0VTID0gJCh3aWxkY2FyZCBhc24xX2dlbi8qLmMpCi1BU04xX09CSkVDVFMgPSAkKEFTTjFfU09VUkNFUzouYz0ubykKLQotbGliZ3NtLWFzbjEuYTogJChBU04xX0ZJTEVTKQotCW1rZGlyIC1wIGFzbjFfZ2VuICYmIFwKLQljZCBhc24xX2dlbiAmJiBcCi0JJChBU04xQykgLWZza2VsZXRvbnMtY29weSAtZm5hdGl2ZS10eXBlcyAtZ2VuLVBFUiAkKGFkZHByZWZpeCAuLi8sJF4pCi0JQHJtIGFzbjFfZ2VuL2NvbnZlcnRlci1zYW1wbGUuYyBhc24xX2dlbi9NYWtlZmlsZS5hbS5zYW1wbGUKLQlAJChNQUtFKSBsaWJnc20tYXNuMS5hLnN1Ym1ha2UKLQotbGliZ3NtLWFzbjEuYS5zdWJtYWtlOiAkKEFTTjFfT0JKRUNUUykKLQkkKEFSKSByY3MgbGliZ3NtLWFzbjEuYSAkXgotCi0uUEhPTlk6IGxpYmdzbS1hc24xLmEuc3VibWFrZQotCi0KLSMKLSMgQ2xlYW4KLSMKLQotY2xlYW46Ci0Jcm0gLVJmIGFzbjFfZ2VuCi0Jcm0gLWYgbGliZ3NtLWFzbjEuYSAqLm8gcnJscC10ZXN0Ci0KZGlmZiAtLWdpdCBhL3JybHAtZXBoZW1lcmlzL2FzbjEvTUFQLUJTLUNvZGUuYXNuIGIvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtQlMtQ29kZS5hc24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMjUzNjYuLjAwMDAwMDAKLS0tIGEvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtQlMtQ29kZS5hc24KKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLS0gJElkOiBNQVAtQlMtQ29kZS5hc24gMjgxNDkgMjAwOS0wNC0yNSAxNzo0NTozNFogZXR4cmFiICQKLS0tIDNHUFAgVFMgMjkuMDAyIFY4LjkuMCAoMjAwOS0wNCkgCi0tLSAxNy43LjEwCUJlYXJlciBTZXJ2aWNlIENvZGVzCi0gCi1NQVAtQlMtQ29kZSB7Ci0gICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1CUy1Db2RlICgyMCkgdmVyc2lvbjExICgxMSl9Ci0KLURFRklOSVRJT05TCi0KLTo6PQotCi1CRUdJTgotCi1CZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKLQktLSBUaGlzIHR5cGUgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGNvZGUgaWRlbnRpZnlpbmcgYSBzaW5nbGUKLQktLSBiZWFyZXIgc2VydmljZSwgYSBncm91cCBvZiBiZWFyZXIgc2VydmljZXMsIG9yIGFsbCBiZWFyZXIKLQktLSBzZXJ2aWNlcy4gVGhlIHNlcnZpY2VzIGFyZSBkZWZpbmVkIGluIFRTIDNHUFAgVFMgMjIuMDAyIFszXS4KLQktLSBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgYXMgZm9sbG93czoKLQktLQotCS0tIHBsbW4tc3BlY2lmaWMgYmVhcmVyIHNlcnZpY2VzOgotCS0tIGJpdHMgODc2NTQzMjE6IGRlZmluZWQgYnkgdGhlIEhQTE1OIG9wZXJhdG9yCi0KLQktLSByZXN0IG9mIGJlYXJlciBzZXJ2aWNlczoKLQktLSBiaXQgODogMCAodW51c2VkKQotCS0tIGJpdHMgNzY1NDMyMTogZ3JvdXAgKGJpdHMgNzY1NCksIGFuZCByYXRlLCBpZiBhcHBsaWNhYmxlCi0JLS0gKGJpdHMgMzIxKQotCi1FeHQtQmVhcmVyU2VydmljZUNvZGUgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uNSkpCi0JLS0gVGhpcyB0eXBlIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjb2RlIGlkZW50aWZ5aW5nIGEgc2luZ2xlCi0JLS0gYmVhcmVyIHNlcnZpY2UsIGEgZ3JvdXAgb2YgYmVhcmVyIHNlcnZpY2VzLCBvciBhbGwgYmVhcmVyCi0JLS0gc2VydmljZXMuIFRoZSBzZXJ2aWNlcyBhcmUgZGVmaW5lZCBpbiBUUyAzR1BQIFRTIDIyLjAwMiBbM10uCi0JLS0gVGhlIGludGVybmFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6Ci0JLS0KLQktLSBPQ1RFVCAxOgotCS0tIHBsbW4tc3BlY2lmaWMgYmVhcmVyIHNlcnZpY2VzOgotCS0tIGJpdHMgODc2NTQzMjE6IGRlZmluZWQgYnkgdGhlIEhQTE1OIG9wZXJhdG9yCi0JLS0KLQktLSByZXN0IG9mIGJlYXJlciBzZXJ2aWNlczoKLQktLSBiaXQgODogMCAodW51c2VkKQotCS0tIGJpdHMgNzY1NDMyMTogZ3JvdXAgKGJpdHMgNzY1NCksIGFuZCByYXRlLCBpZiBhcHBsaWNhYmxlCi0JLS0gKGJpdHMgMzIxKQotCi0JLS0gT0NURVRTIDItNTogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIElmIHJlY2VpdmVkIHRoZQotICAgIC0tIEV4dC1UZWxlc2VydmljZUNvZGUgc2hhbGwgYmUKLQktLSB0cmVhdGVkIGFjY29yZGluZyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nIGRlZmluZWQgZm9yIHRoZQotCS0tIG9wZXJhdGlvbiB0aGF0IHVzZXMgdGhpcyB0eXBlLiAKLQotCi0JLS0gRXh0LUJlYXJlclNlcnZpY2VDb2RlIGluY2x1ZGVzIGFsbCB2YWx1ZXMgZGVmaW5lZCBmb3IgQmVhcmVyU2VydmljZUNvZGUuCi0KLWFsbEJlYXJlclNlcnZpY2VzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMDAwMDAnQgotCi1hbGxEYXRhQ0RBLVNlcnZpY2VzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTAwMDAnQgotZGF0YUNEQS0zMDBicHMJCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTAwMDEnQgotZGF0YUNEQS0xMjAwYnBzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTAwMTAnQgotZGF0YUNEQS0xMjAwLTc1YnBzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTAwMTEnQgotZGF0YUNEQS0yNDAwYnBzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTAxMDAnQgotZGF0YUNEQS00ODAwYnBzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTAxMDEnQgotZGF0YUNEQS05NjAwYnBzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTAxMTAnQgotZ2VuZXJhbC1kYXRhQ0RBCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTAxMTEnQgotCi1hbGxEYXRhQ0RTLVNlcnZpY2VzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTEwMDAnQgotZGF0YUNEUy0xMjAwYnBzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTEwMTAnQgotZGF0YUNEUy0yNDAwYnBzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTExMDAnQgotZGF0YUNEUy00ODAwYnBzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTExMDEnQgotZGF0YUNEUy05NjAwYnBzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTExMTAnQgotZ2VuZXJhbC1kYXRhQ0RTCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAwMTExMTEnQgotCi1hbGxQYWRBY2Nlc3NDQS1TZXJ2aWNlcwlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzAwMTAwMDAwJ0IKLXBhZEFjY2Vzc0NBLTMwMGJwcwlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzAwMTAwMDAxJ0IKLXBhZEFjY2Vzc0NBLTEyMDBicHMJQmVhcmVyU2VydmljZUNvZGUgOjo9ICcwMDEwMDAxMCdCCi1wYWRBY2Nlc3NDQS0xMjAwLTc1YnBzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAxMDAwMTEnQgotcGFkQWNjZXNzQ0EtMjQwMGJwcwlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzAwMTAwMTAwJ0IKLXBhZEFjY2Vzc0NBLTQ4MDBicHMJQmVhcmVyU2VydmljZUNvZGUgOjo9ICcwMDEwMDEwMSdCCi1wYWRBY2Nlc3NDQS05NjAwYnBzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAxMDAxMTAnQgotZ2VuZXJhbC1wYWRBY2Nlc3NDQQlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzAwMTAwMTExJ0IKLQotYWxsRGF0YVBEUy1TZXJ2aWNlcwlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzAwMTAxMDAwJ0IKLWRhdGFQRFMtMjQwMGJwcwlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzAwMTAxMTAwJ0IKLWRhdGFQRFMtNDgwMGJwcwlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzAwMTAxMTAxJ0IKLWRhdGFQRFMtOTYwMGJwcwlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzAwMTAxMTEwJ0IKLWdlbmVyYWwtZGF0YVBEUwlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzAwMTAxMTExJ0IKLQotYWxsQWx0ZXJuYXRlU3BlZWNoLURhdGFDREEJQmVhcmVyU2VydmljZUNvZGUgOjo9ICcwMDExMDAwMCdCCi0KLWFsbEFsdGVybmF0ZVNwZWVjaC1EYXRhQ0RTCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDAxMTEwMDAnQgotCi1hbGxTcGVlY2hGb2xsb3dlZEJ5RGF0YUNEQQlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzAxMDAwMDAwJ0IKLQotYWxsU3BlZWNoRm9sbG93ZWRCeURhdGFDRFMJQmVhcmVyU2VydmljZUNvZGUgOjo9ICcwMTAwMTAwMCdCCi0KLS0tIFRoZSBmb2xsb3dpbmcgbm9uLWhpZXJhcmNoaWNhbCBDb21wb3VuZCBCZWFyZXIgU2VydmljZQotLS0gR3JvdXBzIGFyZSBkZWZpbmVkIGluIFRTIDNHUFAgVFMgMjIuMDMwOgotYWxsRGF0YUNpcmN1aXRBc3luY2hyb25vdXMJQmVhcmVyU2VydmljZUNvZGUgOjo9ICcwMTAxMDAwMCdCCi0JLS0gY292ZXJzICJhbGxEYXRhQ0RBLVNlcnZpY2VzIiwgImFsbEFsdGVybmF0ZVNwZWVjaC1EYXRhQ0RBIiBhbmQKLQktLSAiYWxsU3BlZWNoRm9sbG93ZWRCeURhdGFDREEiCi1hbGxBc3luY2hyb25vdXNTZXJ2aWNlcwlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzAxMTAwMDAwJ0IKLQktLSBjb3ZlcnMgImFsbERhdGFDREEtU2VydmljZXMiLCAiYWxsQWx0ZXJuYXRlU3BlZWNoLURhdGFDREEiLAotCS0tICJhbGxTcGVlY2hGb2xsb3dlZEJ5RGF0YUNEQSIgYW5kICJhbGxQYWRBY2Nlc3NDREEtU2VydmljZXMiCi1hbGxEYXRhQ2lyY3VpdFN5bmNocm9ub3VzCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMDEwMTEwMDAnQgotCS0tIGNvdmVycyAiYWxsRGF0YUNEUy1TZXJ2aWNlcyIsICJhbGxBbHRlcm5hdGVTcGVlY2gtRGF0YUNEUyIgYW5kCi0JLS0gImFsbFNwZWVjaEZvbGxvd2VkQnlEYXRhQ0RTIgotYWxsU3luY2hyb25vdXNTZXJ2aWNlcwlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzAxMTAxMDAwJ0IKLQktLSBjb3ZlcnMgImFsbERhdGFDRFMtU2VydmljZXMiLCAiYWxsQWx0ZXJuYXRlU3BlZWNoLURhdGFDRFMiLAotCS0tICJhbGxTcGVlY2hGb2xsb3dlZEJ5RGF0YUNEUyIgYW5kICJhbGxEYXRhUERTLVNlcnZpY2VzIgotLS0KLS0tIENvbXBvdW5kIEJlYXJlciBTZXJ2aWNlIEdyb3VwIENvZGVzIGFyZSBvbmx5IHVzZWQgaW4gY2FsbAotLS0gaW5kZXBlbmRlbnQgc3VwcGxlbWVudGFyeSBzZXJ2aWNlIG9wZXJhdGlvbnMsIGkuZS4gdGhleQotLS0gYXJlIG5vdCB1c2VkIGluIEluc2VydFN1YnNjcmliZXJEYXRhIG9yIGluCi0tLSBEZWxldGVTdWJzY3JpYmVyRGF0YSBtZXNzYWdlcy4KLQotYWxsUExNTi1zcGVjaWZpY0JTCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMTEwMTAwMDAnQgotcGxtbi1zcGVjaWZpY0JTLTEJQmVhcmVyU2VydmljZUNvZGUgOjo9ICcxMTAxMDAwMSdCCi1wbG1uLXNwZWNpZmljQlMtMglCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzExMDEwMDEwJ0IKLXBsbW4tc3BlY2lmaWNCUy0zCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMTEwMTAwMTEnQgotcGxtbi1zcGVjaWZpY0JTLTQJQmVhcmVyU2VydmljZUNvZGUgOjo9ICcxMTAxMDEwMCdCCi1wbG1uLXNwZWNpZmljQlMtNQlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzExMDEwMTAxJ0IKLXBsbW4tc3BlY2lmaWNCUy02CUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMTEwMTAxMTAnQgotcGxtbi1zcGVjaWZpY0JTLTcJQmVhcmVyU2VydmljZUNvZGUgOjo9ICcxMTAxMDExMSdCCi1wbG1uLXNwZWNpZmljQlMtOAlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzExMDExMDAwJ0IKLXBsbW4tc3BlY2lmaWNCUy05CUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMTEwMTEwMDEnQgotcGxtbi1zcGVjaWZpY0JTLUEJQmVhcmVyU2VydmljZUNvZGUgOjo9ICcxMTAxMTAxMCdCCi1wbG1uLXNwZWNpZmljQlMtQglCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzExMDExMDExJ0IKLXBsbW4tc3BlY2lmaWNCUy1DCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMTEwMTExMDAnQgotcGxtbi1zcGVjaWZpY0JTLUQJQmVhcmVyU2VydmljZUNvZGUgOjo9ICcxMTAxMTEwMSdCCi1wbG1uLXNwZWNpZmljQlMtRQlCZWFyZXJTZXJ2aWNlQ29kZSA6Oj0gJzExMDExMTEwJ0IKLXBsbW4tc3BlY2lmaWNCUy1GCUJlYXJlclNlcnZpY2VDb2RlIDo6PSAnMTEwMTExMTEnQgotCi1FTkQKLQpkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtQ29tbW9uRGF0YVR5cGVzLmFzbiBiL3JybHAtZXBoZW1lcmlzL2FzbjEvTUFQLUNvbW1vbkRhdGFUeXBlcy5hc24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZDIwMmUuLjAwMDAwMDAKLS0tIGEvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtQ29tbW9uRGF0YVR5cGVzLmFzbgorKysgL2Rldi9udWxsCkBAIC0xLDYzMyArMCwwIEBACi0tLSAkSWQ6IE1BUC1Db21tb25EYXRhVHlwZXMuYXNuIDMwNDcwIDIwMDktMTAtMTAgMTI6Mzc6NTZaIGtyaiAkCi0tLSAzR1BQIFRTIDI5LjAwMiBWOC45LjAgKDIwMDktMDQpCi0tLSAxNy43LjgJQ29tbW9uIGRhdGEgdHlwZXMKLQotTUFQLUNvbW1vbkRhdGFUeXBlcyB7Ci0gICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1Db21tb25EYXRhVHlwZXMgKDE4KSB2ZXJzaW9uMTEgKDExKX0KLQotREVGSU5JVElPTlMKLQotSU1QTElDSVQgVEFHUwotCi06Oj0KLQotQkVHSU4KLQotRVhQT1JUUwotCi0JLS0gZ2VuZXJhbCBkYXRhIHR5cGVzIGFuZCB2YWx1ZXMKLQlBZGRyZXNzU3RyaW5nLAotCUlTRE4tQWRkcmVzc1N0cmluZywKLQltYXhJU0ROLUFkZHJlc3NMZW5ndGgsCi0JRlROLUFkZHJlc3NTdHJpbmcsCi0JSVNETi1TdWJhZGRyZXNzU3RyaW5nLAotCUV4dGVybmFsU2lnbmFsSW5mbywgCi0JRXh0LUV4dGVybmFsU2lnbmFsSW5mbywgCi1BY2Nlc3NOZXR3b3JrU2lnbmFsSW5mbywKLQlTaWduYWxJbmZvLAotCW1heFNpZ25hbEluZm9MZW5ndGgsCi0JQWxlcnRpbmdQYXR0ZXJuLAotCVRCQ0QtU1RSSU5HLAotCi0JLS0gZGF0YSB0eXBlcyBmb3IgbnVtYmVyaW5nIGFuZCBpZGVudGlmaWNhdGlvbgotCUlNU0ksCi0JVE1TSSwgCi0JSWRlbnRpdHksCi0JU3Vic2NyaWJlcklkLAotCUlNRUksCi0JSExSLUxpc3QsCi0JTE1TSSwKLQlHbG9iYWxDZWxsSWQsCi0JTmV0d29ya1Jlc291cmNlLAotCUFkZGl0aW9uYWxOZXR3b3JrUmVzb3VyY2UsCi0JTkFFQS1QcmVmZXJyZWRDSSwgCi0JTkFFQS1DSUMsIAotCUFTQ0ktQ2FsbFJlZmVyZW5jZSwKLQlTdWJzY3JpYmVySWRlbnRpdHksCi0JUExNTi1JZCwKLQotCS0tIGRhdGEgdHlwZXMgZm9yIENBTUVMCi0JQ2VsbEdsb2JhbElkT3JTZXJ2aWNlQXJlYUlkT3JMQUksIAotCUNlbGxHbG9iYWxJZE9yU2VydmljZUFyZWFJZEZpeGVkTGVuZ3RoLAotCUxBSUZpeGVkTGVuZ3RoLAotCi0JLS0gZGF0YSB0eXBlcyBmb3Igc3Vic2NyaWJlciBtYW5hZ2VtZW50Ci0JQmFzaWNTZXJ2aWNlQ29kZSwKLQlFeHQtQmFzaWNTZXJ2aWNlQ29kZSwKLQlFTUxQUC1JbmZvLAotCUVNTFBQLVByaW9yaXR5LCAKLQlNQy1TUy1JbmZvLAotCU1heE1DLUJlYXJlcnMsCi0JTUMtQmVhcmVycywKLQlFeHQtU1MtU3RhdHVzLAotCi0JLS0gZGF0YSB0eXBlcyBmb3IgZ2VvZ3JhcGhpYyBsb2NhdGlvbgotCUFnZU9mTG9jYXRpb25JbmZvcm1hdGlvbiwKLQlMQ1NDbGllbnRFeHRlcm5hbElELAotCUxDU0NsaWVudEludGVybmFsSUQsCi0JTENTU2VydmljZVR5cGVJRCwKLS0tLSBXUyBhZGRlZCBleHBvcnRzIG5lZWRlZCBieSBnc21fbWFwLmFzbiAoZXh0cmEgYXNuMSBmaWxlIHRvIGhhbmRsZSBvbGRlciBwcm90LiB2ZXIuKQotCVByb3RvY29sSWQsCi0JTENTU2VydmljZVR5cGVJRAkKLTsKLQotSU1QT1JUUwotCVRlbGVzZXJ2aWNlQ29kZSwKLQlFeHQtVGVsZXNlcnZpY2VDb2RlCi1GUk9NIE1BUC1UUy1Db2RlIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLVRTLUNvZGUgKDE5KSB2ZXJzaW9uMTEgKDExKX0KLQotCUJlYXJlclNlcnZpY2VDb2RlLAotCUV4dC1CZWFyZXJTZXJ2aWNlQ29kZQotRlJPTSBNQVAtQlMtQ29kZSB7Ci0gICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1CUy1Db2RlICgyMCkgdmVyc2lvbjExICgxMSl9Ci0KLQlTUy1Db2RlCi1GUk9NIE1BUC1TUy1Db2RlIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLVNTLUNvZGUgKDE1KSB2ZXJzaW9uMTEgKDExKX0KLQotCUV4dGVuc2lvbkNvbnRhaW5lcgotRlJPTSBNQVAtRXh0ZW5zaW9uRGF0YVR5cGVzIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUV4dGVuc2lvbkRhdGFUeXBlcyAoMjEpIHZlcnNpb24xMSAoMTEpfQotOwotCi0KLS0tIGdlbmVyYWwgZGF0YSB0eXBlcwotCi1UQkNELVNUUklORyA6Oj0gT0NURVQgU1RSSU5HCi0JLS0gVGhpcyB0eXBlIChUZWxlcGhvbnkgQmluYXJ5IENvZGVkIERlY2ltYWwgU3RyaW5nKSBpcyB1c2VkIHRvCi0JLS0gcmVwcmVzZW50IHNldmVyYWwgZGlnaXRzIGZyb20gMCB0aHJvdWdoIDksICosICMsIGEsIGIsIGMsIHR3bwotCS0tIGRpZ2l0cyBwZXIgb2N0ZXQsIGVhY2ggZGlnaXQgZW5jb2RlZCAwMDAwIHRvIDEwMDEgKDAgdG8gOSksCi0JLS0gMTAxMCAoKiksIDEwMTEgKCMpLCAxMTAwIChhKSwgMTEwMSAoYikgb3IgMTExMCAoYyk7IDExMTEgdXNlZAotCS0tIGFzIGZpbGxlciB3aGVuIHRoZXJlIGlzIGFuIG9kZCBudW1iZXIgb2YgZGlnaXRzLgotCi0JLS0gYml0cyA4NzY1IG9mIG9jdGV0IG4gZW5jb2RpbmcgZGlnaXQgMm4KLQktLSBiaXRzIDQzMjEgb2Ygb2N0ZXQgbiBlbmNvZGluZyBkaWdpdCAyKG4tMSkgKzEKLQotQWRkcmVzc1N0cmluZyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi5tYXhBZGRyZXNzTGVuZ3RoKSkKLQktLSBUaGlzIHR5cGUgaXMgdXNlZCB0byByZXByZXNlbnQgYSBudW1iZXIgZm9yIGFkZHJlc3NpbmcKLQktLSBwdXJwb3Nlcy4gSXQgaXMgY29tcG9zZWQgb2YKLQktLQlhKQlvbmUgb2N0ZXQgZm9yIG5hdHVyZSBvZiBhZGRyZXNzLCBhbmQgbnVtYmVyaW5nIHBsYW4KLQktLQkJaW5kaWNhdG9yLgotCS0tCWIpCWRpZ2l0cyBvZiBhbiBhZGRyZXNzIGVuY29kZWQgYXMgVEJDRC1TdHJpbmcuCi0KLQktLSBhKQlUaGUgZmlyc3Qgb2N0ZXQgaW5jbHVkZXMgYSBvbmUgYml0IGV4dGVuc2lvbiBpbmRpY2F0b3IsIGEKLQktLQkJMyBiaXRzIG5hdHVyZSBvZiBhZGRyZXNzIGluZGljYXRvciBhbmQgYSA0IGJpdHMgbnVtYmVyaW5nCi0JLS0JCXBsYW4gaW5kaWNhdG9yLCBlbmNvZGVkIGFzIGZvbGxvd3M6Ci0KLQktLSBiaXQgODogMSAgKG5vIGV4dGVuc2lvbikKLQotCS0tIGJpdHMgNzY1OiBuYXR1cmUgb2YgYWRkcmVzcyBpbmRpY2F0b3IKLQktLQkwMDAgIHVua25vd24KLQktLQkwMDEgIGludGVybmF0aW9uYWwgbnVtYmVyCi0JLS0JMDEwICBuYXRpb25hbCBzaWduaWZpY2FudCBudW1iZXIKLQktLQkwMTEgIG5ldHdvcmsgc3BlY2lmaWMgbnVtYmVyCi0JLS0JMTAwICBzdWJzY3JpYmVyIG51bWJlcgotCS0tCTEwMSAgcmVzZXJ2ZWQKLQktLQkxMTAgIGFiYnJldmlhdGVkIG51bWJlcgotCS0tCTExMSAgcmVzZXJ2ZWQgZm9yIGV4dGVuc2lvbgotCi0JLS0gYml0cyA0MzIxOiBudW1iZXJpbmcgcGxhbiBpbmRpY2F0b3IKLQktLQkwMDAwICB1bmtub3duCi0JLS0JMDAwMSAgSVNETi9UZWxlcGhvbnkgTnVtYmVyaW5nIFBsYW4gKFJlYyBJVFUtVCBFLjE2NCkKLQktLQkwMDEwICBzcGFyZQotCS0tCTAwMTEgIGRhdGEgbnVtYmVyaW5nIHBsYW4gKElUVS1UIFJlYyBYLjEyMSkKLQktLQkwMTAwICB0ZWxleCBudW1iZXJpbmcgcGxhbiAoSVRVLVQgUmVjIEYuNjkpCi0JLS0JMDEwMSAgc3BhcmUKLQktLQkwMTEwICBsYW5kIG1vYmlsZSBudW1iZXJpbmcgcGxhbiAoSVRVLVQgUmVjIEUuMjEyKQotCS0tCTAxMTEgIHNwYXJlCi0JLS0JMTAwMCAgbmF0aW9uYWwgbnVtYmVyaW5nIHBsYW4KLQktLQkxMDAxICBwcml2YXRlIG51bWJlcmluZyBwbGFuCi0JLS0JMTExMSAgcmVzZXJ2ZWQgZm9yIGV4dGVuc2lvbgotCi0JLS0JYWxsIG90aGVyIHZhbHVlcyBhcmUgcmVzZXJ2ZWQuCi0KLQktLSBiKQlUaGUgZm9sbG93aW5nIG9jdGV0cyByZXByZXNlbnRpbmcgZGlnaXRzIG9mIGFuIGFkZHJlc3MKLQktLQkJZW5jb2RlZCBhcyBhIFRCQ0QtU1RSSU5HLgotCi1tYXhBZGRyZXNzTGVuZ3RoICBJTlRFR0VSIDo6PSAyMAotCi1JU0ROLUFkZHJlc3NTdHJpbmcgOjo9IAotCQkJQWRkcmVzc1N0cmluZyAoU0laRSAoMS4ubWF4SVNETi1BZGRyZXNzTGVuZ3RoKSkKLQktLSBUaGlzIHR5cGUgaXMgdXNlZCB0byByZXByZXNlbnQgSVNETiBudW1iZXJzLgotCi1tYXhJU0ROLUFkZHJlc3NMZW5ndGggIElOVEVHRVIgOjo9IDkKLQotRlROLUFkZHJlc3NTdHJpbmcgOjo9IAotCQkJQWRkcmVzc1N0cmluZyAoU0laRSAoMS4ubWF4RlROLUFkZHJlc3NMZW5ndGgpKQotCS0tIFRoaXMgdHlwZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBmb3J3YXJkZWQtdG8gbnVtYmVycy4gCi0JLS0gSWYgTkFJID0gaW50ZXJuYXRpb25hbCB0aGUgZmlyc3QgZGlnaXRzIHJlcHJlc2VudCB0aGUgY291bnRyeSBjb2RlIChDQykKLQktLSBhbmQgdGhlIG5ldHdvcmsgZGVzdGluYXRpb24gY29kZSAoTkRDKSBhcyBmb3IgRS4xNjQuCi0KLW1heEZUTi1BZGRyZXNzTGVuZ3RoICBJTlRFR0VSIDo6PSAxNQotCi1JU0ROLVN1YmFkZHJlc3NTdHJpbmcgOjo9IAotCQkJT0NURVQgU1RSSU5HIChTSVpFICgxLi5tYXhJU0ROLVN1YmFkZHJlc3NMZW5ndGgpKQotCS0tIFRoaXMgdHlwZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBJU0ROIHN1YmFkZHJlc3Nlcy4KLQktLSBJdCBpcyBjb21wb3NlZCBvZgotCS0tCWEpCW9uZSBvY3RldCBmb3IgdHlwZSBvZiBzdWJhZGRyZXNzIGFuZCBvZGQvZXZlbiBpbmRpY2F0b3IuCi0JLS0JYikJMjAgb2N0ZXRzIGZvciBzdWJhZGRyZXNzIGluZm9ybWF0aW9uLgotCi0JLS0JYSkJVGhlIGZpcnN0IG9jdGV0IGluY2x1ZGVzIGEgb25lIGJpdCBleHRlbnNpb24gaW5kaWNhdG9yLCBhCi0JLS0JCTMgYml0cyB0eXBlIG9mIHN1YmFkZHJlc3MgYW5kIGEgb25lIGJpdCBvZGQvZXZlbiBpbmRpY2F0b3IsCi0JLS0JCWVuY29kZWQgYXMgZm9sbG93czoKLQotCS0tCWJpdCA4OiAxICAobm8gZXh0ZW5zaW9uKQotCi0JLS0JYml0cyA3NjU6IHR5cGUgb2Ygc3ViYWRkcmVzcwotCS0tCQkwMDAgIE5TQVAgKFguMjEzL0lTTyA4MzQ4IEFEMikKLQktLQkJMDEwICBVc2VyIFNwZWNpZmllZAotCS0tCQlBbGwgb3RoZXIgdmFsdWVzIGFyZSByZXNlcnZlZAotCi0JLS0JYml0IDQ6IG9kZC9ldmVuIGluZGljYXRvcgotCS0tCQkwICBldmVuIG51bWJlciBvZiBhZGRyZXNzIHNpZ25hbHMKLQktLQkJMSAgb2RkIG51bWJlciBvZiBhZGRyZXNzIHNpZ25hbHMKLQktLQkJVGhlIG9kZC9ldmVuIGluZGljYXRvciBpcyB1c2VkIHdoZW4gdGhlIHR5cGUgb2Ygc3ViYWRkcmVzcwotCS0tCQlpcyAidXNlciBzcGVjaWZpZWQiIGFuZCB0aGUgY29kaW5nIGlzIEJDRC4KLQotCS0tCWJpdHMgMzIxOiAwMDAgKHVudXNlZCkKLQotCS0tCWIpIFN1YmFkZHJlc3MgaW5mb3JtYXRpb24uCi0JLS0JVGhlIE5TQVAgWC4yMTMvSVNPODM0OEFEMiBhZGRyZXNzIHNoYWxsIGJlIGZvcm1hdHRlZCBhcyBzcGVjaWZpZWQKLQktLQlieSBvY3RldCA0IHdoaWNoIGNvbnRhaW5zIHRoZSBBdXRob3JpdHkgYW5kIEZvcm1hdCBJZGVudGlmaWVyCi0JLS0JKEFGSSkuIFRoZSBlbmNvZGluZyBpcyBtYWRlIGFjY29yZGluZyB0byB0aGUgInByZWZlcnJlZCBiaW5hcnkKLQktLQllbmNvZGluZyIgYXMgZGVmaW5lZCBpbiBYLjIxMy9JU084MzRBRDIuIEZvciB0aGUgZGVmaW5pdGlvbgotCS0tCW9mIHRoaXMgdHlwZSBvZiBzdWJhZGRyZXNzLCBzZWUgSVRVLVQgUmVjIEkuMzM0LgotCi0JLS0JRm9yIFVzZXItc3BlY2lmaWMgc3ViYWRkcmVzcywgdGhpcyBmaWVsZCBpcyBlbmNvZGVkIGFjY29yZGluZwotCS0tCXRvIHRoZSB1c2VyIHNwZWNpZmljYXRpb24sIHN1YmplY3QgdG8gYSBtYXhpbXVtIGxlbmd0aCBvZiAyMAotCS0tCW9jdGV0cy4gV2hlbiBpbnRlcndvcmtpbmcgd2l0aCBYLjI1IG5ldHdvcmtzIEJDRCBjb2Rpbmcgc2hvdWxkCi0JLS0JYmUgYXBwbGllZC4KLQotbWF4SVNETi1TdWJhZGRyZXNzTGVuZ3RoICBJTlRFR0VSIDo6PSAyMQotCi1FeHRlcm5hbFNpZ25hbEluZm8gOjo9IFNFUVVFTkNFIHsKLQlwcm90b2NvbElkCVByb3RvY29sSWQsCi0Jc2lnbmFsSW5mbwlTaWduYWxJbmZvLAotCS0tIEluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgZ2l2ZW4gaW4KLQktLSBjbGF1c2UgNy42LjkuCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQktLSBleHRlbnNpb25Db250YWluZXIgbXVzdCBub3QgYmUgdXNlZCBpbiB2ZXJzaW9uIDIKLQkuLi59Ci0KLVNpZ25hbEluZm8gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4ubWF4U2lnbmFsSW5mb0xlbmd0aCkpCi0KLW1heFNpZ25hbEluZm9MZW5ndGggIElOVEVHRVIgOjo9IDIwMAotCS0tIFRoaXMgTmFtZWRWYWx1ZSByZXByZXNlbnRzIHRoZSB0aGVvcmV0aWNhbCBtYXhpbXVtIG51bWJlciBvZiBvY3RldHMgd2hpY2ggaXMKLQktLSBhdmFpbGFibGUgdG8gY2FycnkgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlIFNpZ25hbEluZm8gZGF0YSB0eXBlLAotCS0tIHdpdGhvdXQgcmVxdWlyaW5nIHNlZ21lbnRhdGlvbiB0byBjb3BlIHdpdGggdGhlIG5ldHdvcmsgbGF5ZXIgc2VydmljZS4KLQktLSBIb3dldmVyLCB0aGUgYWN0dWFsIG1heGltdW0gc2l6ZSBhdmFpbGFibGUgZm9yIGFuIGluc3RhbmNlIG9mIHRoZSBkYXRhCi0JLS0gdHlwZSBtYXkgYmUgbG93ZXIsIGVzcGVjaWFsbHkgd2hlbiBvdGhlciBpbmZvcm1hdGlvbiBlbGVtZW50cwotCS0tIGhhdmUgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIHNhbWUgY29tcG9uZW50LgotCi1Qcm90b2NvbElkIDo6PSBFTlVNRVJBVEVEIHsKLQlnc20tMDQwOCAgKDEpLAotCWdzbS0wODA2ICAoMiksCi0JZ3NtLUJTU01BUCAgKDMpLAotCS0tIFZhbHVlIDMgaXMgcmVzZXJ2ZWQgYW5kIG11c3Qgbm90IGJlIHVzZWQKLQlldHMtMzAwMTAyLTEgICg0KX0KLQotRXh0LUV4dGVybmFsU2lnbmFsSW5mbyA6Oj0gU0VRVUVOQ0UgewotCWV4dC1Qcm90b2NvbElkCUV4dC1Qcm90b2NvbElkLAotCXNpZ25hbEluZm8JU2lnbmFsSW5mbywKLQktLSBJbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGdpdmVuIGluCi0JLS0gY2xhdXNlIDcuNi45LjEwCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLUV4dC1Qcm90b2NvbElkIDo6PSBFTlVNRVJBVEVEIHsKLQlldHMtMzAwMzU2ICAoMSksCi0JLi4uIAotCSB9Ci0tLSBleGNlcHRpb24gaGFuZGxpbmc6Ci0tLSBGb3IgRXh0LUV4dGVybmFsU2lnbmFsSW5mbyBzZXF1ZW5jZXMgY29udGFpbmluZyB0aGlzIHBhcmFtZXRlciB3aXRoIGFueQotLS0gb3RoZXIgdmFsdWUgdGhhbiB0aGUgb25lcyBsaXN0ZWQgdGhlIHJlY2VpdmVyIHNoYWxsIGlnbm9yZSB0aGUgd2hvbGUgCi0tLSBFeHQtRXh0ZXJuYWxTaWduYWxJbmZvIHNlcXVlbmNlLgotCi1BY2Nlc3NOZXR3b3JrU2lnbmFsSW5mbyA6Oj0gU0VRVUVOQ0UgewotCWFjY2Vzc05ldHdvcmtQcm90b2NvbElkCUFjY2Vzc05ldHdvcmtQcm90b2NvbElkLAotCXNpZ25hbEluZm8JTG9uZ1NpZ25hbEluZm8sCi0JLS0gSW5mb3JtYXRpb24gYWJvdXQgdGhlIGludGVybmFsIHN0cnVjdHVyZSBpcyBnaXZlbiBpbiBjbGF1c2UgNy42LjkuMQotCQotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1Mb25nU2lnbmFsSW5mbyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi5tYXhMb25nU2lnbmFsSW5mb0xlbmd0aCkpCi0KLW1heExvbmdTaWduYWxJbmZvTGVuZ3RoICBJTlRFR0VSIDo6PSAyNTYwCi0JLS0gVGhpcyBOYW1lZCBWYWx1ZSByZXByZXNlbnRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvY3RldHMgd2hpY2ggaXMgYXZhaWxhYmxlCi0JLS0gdG8gY2FycnkgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlIExvbmdTaWduYWxJbmZvIGRhdGEgdHlwZSB1c2luZwotCS0tIFdoaXRlIEJvb2sgU0NDUCB3aXRoIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWdtZW50cy4KLQktLSBJdCB0YWtlcyBhY2NvdW50IG9mIHRoZSBvY3RldHMgdXNlZCBieSB0aGUgbG93ZXIgbGF5ZXJzIG9mIHRoZSBwcm90b2NvbCwgYW5kCi0JLS0gb3RoZXIgaW5mb3JtYXRpb24gZWxlbWVudHMgd2hpY2ggbWF5IGJlIGluY2x1ZGVkIGluIHRoZSBzYW1lIGNvbXBvbmVudC4KLQotQWNjZXNzTmV0d29ya1Byb3RvY29sSWQgOjo9IEVOVU1FUkFURUQgewotCXRzM0ctNDgwMDYgICAoMSksCi0JdHMzRy0yNTQxMyAoMiksCi0JLi4ufQotCS0tIGV4Y2VwdGlvbiBoYW5kbGluZzoKLQktLSBGb3IgQWNjZXNzTmV0d29ya1NpZ25hbEluZm8gc2VxdWVuY2VzIGNvbnRhaW5pbmcgdGhpcyBwYXJhbWV0ZXIgd2l0aCBhbnkKLQktLSBvdGhlciB2YWx1ZSB0aGFuIHRoZSBvbmVzIGxpc3RlZCB0aGUgcmVjZWl2ZXIgc2hhbGwgaWdub3JlIHRoZSB3aG9sZSAKLQktLSBBY2Nlc3NOZXR3b3JrU2lnbmFsSW5mbyBzZXF1ZW5jZS4KLQotQWxlcnRpbmdQYXR0ZXJuIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpICkKLQktLSBUaGlzIHR5cGUgaXMgdXNlZCB0byByZXByZXNlbnQgQWxlcnRpbmcgUGF0dGVybgotCi0JLS0JYml0cyA4NzY1IDogMDAwMCAodW51c2VkKQotCi0JLS0JYml0cyA0MyA6IHR5cGUgb2YgUGF0dGVybgotCS0tCQkwMCBsZXZlbAotCS0tCQkwMSBjYXRlZ29yeQotCS0tCQkxMCBjYXRlZ29yeQotCS0tCQlhbGwgb3RoZXIgdmFsdWVzIGFyZSByZXNlcnZlZC4KLQotCS0tCWJpdHMgMjEgOiB0eXBlIG9mIGFsZXJ0aW5nCi0KLWFsZXJ0aW5nTGV2ZWwtMCAgIEFsZXJ0aW5nUGF0dGVybiA6Oj0gJzAwMDAwMDAwJ0IKLWFsZXJ0aW5nTGV2ZWwtMSAgIEFsZXJ0aW5nUGF0dGVybiA6Oj0gJzAwMDAwMDAxJ0IKLWFsZXJ0aW5nTGV2ZWwtMiAgIEFsZXJ0aW5nUGF0dGVybiA6Oj0gJzAwMDAwMDEwJ0IKLQktLSBhbGwgb3RoZXIgdmFsdWVzIG9mIEFsZXJ0aW5nIGxldmVsIGFyZSByZXNlcnZlZAotCS0tIEFsZXJ0aW5nIExldmVscyBhcmUgZGVmaW5lZCBpbiBHU00gMDIuMDcKLQkKLWFsZXJ0aW5nQ2F0ZWdvcnktMSAgIEFsZXJ0aW5nUGF0dGVybiA6Oj0gJzAwMDAwMTAwJ0IKLWFsZXJ0aW5nQ2F0ZWdvcnktMiAgIEFsZXJ0aW5nUGF0dGVybiA6Oj0gJzAwMDAwMTAxJ0IKLWFsZXJ0aW5nQ2F0ZWdvcnktMyAgIEFsZXJ0aW5nUGF0dGVybiA6Oj0gJzAwMDAwMTEwJ0IKLWFsZXJ0aW5nQ2F0ZWdvcnktNCAgIEFsZXJ0aW5nUGF0dGVybiA6Oj0gJzAwMDAwMTExJ0IKLWFsZXJ0aW5nQ2F0ZWdvcnktNSAgIEFsZXJ0aW5nUGF0dGVybiA6Oj0gJzAwMDAxMDAwJ0IKLQktLSBhbGwgb3RoZXIgdmFsdWVzIG9mIEFsZXJ0aW5nIENhdGVnb3J5IGFyZSByZXNlcnZlZAotCS0tIEFsZXJ0aW5nIGNhdGVnb3JpZXMgYXJlIGRlZmluZWQgaW4gR1NNIDAyLjA3Ci0KLS0tIGRhdGEgdHlwZXMgZm9yIG51bWJlcmluZyBhbmQgaWRlbnRpZmljYXRpb24KLQotSU1TSSA6Oj0gVEJDRC1TVFJJTkcgKFNJWkUgKDMuLjgpKQotCS0tIGRpZ2l0cyBvZiBNQ0MsIE1OQywgTVNJTiBhcmUgY29uY2F0ZW5hdGVkIGluIHRoaXMgb3JkZXIuCi0KLUlkZW50aXR5IDo6PSBDSE9JQ0UgewotCWltc2kJCQlJTVNJLAotCWltc2ktV2l0aExNU0kJSU1TSS1XaXRoTE1TSX0KLQotSU1TSS1XaXRoTE1TSSA6Oj0gU0VRVUVOQ0UgewotCWltc2kJCQlJTVNJLAotCWxtc2kJCQlMTVNJLAotCS0tIGEgc3BlY2lhbCB2YWx1ZSAwMDAwMDAwMCBpbmRpY2F0ZXMgdGhhdCB0aGUgTE1TSSBpcyBub3QgaW4gdXNlCi0JLi4ufQotCi1BU0NJLUNhbGxSZWZlcmVuY2UgOjo9IFRCQ0QtU1RSSU5HIChTSVpFICgxLi44KSkKLQktLSBkaWdpdHMgb2YgVkdDUy9WQlMtYXJlYSxHcm91cC1JRCBhcmUgY29uY2F0ZW5hdGVkIGluIHRoaXMgb3JkZXIgaWYgdGhlcmUgaXMgYQotCS0tIFZHQ1MvVkJTLWFyZWEuCi0KLVRNU0kgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uNCkpCi0KLVN1YnNjcmliZXJJZCA6Oj0gQ0hPSUNFIHsKLQlpbXNpCQkJWzBdIElNU0ksCi0JdG1zaQkJCVsxXSBUTVNJfQotCi1JTUVJIDo6PSBUQkNELVNUUklORyAoU0laRSAoOCkpCi0JLS0JUmVmZXJzIHRvIEludGVybmF0aW9uYWwgTW9iaWxlIFN0YXRpb24gRXF1aXBtZW50IElkZW50aXR5Ci0JLS0JYW5kIFNvZnR3YXJlIFZlcnNpb24gTnVtYmVyIChTVk4pIGRlZmluZWQgaW4gVFMgM0dQUCBUUyAyMy4wMDMgWzE3XS4KLQktLQlJZiB0aGUgU1ZOIGlzIG5vdCBwcmVzZW50IHRoZSBsYXN0IG9jdGV0IHNoYWxsIGNvbnRhaW4gdGhlCi0JLS0JZGlnaXQgMCBhbmQgYSBmaWxsZXIuCi0JLS0JSWYgcHJlc2VudCB0aGUgU1ZOIHNoYWxsIGJlIGluY2x1ZGVkIGluIHRoZSBsYXN0IG9jdGV0LgotCi1ITFItSWQgOjo9IElNU0kKLQktLSBsZWFkaW5nIGRpZ2l0cyBvZiBJTVNJLCBpLmUuIChNQ0MsIE1OQywgbGVhZGluZyBkaWdpdHMgb2YKLQktLSBNU0lOKSBmb3JtaW5nIEhMUiBJZCBkZWZpbmVkIGluIFRTIDNHUFAgVFMgMjMuMDAzIFsxN10uCi0KLUhMUi1MaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkhMUi1JZCkgT0YKLQkJCQlITFItSWQKLQotbWF4TnVtT2ZITFItSWQgIElOVEVHRVIgOjo9IDUwCi0KLUxNU0kgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoNCkpCi0KLUdsb2JhbENlbGxJZCA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg1Li43KSkKLQktLSBSZWZlcnMgdG8gQ2VsbCBHbG9iYWwgSWRlbnRpZmljYXRpb24gZGVmaW5lZCBpbiBUUyAzR1BQIFRTIDIzLjAwMyBbMTddLgotCS0tIFRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgotCS0tIG9jdGV0IDEgYml0cyA0MzIxCU1vYmlsZSBDb3VudHJ5IENvZGUgMXN0IGRpZ2l0Ci0JLS0gICAgICAgICBiaXRzIDg3NjUJTW9iaWxlIENvdW50cnkgQ29kZSAybmQgZGlnaXQKLQktLSBvY3RldCAyIGJpdHMgNDMyMQlNb2JpbGUgQ291bnRyeSBDb2RlIDNyZCBkaWdpdAotCS0tICAgICAgICAgYml0cyA4NzY1CU1vYmlsZSBOZXR3b3JrIENvZGUgM3JkIGRpZ2l0Ci0JLS0JCQlvciBmaWxsZXIgKDExMTEpIGZvciAyIGRpZ2l0IE1OQ3MKLQktLSBvY3RldCAzIGJpdHMgNDMyMQlNb2JpbGUgTmV0d29yayBDb2RlIDFzdCBkaWdpdAotCS0tICAgICAgICAgYml0cyA4NzY1CU1vYmlsZSBOZXR3b3JrIENvZGUgMm5kIGRpZ2l0Ci0JLS0gb2N0ZXRzIDQgYW5kIDUJTG9jYXRpb24gQXJlYSBDb2RlIGFjY29yZGluZyB0byBUUyAzR1BQIFRTIDI0LjAwOCBbMzVdCi0JLS0gb2N0ZXRzIDYgYW5kIDcJQ2VsbCBJZGVudGl0eSAoQ0kpIGFjY29yZGluZyB0byBUUyAzR1BQIFRTIDI0LjAwOCBbMzVdCi0KLU5ldHdvcmtSZXNvdXJjZSA6Oj0gRU5VTUVSQVRFRCB7Ci0JcGxtbiAgKDApLAotCWhsciAgKDEpLAotCXZsciAgKDIpLAotCXB2bHIgICgzKSwKLQljb250cm9sbGluZ01TQyAgKDQpLAotCXZtc2MgICg1KSwKLQllaXIgICg2KSwKLQlyc3MgICg3KX0KLQotQWRkaXRpb25hbE5ldHdvcmtSZXNvdXJjZSA6Oj0gRU5VTUVSQVRFRCB7Ci0Jc2dzbiAoMCksCi0JZ2dzbiAoMSksCi0JZ21sYyAoMiksCi0JZ3NtU0NGICgzKSwKLQlucGxyICg0KSwKLQlhdWMgKDUpLAotCS4uLiAsCi0JdWUgKDYpLAotCW1tZSAoNyl9Ci0JLS0gaWYgdW5rbm93biB2YWx1ZSBpcyByZWNlaXZlZCBpbiBBZGRpdGlvbmFsTmV0d29ya1Jlc291cmNlCi0JLS0gaXQgc2hhbGwgYmUgaWdub3JlZC4KLQotCi1OQUVBLVByZWZlcnJlZENJIDo6PSBTRVFVRU5DRSB7Ci0JbmFlYS1QcmVmZXJyZWRDSUMJWzBdIE5BRUEtQ0lDLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotTkFFQS1DSUMgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMykpCi0JLS0gVGhlIGludGVybmFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGJ5IHRoZSBDYXJyaWVyIElkZW50aWZpY2F0aW9uCi0JLS0gcGFyYW1ldGVyIGluIEFOU0kgVDEuMTEzLjMuIENhcnJpZXIgY29kZXMgYmV0d2VlbiAiMDAwIiBhbmQgIjk5OSIgbWF5Ci0JLS0gYmUgZW5jb2RlZCBhcyAzIGRpZ2l0cyB1c2luZyAiMDAwIiB0byAiOTk5IiBvciBhcyA0IGRpZ2l0cyB1c2luZyAKLQktLSAiMDAwMCIgdG8gIjA5OTkiLiBDYXJyaWVyIGNvZGVzIGJldHdlZW4gIjEwMDAiIGFuZCAiOTk5OSIgYXJlIGVuY29kZWQKLQktLSB1c2luZyA0IGRpZ2l0cy4KLQotU3Vic2NyaWJlcklkZW50aXR5IDo6PSBDSE9JQ0UgewotCWltc2kJCQlbMF0gSU1TSSwKLQltc2lzZG4JCVsxXSBJU0ROLUFkZHJlc3NTdHJpbmcKLQl9Ci0KLUxDU0NsaWVudEV4dGVybmFsSUQgOjo9IFNFUVVFTkNFIHsKLQlleHRlcm5hbEFkZHJlc3MJWzBdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzFdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4gfQotCi1MQ1NDbGllbnRJbnRlcm5hbElEIDo6PSBFTlVNRVJBVEVEIHsKLQlicm9hZGNhc3RTZXJ2aWNlCSgwKSwKLQlvLWFuZE0tSFBMTU4JKDEpLAotCW8tYW5kTS1WUExNTgkoMiksCi0JYW5vbnltb3VzTG9jYXRpb24JKDMpLAotCXRhcmdldE1Tc3Vic2NyaWJlZFNlcnZpY2UJKDQpLAotCS4uLiB9Ci0tLSBmb3IgYSBDQU1FTCBwaGFzZSAzIFBMTU4gb3BlcmF0b3IgY2xpZW50LCB0aGUgdmFsdWUgdGFyZ2V0TVNzdWJzY3JpYmVkU2VydmljZSBzaGFsbCBiZSB1c2VkCi0KLUxDU1NlcnZpY2VUeXBlSUQgOjo9IElOVEVHRVIgKDAuLjEyNykKLQktLSB0aGUgaW50ZWdlciB2YWx1ZXMgMC02MyBhcmUgcmVzZXJ2ZWQgZm9yIFN0YW5kYXJkIExDUyBzZXJ2aWNlIHR5cGVzCi0JLS0gdGhlIGludGVnZXIgdmFsdWVzIDY0LTEyNyBhcmUgcmVzZXJ2ZWQgZm9yIE5vbiBTdGFuZGFyZCBMQ1Mgc2VydmljZSB0eXBlcwotCi0tLSBTdGFuZGFyZCBMQ1MgU2VydmljZSBUeXBlcwotZW1lcmdlbmN5U2VydmljZXMJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDAKLWVtZXJnZW5jeUFsZXJ0U2VydmljZXMJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDEKLXBlcnNvblRyYWNraW5nCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gMgotZmxlZXRNYW5hZ2VtZW50CQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAzCi1hc3NldE1hbmFnZW1lbnQJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDQKLXRyYWZmaWNDb25nZXN0aW9uUmVwb3J0aW5nCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSA1Ci1yb2Fkc2lkZUFzc2lzdGFuY2UJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDYKLXJvdXRpbmdUb05lYXJlc3RDb21tZXJjaWFsRW50ZXJwcmlzZQkJTENTU2VydmljZVR5cGVJRCA6Oj0gNwotbmF2aWdhdGlvbgkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDgKLQktLXRoaXMgc2VydmljZSB0eXBlIGlzIHJlc2VydmVkIGZvciB1c2UgaW4gcHJldmlvdXMgcmVsZWFzZXMKLWNpdHlTaWdodHNlZWluZwkJTENTU2VydmljZVR5cGVJRCA6Oj0gOQotbG9jYWxpemVkQWR2ZXJ0aXNpbmcJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDEwCi1tb2JpbGVZZWxsb3dQYWdlcwkJTENTU2VydmljZVR5cGVJRCA6Oj0gMTEgCi10cmFmZmljQW5kUHVibGljVHJhbnNwb3J0YXRpb25JbmZvCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxMgotd2VhdGhlcgkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxMwotYXNzZXRBbmRTZXJ2aWNlRmluZGluZwkJTENTU2VydmljZVR5cGVJRCA6Oj0gMTQKLWdhbWluZwkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxNQotZmluZFlvdXJGcmllbmQJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxNgotZGF0aW5nCQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDE3Ci1jaGF0dGluZwkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxOAotcm91dGVGaW5kaW5nCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gMTkKLXdoZXJlQW1JCQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDIwCi0KLS0tIFRoZSB2YWx1ZXMgb2YgTENTU2VydmljZVR5cGVJRCBhcmUgZGVmaW5lZCBhY2NvcmRpbmcgdG8gM0dQUCBUUyAyMi4wNzEuCi0KLS0tIE5vbiBTdGFuZGFyZCBMQ1MgU2VydmljZSBUeXBlcwotc2VydjY0CQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDY0Ci1zZXJ2NjUJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gNjUKLXNlcnY2NgkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSA2Ngotc2VydjY3CQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDY3Ci1zZXJ2NjgJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gNjgKLXNlcnY2OQkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSA2OQotc2VydjcwCQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDcwCi1zZXJ2NzEJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gNzEKLXNlcnY3MgkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSA3Mgotc2VydjczCQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDczCi1zZXJ2NzQJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gNzQKLXNlcnY3NQkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSA3NQotc2Vydjc2CQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDc2Ci1zZXJ2NzcJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gNzcKLXNlcnY3OAkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSA3OAotc2Vydjc5CQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDc5Ci1zZXJ2ODAJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gODAKLXNlcnY4MQkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSA4MQotc2VydjgyCQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDgyCi1zZXJ2ODMJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gODMKLXNlcnY4NAkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSA4NAotc2Vydjg1CQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDg1Ci1zZXJ2ODYJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gODYKLXNlcnY4NwkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSA4Nwotc2Vydjg4CQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDg4Ci1zZXJ2ODkJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gODkKLXNlcnY5MAkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSA5MAotc2VydjkxCQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDkxCi1zZXJ2OTIJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gOTIKLXNlcnY5MwkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSA5Mwotc2Vydjk0CQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDk0Ci1zZXJ2OTUJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gOTUKLXNlcnY5NgkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSA5Ngotc2Vydjk3CQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDk3Ci1zZXJ2OTgJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gOTgKLXNlcnY5OQkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSA5OQotc2VydjEwMAkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxMDAKLXNlcnYxMDEJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gMTAxCi1zZXJ2MTAyCQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDEwMgotc2VydjEwMwkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxMDMKLXNlcnYxMDQJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gMTA0Ci1zZXJ2MTA1CQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDEwNQotc2VydjEwNgkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxMDYKLXNlcnYxMDcJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gMTA3Ci1zZXJ2MTA4CQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDEwOAotc2VydjEwOQkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxMDkKLXNlcnYxMTAJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gMTEwCi1zZXJ2MTExCQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDExMQotc2VydjExMgkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxMTIKLXNlcnYxMTMJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gMTEzCi1zZXJ2MTE0CQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDExNAotc2VydjExNQkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxMTUKLXNlcnYxMTYJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gMTE2Ci1zZXJ2MTE3CQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDExNwotc2VydjExOAkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxMTgKLXNlcnYxMTkJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gMTE5Ci1zZXJ2MTIwCQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDEyMAotc2VydjEyMQkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxMjEKLXNlcnYxMjIJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gMTIyCi1zZXJ2MTIzCQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDEyMwotc2VydjEyNAkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxMjQKLXNlcnYxMjUJCQkJTENTU2VydmljZVR5cGVJRCA6Oj0gMTI1Ci1zZXJ2MTI2CQkJCUxDU1NlcnZpY2VUeXBlSUQgOjo9IDEyNgotc2VydjEyNwkJCQlMQ1NTZXJ2aWNlVHlwZUlEIDo6PSAxMjcKLQotUExNTi1JZCA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgzKSkKLQktLSBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgYXMgZm9sbG93czoKLQktLSBvY3RldCAxIGJpdHMgNDMyMQlNb2JpbGUgQ291bnRyeSBDb2RlIDFzdCBkaWdpdAotCS0tICAgICAgICAgYml0cyA4NzY1CU1vYmlsZSBDb3VudHJ5IENvZGUgMm5kIGRpZ2l0Ci0JLS0gb2N0ZXQgMiBiaXRzIDQzMjEJTW9iaWxlIENvdW50cnkgQ29kZSAzcmQgZGlnaXQKLQktLSAgICAgICAgIGJpdHMgODc2NQlNb2JpbGUgTmV0d29yayBDb2RlIDNyZCBkaWdpdAotCS0tCQkJb3IgZmlsbGVyICgxMTExKSBmb3IgMiBkaWdpdCBNTkNzCi0JLS0gb2N0ZXQgMyBiaXRzIDQzMjEJTW9iaWxlIE5ldHdvcmsgQ29kZSAxc3QgZGlnaXQKLQktLSAgICAgICAgIGJpdHMgODc2NQlNb2JpbGUgTmV0d29yayBDb2RlIDJuZCBkaWdpdAotCi0tLSBkYXRhIHR5cGVzIGZvciBDQU1FTAotCi1DZWxsR2xvYmFsSWRPclNlcnZpY2VBcmVhSWRPckxBSSA6Oj0gQ0hPSUNFIHsKLQljZWxsR2xvYmFsSWRPclNlcnZpY2VBcmVhSWRGaXhlZExlbmd0aAlbMF0gQ2VsbEdsb2JhbElkT3JTZXJ2aWNlQXJlYUlkRml4ZWRMZW5ndGgsCi0JbGFpRml4ZWRMZW5ndGgJWzFdIExBSUZpeGVkTGVuZ3RofQotCi1DZWxsR2xvYmFsSWRPclNlcnZpY2VBcmVhSWRGaXhlZExlbmd0aCA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg3KSkKLQktLSBSZWZlcnMgdG8gQ2VsbCBHbG9iYWwgSWRlbnRpZmljYXRpb24gb3IgU2VydmljZSBBcmUgSWRlbnRpZmljYXRpb24KLQktLSBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDAzLgotCS0tIFRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgotCS0tIG9jdGV0IDEgYml0cyA0MzIxCU1vYmlsZSBDb3VudHJ5IENvZGUgMXN0IGRpZ2l0Ci0JLS0gICAgICAgICBiaXRzIDg3NjUJTW9iaWxlIENvdW50cnkgQ29kZSAybmQgZGlnaXQKLQktLSBvY3RldCAyIGJpdHMgNDMyMQlNb2JpbGUgQ291bnRyeSBDb2RlIDNyZCBkaWdpdAotCS0tICAgICAgICAgYml0cyA4NzY1CU1vYmlsZSBOZXR3b3JrIENvZGUgM3JkIGRpZ2l0Ci0JLS0JCQlvciBmaWxsZXIgKDExMTEpIGZvciAyIGRpZ2l0IE1OQ3MKLQktLSBvY3RldCAzIGJpdHMgNDMyMQlNb2JpbGUgTmV0d29yayBDb2RlIDFzdCBkaWdpdAotCS0tICAgICAgICAgYml0cyA4NzY1CU1vYmlsZSBOZXR3b3JrIENvZGUgMm5kIGRpZ2l0Ci0JLS0gb2N0ZXRzIDQgYW5kIDUJTG9jYXRpb24gQXJlYSBDb2RlIGFjY29yZGluZyB0byAzR1BQIFRTIDI0LjAwOAotCS0tIG9jdGV0cyA2IGFuZCA3CUNlbGwgSWRlbnRpdHkgKENJKSB2YWx1ZSBvciAKLQktLSAJCQlTZXJ2aWNlIEFyZWEgQ29kZSAoU0FDKSB2YWx1ZSAKLQktLQkJCWFjY29yZGluZyB0byAzR1BQIFRTIDIzLjAwMwotCi1MQUlGaXhlZExlbmd0aCA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg1KSkKLQktLSBSZWZlcnMgdG8gTG9jYXRpb24gQXJlYSBJZGVudGlmaWNhdGlvbiBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDAzIFsxN10uCi0JLS0gVGhlIGludGVybmFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6Ci0JLS0gb2N0ZXQgMSBiaXRzIDQzMjEJTW9iaWxlIENvdW50cnkgQ29kZSAxc3QgZGlnaXQKLQktLSAgICAgICAgIGJpdHMgODc2NQlNb2JpbGUgQ291bnRyeSBDb2RlIDJuZCBkaWdpdAotCS0tIG9jdGV0IDIgYml0cyA0MzIxCU1vYmlsZSBDb3VudHJ5IENvZGUgM3JkIGRpZ2l0Ci0JLS0gICAgICAgICBiaXRzIDg3NjUJTW9iaWxlIE5ldHdvcmsgQ29kZSAzcmQgZGlnaXQKLQktLQkJCW9yIGZpbGxlciAoMTExMSkgZm9yIDIgZGlnaXQgTU5DcwotCS0tIG9jdGV0IDMgYml0cyA0MzIxCU1vYmlsZSBOZXR3b3JrIENvZGUgMXN0IGRpZ2l0Ci0JLS0gICAgICAgICBiaXRzIDg3NjUJTW9iaWxlIE5ldHdvcmsgQ29kZSAybmQgZGlnaXQKLQktLSBvY3RldHMgNCBhbmQgNQlMb2NhdGlvbiBBcmVhIENvZGUgYWNjb3JkaW5nIHRvIDNHUFAgVFMgMjQuMDA4IFszNV0KLQotLS0gZGF0YSB0eXBlcyBmb3Igc3Vic2NyaWJlciBtYW5hZ2VtZW50Ci0KLUJhc2ljU2VydmljZUNvZGUgOjo9IENIT0lDRSB7Ci0JYmVhcmVyU2VydmljZQlbMl0gQmVhcmVyU2VydmljZUNvZGUsCi0JdGVsZXNlcnZpY2UJWzNdIFRlbGVzZXJ2aWNlQ29kZX0KLQotRXh0LUJhc2ljU2VydmljZUNvZGUgOjo9IENIT0lDRSB7Ci0JZXh0LUJlYXJlclNlcnZpY2UJWzJdIEV4dC1CZWFyZXJTZXJ2aWNlQ29kZSwKLQlleHQtVGVsZXNlcnZpY2UJWzNdIEV4dC1UZWxlc2VydmljZUNvZGV9Ci0KLUVNTFBQLUluZm8gOjo9IFNFUVVFTkNFIHsKLQltYXhpbXVtZW50aXRsZWRQcmlvcml0eQlFTUxQUC1Qcmlvcml0eSwKLQlkZWZhdWx0UHJpb3JpdHkJRU1MUFAtUHJpb3JpdHksCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLUVNTFBQLVByaW9yaXR5IDo6PSBJTlRFR0VSICgwLi4xNSkKLQktLSBUaGUgbWFwcGluZyBmcm9tIHRoZSB2YWx1ZXMgQSxCLDAsMSwyLDMsNCB0byB0aGUgaW50ZWdlci12YWx1ZSBpcwotCS0tIHNwZWNpZmllZCBhcyBmb2xsb3dzIHdoZXJlIEEgaXMgdGhlIGhpZ2hlc3QgYW5kIDQgaXMgdGhlIGxvd2VzdAotCS0tIHByaW9yaXR5IGxldmVsCi0JLS0gdGhlIGludGVnZXIgdmFsdWVzIDctMTUgYXJlIHNwYXJlIGFuZCBzaGFsbCBiZSBtYXBwZWQgdG8gdmFsdWUgNAotCi1wcmlvcml0eUxldmVsQQkJRU1MUFAtUHJpb3JpdHkgOjo9IDYKLXByaW9yaXR5TGV2ZWxCCQlFTUxQUC1Qcmlvcml0eSA6Oj0gNQotcHJpb3JpdHlMZXZlbDAJCUVNTFBQLVByaW9yaXR5IDo6PSAwCi1wcmlvcml0eUxldmVsMQkJRU1MUFAtUHJpb3JpdHkgOjo9IDEKLXByaW9yaXR5TGV2ZWwyCQlFTUxQUC1Qcmlvcml0eSA6Oj0gMgotcHJpb3JpdHlMZXZlbDMJCUVNTFBQLVByaW9yaXR5IDo6PSAzCi1wcmlvcml0eUxldmVsNAkJRU1MUFAtUHJpb3JpdHkgOjo9IDQKLQotTUMtU1MtSW5mbyA6Oj0gU0VRVUVOQ0UgewotCXNzLUNvZGUJCVswXSBTUy1Db2RlLAotCXNzLVN0YXR1cwkJWzFdIEV4dC1TUy1TdGF0dXMsCi0JbmJyU0IJCVsyXSBNYXhNQy1CZWFyZXJzLAotCW5iclVzZXIJCVszXSBNQy1CZWFyZXJzLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbNF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotTWF4TUMtQmVhcmVycyA6Oj0gSU5URUdFUiAoMi4ubWF4TnVtT2ZNQy1CZWFyZXJzKQotCi1NQy1CZWFyZXJzIDo6PSBJTlRFR0VSICgxLi5tYXhOdW1PZk1DLUJlYXJlcnMpCi0KLW1heE51bU9mTUMtQmVhcmVycyAgSU5URUdFUiA6Oj0gNwotCi1FeHQtU1MtU3RhdHVzIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjUpKQotCi0JLS0gT0NURVQgMToKLQktLQotCS0tIGJpdHMgODc2NTogMDAwMCAodW51c2VkKQotCS0tIGJpdHMgNDMyMTogVXNlZCB0byBjb252ZXkgdGhlICJQIGJpdCIsIlIgYml0IiwiQSBiaXQiIGFuZCAiUSBiaXQiLAotCS0tCQkgICAgcmVwcmVzZW50aW5nIHN1cHBsZW1lbnRhcnkgc2VydmljZSBzdGF0ZSBpbmZvcm1hdGlvbgotCS0tCQkgICAgYXMgZGVmaW5lZCBpbiBUUyAzR1BQIFRTIDIzLjAxMSBbMjJdCi0KLQktLSBiaXQgNDogIlEgYml0IgotCi0JLS0gYml0IDM6ICJQIGJpdCIKLQotCS0tIGJpdCAyOiAiUiBiaXQiCi0KLQktLSBiaXQgMTogIkEgYml0IgotCi0JLS0gT0NURVRTIDItNTogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFRoZXkgc2hhbGwgYmUgZGlzY2FyZGVkIGlmCi0JLS0gcmVjZWl2ZWQgYW5kIG5vdCB1bmRlcnN0b29kLgotCi0KLQktLSBkYXRhIHR5cGVzIGZvciBnZW9ncmFwaGljIGxvY2F0aW9uCi0KLUFnZU9mTG9jYXRpb25JbmZvcm1hdGlvbiA6Oj0gSU5URUdFUiAoMC4uMzI3NjcpCi0tLSB0aGUgdmFsdWUgcmVwcmVzZW50cyB0aGUgZWxhcHNlZCB0aW1lIGluIG1pbnV0ZXMgc2luY2UgdGhlIGxhc3QKLS0tIG5ldHdvcmsgY29udGFjdCBvZiB0aGUgbW9iaWxlIHN0YXRpb24gKGkuZS4gdGhlIGFjdHVhbGl0eSBvZiB0aGUKLS0tIGxvY2F0aW9uIGluZm9ybWF0aW9uKS4KLS0tIHZhbHVlICIwIiBpbmRpY2F0ZXMgdGhhdCB0aGUgTVMgaXMgY3VycmVudGx5IGluIGNvbnRhY3Qgd2l0aCB0aGUKLS0tICAgICAgICAgICBuZXR3b3JrCi0tLSB2YWx1ZSAiMzI3NjciIGluZGljYXRlcyB0aGF0IHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBpcyBhdCBsZWFzdAotLS0gICAgICAgICAgICAgICAzMjc2NyBtaW51dGVzIG9sZAotCi1FTkQKLQpkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtRVItRGF0YVR5cGVzLmFzbiBiL3JybHAtZXBoZW1lcmlzL2FzbjEvTUFQLUVSLURhdGFUeXBlcy5hc24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYjkwZmMuLjAwMDAwMDAKLS0tIGEvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtRVItRGF0YVR5cGVzLmFzbgorKysgL2Rldi9udWxsCkBAIC0xLDQxNSArMCwwIEBACi0tLSAkSWQ6IE1BUC1FUi1EYXRhVHlwZXMuYXNuIDI4MTQ5IDIwMDktMDQtMjUgMTc6NDU6MzRaIGV0eHJhYiAkCi0tLSAzR1BQIFRTIDI5LjAwMiBWOC45LjAgKDIwMDktMDQpIAotLS0gMTcuNy43CUVycm9yIGRhdGEgdHlwZXMKLQotTUFQLUVSLURhdGFUeXBlcyB7Ci0gICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1FUi1EYXRhVHlwZXMgKDE3KSB2ZXJzaW9uMTEgKDExKX0KLQotREVGSU5JVElPTlMKLQotSU1QTElDSVQgVEFHUwotCi06Oj0KLQotQkVHSU4KLQotRVhQT1JUUwotCVJvYW1pbmdOb3RBbGxvd2VkUGFyYW0sCi0JQ2FsbEJhcnJlZFBhcmFtLAotCUNVRy1SZWplY3RQYXJhbSwKLQlTUy1JbmNvbXBhdGliaWxpdHlDYXVzZSwKLQlQVy1SZWdpc3RyYXRpb25GYWlsdXJlQ2F1c2UsCi0JU00tRGVsaXZlcnlGYWlsdXJlQ2F1c2UsCi0JU3lzdGVtRmFpbHVyZVBhcmFtLAotCURhdGFNaXNzaW5nUGFyYW0sCi0JVW5leHBlY3RlZERhdGFQYXJhbSwKLQlGYWNpbGl0eU5vdFN1cFBhcmFtLAotCU9SLU5vdEFsbG93ZWRQYXJhbSwKLQlVbmtub3duU3Vic2NyaWJlclBhcmFtLAotCU51bWJlckNoYW5nZWRQYXJhbSwKLQlVbmlkZW50aWZpZWRTdWJQYXJhbSwKLQlJbGxlZ2FsU3Vic2NyaWJlclBhcmFtLAotCUlsbGVnYWxFcXVpcG1lbnRQYXJhbSwKLQlCZWFyZXJTZXJ2Tm90UHJvdlBhcmFtLAotCVRlbGVzZXJ2Tm90UHJvdlBhcmFtLAotCVRyYWNpbmdCdWZmZXJGdWxsUGFyYW0sCi0JTm9Sb2FtaW5nTmJQYXJhbSwKLQlBYnNlbnRTdWJzY3JpYmVyUGFyYW0sCi0JQnVzeVN1YnNjcmliZXJQYXJhbSwKLQlOb1N1YnNjcmliZXJSZXBseVBhcmFtLAotCUZvcndhcmRpbmdWaW9sYXRpb25QYXJhbSwKLQlGb3J3YXJkaW5nRmFpbGVkUGFyYW0sIAotCUFUSS1Ob3RBbGxvd2VkUGFyYW0sCi0JU3ViQnVzeUZvck1ULVNNUy1QYXJhbSwKLQlNZXNzYWdlV2FpdExpc3RGdWxsUGFyYW0sCi0JQWJzZW50U3Vic2NyaWJlclNNLVBhcmFtLAotCUFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00sCi0JUmVzb3VyY2VMaW1pdGF0aW9uUGFyYW0sCi0JTm9Hcm91cENhbGxOYlBhcmFtLAotCUluY29tcGF0aWJsZVRlcm1pbmFsUGFyYW0sCi0JU2hvcnRUZXJtRGVuaWFsUGFyYW0sCi0JTG9uZ1Rlcm1EZW5pYWxQYXJhbSwKLQlVbmF1dGhvcml6ZWRSZXF1ZXN0aW5nTmV0d29yay1QYXJhbSwKLQlVbmF1dGhvcml6ZWRMQ1NDbGllbnQtUGFyYW0sCi0JUG9zaXRpb25NZXRob2RGYWlsdXJlLVBhcmFtLAotVW5rbm93bk9yVW5yZWFjaGFibGVMQ1NDbGllbnQtUGFyYW0sCi0JTU0tRXZlbnROb3RTdXBwb3J0ZWQtUGFyYW0sCi1BVFNJLU5vdEFsbG93ZWRQYXJhbSwKLUFUTS1Ob3RBbGxvd2VkUGFyYW0sCi1JbGxlZ2FsU1MtT3BlcmF0aW9uUGFyYW0sCi1TUy1Ob3RBdmFpbGFibGVQYXJhbSwKLVNTLVN1YnNjcmlwdGlvblZpb2xhdGlvblBhcmFtLAotSW5mb3JtYXRpb25Ob3RBdmFpbGFibGVQYXJhbSwKLVRhcmdldENlbGxPdXRzaWRlR0NBLVBhcmFtLAotT25nb2luZ0dyb3VwQ2FsbFBhcmFtCi0KLTsKLQotSU1QT1JUUwotCVNTLVN0YXR1cwotRlJPTSBNQVAtU1MtRGF0YVR5cGVzIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLVNTLURhdGFUeXBlcyAoMTQpIHZlcnNpb24xMSAoMTEpfQotCi0JU2lnbmFsSW5mbywKLQlCYXNpY1NlcnZpY2VDb2RlLAotCU5ldHdvcmtSZXNvdXJjZSwKLQlBZGRpdGlvbmFsTmV0d29ya1Jlc291cmNlCi1GUk9NIE1BUC1Db21tb25EYXRhVHlwZXMgewotICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKLSAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtQ29tbW9uRGF0YVR5cGVzICgxOCkgdmVyc2lvbjExICgxMSl9Ci0KLQotCVNTLUNvZGUKLUZST00gTUFQLVNTLUNvZGUgewotICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKLSAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtU1MtQ29kZSAoMTUpIHZlcnNpb24xMSAoMTEpfQotCi0JRXh0ZW5zaW9uQ29udGFpbmVyCi1GUk9NIE1BUC1FeHRlbnNpb25EYXRhVHlwZXMgewotICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKLSAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtRXh0ZW5zaW9uRGF0YVR5cGVzICgyMSkgdmVyc2lvbjExICgxMSl9Ci07Ci0KLVJvYW1pbmdOb3RBbGxvd2VkUGFyYW0gOjo9IFNFUVVFTkNFIHsKLQlyb2FtaW5nTm90QWxsb3dlZENhdXNlCVJvYW1pbmdOb3RBbGxvd2VkQ2F1c2UsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4sCi0JYWRkaXRpb25hbFJvYW1pbmdOb3RBbGxvd2VkQ2F1c2UJWzBdIEFkZGl0aW9uYWxSb2FtaW5nTm90QWxsb3dlZENhdXNlIE9QVElPTkFMIH0KLQotLS0JaWYgdGhlIGFkZGl0aW9uYWxSb2FtaW5nTm90YWxsb3dlZENhdXNlIGlzIHJlY2VpdmVkIGJ5IHRoZSBNU0MvVkxSIG9yIFNHU04gdGhlbiB0aGUgCi0tLQlyb2FtaW5nTm90QWxsb3dlZENhdXNlIHNoYWxsIGJlIGRpc2NhcmRlZC4KLQotQWRkaXRpb25hbFJvYW1pbmdOb3RBbGxvd2VkQ2F1c2UgOjo9IEVOVU1FUkFURUQgewotCXN1cHBvcnRlZFJBVC1UeXBlc05vdEFsbG93ZWQgKDApLAotCS4uLn0KLQotUm9hbWluZ05vdEFsbG93ZWRDYXVzZSA6Oj0gRU5VTUVSQVRFRCB7Ci0JcGxtblJvYW1pbmdOb3RBbGxvd2VkICAoMCksCi0Jb3BlcmF0b3JEZXRlcm1pbmVkQmFycmluZyAgKDMpfQotCi1DYWxsQmFycmVkUGFyYW0gOjo9IENIT0lDRSB7Ci0JY2FsbEJhcnJpbmdDYXVzZQlDYWxsQmFycmluZ0NhdXNlLAotCS0tIGNhbGwgQmFycmluZ0NhdXNlIG11c3Qgbm90IGJlIHVzZWQgaW4gdmVyc2lvbiAzIGFuZCBoaWdoZXIKLQlleHRlbnNpYmxlQ2FsbEJhcnJlZFBhcmFtCUV4dGVuc2libGVDYWxsQmFycmVkUGFyYW0KLQktLSBleHRlbnNpYmxlQ2FsbEJhcnJlZFBhcmFtIG11c3Qgbm90IGJlIHVzZWQgaW4gdmVyc2lvbiA8MwotCX0KLQotQ2FsbEJhcnJpbmdDYXVzZSA6Oj0gRU5VTUVSQVRFRCB7Ci0JYmFycmluZ1NlcnZpY2VBY3RpdmUgICgwKSwKLQlvcGVyYXRvckJhcnJpbmcgICgxKX0KLQotRXh0ZW5zaWJsZUNhbGxCYXJyZWRQYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWNhbGxCYXJyaW5nQ2F1c2UJQ2FsbEJhcnJpbmdDYXVzZQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiAsCi0JdW5hdXRob3Jpc2VkTWVzc2FnZU9yaWdpbmF0b3IJWzFdIE5VTEwJCU9QVElPTkFMIH0KLQotQ1VHLVJlamVjdFBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JY3VnLVJlamVjdENhdXNlCUNVRy1SZWplY3RDYXVzZQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotQ1VHLVJlamVjdENhdXNlIDo6PSBFTlVNRVJBVEVEIHsKLQlpbmNvbWluZ0NhbGxzQmFycmVkV2l0aGluQ1VHICAoMCksCi0Jc3Vic2NyaWJlck5vdE1lbWJlck9mQ1VHICAoMSksCi0JcmVxdWVzdGVkQmFzaWNTZXJ2aWNlVmlvbGF0ZXNDVUctQ29uc3RyYWludHMgICg1KSwKLQljYWxsZWRQYXJ0eVNTLUludGVyYWN0aW9uVmlvbGF0aW9uICAoNyl9Ci0KLVNTLUluY29tcGF0aWJpbGl0eUNhdXNlIDo6PSBTRVFVRU5DRSB7Ci0Jc3MtQ29kZQkJWzFdIFNTLUNvZGUJT1BUSU9OQUwsCi0JYmFzaWNTZXJ2aWNlCUJhc2ljU2VydmljZUNvZGUJT1BUSU9OQUwsCi0Jc3MtU3RhdHVzCQlbNF0gU1MtU3RhdHVzCU9QVElPTkFMLAotCS4uLn0KLQotUFctUmVnaXN0cmF0aW9uRmFpbHVyZUNhdXNlIDo6PSBFTlVNRVJBVEVEIHsKLQl1bmRldGVybWluZWQgICgwKSwKLQlpbnZhbGlkRm9ybWF0ICAoMSksCi0JbmV3UGFzc3dvcmRzTWlzbWF0Y2ggICgyKX0KLQotU00tRW51bWVyYXRlZERlbGl2ZXJ5RmFpbHVyZUNhdXNlIDo6PSBFTlVNRVJBVEVEIHsKLQltZW1vcnlDYXBhY2l0eUV4Y2VlZGVkICAoMCksCi0JZXF1aXBtZW50UHJvdG9jb2xFcnJvciAgKDEpLAotCWVxdWlwbWVudE5vdFNNLUVxdWlwcGVkICAoMiksCi0JdW5rbm93blNlcnZpY2VDZW50cmUgICgzKSwKLQlzYy1Db25nZXN0aW9uICAoNCksCi0JaW52YWxpZFNNRS1BZGRyZXNzICAoNSksCi0Jc3Vic2NyaWJlck5vdFNDLVN1YnNjcmliZXIgICg2KX0KLQotU00tRGVsaXZlcnlGYWlsdXJlQ2F1c2UgOjo9IFNFUVVFTkNFIHsKLQlzbS1FbnVtZXJhdGVkRGVsaXZlcnlGYWlsdXJlQ2F1c2UJU00tRW51bWVyYXRlZERlbGl2ZXJ5RmFpbHVyZUNhdXNlLAotCWRpYWdub3N0aWNJbmZvCVNpZ25hbEluZm8JT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLUFic2VudFN1YnNjcmliZXJTTS1QYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00JQWJzZW50U3Vic2NyaWJlckRpYWdub3N0aWNTTQlPUFRJT05BTCwKLQktLSBBYnNlbnRTdWJzY3JpYmVyRGlhZ25vc3RpY1NNIGNhbiBiZSBlaXRoZXIgZm9yIG5vbi1HUFJTIAotCS0tIG9yIGZvciBHUFJTCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4sCi0JYWRkaXRpb25hbEFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00gIAlbMF0gCUFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00JT1BUSU9OQUwgfQotCS0tIGlmIHJlY2VpdmVkLCBhZGRpdGlvbmFsQWJzZW50U3Vic2NyaWJlckRpYWdub3N0aWNTTSAKLQktLSBpcyBmb3IgR1BSUyBhbmQgYWJzZW50U3Vic2NyaWJlckRpYWdub3N0aWNTTSBpcyAKLQktLSBmb3Igbm9uLUdQUlMKLQotQWJzZW50U3Vic2NyaWJlckRpYWdub3N0aWNTTSA6Oj0gSU5URUdFUiAoMC4uMjU1KQotCS0tIEFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00gdmFsdWVzIGFyZSBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDQwCi0KLVN5c3RlbUZhaWx1cmVQYXJhbSA6Oj0gQ0hPSUNFIHsKLQluZXR3b3JrUmVzb3VyY2UJTmV0d29ya1Jlc291cmNlLAotCS0tIG5ldHdvcmtSZXNvdXJjZSBtdXN0IG5vdCBiZSB1c2VkIGluIHZlcnNpb24gMwotCWV4dGVuc2libGVTeXN0ZW1GYWlsdXJlUGFyYW0JRXh0ZW5zaWJsZVN5c3RlbUZhaWx1cmVQYXJhbQotCS0tIGV4dGVuc2libGVTeXN0ZW1GYWlsdXJlUGFyYW0gbXVzdCBub3QgYmUgdXNlZCBpbiB2ZXJzaW9uIDwzCi0JfQotCi1FeHRlbnNpYmxlU3lzdGVtRmFpbHVyZVBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JbmV0d29ya1Jlc291cmNlCU5ldHdvcmtSZXNvdXJjZQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQlhZGRpdGlvbmFsTmV0d29ya1Jlc291cmNlCVswXSBBZGRpdGlvbmFsTmV0d29ya1Jlc291cmNlCU9QVElPTkFMLAotCWZhaWx1cmVDYXVzZVBhcmFtCVsxXSBGYWlsdXJlQ2F1c2VQYXJhbQlPUFRJT05BTCB9Ci0KLUZhaWx1cmVDYXVzZVBhcmFtIDo6PSBFTlVNRVJBVEVEIHsKLQlsaW1pdFJlYWNoZWRPbk51bWJlck9mQ29uY3VycmVudExvY2F0aW9uUmVxdWVzdHMgKDApLAotCS4uLiB9Ci0JLS0gaWYgdW5rbm93biB2YWx1ZSBpcyByZWNlaXZlZCBpbiBGYWlsdXJlQ2F1c2VQYXJhbSBpdCBzaGFsbCBiZSBpZ25vcmVkCi0KLQotRGF0YU1pc3NpbmdQYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1VbmV4cGVjdGVkRGF0YVBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLUZhY2lsaXR5Tm90U3VwUGFyYW0gOjo9IFNFUVVFTkNFIHsKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQlzaGFwZU9mTG9jYXRpb25Fc3RpbWF0ZU5vdFN1cHBvcnRlZCBbMF0JTlVMTAkJT1BUSU9OQUwsCi0JbmVlZGVkTGNzQ2FwYWJpbGl0eU5vdFN1cHBvcnRlZEluU2VydmluZ05vZGUgWzFdIE5VTEwJT1BUSU9OQUwgfQotCi1PUi1Ob3RBbGxvd2VkUGFyYW0gOjo9IFNFUVVFTkNFIHsKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotVW5rbm93blN1YnNjcmliZXJQYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCXVua25vd25TdWJzY3JpYmVyRGlhZ25vc3RpYwlVbmtub3duU3Vic2NyaWJlckRpYWdub3N0aWMJT1BUSU9OQUx9Ci0KLVVua25vd25TdWJzY3JpYmVyRGlhZ25vc3RpYyA6Oj0gRU5VTUVSQVRFRCB7Ci0JaW1zaVVua25vd24gICgwKSwKLQlncHJzLWVwcy1TdWJzY3JpcHRpb25Vbmtub3duICAoMSksCi0JLi4uLAotCW5wZGJNaXNtYXRjaCAgKDIpfQotCS0tIGlmIHVua25vd24gdmFsdWVzIGFyZSByZWNlaXZlZCBpbiAJCi0JLS0gVW5rbm93blN1YnNjcmliZXJEaWFnbm9zdGljIHRoZXkgc2hhbGwgYmUgZGlzY2FyZGVkCi0KLU51bWJlckNoYW5nZWRQYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1VbmlkZW50aWZpZWRTdWJQYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1JbGxlZ2FsU3Vic2NyaWJlclBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLUlsbGVnYWxFcXVpcG1lbnRQYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1CZWFyZXJTZXJ2Tm90UHJvdlBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLVRlbGVzZXJ2Tm90UHJvdlBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLVRyYWNpbmdCdWZmZXJGdWxsUGFyYW0gOjo9IFNFUVVFTkNFIHsKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotTm9Sb2FtaW5nTmJQYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1BYnNlbnRTdWJzY3JpYmVyUGFyYW0gOjo9IFNFUVVFTkNFIHsKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQlhYnNlbnRTdWJzY3JpYmVyUmVhc29uCVswXSBBYnNlbnRTdWJzY3JpYmVyUmVhc29uCU9QVElPTkFMfQotCi1BYnNlbnRTdWJzY3JpYmVyUmVhc29uIDo6PSBFTlVNRVJBVEVEIHsKLQlpbXNpRGV0YWNoICgwKSwKLQlyZXN0cmljdGVkQXJlYSAoMSksCi0Jbm9QYWdlUmVzcG9uc2UgKDIpLAotCS4uLiAsCi0JcHVyZ2VkTVMgKDMpfQotLS0gZXhjZXB0aW9uIGhhbmRsaW5nOiBhdCByZWNlcHRpb24gb2Ygb3RoZXIgdmFsdWVzIHRoYW4gdGhlIG9uZXMgbGlzdGVkIHRoZSAKLS0tIEFic2VudFN1YnNjcmliZXJSZWFzb24gc2hhbGwgYmUgaWdub3JlZC4gCi0tLSBUaGUgQWJzZW50U3Vic2NyaWJlclJlYXNvbjogcHVyZ2VkTVMgaXMgZGVmaW5lZCBmb3IgdGhlIFN1cGVyLUNoYXJnZXIgZmVhdHVyZSAKLS0tIChzZWUgVFMgMjMuMTE2KS4gSWYgdGhpcyB2YWx1ZSBpcyByZWNlaXZlZCBpbiBhIFByb3ZpZGUgUm9hbWluZyBOdW1iZXIgcmVzcG9uc2UKLS0tIGl0IHNoYWxsIGJlIG1hcHBlZCB0byB0aGUgQWJzZW50U3Vic2NyaWJlclJlYXNvbjogaW1zaURldGFjaCBpbiB0aGUgU2VuZCBSb3V0ZWluZwotLS0gSW5mb3JtYXRpb24gcmVzcG9uc2UKLQotQnVzeVN1YnNjcmliZXJQYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCWNjYnMtUG9zc2libGUJWzBdIE5VTEwJCU9QVElPTkFMLAotCWNjYnMtQnVzeQkJWzFdIE5VTEwJCU9QVElPTkFMfQotCi1Ob1N1YnNjcmliZXJSZXBseVBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLUZvcndhcmRpbmdWaW9sYXRpb25QYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1Gb3J3YXJkaW5nRmFpbGVkUGFyYW0gOjo9IFNFUVVFTkNFIHsKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotQVRJLU5vdEFsbG93ZWRQYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1BVFNJLU5vdEFsbG93ZWRQYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1BVE0tTm90QWxsb3dlZFBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLUlsbGVnYWxTUy1PcGVyYXRpb25QYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1TUy1Ob3RBdmFpbGFibGVQYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1TUy1TdWJzY3JpcHRpb25WaW9sYXRpb25QYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1JbmZvcm1hdGlvbk5vdEF2YWlsYWJsZVBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLVN1YkJ1c3lGb3JNVC1TTVMtUGFyYW0gOjo9IFNFUVVFTkNFIHsKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiAsCi0JZ3Byc0Nvbm5lY3Rpb25TdXNwZW5kZWQJTlVMTAkJCU9QVElPTkFMIH0KLQktLSBJZiBHcHJzQ29ubmVjdGlvblN1c3BlbmRlZCBpcyBub3QgdW5kZXJzdG9vZCBpdCBzaGFsbCAKLQktLSBiZSBkaXNjYXJkZWQKLQotTWVzc2FnZVdhaXRMaXN0RnVsbFBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLVJlc291cmNlTGltaXRhdGlvblBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLU5vR3JvdXBDYWxsTmJQYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1JbmNvbXBhdGlibGVUZXJtaW5hbFBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLVNob3J0VGVybURlbmlhbFBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JLi4ufQotCi1Mb25nVGVybURlbmlhbFBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JLi4ufQotCi1VbmF1dGhvcml6ZWRSZXF1ZXN0aW5nTmV0d29yay1QYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1VbmF1dGhvcml6ZWRMQ1NDbGllbnQtUGFyYW0gOjo9IFNFUVVFTkNFIHsKLQl1bmF1dGhvcml6ZWRMQ1NDbGllbnQtRGlhZ25vc3RpYwlbMF0gVW5hdXRob3JpemVkTENTQ2xpZW50LURpYWdub3N0aWMJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVsxXSBFeHRlbnNpb25Db250YWluZXIJCQlPUFRJT05BTCwKLQkuLi4gfQotCi1VbmF1dGhvcml6ZWRMQ1NDbGllbnQtRGlhZ25vc3RpYyA6Oj0gRU5VTUVSQVRFRCB7Ci0Jbm9BZGRpdGlvbmFsSW5mb3JtYXRpb24gKDApLAotCWNsaWVudE5vdEluTVNQcml2YWN5RXhjZXB0aW9uTGlzdCAoMSksCi0JY2FsbFRvQ2xpZW50Tm90U2V0dXAgKDIpLAotCXByaXZhY3lPdmVycmlkZU5vdEFwcGxpY2FibGUgKDMpLAotCWRpc2FsbG93ZWRCeUxvY2FsUmVndWxhdG9yeVJlcXVpcmVtZW50cyAoNCksCi0JLi4uLAotCXVuYXV0aG9yaXplZFByaXZhY3lDbGFzcyAoNSksCi0JdW5hdXRob3JpemVkQ2FsbFNlc3Npb25VbnJlbGF0ZWRFeHRlcm5hbENsaWVudCAoNiksCi0JdW5hdXRob3JpemVkQ2FsbFNlc3Npb25SZWxhdGVkRXh0ZXJuYWxDbGllbnQgKDcpIH0KLS0tCWV4Y2VwdGlvbiBoYW5kbGluZzoKLS0tCWFueSB1bnJlY29nbml6ZWQgdmFsdWUgc2hhbGwgYmUgaWdub3JlZAotCi1Qb3NpdGlvbk1ldGhvZEZhaWx1cmUtUGFyYW0gOjo9IFNFUVVFTkNFIHsKLQlwb3NpdGlvbk1ldGhvZEZhaWx1cmUtRGlhZ25vc3RpYwlbMF0gUG9zaXRpb25NZXRob2RGYWlsdXJlLURpYWdub3N0aWMJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVsxXSBFeHRlbnNpb25Db250YWluZXIJCQlPUFRJT05BTCwKLQkuLi4gfQotCi1Qb3NpdGlvbk1ldGhvZEZhaWx1cmUtRGlhZ25vc3RpYyA6Oj0gRU5VTUVSQVRFRCB7Ci0JY29uZ2VzdGlvbiAgKDApLAotCWluc3VmZmljaWVudFJlc291cmNlcyAgKDEpLAotCWluc3VmZmljaWVudE1lYXN1cmVtZW50RGF0YSAgKDIpLAotCWluY29uc2lzdGVudE1lYXN1cmVtZW50RGF0YSAgKDMpLAotCWxvY2F0aW9uUHJvY2VkdXJlTm90Q29tcGxldGVkICAoNCksCi0JbG9jYXRpb25Qcm9jZWR1cmVOb3RTdXBwb3J0ZWRCeVRhcmdldE1TICAoNSksCi0JcW9TTm90QXR0YWluYWJsZSAgKDYpLAotCXBvc2l0aW9uTWV0aG9kTm90QXZhaWxhYmxlSW5OZXR3b3JrCSg3KSwKLQlwb3NpdGlvbk1ldGhvZE5vdEF2YWlsYWJsZUluTG9jYXRpb25BcmVhCSg4KSwKLQkuLi4gfQotLS0JZXhjZXB0aW9uIGhhbmRsaW5nOgotLS0JYW55IHVucmVjb2duaXplZCB2YWx1ZSBzaGFsbCBiZSBpZ25vcmVkCi0KLVVua25vd25PclVucmVhY2hhYmxlTENTQ2xpZW50LVBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLU1NLUV2ZW50Tm90U3VwcG9ydGVkLVBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLVRhcmdldENlbGxPdXRzaWRlR0NBLVBhcmFtIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLU9uZ29pbmdHcm91cENhbGxQYXJhbSA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi0KLUVORAotCmRpZmYgLS1naXQgYS9ycmxwLWVwaGVtZXJpcy9hc24xL01BUC1FeHRlbnNpb25EYXRhVHlwZXMuYXNuIGIvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtRXh0ZW5zaW9uRGF0YVR5cGVzLmFzbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk0YzA1Ny4uMDAwMDAwMAotLS0gYS9ycmxwLWVwaGVtZXJpcy9hc24xL01BUC1FeHRlbnNpb25EYXRhVHlwZXMuYXNuCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLS0gJElkOiBNQVAtRXh0ZW5zaW9uRGF0YVR5cGVzLmFzbiAyODE0OSAyMDA5LTA0LTI1IDE3OjQ1OjM0WiBldHhyYWIgJAotLS0gTUFQLUV4dGVuc2lvbkRhdGFUeXBlcy5hc24KLS0tCi0tLSBUYWtlbiBmcm9tIDNHUFAgVFMgMjkuMDAyIFY4LjkuMCAoMjAwOS0wNCkKLS0tCi0tLSAxNy43LjExIEV4dGVuc2lvbiBkYXRhIHR5cGVzCi0tLQotCi1NQVAtRXh0ZW5zaW9uRGF0YVR5cGVzIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUV4dGVuc2lvbkRhdGFUeXBlcyAoMjEpIHZlcnNpb24xMSAoMTEpfQotCi1ERUZJTklUSU9OUwotCi1JTVBMSUNJVCBUQUdTCi0KLTo6PQotCi1CRUdJTgotCi1FWFBPUlRTCi0KLQlQcml2YXRlRXh0ZW5zaW9uLAotCUV4dGVuc2lvbkNvbnRhaW5lciwKLQlTTFItQXJnRXh0ZW5zaW9uQ29udGFpbmVyOwotCi0KLS0tIElPQyBmb3IgcHJpdmF0ZSBNQVAgZXh0ZW5zaW9ucwotCi0KLU1BUC1FWFRFTlNJT04gIDo6PSBDTEFTUyB7Ci0JJkV4dGVuc2lvblR5cGUJCQkJT1BUSU9OQUwsCi0JJmV4dGVuc2lvbklkIAlPQkpFQ1QgSURFTlRJRklFUiB9Ci0JLS0gVGhlIGxlbmd0aCBvZiB0aGUgT2JqZWN0IElkZW50aWZpZXIgc2hhbGwgbm90IGV4Y2VlZCAxNiBvY3RldHMgYW5kIHRoZQotCS0tIG51bWJlciBvZiBjb21wb25lbnRzIG9mIHRoZSBPYmplY3QgSWRlbnRpZmllciBzaGFsbCBub3QgZXhjZWVkIDE2Ci0KLS0tIGRhdGEgdHlwZXMKLQotRXh0ZW5zaW9uQ29udGFpbmVyIDo6PSBTRVFVRU5DRSB7Ci0JcHJpdmF0ZUV4dGVuc2lvbkxpc3QJWzBdUHJpdmF0ZUV4dGVuc2lvbkxpc3QJT1BUSU9OQUwsIAotCXBjcy1FeHRlbnNpb25zCVsxXVBDUy1FeHRlbnNpb25zCU9QVElPTkFMLAotCS4uLn0KLQotU0xSLUFyZ0V4dGVuc2lvbkNvbnRhaW5lciA6Oj0gU0VRVUVOQ0UgewotCXByaXZhdGVFeHRlbnNpb25MaXN0CVswXVByaXZhdGVFeHRlbnNpb25MaXN0CU9QVElPTkFMLCAKLQlzbHItQXJnLVBDUy1FeHRlbnNpb25zCVsxXVNMUi1BcmctUENTLUV4dGVuc2lvbnMJT1BUSU9OQUwsCi0JLi4ufQotCi1Qcml2YXRlRXh0ZW5zaW9uTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZQcml2YXRlRXh0ZW5zaW9ucykgT0YKLQkJCQlQcml2YXRlRXh0ZW5zaW9uCi0KLVByaXZhdGVFeHRlbnNpb24gOjo9IFNFUVVFTkNFIHsKLQlleHRJZAkJTUFQLUVYVEVOU0lPTi4mZXh0ZW5zaW9uSWQKLQkJCQkoe0V4dGVuc2lvblNldH0pLAotCWV4dFR5cGUJCU1BUC1FWFRFTlNJT04uJkV4dGVuc2lvblR5cGUKLQkJCQkoe0V4dGVuc2lvblNldH17QGV4dElkfSkJT1BUSU9OQUx9Ci0KLW1heE51bU9mUHJpdmF0ZUV4dGVuc2lvbnMgIElOVEVHRVIgOjo9IDEwCi0KLUV4dGVuc2lvblNldAkJTUFQLUVYVEVOU0lPTiA6Oj0KLQkJey4uLgotCQkgLS0gRXh0ZW5zaW9uU2V0IGlzIHRoZSBzZXQgb2YgYWxsIGRlZmluZWQgcHJpdmF0ZSBleHRlbnNpb25zCi0JfQotCS0tIFVuc3VwcG9ydGVkIHByaXZhdGUgZXh0ZW5zaW9ucyBzaGFsbCBiZSBkaXNjYXJkZWQgaWYgcmVjZWl2ZWQuCi0KLVBDUy1FeHRlbnNpb25zIDo6PSBTRVFVRU5DRSB7Ci0JLi4ufQotCi1TTFItQXJnLVBDUy1FeHRlbnNpb25zIDo6PSBTRVFVRU5DRSB7Ci0JLi4uLAotCW5hLUVTUkstUmVxdWVzdAlbMF0JTlVMTAkJT1BUSU9OQUwgfQotCi1FTkQKLQpkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtTENTLURhdGFUeXBlcy5hc24gYi9ycmxwLWVwaGVtZXJpcy9hc24xL01BUC1MQ1MtRGF0YVR5cGVzLmFzbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQzNGI4OS4uMDAwMDAwMAotLS0gYS9ycmxwLWVwaGVtZXJpcy9hc24xL01BUC1MQ1MtRGF0YVR5cGVzLmFzbgorKysgL2Rldi9udWxsCkBAIC0xLDY1NyArMCwwIEBACi0tLSAkSWQ6IE1BUC1MQ1MtRGF0YVR5cGVzLmFzbiAyODE0OSAyMDA5LTA0LTI1IDE3OjQ1OjM0WiBldHhyYWIgJAotLS0gTUFQLUxDUy1EYXRhVHlwZXMuYXNuCi0tLQotLS0gVGFrZW4gZnJvbSAzR1BQIFRTIDI5LjAwMiAgVjguOS4wICgyMDA5LTA0KQotLS0KLS0tIDE3LjcuMTMgTG9jYXRpb24gc2VydmljZSBkYXRhIHR5cGVzCi0tLQotCi1NQVAtTENTLURhdGFUeXBlcyB7Ci0gICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1MQ1MtRGF0YVR5cGVzICgyNSkgdmVyc2lvbjExICgxMSl9Ci0KLURFRklOSVRJT05TCi1JTVBMSUNJVCBUQUdTCi06Oj0KLUJFR0lOCi0KLUVYUE9SVFMKLQlSb3V0aW5nSW5mb0ZvckxDUy1BcmcsCi0JUm91dGluZ0luZm9Gb3JMQ1MtUmVzLAotCVByb3ZpZGVTdWJzY3JpYmVyTG9jYXRpb24tQXJnLAotCVByb3ZpZGVTdWJzY3JpYmVyTG9jYXRpb24tUmVzLAotCVN1YnNjcmliZXJMb2NhdGlvblJlcG9ydC1BcmcsCi0JU3Vic2NyaWJlckxvY2F0aW9uUmVwb3J0LVJlcywKLUxvY2F0aW9uVHlwZSwgCi1EZWZlcnJlZExvY2F0aW9uRXZlbnRUeXBlLAotTENTQ2xpZW50TmFtZSwKLUxDUy1Rb1MsCi1Ib3Jpem9udGFsLUFjY3VyYWN5LAotUmVzcG9uc2VUaW1lLAotRXh0LUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uLCAKLVZlbG9jaXR5RXN0aW1hdGUsCi1TdXBwb3J0ZWRHQURTaGFwZXMsCi1BZGQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24sCi1MQ1NSZXF1ZXN0b3JJRCwgCi1MQ1MtUmVmZXJlbmNlTnVtYmVyLAotTENTQ29kZXdvcmQsCi1BcmVhRXZlbnRJbmZvLAotUmVwb3J0aW5nUExNTkxpc3QsCi1QZXJpb2RpY0xEUkluZm8sCi1TZXF1ZW5jZU51bWJlcgotOwotCi1JTVBPUlRTCi0JQWRkcmVzc1N0cmluZywKLQlJU0ROLUFkZHJlc3NTdHJpbmcsCi0JSU1FSSwKLQlJTVNJLAotCUxNU0ksCi0JU3Vic2NyaWJlcklkZW50aXR5LAotCUFnZU9mTG9jYXRpb25JbmZvcm1hdGlvbiwKLQlMQ1NDbGllbnRFeHRlcm5hbElELAotCUxDU0NsaWVudEludGVybmFsSUQsCi1MQ1NTZXJ2aWNlVHlwZUlELAotQ2VsbEdsb2JhbElkT3JTZXJ2aWNlQXJlYUlkT3JMQUksCi1QTE1OLUlkCi1GUk9NIE1BUC1Db21tb25EYXRhVHlwZXMgewotICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKLSAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtQ29tbW9uRGF0YVR5cGVzICgxOCkgdmVyc2lvbjExICgxMSl9Ci0KLQlFeHRlbnNpb25Db250YWluZXIsCi0JU0xSLUFyZ0V4dGVuc2lvbkNvbnRhaW5lcgotRlJPTSBNQVAtRXh0ZW5zaW9uRGF0YVR5cGVzIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUV4dGVuc2lvbkRhdGFUeXBlcyAoMjEpIHZlcnNpb24xMSAoMTEpfQotCi0JVVNTRC1EYXRhQ29kaW5nU2NoZW1lLAotVVNTRC1TdHJpbmcKLUZST00gTUFQLVNTLURhdGFUeXBlcyB7Ci0gICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKSBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykKLSAgIG1hcC1TUy1EYXRhVHlwZXMgKDE0KSB2ZXJzaW9uMTEgKDExKX0KLQotCUFQTiwKLQlHU04tQWRkcmVzcywKLQlTdXBwb3J0ZWRMQ1MtQ2FwYWJpbGl0eVNldHMKLUZST00gTUFQLU1TLURhdGFUeXBlcyB7Ci0gICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1NUy1EYXRhVHlwZXMgKDExKSB2ZXJzaW9uMTEgKDExKX0KLQotCUFkZGl0aW9uYWwtTnVtYmVyCi1GUk9NIE1BUC1TTS1EYXRhVHlwZXMgewotICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKLSAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtU00tRGF0YVR5cGVzICgxNikgdmVyc2lvbjExICgxMSl9Ci07Ci0KLQotUm91dGluZ0luZm9Gb3JMQ1MtQXJnIDo6PSBTRVFVRU5DRSB7Ci0JbWxjTnVtYmVyCQlbMF0gSVNETi1BZGRyZXNzU3RyaW5nLAotCXRhcmdldE1TCQlbMV0gU3Vic2NyaWJlcklkZW50aXR5LAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotUm91dGluZ0luZm9Gb3JMQ1MtUmVzIDo6PSBTRVFVRU5DRSB7Ci0JdGFyZ2V0TVMJCVswXSBTdWJzY3JpYmVySWRlbnRpdHksCi0JbGNzTG9jYXRpb25JbmZvCVsxXSBMQ1NMb2NhdGlvbkluZm8sCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCXYtZ21sYy1BZGRyZXNzCVszXQlHU04tQWRkcmVzcwlPUFRJT05BTCwKLQloLWdtbGMtQWRkcmVzcwlbNF0JR1NOLUFkZHJlc3MJT1BUSU9OQUwsCi0JcHByLUFkZHJlc3MJWzVdCUdTTi1BZGRyZXNzCU9QVElPTkFMLAotCWFkZGl0aW9uYWwtdi1nbWxjLUFkZHJlc3MJWzZdCUdTTi1BZGRyZXNzCU9QVElPTkFMIH0KLQotTENTTG9jYXRpb25JbmZvIDo6PSBTRVFVRU5DRSB7Ci0JbmV0d29ya05vZGUtTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZywKLQktLSBOZXR3b3JrTm9kZS1udW1iZXIgY2FuIGJlIGVpdGhlciBtc2MtbnVtYmVyIG9yIHNnc24tbnVtYmVyCi0JbG1zaQkJCVswXSBMTVNJCQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzFdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4gLAotCWdwcnNOb2RlSW5kaWNhdG9yIAlbMl0gTlVMTAkJT1BUSU9OQUwsCi0JLS0gZ3Byc05vZGVJbmRpY2F0b3IgaXMgc2V0IG9ubHkgaWYgdGhlIFNHU04gbnVtYmVyIGlzIHNlbnQgYXMgdGhlIE5ldHdvcmsgTm9kZSBOdW1iZXIKLQlhZGRpdGlvbmFsLU51bWJlcglbM10gQWRkaXRpb25hbC1OdW1iZXIJT1BUSU9OQUwsCi0Jc3VwcG9ydGVkTENTLUNhcGFiaWxpdHlTZXRzCVs0XQlTdXBwb3J0ZWRMQ1MtQ2FwYWJpbGl0eVNldHMJT1BUSU9OQUwsCi0JYWRkaXRpb25hbC1MQ1MtQ2FwYWJpbGl0eVNldHMJWzVdCVN1cHBvcnRlZExDUy1DYXBhYmlsaXR5U2V0cwlPUFRJT05BTAotCX0KLQotUHJvdmlkZVN1YnNjcmliZXJMb2NhdGlvbi1BcmcgOjo9IFNFUVVFTkNFIHsKLQlsb2NhdGlvblR5cGUJTG9jYXRpb25UeXBlLAotCW1sYy1OdW1iZXIJSVNETi1BZGRyZXNzU3RyaW5nLAotCWxjcy1DbGllbnRJRAlbMF0gTENTLUNsaWVudElECU9QVElPTkFMLAotCXByaXZhY3lPdmVycmlkZQlbMV0gTlVMTAkJT1BUSU9OQUwsCi0JaW1zaQkJCVsyXSBJTVNJCQlPUFRJT05BTCwKLQltc2lzZG4JCVszXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCi0JbG1zaQkJCVs0XSBMTVNJCQlPUFRJT05BTCwKLQlpbWVpCQkJWzVdIElNRUkJCU9QVElPTkFMLAotCWxjcy1Qcmlvcml0eQlbNl0gTENTLVByaW9yaXR5CU9QVElPTkFMLAotCWxjcy1Rb1MJCVs3XSBMQ1MtUW9TCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbOF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiAsCi0Jc3VwcG9ydGVkR0FEU2hhcGVzCVs5XQlTdXBwb3J0ZWRHQURTaGFwZXMJT1BUSU9OQUwsCi0JbGNzLVJlZmVyZW5jZU51bWJlcglbMTBdCUxDUy1SZWZlcmVuY2VOdW1iZXIJT1BUSU9OQUwsCi0JbGNzU2VydmljZVR5cGVJRAlbMTFdCUxDU1NlcnZpY2VUeXBlSUQJT1BUSU9OQUwsCi0JbGNzQ29kZXdvcmQJWzEyXQlMQ1NDb2Rld29yZAlPUFRJT05BTCwKLQlsY3MtUHJpdmFjeUNoZWNrCVsxM10JTENTLVByaXZhY3lDaGVjawlPUFRJT05BTCwKLQlhcmVhRXZlbnRJbmZvCVsxNF0JQXJlYUV2ZW50SW5mbwlPUFRJT05BTCwKLQloLWdtbGMtQWRkcmVzcwlbMTVdCUdTTi1BZGRyZXNzCU9QVElPTkFMLAotCW1vLWxyU2hvcnRDaXJjdWl0SW5kaWNhdG9yCVsxNl0gTlVMTAkJT1BUSU9OQUwsCi0JcGVyaW9kaWNMRFJJbmZvCVsxN10gUGVyaW9kaWNMRFJJbmZvCU9QVElPTkFMLAotCXJlcG9ydGluZ1BMTU5MaXN0CVsxOF0gUmVwb3J0aW5nUExNTkxpc3QJT1BUSU9OQUwgfQotCi0JLS0gb25lIG9mIGltc2kgb3IgbXNpc2RuIGlzIG1hbmRhdG9yeQotCS0tIElmIGEgbG9jYXRpb24gZXN0aW1hdGUgdHlwZSBpbmRpY2F0ZXMgYWN0aXZhdGUgZGVmZXJyZWQgbG9jYXRpb24gb3IgY2FuY2VsIGRlZmVycmVkIAotCS0tIGxvY2F0aW9uLCBhIGxjcy1SZWZlcmVuY2UgbnVtYmVyIHNoYWxsIGJlIGluY2x1ZGVkLgotCi1Mb2NhdGlvblR5cGUgOjo9IFNFUVVFTkNFIHsKLQlsb2NhdGlvbkVzdGltYXRlVHlwZQlbMF0gTG9jYXRpb25Fc3RpbWF0ZVR5cGUsCi0JLi4uLAotCWRlZmVycmVkTG9jYXRpb25FdmVudFR5cGUJWzFdIERlZmVycmVkTG9jYXRpb25FdmVudFR5cGUJT1BUSU9OQUwgfQotCi1Mb2NhdGlvbkVzdGltYXRlVHlwZSA6Oj0gRU5VTUVSQVRFRCB7Ci0JY3VycmVudExvY2F0aW9uCSgwKSwKLQljdXJyZW50T3JMYXN0S25vd25Mb2NhdGlvbgkoMSksCi0JaW5pdGlhbExvY2F0aW9uCSgyKSwKLQkuLi4sCi0JYWN0aXZhdGVEZWZlcnJlZExvY2F0aW9uCSgzKSwKLQljYW5jZWxEZWZlcnJlZExvY2F0aW9uCSg0KSAsCi0Jbm90aWZpY2F0aW9uVmVyaWZpY2F0aW9uT25seQkoNSkgfQotLS0JZXhjZXB0aW9uIGhhbmRsaW5nOgotLS0JYSBQcm92aWRlU3Vic2NyaWJlckxvY2F0aW9uLUFyZyBjb250YWluaW5nIGFuIHVucmVjb2duaXplZCBMb2NhdGlvbkVzdGltYXRlVHlwZQotLS0Jc2hhbGwgYmUgcmVqZWN0ZWQgYnkgdGhlIHJlY2VpdmVyIHdpdGggYSByZXR1cm4gZXJyb3IgY2F1c2Ugb2YgdW5leHBlY3RlZCBkYXRhIHZhbHVlCi0KLURlZmVycmVkTG9jYXRpb25FdmVudFR5cGUgOjo9IEJJVCBTVFJJTkcgewotCW1zQXZhaWxhYmxlCSgwKSAsCi0JZW50ZXJpbmdJbnRvQXJlYQkoMSksCi0JbGVhdmluZ0Zyb21BcmVhCSgyKSwKLQliZWluZ0luc2lkZUFyZWEJKDMpICwKLQlwZXJpb2RpY0xEUgkoNCkgIH0gKFNJWkUgKDEuLjE2KSkgCi0tLSBiZWluZ0luc2lkZUFyZWEgaXMgYWx3YXlzIHRyZWF0ZWQgYXMgb25lVGltZUV2ZW50IHJlZ2FyZGxlc3Mgb2YgdGhlIHBvc3NpYmxlIHZhbHVlCi0tLSBvZiBvY2N1cnJlbmNlSW5mbyBpbnNpZGUgYXJlYUV2ZW50SW5mby4KLS0tIGV4Y2VwdGlvbiBoYW5kbGluZzoKLS0tIGEgUHJvdmlkZVN1YnNjcmliZXJMb2NhdGlvbi1BcmcgY29udGFpbmluZyBvdGhlciB2YWx1ZXMgdGhhbiBsaXN0ZWQgYWJvdmUgaW4gCi0tLSBEZWZlcnJlZExvY2F0aW9uRXZlbnRUeXBlIHNoYWxsIGJlIHJlamVjdGVkIGJ5IHRoZSByZWNlaXZlciB3aXRoIGEgcmV0dXJuIGVycm9yIGNhdXNlIG9mIAotLS0gdW5leHBlY3RlZCBkYXRhIHZhbHVlLgotCi1MQ1MtQ2xpZW50SUQgOjo9IFNFUVVFTkNFIHsKLQlsY3NDbGllbnRUeXBlCVswXSBMQ1NDbGllbnRUeXBlLAotCWxjc0NsaWVudEV4dGVybmFsSUQJWzFdIExDU0NsaWVudEV4dGVybmFsSUQJT1BUSU9OQUwsCi0JbGNzQ2xpZW50RGlhbGVkQnlNUwlbMl0gQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKLQlsY3NDbGllbnRJbnRlcm5hbElECVszXSBMQ1NDbGllbnRJbnRlcm5hbElECU9QVElPTkFMLAotCWxjc0NsaWVudE5hbWUJWzRdIExDU0NsaWVudE5hbWUJT1BUSU9OQUwsCi0JLi4uLAotCWxjc0FQTgkJWzVdIEFQTgkJT1BUSU9OQUwsCi0JbGNzUmVxdWVzdG9ySUQJWzZdIExDU1JlcXVlc3RvcklECU9QVElPTkFMIH0KLQotTENTQ2xpZW50VHlwZSA6Oj0gRU5VTUVSQVRFRCB7Ci0JZW1lcmdlbmN5U2VydmljZXMJKDApLAotCXZhbHVlQWRkZWRTZXJ2aWNlcwkoMSksCi0JcGxtbk9wZXJhdG9yU2VydmljZXMJKDIpLAotCWxhd2Z1bEludGVyY2VwdFNlcnZpY2VzCSgzKSwKLQkuLi4gfQotCS0tCWV4Y2VwdGlvbiBoYW5kbGluZzoKLQktLQl1bnJlY29nbml6ZWQgdmFsdWVzIG1heSBiZSBpZ25vcmVkIGlmIHRoZSBMQ1MgY2xpZW50IHVzZXMgdGhlIHByaXZhY3kgb3ZlcnJpZGUKLQktLQlvdGhlcndpc2UsIGFuIHVucmVjb2duaXplZCB2YWx1ZSBzaGFsbCBiZSB0cmVhdGVkIGFzIHVuZXhwZWN0ZWQgZGF0YSBieSBhIHJlY2VpdmVyCi0JLS0JYSByZXR1cm4gZXJyb3Igc2hhbGwgdGhlbiBiZSByZXR1cm5lZCBpZiByZWNlaXZlZCBpbiBhIE1BUCBpbnZva2UgCi0KLUxDU0NsaWVudE5hbWUgOjo9IFNFUVVFTkNFIHsKLQlkYXRhQ29kaW5nU2NoZW1lCVswXSBVU1NELURhdGFDb2RpbmdTY2hlbWUsCi0JbmFtZVN0cmluZwlbMl0gTmFtZVN0cmluZywKLQkuLi4sCi0JbGNzLUZvcm1hdEluZGljYXRvcglbM10gTENTLUZvcm1hdEluZGljYXRvcglPUFRJT05BTCB9Ci0KLS0tIFRoZSBVU1NELURhdGFDb2RpbmdTY2hlbWUgc2hhbGwgaW5kaWNhdGUgdXNlIG9mIHRoZSBkZWZhdWx0IGFscGhhYmV0IHRocm91Z2ggdGhlCi0tLSBmb2xsb3dpbmcgZW5jb2RpbmcKLS0tCWJpdAk3IDYgNSA0IDMgMiAxIDAKLS0tCQkwIDAgMCAwIDEgMSAxIDEKLQotTmFtZVN0cmluZyA6Oj0gVVNTRC1TdHJpbmcgKFNJWkUgKDEuLm1heE5hbWVTdHJpbmdMZW5ndGgpKQotCi1tYXhOYW1lU3RyaW5nTGVuZ3RoICBJTlRFR0VSIDo6PSA2MwotCi1MQ1NSZXF1ZXN0b3JJRCA6Oj0gU0VRVUVOQ0UgewotCWRhdGFDb2RpbmdTY2hlbWUJWzBdIFVTU0QtRGF0YUNvZGluZ1NjaGVtZSwKLQlyZXF1ZXN0b3JJRFN0cmluZwlbMV0gUmVxdWVzdG9ySURTdHJpbmcsCi0JLi4uLAotCWxjcy1Gb3JtYXRJbmRpY2F0b3IJWzJdIExDUy1Gb3JtYXRJbmRpY2F0b3IJT1BUSU9OQUwgfQotCi1SZXF1ZXN0b3JJRFN0cmluZyA6Oj0gVVNTRC1TdHJpbmcgKFNJWkUgKDEuLm1heFJlcXVlc3RvcklEU3RyaW5nTGVuZ3RoKSkKLQotbWF4UmVxdWVzdG9ySURTdHJpbmdMZW5ndGggIElOVEVHRVIgOjo9IDYzCi0KLUxDUy1Gb3JtYXRJbmRpY2F0b3IgOjo9IEVOVU1FUkFURUQgewotCWxvZ2ljYWxOYW1lCSgwKSwKLQllLW1haWxBZGRyZXNzCSgxKSwKLQltc2lzZG4JCSgyKSwKLQl1cmwJCQkoMyksCi0Jc2lwVXJsCQkoNCksCi0JLi4uIH0KLQotTENTLVByaW9yaXR5IDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQotCS0tIDAgPSBoaWdoZXN0IHByaW9yaXR5Ci0JLS0gMSA9IG5vcm1hbCBwcmlvcml0eQotCS0tIGFsbCBvdGhlciB2YWx1ZXMgdHJlYXRlZCBhcyAxIAotCi1MQ1MtUW9TIDo6PSBTRVFVRU5DRSB7Ci0JaG9yaXpvbnRhbC1hY2N1cmFjeQlbMF0gSG9yaXpvbnRhbC1BY2N1cmFjeQlPUFRJT05BTCwKLQl2ZXJ0aWNhbENvb3JkaW5hdGVSZXF1ZXN0CVsxXSBOVUxMCQlPUFRJT05BTCwKLQl2ZXJ0aWNhbC1hY2N1cmFjeQlbMl0gVmVydGljYWwtQWNjdXJhY3kJT1BUSU9OQUwsCXJlc3BvbnNlVGltZQlbM10gUmVzcG9uc2VUaW1lCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbNF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQl2ZWxvY2l0eVJlcXVlc3QJWzVdIE5VTEwJCU9QVElPTkFMCi19Ci0KLUhvcml6b250YWwtQWNjdXJhY3kgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCi0JLS0gYml0IDggPSAwCi0JLS0gYml0cyA3LTEgPSA3IGJpdCBVbmNlcnRhaW50eSBDb2RlIGRlZmluZWQgaW4gM0dQUCBUUyAyMy4wMzIuIFRoZSBob3Jpem9udGFsIGxvY2F0aW9uIAotCS0tIGVycm9yIHNob3VsZCBiZSBsZXNzIHRoYW4gdGhlIGVycm9yIGluZGljYXRlZCBieSB0aGUgdW5jZXJ0YWludHkgY29kZSB3aXRoIDY3JQotCS0tIGNvbmZpZGVuY2UuCi0KLVZlcnRpY2FsLUFjY3VyYWN5IDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQotCS0tIGJpdCA4ID0gMAotCS0tIGJpdHMgNy0xID0gNyBiaXQgVmVydGljYWwgVW5jZXJ0YWludHkgQ29kZSBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDMyLiAKLQktLSBUaGUgdmVydGljYWwgbG9jYXRpb24gZXJyb3Igc2hvdWxkIGJlIGxlc3MgdGhhbiB0aGUgZXJyb3IgaW5kaWNhdGVkIAotCS0tIGJ5IHRoZSB1bmNlcnRhaW50eSBjb2RlIHdpdGggNjclIGNvbmZpZGVuY2UuCi0KLVJlc3BvbnNlVGltZSA6Oj0gU0VRVUVOQ0UgewotCXJlc3BvbnNlVGltZUNhdGVnb3J5CVJlc3BvbnNlVGltZUNhdGVnb3J5LAotCS4uLn0KLS0tCW5vdGU6IGFuIGV4cGFuZGFibGUgU0VRVUVOQ0Ugc2ltcGxpZmllcyBsYXRlciBhZGRpdGlvbiBvZiBhIG51bWVyaWMgcmVzcG9uc2UgdGltZS4KLQotUmVzcG9uc2VUaW1lQ2F0ZWdvcnkgOjo9IEVOVU1FUkFURUQgewotCWxvd2RlbGF5ICAoMCksCi0JZGVsYXl0b2xlcmFudCAgKDEpLAotCS4uLiB9Ci0tLQlleGNlcHRpb24gaGFuZGxpbmc6Ci0tLQlhbiB1bnJlY29nbml6ZWQgdmFsdWUgc2hhbGwgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyB2YWx1ZSAxIChkZWxheXRvbGVyYW50KQotCi1TdXBwb3J0ZWRHQURTaGFwZXMgOjo9IEJJVCBTVFJJTkcgewotCWVsbGlwc29pZFBvaW50ICAoMCksCi0JZWxsaXBzb2lkUG9pbnRXaXRoVW5jZXJ0YWludHlDaXJjbGUgKDEpLAotCWVsbGlwc29pZFBvaW50V2l0aFVuY2VydGFpbnR5RWxsaXBzZSAoMiksCi0JcG9seWdvbiAoMyksCi0JZWxsaXBzb2lkUG9pbnRXaXRoQWx0aXR1ZGUgKDQpLAotCWVsbGlwc29pZFBvaW50V2l0aEFsdGl0dWRlQW5kVW5jZXJ0YWludHlFbGlwc29pZCAoNSksCi0JZWxsaXBzb2lkQXJjICAoNikgfSAoU0laRSAoNy4uMTYpKQotLS0gQSBub2RlIHNoYWxsIG1hcmsgaW4gdGhlIEJJVCBTVFJJTkcgYWxsIFNoYXBlcyBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDMyIGl0IHN1cHBvcnRzLgotLS0gZXhjZXB0aW9uIGhhbmRsaW5nOiBiaXRzIDcgdG8gMTUgc2hhbGwgYmUgaWdub3JlZCBpZiByZWNlaXZlZC4KLQotTENTLVJlZmVyZW5jZU51bWJlcjo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUoMSkpCi0KLUxDU0NvZGV3b3JkIDo6PSBTRVFVRU5DRSB7Ci0JZGF0YUNvZGluZ1NjaGVtZQlbMF0gVVNTRC1EYXRhQ29kaW5nU2NoZW1lLAotCWxjc0NvZGV3b3JkU3RyaW5nCVsxXSBMQ1NDb2Rld29yZFN0cmluZywKLQkuLi59Ci0KLUxDU0NvZGV3b3JkU3RyaW5nIDo6PSBVU1NELVN0cmluZyAoU0laRSAoMS4ubWF4TENTQ29kZXdvcmRTdHJpbmdMZW5ndGgpKQotCi1tYXhMQ1NDb2Rld29yZFN0cmluZ0xlbmd0aCAgSU5URUdFUiA6Oj0gMjAKLQotTENTLVByaXZhY3lDaGVjayA6Oj0gU0VRVUVOQ0UgewotCWNhbGxTZXNzaW9uVW5yZWxhdGVkCVswXSBQcml2YWN5Q2hlY2tSZWxhdGVkQWN0aW9uLAotCWNhbGxTZXNzaW9uUmVsYXRlZAlbMV0gUHJpdmFjeUNoZWNrUmVsYXRlZEFjdGlvbglPUFRJT05BTCwKLQkuLi59Ci0KLVByaXZhY3lDaGVja1JlbGF0ZWRBY3Rpb24gOjo9IEVOVU1FUkFURUQgewotCWFsbG93ZWRXaXRob3V0Tm90aWZpY2F0aW9uICgwKSwKLQlhbGxvd2VkV2l0aE5vdGlmaWNhdGlvbiAoMSksCi0JYWxsb3dlZElmTm9SZXNwb25zZSAoMiksCi0JcmVzdHJpY3RlZElmTm9SZXNwb25zZSAoMyksCi0Jbm90QWxsb3dlZCAoNCksCi0JLi4ufQotLS0JZXhjZXB0aW9uIGhhbmRsaW5nOgotLS0JYSBQcm92aWRlU3Vic2NyaWJlckxvY2F0aW9uLUFyZyBjb250YWluaW5nIGFuIHVucmVjb2duaXplZCBQcml2YWN5Q2hlY2tSZWxhdGVkQWN0aW9uCi0tLQlzaGFsbCBiZSByZWplY3RlZCBieSB0aGUgcmVjZWl2ZXIgd2l0aCBhIHJldHVybiBlcnJvciBjYXVzZSBvZiB1bmV4cGVjdGVkIGRhdGEgdmFsdWUKLQotQXJlYUV2ZW50SW5mbyA6Oj0gU0VRVUVOQ0UgewotCWFyZWFEZWZpbml0aW9uCVswXQlBcmVhRGVmaW5pdGlvbiwKLQlvY2N1cnJlbmNlSW5mbwlbMV0JT2NjdXJyZW5jZUluZm8JT1BUSU9OQUwsCi0JaW50ZXJ2YWxUaW1lCVsyXQlJbnRlcnZhbFRpbWUJT1BUSU9OQUwsCi0JLi4ufQotCi1BcmVhRGVmaW5pdGlvbiA6Oj0gU0VRVUVOQ0UgewotCWFyZWFMaXN0CQlbMF0JQXJlYUxpc3QsCi0JLi4ufQotCi1BcmVhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZBcmVhcykgT0YgQXJlYQotCi1tYXhOdW1PZkFyZWFzICBJTlRFR0VSIDo6PSAxMAotCi1BcmVhIDo6PSBTRVFVRU5DRSB7Ci0JYXJlYVR5cGUJCVswXQlBcmVhVHlwZSwKLQlhcmVhSWRlbnRpZmljYXRpb24JWzFdCUFyZWFJZGVudGlmaWNhdGlvbiwKLQkuLi59Ci0KLUFyZWFUeXBlIDo6PSBFTlVNRVJBVEVEIHsKLQljb3VudHJ5Q29kZQkoMCksCi0JcGxtbklkCQkoMSksCi0JbG9jYXRpb25BcmVhSWQJKDIpLAotCXJvdXRpbmdBcmVhSWQJKDMpLAotCWNlbGxHbG9iYWxJZAkoNCksCi0JLi4uLAotCXV0cmFuQ2VsbElkCSg1KSB9Ci0KLUFyZWFJZGVudGlmaWNhdGlvbiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgyLi43KSkKLQktLSBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgYXMgZm9sbG93czoKLQktLSBvY3RldCAxIGJpdHMgNDMyMQlNb2JpbGUgQ291bnRyeSBDb2RlIDFzdCBkaWdpdAotCS0tICAgICAgICAgYml0cyA4NzY1CU1vYmlsZSBDb3VudHJ5IENvZGUgMm5kIGRpZ2l0Ci0JLS0gb2N0ZXQgMiBiaXRzIDQzMjEJTW9iaWxlIENvdW50cnkgQ29kZSAzcmQgZGlnaXQKLQktLSAgICAgICAgIGJpdHMgODc2NQlNb2JpbGUgTmV0d29yayBDb2RlIDNyZCBkaWdpdCBpZiAzIGRpZ2l0IE1OQyBpbmNsdWRlZAotCS0tCQkJb3IgZmlsbGVyICgxMTExKQotCS0tIG9jdGV0IDMgYml0cyA0MzIxCU1vYmlsZSBOZXR3b3JrIENvZGUgMXN0IGRpZ2l0Ci0JLS0gICAgICAgICBiaXRzIDg3NjUJTW9iaWxlIE5ldHdvcmsgQ29kZSAybmQgZGlnaXQKLQktLSBvY3RldHMgNCBhbmQgNQlMb2NhdGlvbiBBcmVhIENvZGUgKExBQykgZm9yIExvY2FsIEFyZWEgSWQsCi0JLS0JCQlSb3V0aW5nIEFyZWEgSWQgYW5kIENlbGwgR2xvYmFsIElkCi0JLS0gb2N0ZXQgNglSb3V0aW5nIEFyZWEgQ29kZSAoUkFDKSBmb3IgUm91dGluZyBBcmVhIElkCi0JLS0gb2N0ZXRzIDYgYW5kIDcJQ2VsbCBJZGVudGl0eSAoQ0kpIGZvciBDZWxsIEdsb2JhbCBJZAotCS0tIG9jdGV0cyA0IHVudGlsIDcJVXRyYW4gQ2VsbCBJZGVudGl0eSAoVUMtSWQpIGZvciBVdHJhbiBDZWxsIElkCi0KLU9jY3VycmVuY2VJbmZvIDo6PSBFTlVNRVJBVEVEIHsKLQlvbmVUaW1lRXZlbnQJKDApLAotCW11bHRpcGxlVGltZUV2ZW50CSgxKSwKLQkuLi59Ci0KLUludGVydmFsVGltZSA6Oj0gSU5URUdFUiAoMS4uMzI3NjcpCi0JLS0gbWluaW11bSBpbnRlcnZhbCB0aW1lIGJldHdlZW4gYXJlYSByZXBvcnRzIGluIHNlY29uZHMKLQotUGVyaW9kaWNMRFJJbmZvIDo6PSBTRVFVRU5DRSB7Ci0JcmVwb3J0aW5nQW1vdW50CQlSZXBvcnRpbmdBbW91bnQsCi0JcmVwb3J0aW5nSW50ZXJ2YWwJUmVwb3J0aW5nSW50ZXJ2YWwsCi0JLi4ufQotLS0gcmVwb3J0aW5nSW50ZXJ2YWwgeCByZXBvcnRpbmdBbW91bnQgc2hhbGwgbm90IGV4Y2VlZCA4NjM5OTk5ICg5OSBkYXlzLCAyMyBob3VycywKLS0tIDU5IG1pbnV0ZXMgYW5kIDU5IHNlY29uZHMpIGZvciBjb21wYXRpYmlsaXR5IHdpdGggT01BIE1MUCBhbmQgUkxQCi0KLVJlcG9ydGluZ0Ftb3VudCA6Oj0gSU5URUdFUiAoMS4ubWF4UmVwb3J0aW5nQW1vdW50KQotCi1tYXhSZXBvcnRpbmdBbW91bnQgSU5URUdFUiA6Oj0gODYzOTk5OQotCi1SZXBvcnRpbmdJbnRlcnZhbCA6Oj0gSU5URUdFUiAoMS4ubWF4UmVwb3J0aW5nSW50ZXJ2YWwpCi0tLSBSZXBvcnRpbmdJbnRlcnZhbCBpcyBpbiBzZWNvbmRzCi0KLW1heFJlcG9ydGluZ0ludGVydmFsIElOVEVHRVIgOjo9IDg2Mzk5OTkKLQotUmVwb3J0aW5nUExNTkxpc3Q6Oj0gU0VRVUVOQ0UgewotCXBsbW4tTGlzdFByaW9yaXRpemVkCQkJWzBdIE5VTEwJCQkJCU9QVElPTkFMLAotCXBsbW4tTGlzdCAJCQkJCQlbMV0gUExNTkxpc3QsCi0JLi4ufQotCi1QTE1OTGlzdDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlJlcG9ydGluZ1BMTU4pIE9GCi0JCQkJUmVwb3J0aW5nUExNTgotCi1tYXhOdW1PZlJlcG9ydGluZ1BMTU4gSU5URUdFUiA6Oj0gMjAKLQotUmVwb3J0aW5nUExNTjo6PSBTRVFVRU5DRSB7Ci0JcGxtbi1JZCAJCQkJCQlbMF0gUExNTi1JZCwKLQlyYW4tVGVjaG5vbG9neSAJCQkJCVsxXSBSQU4tVGVjaG5vbG9neQkJCU9QVElPTkFMLAotCXJhbi1QZXJpb2RpY0xvY2F0aW9uU3VwcG9ydAkJWzJdIE5VTEwJCQkJCU9QVElPTkFMLAotCS4uLn0KLQotUkFOLVRlY2hub2xvZ3kgOjo9IEVOVU1FUkFURUQgewotCWdzbQkJCSgwKSwKLQl1bXRzCQkoMSksCi0JLi4ufQotCi1Qcm92aWRlU3Vic2NyaWJlckxvY2F0aW9uLVJlcyA6Oj0gU0VRVUVOQ0UgewotCWxvY2F0aW9uRXN0aW1hdGUJRXh0LUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uLAotCWFnZU9mTG9jYXRpb25Fc3RpbWF0ZQlbMF0gQWdlT2ZMb2NhdGlvbkluZm9ybWF0aW9uCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiAsCi0JYWRkLUxvY2F0aW9uRXN0aW1hdGUJWzJdIEFkZC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbiAJT1BUSU9OQUwsCi0JZGVmZXJyZWRtdC1sclJlc3BvbnNlSW5kaWNhdG9yCVszXSBOVUxMCQlPUFRJT05BTCwKLQlnZXJhblBvc2l0aW9uaW5nRGF0YQlbNF0gUG9zaXRpb25pbmdEYXRhSW5mb3JtYXRpb24JT1BUSU9OQUwsCi0JdXRyYW5Qb3NpdGlvbmluZ0RhdGEJWzVdIFV0cmFuUG9zaXRpb25pbmdEYXRhSW5mbwlPUFRJT05BTCwKLQljZWxsSWRPclNhaQlbNl0gQ2VsbEdsb2JhbElkT3JTZXJ2aWNlQXJlYUlkT3JMQUkJT1BUSU9OQUwsCi0Jc2FpLVByZXNlbnQJWzddIE5VTEwJCU9QVElPTkFMLAotCWFjY3VyYWN5RnVsZmlsbWVudEluZGljYXRvcglbOF0gQWNjdXJhY3lGdWxmaWxtZW50SW5kaWNhdG9yCQlPUFRJT05BTCwKLQl2ZWxvY2l0eUVzdGltYXRlCVs5XSBWZWxvY2l0eUVzdGltYXRlCU9QVElPTkFMLAotCW1vLWxyU2hvcnRDaXJjdWl0SW5kaWNhdG9yCVsxMF0gTlVMTAkJT1BUSU9OQUwgfQotCi0tLQlpZiBkZWZlcnJlZG10LWxyUmVzcG9uc2VJbmRpY2F0b3IgaXMgc2V0LCBsb2NhdGlvbkVzdGltYXRlIGlzIGlnbm9yZWQuCi0KLS0tIHRoZSBhZGQtTG9jYXRpb25Fc3RpbWF0ZSBwYXJhbWV0ZXIgc2hhbGwgbm90IGJlIHNlbnQgdG8gYSBub2RlIHRoYXQgZGlkIG5vdCBpbmRpY2F0ZSB0aGUKLS0tIGdlb2dyYXBoaWMgc2hhcGVzIHN1cHBvcnRlZCBpbiB0aGUgUHJvdmlkZVN1YnNjcmliZXJMb2NhdGlvbi1BcmcKLS0tIFRoZSBsb2NhdGlvbkVzdGltYXRlIGFuZCB0aGUgYWRkLWxvY2F0aW9uRXN0aW1hdGUgcGFyYW1ldGVycyBzaGFsbCBub3QgYmUgc2VudCBpZgotLS0gdGhlIHN1cHBvcnRlZEdBRFNoYXBlcyBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVjZWl2ZWQgaW4gUHJvdmlkZVN1YnNjcmliZXJMb2NhdGlvbi1BcmcKLS0tIGFuZCB0aGUgc2hhcGUgZW5jb2RlZCBpbiBsb2NhdGlvbkVzdGltYXRlIG9yIGFkZC1Mb2NhdGlvbkVzdGltYXRlIGlzIG5vdCBtYXJrZWQKLS0tIGFzIHN1cHBvcnRlZCBpbiBzdXBwb3J0ZWRHQURTaGFwZXMuIEluIHN1Y2ggYSBjYXNlIFByb3ZpZGVTdWJzY3JpYmVyTG9jYXRpb24KLS0tIHNoYWxsIGJlIHJlamVjdGVkIHdpdGggZXJyb3IgRmFjaWxpdHlOb3RTdXBwb3J0ZWQgd2l0aCBhZGRpdGlvbmFsIGluZGljYXRpb24KLS0tIHNoYXBlT2ZMb2NhdGlvbkVzdGltYXRlTm90U3VwcG9ydGVkLgotLS0gc2FpLVByZXNlbnQgaW5kaWNhdGVzIHRoYXQgdGhlIGNlbGxJZE9yU2FpIHBhcmFtZXRlciBjb250YWlucyBhIFNlcnZpY2UgQXJlYSBJZGVudGl0eS4KLQotQWNjdXJhY3lGdWxmaWxtZW50SW5kaWNhdG9yIDo6PSBFTlVNRVJBVEVEIHsKLQlyZXF1ZXN0ZWRBY2N1cmFjeUZ1bGZpbGxlZCAgKDApLAotCXJlcXVlc3RlZEFjY3VyYWN5Tm90RnVsZmlsbGVkICAoMSksCi0JLi4uCX0KLQotRXh0LUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLm1heEV4dC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbikpCi0JLS0gUmVmZXJzIHRvIGdlb2dyYXBoaWNhbCBJbmZvcm1hdGlvbiBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDMyLgotCS0tIFRoaXMgaXMgY29tcG9zZWQgb2YgMSBvciBtb3JlIG9jdGV0cyB3aXRoIGFuIGludGVybmFsIHN0cnVjdHVyZSBhY2NvcmRpbmcgdG8KLQktLSAzR1BQIFRTIDIzLjAzMgotCS0tIE9jdGV0IDE6IFR5cGUgb2Ygc2hhcGUsIG9ubHkgdGhlIGZvbGxvd2luZyBzaGFwZXMgaW4gM0dQUCBUUyAyMy4wMzIgYXJlIGFsbG93ZWQ6Ci0JLS0JCShhKSBFbGxpcHNvaWQgcG9pbnQgd2l0aCB1bmNlcnRhaW50eSBjaXJjbGUKLQktLQkJKGIpIEVsbGlwc29pZCBwb2ludCB3aXRoIHVuY2VydGFpbnR5IGVsbGlwc2UKLQktLQkJKGMpIEVsbGlwc29pZCBwb2ludCB3aXRoIGFsdGl0dWRlIGFuZCB1bmNlcnRhaW50eSBlbGxpcHNvaWQKLQktLQkJKGQpIEVsbGlwc29pZCBBcmMKLQktLQkJKGUpIEVsbGlwc29pZCBQb2ludAotCS0tIEFueSBvdGhlciB2YWx1ZSBpbiBvY3RldCAxIHNoYWxsIGJlIHRyZWF0ZWQgYXMgaW52YWxpZAotCS0tIE9jdGV0cyAyIHRvIDggZm9yIGNhc2UgKGEpIJYgRWxsaXBzb2lkIHBvaW50IHdpdGggdW5jZXJ0YWludHkgY2lyY2xlCi0JLS0JCURlZ3JlZXMgb2YgTGF0aXR1ZGUJCQkJMyBvY3RldHMKLQktLQkJRGVncmVlcyBvZiBMb25naXR1ZGUJCQkJMyBvY3RldHMKLQktLQkJVW5jZXJ0YWludHkgY29kZQkJCQkxIG9jdGV0Ci0JLS0gT2N0ZXRzIDIgdG8gMTEgZm9yIGNhc2UgKGIpIJYgRWxsaXBzb2lkIHBvaW50IHdpdGggdW5jZXJ0YWludHkgZWxsaXBzZToKLQktLQkJRGVncmVlcyBvZiBMYXRpdHVkZQkJCQkzIG9jdGV0cwotCS0tCQlEZWdyZWVzIG9mIExvbmdpdHVkZQkJCQkzIG9jdGV0cwotCS0tCQlVbmNlcnRhaW50eSBzZW1pLW1ham9yIGF4aXMJCQkJMSBvY3RldAotCS0tCQlVbmNlcnRhaW50eSBzZW1pLW1pbm9yIGF4aXMJCQkJMSBvY3RldAotCS0tCQlBbmdsZSBvZiBtYWpvciBheGlzCQkJCTEgb2N0ZXQKLQktLQkJQ29uZmlkZW5jZQkJCQkxIG9jdGV0Ci0JLS0gT2N0ZXRzIDIgdG8gMTQgZm9yIGNhc2UgKGMpIJYgRWxsaXBzb2lkIHBvaW50IHdpdGggYWx0aXR1ZGUgYW5kIHVuY2VydGFpbnR5IGVsbGlwc29pZAotCS0tCQlEZWdyZWVzIG9mIExhdGl0dWRlCQkJCTMgb2N0ZXRzCi0JLS0JCURlZ3JlZXMgb2YgTG9uZ2l0dWRlCQkJCTMgb2N0ZXRzCi0JLS0JCUFsdGl0dWRlCQkJCTIgb2N0ZXRzCi0JLS0JCVVuY2VydGFpbnR5IHNlbWktbWFqb3IgYXhpcwkJCQkxIG9jdGV0Ci0JLS0JCVVuY2VydGFpbnR5IHNlbWktbWlub3IgYXhpcwkJCQkxIG9jdGV0Ci0JLS0JCUFuZ2xlIG9mIG1ham9yIGF4aXMJCQkJMSBvY3RldAotCS0tCQlVbmNlcnRhaW50eSBhbHRpdHVkZQkJCQkxIG9jdGV0Ci0JLS0JCUNvbmZpZGVuY2UJCQkJMSBvY3RldAotCS0tIE9jdGV0cyAyIHRvIDEzIGZvciBjYXNlIChkKSCWIEVsbGlwc29pZCBBcmMKLQktLQkJRGVncmVlcyBvZiBMYXRpdHVkZQkJCQkzIG9jdGV0cwotCS0tCQlEZWdyZWVzIG9mIExvbmdpdHVkZQkJCQkzIG9jdGV0cwotCS0tCQlJbm5lciByYWRpdXMJCQkJMiBvY3RldHMKLQktLQkJVW5jZXJ0YWludHkgcmFkaXVzCQkJCTEgb2N0ZXQKLQktLQkJT2Zmc2V0IGFuZ2xlCQkJCTEgb2N0ZXQKLQktLQkJSW5jbHVkZWQgYW5nbGUJCQkJMSBvY3RldAotCS0tCQlDb25maWRlbmNlCQkJCTEgb2N0ZXQKLQktLSBPY3RldHMgMiB0byA3IGZvciBjYXNlIChlKSCWIEVsbGlwc29pZCBQb2ludAotCS0tCQlEZWdyZWVzIG9mIExhdGl0dWRlCQkJCTMgb2N0ZXRzCi0JLS0JCURlZ3JlZXMgb2YgTG9uZ2l0dWRlCQkJCTMgb2N0ZXRzCi0KLQktLQotCS0tIEFuIEV4dC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbiBwYXJhbWV0ZXIgY29tcHJpc2luZyBtb3JlIHRoYW4gb25lIG9jdGV0IGFuZAotCS0tIGNvbnRhaW5pbmcgYW55IG90aGVyIHNoYXBlIG9yIGFuIGluY29ycmVjdCBudW1iZXIgb2Ygb2N0ZXRzIG9yIGNvZGluZyBhY2NvcmRpbmcKLQktLSB0byAzR1BQIFRTIDIzLjAzMiBzaGFsbCBiZSB0cmVhdGVkIGFzIGludmFsaWQgZGF0YSBieSBhIHJlY2VpdmVyLgotCS0tCi0JLS0gQW4gRXh0LUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uIHBhcmFtZXRlciBjb21wcmlzaW5nIG9uZSBvY3RldCBzaGFsbCBiZSBkaXNjYXJkZWQKLQktLSBieSB0aGUgcmVjZWl2ZXIgaWYgYW4gQWRkLUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uIHBhcmFtZXRlciBpcyByZWNlaXZlZCAKLQktLSBpbiB0aGUgc2FtZSBtZXNzYWdlLgotCS0tCi0JLS0gQW4gRXh0LUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uIHBhcmFtZXRlciBjb21wcmlzaW5nIG9uZSBvY3RldCBzaGFsbCBiZSB0cmVhdGVkIGFzCi0JLS0gaW52YWxpZCBkYXRhIGJ5IHRoZSByZWNlaXZlciBpZiBhbiBBZGQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24gcGFyYW1ldGVyIGlzIG5vdAotCS0tIHJlY2VpdmVkIGluIHRoZSBzYW1lIG1lc3NhZ2UuCi0KLW1heEV4dC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbiAgSU5URUdFUiA6Oj0gMjAKLQktLSB0aGUgbWF4aW11bSBsZW5ndGggYWxsb3dzIGZvciBmdXJ0aGVyIHNoYXBlcyBpbiAzR1BQIFRTIDIzLjAzMiB0byBiZSBpbmNsdWRlZCBpbiBsYXRlciAKLQktLSB2ZXJzaW9ucyBvZiAzR1BQIFRTIDI5LjAwMgotCi1WZWxvY2l0eUVzdGltYXRlIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDQuLjcpKQotCS0tIFJlZmVycyB0byBWZWxvY2l0eSBkZXNjcmlwdGlvbiBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDMyLgotCS0tIFRoaXMgaXMgY29tcG9zZWQgb2YgNCBvciBtb3JlIG9jdGV0cyB3aXRoIGFuIGludGVybmFsIHN0cnVjdHVyZSBhY2NvcmRpbmcgdG8KLQktLSAzR1BQIFRTIDIzLjAzMgotCS0tIE9jdGV0IDE6IFR5cGUgb2YgdmVsb2NpdHksIG9ubHkgdGhlIGZvbGxvd2luZyB0eXBlcyBpbiAzR1BQIFRTIDIzLjAzMiBhcmUgYWxsb3dlZDoKLQktLQkJKGEpIEhvcml6b250YWwgVmVsb2NpdHkKLQktLQkJKGIpIEhvcml6b250YWwgd2l0aCBWZXJ0aWNhbCBWZWxvY2l0eQotCS0tCQkoYykgSG9yaXpvbnRhbCBWZWxvY2l0eSB3aXRoIFVuY2VydGFpbnR5Ci0JLS0JCShkKSBIb3Jpem9udGFsIHdpdGggVmVydGljYWwgVmVsb2NpdHkgYW5kIFVuY2VydGFpbnR5Ci0JLS0gRm9yIHR5cGVzIEhvcml6b250YWwgd2l0aCBWZXJ0aWNhbCBWZWxvY2l0eSBhbmQgSG9yaXpvbnRhbCB3aXRoIFZlcnRpY2FsIFZlbG9jaXR5Ci0JLS0gYW5kIFVuY2VydGFpbnR5LCB0aGUgZGlyZWN0aW9uIG9mIHRoZSBWZXJ0aWNhbCBTcGVlZCBpcyBhbHNvIGluY2x1ZGVkIGluIE9jdGV0IDEKLQktLSBBbnkgb3RoZXIgdmFsdWUgaW4gb2N0ZXQgMSBzaGFsbCBiZSB0cmVhdGVkIGFzIGludmFsaWQKLQktLSBPY3RldHMgMiB0byA0IGZvciBjYXNlIChhKSBIb3Jpem9udGFsIHZlbG9jaXR5OgotCS0tCQlCZWFyaW5nCQkJCTEgb2N0ZXQKLQktLQkJSG9yaXpvbnRhbCBTcGVlZAkJCQkyIG9jdGV0cwotCS0tIE9jdGV0cyAyIHRvIDUgZm9yIGNhc2UgKGIpIJYgSG9yaXpvbnRhbCB3aXRoIFZlcnRpY2FsIFZlbG9jaXR5OgotCS0tCQlCZWFyaW5nCQkJCTEgb2N0ZXQKLQktLQkJSG9yaXpvbnRhbCBTcGVlZAkJCQkyIG9jdGV0cwotCS0tCQlWZXJ0aWNhbCBTcGVlZAkJCQkxIG9jdGV0Ci0JLS0gT2N0ZXRzIDIgdG8gNSBmb3IgY2FzZSAoYykgliBIb3Jpem9udGFsIHZlbG9jaXR5IHdpdGggVW5jZXJ0YWludHk6Ci0JLS0JCUJlYXJpbmcJCQkJMSBvY3RldAotCS0tCQlIb3Jpem9udGFsIFNwZWVkCQkJCTIgb2N0ZXRzCi0JLS0JCVVuY2VydGFpbnR5IFNwZWVkCQkJCTEgb2N0ZXQKLQktLSBPY3RldHMgMiB0byA3IGZvciBjYXNlIChkKSCWIEhvcml6b250YWwgd2l0aCBWZXJ0aWNhbCBWZWxvY2l0eSBhbmQgVW5jZXJ0YWludHk6Ci0JLS0JCUJlYXJpbmcJCQkJMSBvY3RldAotCS0tCQlIb3Jpem9udGFsIFNwZWVkCQkJCTIgb2N0ZXRzCi0JLS0JCVZlcnRpY2FsIFNwZWVkCQkJCTEgb2N0ZXQKLQktLQkJSG9yaXpvbnRhbCBVbmNlcnRhaW50eSBTcGVlZAkJCTEgb2N0ZXQKLQktLQkJVmVydGljYWwgVW5jZXJ0YWludHkgU3BlZWQJCQkJMSBvY3RldAotCi1Qb3NpdGlvbmluZ0RhdGFJbmZvcm1hdGlvbiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgyLi5tYXhQb3NpdGlvbmluZ0RhdGFJbmZvcm1hdGlvbikpCi0JLS0gUmVmZXJzIHRvIHRoZSBQb3NpdGlvbmluZyBEYXRhIGRlZmluZWQgaW4gM0dQUCBUUyA0OS4wMzEuCi0JLS0gVGhpcyBpcyBjb21wb3NlZCBvZiAyIG9yIG1vcmUgb2N0ZXRzIHdpdGggYW4gaW50ZXJuYWwgc3RydWN0dXJlIGFjY29yZGluZyB0bwotCS0tIDNHUFAgVFMgNDkuMDMxLiAKLQotbWF4UG9zaXRpb25pbmdEYXRhSW5mb3JtYXRpb24gSU5URUdFUiA6Oj0gMTAKLQktLSAKLQotVXRyYW5Qb3NpdGlvbmluZ0RhdGFJbmZvIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDMuLm1heFV0cmFuUG9zaXRpb25pbmdEYXRhSW5mbykpCi0JLS0gUmVmZXJzIHRvIHRoZSBQb3NpdGlvbiBEYXRhIGRlZmluZWQgaW4gM0dQUCBUUyAyNS40MTMuCi0JLS0gVGhpcyBpcyBjb21wb3NlZCBvZiB0aGUgcG9zaXRpb25pbmdEYXRhRGlzY3JpbWluYXRvciBhbmQgdGhlIHBvc2l0aW9uaW5nRGF0YVNldAotCS0tIGluY2x1ZGVkIGluIHBvc2l0aW9uRGF0YSBhcyBkZWZpbmVkIGluIDNHUFAgVFMgMjUuNDEzLgotCi1tYXhVdHJhblBvc2l0aW9uaW5nRGF0YUluZm8gSU5URUdFUiA6Oj0gMTEKLQktLSAKLQotQWRkLUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLm1heEFkZC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbikpCi0JLS0gUmVmZXJzIHRvIGdlb2dyYXBoaWNhbCBJbmZvcm1hdGlvbiBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDMyLgotCS0tIFRoaXMgaXMgY29tcG9zZWQgb2YgMSBvciBtb3JlIG9jdGV0cyB3aXRoIGFuIGludGVybmFsIHN0cnVjdHVyZSBhY2NvcmRpbmcgdG8gCi0JLS0gM0dQUCBUUyAyMy4wMzIKLQktLSBPY3RldCAxOiBUeXBlIG9mIHNoYXBlLCBhbGwgdGhlIHNoYXBlcyBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDMyIGFyZSBhbGxvd2VkOgotCS0tIE9jdGV0cyAyIHRvIG4gKHdoZXJlIG4gaXMgdGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgbmVjZXNzYXJ5IHRvIGVuY29kZSB0aGUgc2hhcGUKLQktLSBhY2NvcmRpbmcgdG8gM0dQUCBUUyAyMy4wMzIpIGFyZSB1c2VkIHRvIGVuY29kZSB0aGUgc2hhcGUgaXRzZWxmIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKLQktLSBlbmNvZGluZyBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDMyCi0JLS0KLQktLSBBbiBBZGQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24gcGFyYW1ldGVyLCB3aGV0aGVyIHZhbGlkIG9yIGludmFsaWQsIHJlY2VpdmVkIAotCS0tIHRvZ2V0aGVyIHdpdGggYSB2YWxpZCBFeHQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24gcGFyYW1ldGVyIGluIHRoZSBzYW1lIG1lc3NhZ2UgCi0JLS0gc2hhbGwgYmUgZGlzY2FyZGVkLgotCS0tCi0JLS0gQW4gQWRkLUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uIHBhcmFtZXRlciBjb250YWluaW5nIGFueSBzaGFwZSBub3QgZGVmaW5lZCBpbiAKLQktLSAzR1BQIFRTIDIzLjAzMiBvciBhbiBpbmNvcnJlY3QgbnVtYmVyIG9mIG9jdGV0cyBvciBjb2RpbmcgYWNjb3JkaW5nIHRvIAotCS0tIDNHUFAgVFMgMjMuMDMyIHNoYWxsIGJlIHRyZWF0ZWQgYXMgaW52YWxpZCBkYXRhIGJ5IGEgcmVjZWl2ZXIgaWYgbm90IHJlY2VpdmVkIAotCS0tIHRvZ2V0aGVyIHdpdGggYSB2YWxpZCBFeHQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24gcGFyYW1ldGVyIGluIHRoZSBzYW1lIG1lc3NhZ2UuCi0KLW1heEFkZC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbiAgSU5URUdFUiA6Oj0gOTEKLQktLSB0aGUgbWF4aW11bSBsZW5ndGggYWxsb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc2hhcGVzIGN1cnJlbnRseSBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDMyCi0KLVN1YnNjcmliZXJMb2NhdGlvblJlcG9ydC1BcmcgOjo9IFNFUVVFTkNFIHsKLQlsY3MtRXZlbnQJCUxDUy1FdmVudCwKLQlsY3MtQ2xpZW50SUQJTENTLUNsaWVudElELCAKLQlsY3NMb2NhdGlvbkluZm8JTENTTG9jYXRpb25JbmZvLAotCW1zaXNkbgkJWzBdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKLQlpbXNpCQkJWzFdIElNU0kJCU9QVElPTkFMLAotCWltZWkJCQlbMl0gSU1FSQkJT1BUSU9OQUwsCi0JbmEtRVNSRAkJWzNdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKLQluYS1FU1JLCQlbNF0gSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAotCWxvY2F0aW9uRXN0aW1hdGUJWzVdIEV4dC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbglPUFRJT05BTCwKLQlhZ2VPZkxvY2F0aW9uRXN0aW1hdGUJWzZdIEFnZU9mTG9jYXRpb25JbmZvcm1hdGlvbglPUFRJT05BTCwKLQlzbHItQXJnRXh0ZW5zaW9uQ29udGFpbmVyCVs3XSBTTFItQXJnRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiAsCi0JYWRkLUxvY2F0aW9uRXN0aW1hdGUJWzhdIEFkZC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbglPUFRJT05BTCwKLQlkZWZlcnJlZG10LWxyRGF0YQlbOV0gRGVmZXJyZWRtdC1sckRhdGEJT1BUSU9OQUwsIAotCWxjcy1SZWZlcmVuY2VOdW1iZXIJWzEwXSBMQ1MtUmVmZXJlbmNlTnVtYmVyCU9QVElPTkFMLAotCWdlcmFuUG9zaXRpb25pbmdEYXRhCVsxMV0gUG9zaXRpb25pbmdEYXRhSW5mb3JtYXRpb24JT1BUSU9OQUwsCi0JdXRyYW5Qb3NpdGlvbmluZ0RhdGEJWzEyXSBVdHJhblBvc2l0aW9uaW5nRGF0YUluZm8JT1BUSU9OQUwsCi0JY2VsbElkT3JTYWkJWzEzXQlDZWxsR2xvYmFsSWRPclNlcnZpY2VBcmVhSWRPckxBSQlPUFRJT05BTCwKLQloLWdtbGMtQWRkcmVzcwlbMTRdCUdTTi1BZGRyZXNzCU9QVElPTkFMLAotCWxjc1NlcnZpY2VUeXBlSUQJWzE1XQlMQ1NTZXJ2aWNlVHlwZUlECU9QVElPTkFMLAotCXNhaS1QcmVzZW50CVsxN10gTlVMTAkJT1BUSU9OQUwsCi0JcHNldWRvbnltSW5kaWNhdG9yCVsxOF0gTlVMTAkJT1BUSU9OQUwsCi0JYWNjdXJhY3lGdWxmaWxtZW50SW5kaWNhdG9yCVsxOV0gQWNjdXJhY3lGdWxmaWxtZW50SW5kaWNhdG9yCU9QVElPTkFMLAotCXZlbG9jaXR5RXN0aW1hdGUJWzIwXSBWZWxvY2l0eUVzdGltYXRlCU9QVElPTkFMLAotCXNlcXVlbmNlTnVtYmVyCVsyMV0gU2VxdWVuY2VOdW1iZXIJT1BUSU9OQUwsCi0JcGVyaW9kaWNMRFJJbmZvCVsyMl0gUGVyaW9kaWNMRFJJbmZvCU9QVElPTkFMLAotCW1vLWxyU2hvcnRDaXJjdWl0SW5kaWNhdG9yCVsyM10gTlVMTAkJT1BUSU9OQUwgfQotCi0JLS0gb25lIG9mIG1zaXNkbiBvciBpbXNpIGlzIG1hbmRhdG9yeQotCS0tIGEgbG9jYXRpb24gZXN0aW1hdGUgdGhhdCBpcyB2YWxpZCBmb3IgdGhlIGxvY2F0aW9uRXN0aW1hdGUgcGFyYW1ldGVyIHNob3VsZCAKLQktLSBiZSB0cmFuc2ZlcnJlZCBpbiB0aGlzIHBhcmFtZXRlciBpbiBwcmVmZXJlbmNlIHRvIHRoZSBhZGQtTG9jYXRpb25Fc3RpbWF0ZS4KLQktLSB0aGUgZGVmZXJyZWRtdC1sckRhdGEgcGFyYW1ldGVyIHNoYWxsIGJlIGluY2x1ZGVkIGlmIGFuZCBvbmx5IGlmIHRoZSBsY3MtRXZlbnQKLQktLSBpbmRpY2F0ZXMgYSBkZWZlcnJlZG10LWxyUmVzcG9uc2UuCi0JLS0gaWYgdGhlIGxjcy1FdmVudCBpbmRpY2F0ZXMgYSBkZWZlcnJlZG10LWxyUmVzcG9uc2UgdGhlbiB0aGUgbG9jYXRpb25Fc3RpbWF0ZSAKLQktLSBhbmQgdGhlIGFkZC1sb2NhdGlvbkVzdGltYXRlIHBhcmFtZXRlcnMgc2hhbGwgbm90IGJlIHNlbnQgaWYgdGhlIAotCS0tIHN1cHBvcnRlZEdBRFNoYXBlcyBwYXJhbWV0ZXIgaGFkIGJlZW4gcmVjZWl2ZWQgaW4gUHJvdmlkZVN1YnNjcmliZXJMb2NhdGlvbi1BcmcKLQktLSBhbmQgdGhlIHNoYXBlIGVuY29kZWQgaW4gbG9jYXRpb25Fc3RpbWF0ZSBvciBhZGQtTG9jYXRpb25Fc3RpbWF0ZSB3YXMgbm90IG1hcmtlZAotCS0tIGFzIHN1cHBvcnRlZCBpbiBzdXBwb3J0ZWRHQURTaGFwZXMuIEluIHN1Y2ggYSBjYXNlIHRlcm1pbmF0aW9uQ2F1c2UgCi0JLS0gaW4gZGVmZXJyZWRtdC1sckRhdGEgc2hhbGwgYmUgcHJlc2VudCB3aXRoIHZhbHVlIAotCS0tIHNoYXBlT2ZMb2NhdGlvbkVzdGltYXRlTm90U3VwcG9ydGVkLiAKLQktLSBJZiBhIGxjcyBldmVudCBpbmRpY2F0ZXMgZGVmZXJyZWQgbXQtbHIgcmVzcG9uc2UsIHRoZSBsY3MtUmVmZXJlbmNlIG51bWJlciBzaGFsbCBiZSAKLQktLSBpbmNsdWRlZC4gCi0JLS0gc2FpLVByZXNlbnQgaW5kaWNhdGVzIHRoYXQgdGhlIGNlbGxJZE9yU2FpIHBhcmFtZXRlciBjb250YWlucyBhIFNlcnZpY2UgQXJlYSBJZGVudGl0eS4KLQotRGVmZXJyZWRtdC1sckRhdGEgOjo9IFNFUVVFTkNFIHsKLQlkZWZlcnJlZExvY2F0aW9uRXZlbnRUeXBlCURlZmVycmVkTG9jYXRpb25FdmVudFR5cGUsCi0JdGVybWluYXRpb25DYXVzZQlbMF0gVGVybWluYXRpb25DYXVzZQlPUFRJT05BTCwKLQlsY3NMb2NhdGlvbkluZm8JWzFdIExDU0xvY2F0aW9uSW5mbwlPUFRJT05BTCwKLQkuLi59Ci0JLS0gbGNzTG9jYXRpb25JbmZvIG1heSBiZSBpbmNsdWRlZCBvbmx5IGlmIGEgdGVybWluYXRpb25DYXVzZSBpcyBwcmVzZW50IAotCS0tIGluZGljYXRpbmcgbXQtbHJSZXN0YXJ0LgotCi1MQ1MtRXZlbnQgOjo9IEVOVU1FUkFURUQgewotCWVtZXJnZW5jeUNhbGxPcmlnaW5hdGlvbiAgKDApLAotCWVtZXJnZW5jeUNhbGxSZWxlYXNlICAoMSksIAotCW1vLWxyICAoMiksCi0JLi4uLAotCWRlZmVycmVkbXQtbHJSZXNwb25zZSAgKDMpICwKLQlkZWZlcnJlZG1vLWxyVFRUUEluaXRpYXRpb24gICg0KSAgfQotCS0tCWRlZmVycmVkbXQtbHJSZXNwb25zZSBpcyBhcHBsaWNhYmxlIHRvIHRoZSBkZWxpdmVyeSBvZiBhIGxvY2F0aW9uIGVzdGltYXRlIAotCS0tCWZvciBhbiBMRFIgaW5pdGlhdGVkIGVhcmxpZXIgYnkgZWl0aGVyIHRoZSBuZXR3b3JrICh2aWEgYW4gTVQtTFIgYWN0aXZhdGUgZGVmZXJyZWQgCi0JLS0JbG9jYXRpb24pIG9yIHRoZSBVRSAodmlhIGEgZGVmZXJyZWQgTU8tTFIgVFRUUCBpbml0aWF0aW9uKQotCS0tCWV4Y2VwdGlvbiBoYW5kbGluZzoKLQktLQlhIFN1YnNjcmliZXJMb2NhdGlvblJlcG9ydC1BcmcgY29udGFpbmluZyBhbiB1bnJlY29nbml6ZWQgTENTLUV2ZW50Ci0JLS0Jc2hhbGwgYmUgcmVqZWN0ZWQgYnkgYSByZWNlaXZlciB3aXRoIGEgcmV0dXJuIGVycm9yIGNhdXNlIG9mIHVuZXhwZWN0ZWQgZGF0YSB2YWx1ZQotCi1UZXJtaW5hdGlvbkNhdXNlIDo6PSBFTlVNRVJBVEVEIHsKLQlub3JtYWwgICgwKSwKLQllcnJvcnVuZGVmaW5lZCAgKDEpLAotCWludGVybmFsVGltZW91dCAgKDIpLAotCWNvbmdlc3Rpb24gICgzKSwKLQltdC1sclJlc3RhcnQgICg0KSwKLQlwcml2YWN5VmlvbGF0aW9uICAoNSksCi0JLi4uLAotCXNoYXBlT2ZMb2NhdGlvbkVzdGltYXRlTm90U3VwcG9ydGVkICg2KSAsCi0Jc3Vic2NyaWJlclRlcm1pbmF0aW9uICg3KSwKLQl1RVRlcm1pbmF0aW9uICg4KSwKLQluZXR3b3JrVGVybWluYXRpb24gKDkpICB9IAotLS0gbXQtbHJSZXN0YXJ0IHNoYWxsIGJlIHVzZWQgdG8gdHJpZ2dlciB0aGUgR01MQyB0byByZXN0YXJ0IHRoZSBsb2NhdGlvbiBwcm9jZWR1cmUsIAotLS0gZWl0aGVyIGJlY2F1c2UgdGhlIHNlbmRpbmcgbm9kZSBrbm93cyB0aGF0IHRoZSB0ZXJtaW5hbCBoYXMgbW92ZWQgdW5kZXIgY292ZXJhZ2UgCi0tLSBvZiBhbm90aGVyIE1TQyBvciBTR1NOIChlLmcuIFNlbmQgSWRlbnRpZmljYXRpb24gcmVjZWl2ZWQpLCBvciBiZWNhdXNlIHRoZSBzdWJzY3JpYmVyCi0tLSBoYXMgYmVlbiBkZXJlZ2lzdGVyZWQgZHVlIHRvIGEgQ2FuY2VsIExvY2F0aW9uIHJlY2VpdmVkIGZyb20gSExSLgotLS0KLS0tIGV4Y2VwdGlvbiBoYW5kbGluZwotLS0gYW4gdW5yZWNvZ25pemVkIHZhbHVlIHNoYWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgdmFsdWUgMSAoZXJyb3J1bmRlZmluZWQpIAotCi1TZXF1ZW5jZU51bWJlciA6Oj0gSU5URUdFUiAoMS4ubWF4UmVwb3J0aW5nQW1vdW50KQotCi1TdWJzY3JpYmVyTG9jYXRpb25SZXBvcnQtUmVzIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwgCi0JLi4uLCAKLQluYS1FU1JLCQlbMF0gSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAotCW5hLUVTUkQJCVsxXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCi0JaC1nbWxjLUFkZHJlc3MJWzJdCUdTTi1BZGRyZXNzCU9QVElPTkFMLAotCW1vLWxyU2hvcnRDaXJjdWl0SW5kaWNhdG9yCVszXSBOVUxMCQlPUFRJT05BTCwKLQlyZXBvcnRpbmdQTE1OTGlzdAlbNF0gUmVwb3J0aW5nUExNTkxpc3QJT1BUSU9OQUwsCi0JbGNzLVJlZmVyZW5jZU51bWJlcglbNV0JTENTLVJlZmVyZW5jZU51bWJlcglPUFRJT05BTCB9Ci0KLS0tIG5hLUVTUksgYW5kIG5hLUVTUkQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQotLS0KLS0tIGV4Y2VwdGlvbiBoYW5kbGluZwotLS0gcmVjZWlwdCBvZiBib3RoIG5hLUVTUksgYW5kIG5hLUVTUkQgc2hhbGwgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBhIHJldHVybiBlcnJvcgotCi0KLUVORAotCmRpZmYgLS1naXQgYS9ycmxwLWVwaGVtZXJpcy9hc24xL01BUC1NUy1EYXRhVHlwZXMuYXNuIGIvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtTVMtRGF0YVR5cGVzLmFzbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMxMmEwMi4uMDAwMDAwMAotLS0gYS9ycmxwLWVwaGVtZXJpcy9hc24xL01BUC1NUy1EYXRhVHlwZXMuYXNuCisrKyAvZGV2L251bGwKQEAgLTEsMjc4MCArMCwwIEBACi0tLSAkSWQ6IE1BUC1NUy1EYXRhVHlwZXMuYXNuIDI4MTQ5IDIwMDktMDQtMjUgMTc6NDU6MzRaIGV0eHJhYiAkCi0tLSAzR1BQIFRTIDI5LjAwMiBWOC45LjAgKDIwMDktMDQpIAotLS0gMTcuNy4xCU1vYmlsZSBTZXJ2aWNlIGRhdGEgdHlwZXMKLQotTUFQLU1TLURhdGFUeXBlcyB7Ci0gICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1NUy1EYXRhVHlwZXMgKDExKSB2ZXJzaW9uMTEgKDExKX0KLQotREVGSU5JVElPTlMKLQotSU1QTElDSVQgVEFHUwotCi06Oj0KLQotQkVHSU4KLQotRVhQT1JUUwotCi0JLS0gbG9jYXRpb24gcmVnaXN0cmF0aW9uIHR5cGVzCi0JVXBkYXRlTG9jYXRpb25BcmcsCi0JVXBkYXRlTG9jYXRpb25SZXMsCi0JQ2FuY2VsTG9jYXRpb25BcmcsCi0JQ2FuY2VsTG9jYXRpb25SZXMsIAotCVB1cmdlTVMtQXJnLCAKLQlQdXJnZU1TLVJlcywKLQlTZW5kSWRlbnRpZmljYXRpb25BcmcsCi0JU2VuZElkZW50aWZpY2F0aW9uUmVzLCAKLQlVcGRhdGVHcHJzTG9jYXRpb25BcmcsCi0JVXBkYXRlR3Byc0xvY2F0aW9uUmVzLAotCUlTVC1TdXBwb3J0SW5kaWNhdG9yLCAKLQlTdXBwb3J0ZWRMQ1MtQ2FwYWJpbGl0eVNldHMsCi0KLQktLSBncHJzIGxvY2F0aW9uIHJlZ2lzdHJhdGlvbiB0eXBlcwotCUdTTi1BZGRyZXNzLAotCi0JLS0gaGFuZG92ZXIgdHlwZXMKLQlGb3J3YXJkQWNjZXNzU2lnbmFsbGluZy1BcmcsCi0JUHJlcGFyZUhPLUFyZywKLQlQcmVwYXJlSE8tUmVzLAotCVByZXBhcmVTdWJzZXF1ZW50SE8tQXJnLCAKLQlQcmVwYXJlU3Vic2VxdWVudEhPLVJlcywKLQlQcm9jZXNzQWNjZXNzU2lnbmFsbGluZy1BcmcsCi0JU2VuZEVuZFNpZ25hbC1BcmcsCi0JU2VuZEVuZFNpZ25hbC1SZXMsCi0KLQktLSBhdXRoZW50aWNhdGlvbiBtYW5hZ2VtZW50IHR5cGVzCi0JU2VuZEF1dGhlbnRpY2F0aW9uSW5mb0FyZywKLQlTZW5kQXV0aGVudGljYXRpb25JbmZvUmVzLCAKLQlBdXRoZW50aWNhdGlvbkZhaWx1cmVSZXBvcnRBcmcsCi1BdXRoZW50aWNhdGlvbkZhaWx1cmVSZXBvcnRSZXMsCi0KLQktLSBzZWN1cml0eSBtYW5hZ2VtZW50IHR5cGVzCi0JS2MsIAotCUNrc24sCi0KLQktLSBlcXVpcG1lbnQgbWFuYWdlbWVudCB0eXBlcwotCUNoZWNrSU1FSS1BcmcsCi0JQ2hlY2tJTUVJLVJlcywKLQotCS0tIHN1YnNjcmliZXIgbWFuYWdlbWVudCB0eXBlcwotCUluc2VydFN1YnNjcmliZXJEYXRhQXJnLAotCUluc2VydFN1YnNjcmliZXJEYXRhUmVzLCAKLQlMU0FJZGVudGl0eSwKLQlEZWxldGVTdWJzY3JpYmVyRGF0YUFyZywKLQlEZWxldGVTdWJzY3JpYmVyRGF0YVJlcywKLQlFeHQtUW9TLVN1YnNjcmliZWQsCi0JRXh0Mi1Rb1MtU3Vic2NyaWJlZCwgCi0JRXh0My1Rb1MtU3Vic2NyaWJlZCwKLQlTdWJzY3JpYmVyRGF0YSwKLQlPREItRGF0YSwKLQlTdWJzY3JpYmVyU3RhdHVzLAotCVpvbmVDb2RlTGlzdCwKLQltYXhOdW1PZlpvbmVDb2RlcywgCi0JTy1DU0ksIAotRC1DU0ksCi0JTy1CY3NtQ2FtZWxURFBDcml0ZXJpYUxpc3QsIAotCVQtQkNTTS1DQU1FTC1URFAtQ3JpdGVyaWFMaXN0LAotCVNTLUNTSSwKLQlTZXJ2aWNlS2V5LAotCURlZmF1bHRDYWxsSGFuZGxpbmcsCi0JQ2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcsCi0JQmFzaWNTZXJ2aWNlQ3JpdGVyaWEsCi0JU3VwcG9ydGVkQ2FtZWxQaGFzZXMsCi0JT2ZmZXJlZENhbWVsNENTSXMsCi0JT2ZmZXJlZENhbWVsNEZ1bmN0aW9uYWxpdGllcywKLQltYXhOdW1PZkNhbWVsVERQRGF0YSwKLQlDVUctSW5kZXgsIAotCUNVRy1JbmZvLAotCUNVRy1JbnRlcmxvY2ssCi0JSW50ZXJDVUctUmVzdHJpY3Rpb25zLAotCUludHJhQ1VHLU9wdGlvbnMsCi0JTm90aWZpY2F0aW9uVG9NU1VzZXIsIAotCVFvUy1TdWJzY3JpYmVkLAotSVNULUFsZXJ0VGltZXJWYWx1ZSwKLQlULUNTSSwKLQlULUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQsCi1BUE4sCi1BZGRpdGlvbmFsSW5mbywKLQotCS0tIGZhdWx0IHJlY292ZXJ5IHR5cGVzCi0JUmVzZXRBcmcsCi0JUmVzdG9yZURhdGFBcmcsCi0JUmVzdG9yZURhdGFSZXMsCi0KLS0tIHByb3ZpZGUgc3Vic2NyaWJlciBpbmZvIHR5cGVzIAotR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24sIAotTVMtQ2xhc3NtYXJrMiwKLUdQUlNNU0NsYXNzLAotCi0JLS0gc3Vic2NyaWJlciBpbmZvcm1hdGlvbiBlbnF1aXJ5IHR5cGVzCi0JUHJvdmlkZVN1YnNjcmliZXJJbmZvQXJnLAotCVByb3ZpZGVTdWJzY3JpYmVySW5mb1JlcywKLQlTdWJzY3JpYmVySW5mbywKLQlMb2NhdGlvbkluZm9ybWF0aW9uLAotCUxvY2F0aW9uSW5mb3JtYXRpb25HUFJTLAotCVJBSWRlbnRpdHksCi0JU3Vic2NyaWJlclN0YXRlLAotCUdQUlNDaGFyZ2luZ0lELCAKLU1OUEluZm9SZXMsCi0JUm91dGVpbmdOdW1iZXIsCi0KLQktLSBhbnkgdGltZSBpbmZvcm1hdGlvbiBlbnF1aXJ5IHR5cGVzCi0JQW55VGltZUludGVycm9nYXRpb25BcmcsCi0JQW55VGltZUludGVycm9nYXRpb25SZXMsCi0KLQktLSBhbnkgdGltZSBpbmZvcm1hdGlvbiBoYW5kbGluZyB0eXBlcwotCUFueVRpbWVTdWJzY3JpcHRpb25JbnRlcnJvZ2F0aW9uQXJnLAotCUFueVRpbWVTdWJzY3JpcHRpb25JbnRlcnJvZ2F0aW9uUmVzLAotCUFueVRpbWVNb2RpZmljYXRpb25BcmcsCi0JQW55VGltZU1vZGlmaWNhdGlvblJlcywKLQotCS0tIHN1YnNjcmliZXIgZGF0YSBtb2RpZmljYXRpb24gbm90aWZpY2F0aW9uIHR5cGVzCi0JTm90ZVN1YnNjcmliZXJEYXRhTW9kaWZpZWRBcmcsCi0JTm90ZVN1YnNjcmliZXJEYXRhTW9kaWZpZWRSZXMsCi0KLQktLSBncHJzIGxvY2F0aW9uIGluZm9ybWF0aW9uIHJldHJpZXZhbCB0eXBlcwotCVNlbmRSb3V0aW5nSW5mb0ZvckdwcnNBcmcsCi0JU2VuZFJvdXRpbmdJbmZvRm9yR3Byc1JlcywKLQotCS0tIGZhaWx1cmUgcmVwb3J0aW5nIHR5cGVzCi0JRmFpbHVyZVJlcG9ydEFyZywKLQlGYWlsdXJlUmVwb3J0UmVzLAotCi0JLS0gZ3BycyBub3RpZmljYXRpb24gdHlwZXMKLQlOb3RlTXNQcmVzZW50Rm9yR3Byc0FyZywKLQlOb3RlTXNQcmVzZW50Rm9yR3Byc1JlcywKLQotCS0tIE1vYmlsaXR5IE1hbmFnZW1lbnQgdHlwZXMKLU5vdGVNTS1FdmVudEFyZywKLQlOb3RlTU0tRXZlbnRSZXMsCi0JTnVtYmVyUG9ydGFiaWxpdHlTdGF0dXMsCi0JUGFnaW5nQXJlYSwKLQotCS0tIFZHQ1MgLyBWQlMgdHlwZXMgdHlwZXMKLUdyb3VwSWQsIAotTG9uZy1Hcm91cElkLAotQWRkaXRpb25hbFN1YnNjcmlwdGlvbnMKLQotOwotCi1JTVBPUlRTCi0JbWF4TnVtT2ZTUywKLQlTUy1TdWJzY3JpcHRpb25PcHRpb24sCi0JU1MtTGlzdCwKLQlTUy1Gb3JCUy1Db2RlLAotCVBhc3N3b3JkCi1GUk9NIE1BUC1TUy1EYXRhVHlwZXMgewotICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKLSAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtU1MtRGF0YVR5cGVzICgxNCkgdmVyc2lvbjExICgxMSl9Ci0KLQlTUy1Db2RlCi1GUk9NIE1BUC1TUy1Db2RlIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLVNTLUNvZGUgKDE1KSB2ZXJzaW9uMTEgKDExKX0KLQotCUV4dC1CZWFyZXJTZXJ2aWNlQ29kZQotRlJPTSBNQVAtQlMtQ29kZSB7Ci0gICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1CUy1Db2RlICgyMCkgdmVyc2lvbjExICgxMSl9Ci0KLQlFeHQtVGVsZXNlcnZpY2VDb2RlCi1GUk9NIE1BUC1UUy1Db2RlIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLVRTLUNvZGUgKDE5KSB2ZXJzaW9uMTEgKDExKX0KLQotCUFkZHJlc3NTdHJpbmcsCi1JU0ROLUFkZHJlc3NTdHJpbmcsIAotCUlTRE4tU3ViYWRkcmVzc1N0cmluZywgCi0JRlROLUFkZHJlc3NTdHJpbmcsCi0JQWNjZXNzTmV0d29ya1NpZ25hbEluZm8sCi0JSU1TSSwgCi0JSU1FSSwKLQlUTVNJLAotCUhMUi1MaXN0LAotCUxNU0ksCi0JSWRlbnRpdHksCi0JR2xvYmFsQ2VsbElkLAotCUNlbGxHbG9iYWxJZE9yU2VydmljZUFyZWFJZE9yTEFJLAotCUV4dC1CYXNpY1NlcnZpY2VDb2RlLAotCU5BRUEtUHJlZmVycmVkQ0ksCi0JRU1MUFAtSW5mbywgCi0JTUMtU1MtSW5mbywKLQlTdWJzY3JpYmVySWRlbnRpdHksCi0JQWdlT2ZMb2NhdGlvbkluZm9ybWF0aW9uLAotCUxDU0NsaWVudEV4dGVybmFsSUQsCi0JTENTQ2xpZW50SW50ZXJuYWxJRCwKLQlFeHQtU1MtU3RhdHVzLAotCUxDU1NlcnZpY2VUeXBlSUQsCi0JQVNDSS1DYWxsUmVmZXJlbmNlLAotCVRCQ0QtU1RSSU5HLAotCUxBSUZpeGVkTGVuZ3RoLAotCVBMTU4tSWQsCi1FTUxQUC1Qcmlvcml0eQotRlJPTSBNQVAtQ29tbW9uRGF0YVR5cGVzIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUNvbW1vbkRhdGFUeXBlcyAoMTgpIHZlcnNpb24xMSAoMTEpfQotCi0JRXh0ZW5zaW9uQ29udGFpbmVyCi1GUk9NIE1BUC1FeHRlbnNpb25EYXRhVHlwZXMgewotICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKLSAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtRXh0ZW5zaW9uRGF0YVR5cGVzICgyMSkgdmVyc2lvbjExICgxMSl9Ci0KLQlBYnNlbnRTdWJzY3JpYmVyRGlhZ25vc3RpY1NNCi1GUk9NIE1BUC1FUi1EYXRhVHlwZXMgewotICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKLSAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtRVItRGF0YVR5cGVzICgxNykgdmVyc2lvbjExICgxMSl9Ci0KLQlUcmFjZVByb3BhZ2F0aW9uTGlzdAotRlJPTSBNQVAtT00tRGF0YVR5cGVzIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLU9NLURhdGFUeXBlcyAoMTIpIHZlcnNpb24xMSAoMTEpfQotCi07Ci0KLS0tIGxvY2F0aW9uIHJlZ2lzdHJhdGlvbiB0eXBlcwotCi1VcGRhdGVMb2NhdGlvbkFyZyA6Oj0gU0VRVUVOQ0UgewotCWltc2kJCQlJTVNJLAotCW1zYy1OdW1iZXIJWzFdIElTRE4tQWRkcmVzc1N0cmluZywKLQl2bHItTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZywKLQlsbXNpCQkJWzEwXSBMTVNJCQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiAsCi0JdmxyLUNhcGFiaWxpdHkJWzZdIFZMUi1DYXBhYmlsaXR5CU9QVElPTkFMLAotCWluZm9ybVByZXZpb3VzTmV0d29ya0VudGl0eQlbMTFdCU5VTEwJCU9QVElPTkFMLAotCWNzLUxDUy1Ob3RTdXBwb3J0ZWRCeVVFCVsxMl0JTlVMTAkJT1BUSU9OQUwsCi0Jdi1nbWxjLUFkZHJlc3MJWzJdCUdTTi1BZGRyZXNzCU9QVElPTkFMLAotCWFkZC1pbmZvCQlbMTNdIEFERC1JbmZvCU9QVElPTkFMLAotCXBhZ2luZ0FyZWEJWzE0XSBQYWdpbmdBcmVhCU9QVElPTkFMLAotCXNraXBTdWJzY3JpYmVyRGF0YVVwZGF0ZQlbMTVdIE5VTEwJCU9QVElPTkFMIAotCS0tIFRoZSBza2lwU3Vic2NyaWJlckRhdGFVcGRhdGUgcGFyYW1ldGVyIGluIHRoZSBVcGRhdGVMb2NhdGlvbkFyZyBhbmQgdGhlIEFERC1JbmZvCi0JLS0gc3RydWN0dXJlcyBjYXJyeSB0aGUgc2FtZSBzZW1hbnRpYy4KLQkgfQotCi1WTFItQ2FwYWJpbGl0eSA6Oj0gU0VRVUVOQ0V7Ci0Jc3VwcG9ydGVkQ2FtZWxQaGFzZXMgIAlbMF0gU3VwcG9ydGVkQ2FtZWxQaGFzZXMJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4gLAotCXNvbHNhU3VwcG9ydEluZGljYXRvcglbMl0gTlVMTAkJT1BUSU9OQUwsCi0JaXN0U3VwcG9ydEluZGljYXRvcglbMV0gSVNULVN1cHBvcnRJbmRpY2F0b3IJT1BUSU9OQUwsCi0Jc3VwZXJDaGFyZ2VyU3VwcG9ydGVkSW5TZXJ2aW5nTmV0d29ya0VudGl0eQlbM10gU3VwZXJDaGFyZ2VySW5mbwlPUFRJT05BTCwKLQlsb25nRlROLVN1cHBvcnRlZAlbNF0JTlVMTAkJT1BUSU9OQUwsCi0Jc3VwcG9ydGVkTENTLUNhcGFiaWxpdHlTZXRzCVs1XQlTdXBwb3J0ZWRMQ1MtQ2FwYWJpbGl0eVNldHMJT1BUSU9OQUwsCi0Jb2ZmZXJlZENhbWVsNENTSXMJWzZdIE9mZmVyZWRDYW1lbDRDU0lzCU9QVElPTkFMLAotCXN1cHBvcnRlZFJBVC1UeXBlc0luZGljYXRvcglbN10JU3VwcG9ydGVkUkFULVR5cGVzCU9QVElPTkFMLAotCWxvbmdHcm91cElELVN1cHBvcnRlZAlbOF0JTlVMTAkJT1BUSU9OQUwgfQotCi1TdXBwb3J0ZWRSQVQtVHlwZXM6Oj0gQklUIFNUUklORyB7Ci0JdXRyYW4gICgwKSwKLQlnZXJhbiAgKDEpLAotCWdhbiAgICAoMiksCi0JaS1oc3BhLWV2b2x1dGlvbiAoMyksCi0JZS11dHJhbgkoNCl9IChTSVpFICgyLi44KSkKLQktLSBleGNlcHRpb24gaGFuZGxpbmc6IGJpdHMgNSB0byA3IHNoYWxsIGJlIGlnbm9yZWQgaWYgcmVjZWl2ZWQgYW5kIG5vdCB1bmRlcnN0b29kCi0JIAotCi0KLVN1cGVyQ2hhcmdlckluZm8gOjo9IENIT0lDRSB7Ci0Jc2VuZFN1YnNjcmliZXJEYXRhCVswXSBOVUxMLAotCXN1YnNjcmliZXJEYXRhU3RvcmVkCVsxXSBBZ2VJbmRpY2F0b3IgfQotCi1BZ2VJbmRpY2F0b3IgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uNikpCi0JLS0gVGhlIGludGVybmFsIHN0cnVjdHVyZSBvZiB0aGlzIHBhcmFtZXRlciBpcyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYy4KLQotSVNULVN1cHBvcnRJbmRpY2F0b3IgOjo9ICBFTlVNRVJBVEVEIHsKLQliYXNpY0lTVFN1cHBvcnRlZAkoMCksCi0JaXN0Q29tbWFuZFN1cHBvcnRlZAkoMSksCi0JLi4ufQotLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgotLS0gcmVjZXB0aW9uIG9mIHZhbHVlcyA+IDEgc2hhbGwgYmUgbWFwcGVkIHRvICcgaXN0Q29tbWFuZFN1cHBvcnRlZCAnCi0KLVN1cHBvcnRlZExDUy1DYXBhYmlsaXR5U2V0cyA6Oj0gQklUIFNUUklORyB7Ci0JbGNzQ2FwYWJpbGl0eVNldDEgKDApLAotCWxjc0NhcGFiaWxpdHlTZXQyICgxKSwKLQlsY3NDYXBhYmlsaXR5U2V0MyAoMiksCi0JbGNzQ2FwYWJpbGl0eVNldDQgKDMpICwKLQlsY3NDYXBhYmlsaXR5U2V0NSAoNCkgfSAoU0laRSAoMi4uMTYpKSAKLS0tIENvcmUgbmV0d29yayBzaWduYWxsaW5nIGNhcGFiaWxpdHkgc2V0MSBpbmRpY2F0ZXMgTENTIFJlbGVhc2U5OCBvciBSZWxlYXNlOTkgdmVyc2lvbi4KLS0tIENvcmUgbmV0d29yayBzaWduYWxsaW5nIGNhcGFiaWxpdHkgc2V0MiBpbmRpY2F0ZXMgTENTIFJlbGVhc2U0LgotLS0gQ29yZSBuZXR3b3JrIHNpZ25hbGxpbmcgY2FwYWJpbGl0eSBzZXQzIGluZGljYXRlcyBMQ1MgUmVsZWFzZTUuCi0tLSBDb3JlIG5ldHdvcmsgc2lnbmFsbGluZyBjYXBhYmlsaXR5IHNldDQgaW5kaWNhdGVzIExDUyBSZWxlYXNlNi4KLS0tIENvcmUgbmV0d29yayBzaWduYWxsaW5nIGNhcGFiaWxpdHkgc2V0NSBpbmRpY2F0ZXMgTENTIFJlbGVhc2U3IG9yIGxhdGVyIHZlcnNpb24uCi0tLSBBIG5vZGUgc2hhbGwgbWFyayBpbiB0aGUgQklUIFNUUklORyBhbGwgTENTIGNhcGFiaWxpdHkgc2V0cyBpdCBzdXBwb3J0cy4gCi0tLSBJZiBubyBiaXQgaXMgc2V0IHRoZW4gdGhlIHNlbmRpbmcgbm9kZSBkb2VzIG5vdCBzdXBwb3J0IExDUy4KLS0tIElmIHRoZSBwYXJhbWV0ZXIgaXMgbm90IHNlbnQgYnkgYW4gVkxSIHRoZW4gdGhlIFZMUiBtYXkgc3VwcG9ydCBhdCBtb3N0IGNhcGFiaWxpdHkgc2V0MS4KLS0tIElmIHRoZSBwYXJhbWV0ZXIgaXMgbm90IHNlbnQgYnkgYW4gU0dTTiB0aGVuIG5vIHN1cHBvcnQgZm9yIExDUyBpcyBhc3N1bWVkLgotLS0gQW4gU0dTTiBpcyBub3QgYWxsb3dlZCB0byBpbmRpY2F0ZSBzdXBwb3J0IG9mIGNhcGFiaWxpdHkgc2V0MS4KLS0tIE90aGVyIGJpdHMgdGhhbiBsaXN0ZWQgYWJvdmUgc2hhbGwgYmUgZGlzY2FyZGVkLgotCi1VcGRhdGVMb2NhdGlvblJlcyA6Oj0gU0VRVUVOQ0UgewotCWhsci1OdW1iZXIJSVNETi1BZGRyZXNzU3RyaW5nLAotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCWFkZC1DYXBhYmlsaXR5CU5VTEwJCQlPUFRJT05BTCwKLQlwYWdpbmdBcmVhLUNhcGFiaWxpdHkJWzBdTlVMTAkJCU9QVElPTkFMIH0KLQotQURELUluZm8gOjo9IFNFUVVFTkNFIHsKLQlpbWVpc3YJCVswXSBJTUVJLAotCXNraXBTdWJzY3JpYmVyRGF0YVVwZGF0ZQlbMV0gTlVMTAkJT1BUSU9OQUwsCi0JLS0gVGhlIHNraXBTdWJzY3JpYmVyRGF0YVVwZGF0ZSBwYXJhbWV0ZXIgaW4gdGhlIFVwZGF0ZUxvY2F0aW9uQXJnIGFuZCB0aGUgQURELUluZm8KLQktLSBzdHJ1Y3R1cmVzIGNhcnJ5IHRoZSBzYW1lIHNlbWFudGljLgotCS4uLn0KLQotCi1QYWdpbmdBcmVhIDo6PSBTRVFVRU5DRSBTSVpFICgxLi41KSBPRiBMb2NhdGlvbkFyZWEgCi0KLQotTG9jYXRpb25BcmVhIDo6PSBDSE9JQ0UgewotCWxhaUZpeGVkTGVuZ3RoCVswXSBMQUlGaXhlZExlbmd0aCwKLQlsYWMJCQlbMV0gTEFDfQotCi0KLUxBQyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgyKSkKLQktLSBSZWZlcnMgdG8gTG9jYXRpb24gQXJlYSBDb2RlIG9mIHRoZSBMb2NhdGlvbiBBcmVhIElkZW50aWZpY2F0aW9uIGRlZmluZWQgaW4gCi0gICAgIC0tIDNHUFAgVFMgMjMuMDAzIFsxN10uCi0JLS0gTG9jYXRpb24gQXJlYSBDb2RlIGFjY29yZGluZyB0byAzR1BQIFRTIDI0LjAwOCBbMzVdCi0KLUNhbmNlbExvY2F0aW9uQXJnIDo6PSBbM10gU0VRVUVOQ0UgewotCWlkZW50aXR5CQlJZGVudGl0eSwKLQljYW5jZWxsYXRpb25UeXBlCUNhbmNlbGxhdGlvblR5cGUJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4sCi0JdHlwZU9mVXBkYXRlCVswXSBUeXBlT2ZVcGRhdGUJT1BUSU9OQUwgfQotCi1UeXBlT2ZVcGRhdGUgOjo9IEVOVU1FUkFURUQgewotCXNnc24tY2hhbmdlICgwKSwKLQltbWUtY2hhbmdlICgxKSwKLQkuLi59Ci0JLS0gVHlwZU9mVXBkYXRlIHNoYWxsIGJlIGFic2VudCBpZiBDYW5jZWxsYXRpb25UeXBlIGlzIGRpZmZlcmVudCBmcm9tIHVwZGF0ZVByb2NlZHVyZQotCi1DYW5jZWxsYXRpb25UeXBlIDo6PSBFTlVNRVJBVEVEIHsKLQl1cGRhdGVQcm9jZWR1cmUJKDApLAotCXN1YnNjcmlwdGlvbldpdGhkcmF3CSgxKSwKLQkuLi59Ci0JLS0gVGhlIEhMUiBzaGFsbCBub3Qgc2VuZCB2YWx1ZXMgb3RoZXIgdGhhbiBsaXN0ZWQgYWJvdmUKLQotQ2FuY2VsTG9jYXRpb25SZXMgOjo9IFNFUVVFTkNFIHsKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotUHVyZ2VNUy1BcmcgOjo9IFszXSBTRVFVRU5DRSB7Ci0JaW1zaQkJCUlNU0ksCi0JdmxyLU51bWJlcglbMF0gSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAotCXNnc24tTnVtYmVyCVsxXQlJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLVB1cmdlTVMtUmVzIDo6PSBTRVFVRU5DRSB7Ci0JZnJlZXplVE1TSQlbMF0JTlVMTAkJT1BUSU9OQUwsCi0JZnJlZXplUC1UTVNJCVsxXQlOVUxMCQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQlmcmVlemVNLVRNU0kJWzJdCU5VTEwJCU9QVElPTkFMIH0KLQotU2VuZElkZW50aWZpY2F0aW9uQXJnIDo6PSBTRVFVRU5DRSB7Ci0JdG1zaQkJCVRNU0ksCi0JbnVtYmVyT2ZSZXF1ZXN0ZWRWZWN0b3JzCU51bWJlck9mUmVxdWVzdGVkVmVjdG9ycyAJT1BUSU9OQUwsCi0JLS0gd2l0aGluIGEgZGlhbG9ndWUgbnVtYmVyT2ZSZXF1ZXN0ZWRWZWN0b3JzIHNoYWxsIGJlIHByZXNlbnQgaW4gCi0JLS0gdGhlIGZpcnN0IHNlcnZpY2UgcmVxdWVzdCBhbmQgc2hhbGwgbm90IGJlIHByZXNlbnQgaW4gc3Vic2VxdWVudCBzZXJ2aWNlIHJlcXVlc3RzLiAKLQktLSBJZiByZWNlaXZlZCBpbiBhIHN1YnNlcXVlbnQgc2VydmljZSByZXF1ZXN0IGl0IHNoYWxsIGJlIGRpc2NhcmRlZC4gCi0Jc2VnbWVudGF0aW9uUHJvaGliaXRlZAlOVUxMCQkJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4sCi0JbXNjLU51bWJlcglJU0ROLUFkZHJlc3NTdHJpbmcgCU9QVElPTkFMLAotCXByZXZpb3VzLUxBSQlbMF0gTEFJRml4ZWRMZW5ndGgJT1BUSU9OQUwsCi0JaG9wQ291bnRlcglbMV0gSG9wQ291bnRlcglPUFRJT05BTCB9Ci0KLUhvcENvdW50ZXIgOjo9IElOVEVHRVIgKDAuLjMpCi0KLVNlbmRJZGVudGlmaWNhdGlvblJlcyA6Oj0gWzNdIFNFUVVFTkNFIHsKLQlpbXNpCQkJSU1TSQkJCU9QVElPTkFMLAotCS0tIElNU0kgc2hhbGwgYmUgcHJlc2VudCBpbiB0aGUgZmlyc3QgKG9yIG9ubHkpIHNlcnZpY2UgcmVzcG9uc2Ugb2YgYSBkaWFsb2d1ZS4KLQktLSBJZiBtdWx0aXBsZSBzZXJ2aWNlIHJlcXVlc3RzIGFyZSBwcmVzZW50IGluIGEgZGlhbG9ndWUgdGhlbiBJTVNJCi0JLS0gc2hhbGwgbm90IGJlIHByZXNlbnQgaW4gYW55IHNlcnZpY2UgcmVzcG9uc2Ugb3RoZXIgdGhhbiB0aGUgZmlyc3Qgb25lLgotCWF1dGhlbnRpY2F0aW9uU2V0TGlzdAlBdXRoZW50aWNhdGlvblNldExpc3QJT1BUSU9OQUwsCi0JY3VycmVudFNlY3VyaXR5Q29udGV4dAlbMl1DdXJyZW50U2VjdXJpdHlDb250ZXh0CU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbM10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotLS0gYXV0aGVudGljYXRpb24gbWFuYWdlbWVudCB0eXBlcwotCi1BdXRoZW50aWNhdGlvblNldExpc3QgOjo9IENIT0lDRSB7Ci0JdHJpcGxldExpc3QJWzBdIFRyaXBsZXRMaXN0LAotCXF1aW50dXBsZXRMaXN0CVsxXSBRdWludHVwbGV0TGlzdCB9Ci0KLVRyaXBsZXRMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi41KSBPRgotCQkJCUF1dGhlbnRpY2F0aW9uVHJpcGxldAotCi1RdWludHVwbGV0TGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uNSkgT0YKLQkJCQlBdXRoZW50aWNhdGlvblF1aW50dXBsZXQKLQotQXV0aGVudGljYXRpb25UcmlwbGV0IDo6PSBTRVFVRU5DRSB7Ci0JcmFuZAkJCVJBTkQsCi0Jc3JlcwkJCVNSRVMsCi0Ja2MJCQlLYywKLQkuLi59Ci0KLUF1dGhlbnRpY2F0aW9uUXVpbnR1cGxldCA6Oj0gU0VRVUVOQ0UgewotCXJhbmQJCQlSQU5ELAotCXhyZXMJCQlYUkVTLAotCWNrCQkJQ0ssCi0JaWsJCQlJSywKLQlhdXRuCQkJQVVUTiwKLQkuLi59Ci0KLUN1cnJlbnRTZWN1cml0eUNvbnRleHQgOjo9IENIT0lDRSB7Ci0JZ3NtLVNlY3VyaXR5Q29udGV4dERhdGEJWzBdIEdTTS1TZWN1cml0eUNvbnRleHREYXRhLAotCXVtdHMtU2VjdXJpdHlDb250ZXh0RGF0YQlbMV0gVU1UUy1TZWN1cml0eUNvbnRleHREYXRhIH0KLQotR1NNLVNlY3VyaXR5Q29udGV4dERhdGEgOjo9IFNFUVVFTkNFIHsKLQlrYwkJCUtjLAotCWNrc24JCQlDa3NuLAotCS4uLiB9Ci0KLVVNVFMtU2VjdXJpdHlDb250ZXh0RGF0YSA6Oj0gU0VRVUVOQ0UgewotCWNrCQkJQ0ssCi0JaWsJCQlJSywKLQlrc2kJCQlLU0ksCi0JLi4uIH0KLQotUkFORCA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxNikpCi0KLVNSRVMgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoNCkpCi0KLUtjIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDgpKQotCi1YUkVTIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDQuLjE2KSkKLQotQ0sgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMTYpKQotCi1JSyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxNikpCi0KLUFVVE4gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMTYpKQotCi1BVVRTIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDE0KSkKLQotQ2tzbiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKLQktLSBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gM0dQUCBUUyAyNC4wMDgKLQotS1NJIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQotCS0tIFRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiAzR1BQIFRTIDI0LjAwOAotCi1BdXRoZW50aWNhdGlvbkZhaWx1cmVSZXBvcnRBcmcgOjo9IFNFUVVFTkNFIHsKLQlpbXNpCQkJSU1TSSwKLQlmYWlsdXJlQ2F1c2UJRmFpbHVyZUNhdXNlLAotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uICwKLQlyZS1hdHRlbXB0CUJPT0xFQU4JCU9QVElPTkFMLAotCWFjY2Vzc1R5cGUJQWNjZXNzVHlwZQlPUFRJT05BTCwKLQlyYW5kCQkJUkFORAkJCU9QVElPTkFMLAotCXZsci1OdW1iZXIJWzBdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKLQlzZ3NuLU51bWJlcglbMV0gSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMIH0KLQotQWNjZXNzVHlwZSA6Oj0gRU5VTUVSQVRFRCB7Ci0JY2FsbCAoMCksCi0JZW1lcmdlbmN5Q2FsbCAoMSksCi0JbG9jYXRpb25VcGRhdGluZyAoMiksCi0Jc3VwcGxlbWVudGFyeVNlcnZpY2UgKDMpLAotCXNob3J0TWVzc2FnZSAoNCksCi0JZ3Byc0F0dGFjaCAoNSksCi0Jcm91dGluZ0FyZWFVcGRhdGluZyAoNiksCi0Jc2VydmljZVJlcXVlc3QgKDcpLAotCXBkcENvbnRleHRBY3RpdmF0aW9uICg4KSwKLQlwZHBDb250ZXh0RGVhY3RpdmF0aW9uICg5KSwKLQkuLi4sCi0JZ3Byc0RldGFjaCAoMTApfQotCS0tIGV4Y2VwdGlvbiBoYW5kbGluZzoKLQktLSByZWNlaXZlZCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDEwIHNoYWxsIGJlIGlnbm9yZWQuCi0KLUF1dGhlbnRpY2F0aW9uRmFpbHVyZVJlcG9ydFJlcyA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1GYWlsdXJlQ2F1c2UgOjo9IEVOVU1FUkFURUQgewotCXdyb25nVXNlclJlc3BvbnNlICAoMCksCi0Jd3JvbmdOZXR3b3JrU2lnbmF0dXJlICAoMSl9Ci0KLS0tIGdwcnMgbG9jYXRpb24gcmVnaXN0cmF0aW9uIHR5cGVzCi0KLVVwZGF0ZUdwcnNMb2NhdGlvbkFyZyA6Oj0gU0VRVUVOQ0UgewotCWltc2kJCQlJTVNJLAotCXNnc24tTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZywJCi0Jc2dzbi1BZGRyZXNzCUdTTi1BZGRyZXNzLAotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uICwKLQlzZ3NuLUNhcGFiaWxpdHkJWzBdIFNHU04tQ2FwYWJpbGl0eQlPUFRJT05BTCwKLQlpbmZvcm1QcmV2aW91c05ldHdvcmtFbnRpdHkJWzFdCU5VTEwJCU9QVElPTkFMLAotCXBzLUxDUy1Ob3RTdXBwb3J0ZWRCeVVFCVsyXQlOVUxMCQlPUFRJT05BTCwKLQl2LWdtbGMtQWRkcmVzcwlbM10JR1NOLUFkZHJlc3MJT1BUSU9OQUwsCi0JYWRkLWluZm8JCVs0XSAgQURELUluZm8JT1BUSU9OQUwsCi0JZXBzLWluZm8JCVs1XQlFUFMtSW5mbwlPUFRJT05BTCwKLQlzZXJ2aW5nTm9kZVR5cGVJbmRpY2F0b3IJWzZdCU5VTEwJCU9QVElPTkFMLAotCXNraXBTdWJzY3JpYmVyRGF0YVVwZGF0ZQlbN10gTlVMTAkJT1BUSU9OQUwsCi0JdXNlZFJBVC1UeXBlCVs4XSBVc2VkLVJBVC1UeXBlCU9QVElPTkFMIAotCSB9Ci0KLVVzZWQtUkFULVR5cGU6Oj0gRU5VTUVSQVRFRCB7Ci0JdXRyYW4gICgwKSwKLQlnZXJhbiAgKDEpLAotCWdhbiAgICAoMiksCi0JaS1oc3BhLWV2b2x1dGlvbiAoMyksCi0JZS11dHJhbgkoNCksCi0JLi4ufQotCi1FUFMtSW5mbyA6Oj0gQ0hPSUNFewotCXBkbi1ndy11cGRhdGUJWzBdIFBETi1HVy1VcGRhdGUsCi0JaXNyLUluZm9ybWF0aW9uCVsxXSBJU1ItSW5mb3JtYXRpb24gfQotCi1QRE4tR1ctVXBkYXRlIDo6PSBTRVFVRU5DRXsKLQlhcG4JCQlbMF0gQVBOCQlPUFRJT05BTCwKLQlwZG4tZ3ctSWRlbnRpdHkJWzFdIFBETi1HVy1JZGVudGl0eQlPUFRJT05BTCwKLQljb250ZXh0SWQJCVsyXSBDb250ZXh0SWQgICAgICAgICAgICAgICAgICAgICBPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4gfQotCi1JU1ItSW5mb3JtYXRpb246Oj0gQklUIFNUUklORyB7Ci0JdXBkYXRlTU1FICAoMCksCi0JY2FuY2VsU0dTTiAgKDEpfSAoU0laRSAoMi4uOCkpCi0JLS0gZXhjZXB0aW9uIGhhbmRsaW5nOiByZWNlcHRpb24gb2YgdW5rbm93biBiaXQgYXNzaWdubWVudHMgaW4gdGhlCi0JLS0gSVNSLUluZm9ybWF0aW9uIGRhdGEgdHlwZSBzaGFsbCBiZSBkaXNjYXJkZWQgYnkgdGhlIHJlY2VpdmVyIAotCi1TR1NOLUNhcGFiaWxpdHkgOjo9IFNFUVVFTkNFewotCXNvbHNhU3VwcG9ydEluZGljYXRvcglOVUxMCQkJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVsxXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uICwKLQlzdXBlckNoYXJnZXJTdXBwb3J0ZWRJblNlcnZpbmdOZXR3b3JrRW50aXR5CVsyXSBTdXBlckNoYXJnZXJJbmZvCU9QVElPTkFMICwKLQlncHJzRW5oYW5jZW1lbnRzU3VwcG9ydEluZGljYXRvciAJWzNdIE5VTEwJCU9QVElPTkFMLAotCXN1cHBvcnRlZENhbWVsUGhhc2VzICAJWzRdIFN1cHBvcnRlZENhbWVsUGhhc2VzCU9QVElPTkFMLAotCXN1cHBvcnRlZExDUy1DYXBhYmlsaXR5U2V0cwlbNV0gIFN1cHBvcnRlZExDUy1DYXBhYmlsaXR5U2V0cwlPUFRJT05BTCwKLQlvZmZlcmVkQ2FtZWw0Q1NJcwlbNl0gT2ZmZXJlZENhbWVsNENTSXMJT1BUSU9OQUwsCi0Jc21zQ2FsbEJhcnJpbmdTdXBwb3J0SW5kaWNhdG9yCVs3XQlOVUxMCQlPUFRJT05BTCwJc3VwcG9ydGVkUkFULVR5cGVzSW5kaWNhdG9yCVs4XQlTdXBwb3J0ZWRSQVQtVHlwZXMJT1BUSU9OQUwsCi0Jc3VwcG9ydGVkRmVhdHVyZXMJWzldIFN1cHBvcnRlZEZlYXR1cmVzCU9QVElPTkFMIH0KLQotU3VwcG9ydGVkRmVhdHVyZXM6Oj0gQklUIFNUUklORyB7Ci0Jb2RiLWFsbCAoMCksCi0Jb2RiLUhQTE1OLUFQTiAoMSksCi0Jb2RiLVZQTE1OLUFQTiAoMiksCi0JcmVnU3ViICgzKX0gKFNJWkUgKDQuLjgpKQotCi1HU04tQWRkcmVzcyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg1Li4xNykpCi0JLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gVFMgM0dQUCBUUyAyMy4wMDMgWzE3XQotCi1VcGRhdGVHcHJzTG9jYXRpb25SZXMgOjo9IFNFUVVFTkNFIHsKLQlobHItTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZywKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQlhZGQtQ2FwYWJpbGl0eQlOVUxMCQkJT1BUSU9OQUwsCi0Jc2dzbi1tbWVTZXBhcmF0aW9uU3VwcG9ydGVkCVswXSBOVUxMCQlPUFRJT05BTCB9Ci0KLS0tIGhhbmRvdmVyIHR5cGVzCi0KLUZvcndhcmRBY2Nlc3NTaWduYWxsaW5nLUFyZyA6Oj0gWzNdIFNFUVVFTkNFIHsKLQlhbi1BUERVCQlBY2Nlc3NOZXR3b3JrU2lnbmFsSW5mbywKLQlpbnRlZ3JpdHlQcm90ZWN0aW9uSW5mbwlbMF0gSW50ZWdyaXR5UHJvdGVjdGlvbkluZm9ybWF0aW9uCQlPUFRJT05BTCwKLQllbmNyeXB0aW9uSW5mbwlbMV0gRW5jcnlwdGlvbkluZm9ybWF0aW9uCQlPUFRJT05BTCwKLQlrZXlTdGF0dXMJCVsyXQlLZXlTdGF0dXMJT1BUSU9OQUwsCi0JYWxsb3dlZEdTTS1BbGdvcml0aG1zCVs0XQlBbGxvd2VkR1NNLUFsZ29yaXRobXMJT1BUSU9OQUwsCi0JYWxsb3dlZFVNVFMtQWxnb3JpdGhtcwlbNV0JQWxsb3dlZFVNVFMtQWxnb3JpdGhtcwlPUFRJT05BTCwKLQlyYWRpb1Jlc291cmNlSW5mb3JtYXRpb24JWzZdIFJhZGlvUmVzb3VyY2VJbmZvcm1hdGlvbglPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzNdCUV4dGVuc2lvbkNvbnRhaW5lciAJT1BUSU9OQUwsCi0JLi4uLAotCXJhZGlvUmVzb3VyY2VMaXN0CVs3XQlSYWRpb1Jlc291cmNlTGlzdAlPUFRJT05BTCwKLQlic3NtYXAtU2VydmljZUhhbmRvdmVyCVs5XQlCU1NNQVAtU2VydmljZUhhbmRvdmVyCU9QVElPTkFMLAotCXJhbmFwLVNlcnZpY2VIYW5kb3ZlcglbOF0JUkFOQVAtU2VydmljZUhhbmRvdmVyCU9QVElPTkFMLAotCWJzc21hcC1TZXJ2aWNlSGFuZG92ZXJMaXN0CVsxMF0JQlNTTUFQLVNlcnZpY2VIYW5kb3Zlckxpc3QJT1BUSU9OQUwsCi0JY3VycmVudGx5VXNlZENvZGVjCVsxMV0gQ29kZWMJT1BUSU9OQUwsCi0JaXVTdXBwb3J0ZWRDb2RlY3NMaXN0CVsxMl0gU3VwcG9ydGVkQ29kZWNzTGlzdAlPUFRJT05BTCwKLQlyYWItQ29uZmlndXJhdGlvbkluZGljYXRvcglbMTNdIE5VTEwJCU9QVElPTkFMLAotCWl1U2VsZWN0ZWRDb2RlYwlbMTRdCUNvZGVjCU9QVElPTkFMLAotCWFsdGVybmF0aXZlQ2hhbm5lbFR5cGUJWzE1XQlSYWRpb1Jlc291cmNlSW5mb3JtYXRpb24JT1BUSU9OQUwsCi0JdHJhY2VQcm9wYWdhdGlvbkxpc3QJWzE3XQlUcmFjZVByb3BhZ2F0aW9uTGlzdAlPUFRJT05BTCB9Ci0KLUFsbG93ZWRHU00tQWxnb3JpdGhtcyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKLQktLSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgY29kZWQgYXMgQWxnb3JpdGhtIGlkZW50aWZpZXIgb2N0ZXQgZnJvbQotCS0tIFBlcm1pdHRlZCBBbGdvcml0aG1zIGRlZmluZWQgaW4gM0dQUCBUUyA0OC4wMDgKLQktLSBBIG5vZGUgc2hhbGwgbWFyayBhbGwgR1NNIGFsZ29yaXRobXMgdGhhdCBhcmUgYWxsb3dlZCBpbiBNU0MtQgotCi1BbGxvd2VkVU1UUy1BbGdvcml0aG1zIDo6PSBTRVFVRU5DRSB7Ci0JaW50ZWdyaXR5UHJvdGVjdGlvbkFsZ29yaXRobXMJWzBdIAlQZXJtaXR0ZWRJbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtcwlPUFRJT05BTCwKLQllbmNyeXB0aW9uQWxnb3JpdGhtcwlbMV0gCVBlcm1pdHRlZEVuY3J5cHRpb25BbGdvcml0aG1zCQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzJdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLVBlcm1pdHRlZEludGVncml0eVByb3RlY3Rpb25BbGdvcml0aG1zIDo6PQotCQlPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLm1heFBlcm1pdHRlZEludGVncml0eVByb3RlY3Rpb25BbGdvcml0aG1zTGVuZ3RoKSkKLQktLSBPY3RldHMgY29udGFpbiBhIGNvbXBsZXRlIFBlcm1pdHRlZEludGVncml0eVByb3RlY3Rpb25BbGdvcml0aG1zIGRhdGEgdHlwZSAKLQktLSBhcyBkZWZpbmVkIGluIDNHUFAgVFMgMjUuNDEzLCBlbmNvZGVkIGFjY29yZGluZyB0byB0aGUgZW5jb2Rpbmcgc2NoZW1lIAotCS0tIG1hbmRhdGVkIGJ5IDNHUFAgVFMgMjUuNDEzLiAKLQktLSBQYWRkaW5nIGJpdHMgYXJlIGluY2x1ZGVkLCBpZiBuZWVkZWQsIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSAKLQktLSBsYXN0IG9jdGV0IG9mIHRoZSBvY3RldCBzdHJpbmcuIAotCi0KLW1heFBlcm1pdHRlZEludGVncml0eVByb3RlY3Rpb25BbGdvcml0aG1zTGVuZ3RoIElOVEVHRVIgOjo9IDkKLQotUGVybWl0dGVkRW5jcnlwdGlvbkFsZ29yaXRobXMgOjo9Ci0JCU9DVEVUIFNUUklORyAoU0laRSAoMS4ubWF4UGVybWl0dGVkRW5jcnlwdGlvbkFsZ29yaXRobXNMZW5ndGgpKQotCS0tIE9jdGV0cyBjb250YWluIGEgY29tcGxldGUgUGVybWl0dGVkRW5jcnlwdGlvbkFsZ29yaXRobXMgZGF0YSB0eXBlIAotCS0tIGFzIGRlZmluZWQgaW4gM0dQUCBUUyAyNS40MTMsIGVuY29kZWQgYWNjb3JkaW5nIHRvIHRoZSBlbmNvZGluZyBzY2hlbWUgCi0JLS0gbWFuZGF0ZWQgYnkgM0dQUCBUUyAyNS40MTMKLQktLSBQYWRkaW5nIGJpdHMgYXJlIGluY2x1ZGVkLCBpZiBuZWVkZWQsIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSAKLQktLSBsYXN0IG9jdGV0IG9mIHRoZSBvY3RldCBzdHJpbmcuIAotCi0KLW1heFBlcm1pdHRlZEVuY3J5cHRpb25BbGdvcml0aG1zTGVuZ3RoIElOVEVHRVIgOjo9IDkKLQotS2V5U3RhdHVzIDo6PSBFTlVNRVJBVEVEIHsKLQlvbGQgICgwKSwKLQluZXcgICgxKSwKLQkuLi59Ci0JLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgotCS0tIHJlY2VpdmVkIHZhbHVlcyBpbiByYW5nZSAyLTMxIHNoYWxsIGJlIHRyZWF0ZWQgYXMgIm9sZCIKLQktLSByZWNlaXZlZCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDMxIHNoYWxsIGJlIHRyZWF0ZWQgYXMgIm5ldyIKLQotUHJlcGFyZUhPLUFyZyA6Oj0gWzNdIFNFUVVFTkNFIHsKLQl0YXJnZXRDZWxsSWQJWzBdIEdsb2JhbENlbGxJZAlPUFRJT05BTCwKLQloby1OdW1iZXJOb3RSZXF1aXJlZAlOVUxMCQkJT1BUSU9OQUwsIAotCXRhcmdldFJOQ0lkCVsxXSBSTkNJZAkJT1BUSU9OQUwsCi0JYW4tQVBEVQkJWzJdIEFjY2Vzc05ldHdvcmtTaWduYWxJbmZvCU9QVElPTkFMLAotCW11bHRpcGxlQmVhcmVyUmVxdWVzdGVkCVszXSBOVUxMCQlPUFRJT05BTCwKLQlpbXNpCQkJWzRdIElNU0kJCU9QVElPTkFMLAotCWludGVncml0eVByb3RlY3Rpb25JbmZvCVs1XSBJbnRlZ3JpdHlQcm90ZWN0aW9uSW5mb3JtYXRpb24JCU9QVElPTkFMLAotCWVuY3J5cHRpb25JbmZvCVs2XSBFbmNyeXB0aW9uSW5mb3JtYXRpb24JCU9QVElPTkFMLAotCXJhZGlvUmVzb3VyY2VJbmZvcm1hdGlvbglbN10gUmFkaW9SZXNvdXJjZUluZm9ybWF0aW9uCU9QVElPTkFMLAotCWFsbG93ZWRHU00tQWxnb3JpdGhtcwlbOV0JQWxsb3dlZEdTTS1BbGdvcml0aG1zCU9QVElPTkFMLAotCWFsbG93ZWRVTVRTLUFsZ29yaXRobXMJWzEwXQlBbGxvd2VkVU1UUy1BbGdvcml0aG1zCU9QVElPTkFMLAotCXJhZGlvUmVzb3VyY2VMaXN0CVsxMV0gUmFkaW9SZXNvdXJjZUxpc3QJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVs4XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uICwKLQlyYWItSWQJCVsxMl0gUkFCLUlkCU9QVElPTkFMLAotCWJzc21hcC1TZXJ2aWNlSGFuZG92ZXIJWzEzXQlCU1NNQVAtU2VydmljZUhhbmRvdmVyCU9QVElPTkFMLAotCXJhbmFwLVNlcnZpY2VIYW5kb3ZlcglbMTRdCVJBTkFQLVNlcnZpY2VIYW5kb3ZlcglPUFRJT05BTCwgCi0JYnNzbWFwLVNlcnZpY2VIYW5kb3Zlckxpc3QJWzE1XQlCU1NNQVAtU2VydmljZUhhbmRvdmVyTGlzdAlPUFRJT05BTCwKLQlhc2NpQ2FsbFJlZmVyZW5jZQlbMjBdCUFTQ0ktQ2FsbFJlZmVyZW5jZQlPUFRJT05BTCwKLQlnZXJhbi1jbGFzc21hcmsJWzE2XSBHRVJBTi1DbGFzc21hcmsJT1BUSU9OQUwsCi0JaXVDdXJyZW50bHlVc2VkQ29kZWMJWzE3XSBDb2RlYwlPUFRJT05BTCwKLQlpdVN1cHBvcnRlZENvZGVjc0xpc3QJWzE4XSBTdXBwb3J0ZWRDb2RlY3NMaXN0CU9QVElPTkFMLAotCXJhYi1Db25maWd1cmF0aW9uSW5kaWNhdG9yCVsxOV0gTlVMTAkJT1BUSU9OQUwsCi0JdWVzYmktSXUJCVsyMV0JVUVTQkktSXUJT1BUSU9OQUwsCi0JaW1laXN2CQlbMjJdCUlNRUkJCU9QVElPTkFMLAotCWFsdGVybmF0aXZlQ2hhbm5lbFR5cGUJWzIzXQlSYWRpb1Jlc291cmNlSW5mb3JtYXRpb24JT1BUSU9OQUwsCi0JdHJhY2VQcm9wYWdhdGlvbkxpc3QJWzI1XQlUcmFjZVByb3BhZ2F0aW9uTGlzdAlPUFRJT05BTAkgfQotCi1CU1NNQVAtU2VydmljZUhhbmRvdmVyTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uIG1heE51bU9mU2VydmljZUhhbmRvdmVycykgT0YKLQkJCQlCU1NNQVAtU2VydmljZUhhbmRvdmVySW5mbwotCi1CU1NNQVAtU2VydmljZUhhbmRvdmVySW5mbyA6Oj0gU0VRVUVOQ0UgewotCWJzc21hcC1TZXJ2aWNlSGFuZG92ZXIJQlNTTUFQLVNlcnZpY2VIYW5kb3ZlciwKLQlyYWItSWQJCVJBQi1JZCwKLQktLSBSQUIgSWRlbnRpdHkgaXMgbmVlZGVkIHRvIHJlbGF0ZSB0aGUgc2VydmljZSBoYW5kb3ZlcnMgd2l0aCB0aGUgcmFkaW8gYWNjZXNzIGJlYXJlcnMuIAotCS4uLn0KLQotbWF4TnVtT2ZTZXJ2aWNlSGFuZG92ZXJzICBJTlRFR0VSIDo6PSA3Ci0KLUJTU01BUC1TZXJ2aWNlSGFuZG92ZXIgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCi0JLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdGhlIFNlcnZpY2UgSGFuZG92ZXIgaW5mb3JtYXRpb24gZWxlbWVudCBpbgotCS0tIDNHUFAgVFMgNDguMDA4LgotCi1SQU5BUC1TZXJ2aWNlSGFuZG92ZXIgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCi0JLS0gT2N0ZXQgY29udGFpbnMgYSBjb21wbGV0ZSBTZXJ2aWNlLUhhbmRvdmVyIGRhdGEgdHlwZSAKLQktLSBhcyBkZWZpbmVkIGluIDNHUFAgVFMgMjUuNDEzLCBlbmNvZGVkIGFjY29yZGluZyB0byB0aGUgZW5jb2Rpbmcgc2NoZW1lIAotCS0tIG1hbmRhdGVkIGJ5IDNHUFAgVFMgMjUuNDEzCi0JLS0gUGFkZGluZyBiaXRzIGFyZSBpbmNsdWRlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cy4gCi0KLQotUmFkaW9SZXNvdXJjZUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLiBtYXhOdW1PZlJhZGlvUmVzb3VyY2VzKSBPRgotCQkJCVJhZGlvUmVzb3VyY2UKLQotUmFkaW9SZXNvdXJjZSA6Oj0gU0VRVUVOQ0UgewotCXJhZGlvUmVzb3VyY2VJbmZvcm1hdGlvbglSYWRpb1Jlc291cmNlSW5mb3JtYXRpb24sCi0JcmFiLUlkCQlSQUItSWQsCi0JLS0gUkFCIElkZW50aXR5IGlzIG5lZWRlZCB0byByZWxhdGUgdGhlIHJhZGlvIHJlc291cmNlcyB3aXRoIHRoZSByYWRpbyBhY2Nlc3MgYmVhcmVycy4gCi0JLi4ufQotCi1tYXhOdW1PZlJhZGlvUmVzb3VyY2VzICBJTlRFR0VSIDo6PSA3Ci0KLVByZXBhcmVITy1SZXMgOjo9IFszXSBTRVFVRU5DRSB7Ci0JaGFuZG92ZXJOdW1iZXIJWzBdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKLQlyZWxvY2F0aW9uTnVtYmVyTGlzdAlbMV0JUmVsb2NhdGlvbk51bWJlckxpc3QJT1BUSU9OQUwsCi0JYW4tQVBEVQkJWzJdCUFjY2Vzc05ldHdvcmtTaWduYWxJbmZvCU9QVElPTkFMLAotCW11bHRpY2FsbEJlYXJlckluZm8JWzNdCU11bHRpY2FsbEJlYXJlckluZm8JT1BUSU9OQUwsCi0JbXVsdGlwbGVCZWFyZXJOb3RTdXBwb3J0ZWQJTlVMTAkJCU9QVElPTkFMLAotCXNlbGVjdGVkVU1UUy1BbGdvcml0aG1zCVs1XQlTZWxlY3RlZFVNVFMtQWxnb3JpdGhtcwlPUFRJT05BTCwKLQljaG9zZW5SYWRpb1Jlc291cmNlSW5mb3JtYXRpb24JWzZdIENob3NlblJhZGlvUmVzb3VyY2VJbmZvcm1hdGlvbgkgT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVs0XQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCWl1U2VsZWN0ZWRDb2RlYwlbN10gQ29kZWMJCU9QVElPTkFMLAotCWl1QXZhaWxhYmxlQ29kZWNzTGlzdAlbOF0gQ29kZWNMaXN0CU9QVElPTkFMIH0KLQotU2VsZWN0ZWRVTVRTLUFsZ29yaXRobXMgOjo9IFNFUVVFTkNFIHsKLQlpbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtCVswXSAJQ2hvc2VuSW50ZWdyaXR5UHJvdGVjdGlvbkFsZ29yaXRobQlPUFRJT05BTCwKLQllbmNyeXB0aW9uQWxnb3JpdGhtCVsxXSAJQ2hvc2VuRW5jcnlwdGlvbkFsZ29yaXRobQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzJdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLUNob3NlbkludGVncml0eVByb3RlY3Rpb25BbGdvcml0aG0gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCi0JLS0gT2N0ZXQgY29udGFpbnMgYSBjb21wbGV0ZSBJbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtIGRhdGEgdHlwZSAKLQktLSBhcyBkZWZpbmVkIGluIDNHUFAgVFMgMjUuNDEzLCBlbmNvZGVkIGFjY29yZGluZyB0byB0aGUgZW5jb2Rpbmcgc2NoZW1lIAotCS0tIG1hbmRhdGVkIGJ5IDNHUFAgVFMgMjUuNDEzCi0JLS0gUGFkZGluZyBiaXRzIGFyZSBpbmNsdWRlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cy4gCi0KLUNob3NlbkVuY3J5cHRpb25BbGdvcml0aG0gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCi0JLS0gT2N0ZXQgY29udGFpbnMgYSBjb21wbGV0ZSBFbmNyeXB0aW9uQWxnb3JpdGhtIGRhdGEgdHlwZSAKLQktLSBhcyBkZWZpbmVkIGluIDNHUFAgVFMgMjUuNDEzLCBlbmNvZGVkIGFjY29yZGluZyB0byB0aGUgZW5jb2Rpbmcgc2NoZW1lIAotCS0tIG1hbmRhdGVkIGJ5IDNHUFAgVFMgMjUuNDEzCi0JLS0gUGFkZGluZyBiaXRzIGFyZSBpbmNsdWRlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cy4gCi0KLUNob3NlblJhZGlvUmVzb3VyY2VJbmZvcm1hdGlvbiA6Oj0gU0VRVUVOQ0UgewotCWNob3NlbkNoYW5uZWxJbmZvCVswXSBDaG9zZW5DaGFubmVsSW5mbwlPUFRJT05BTCwKLQljaG9zZW5TcGVlY2hWZXJzaW9uCVsxXSBDaG9zZW5TcGVlY2hWZXJzaW9uCU9QVElPTkFMLAotCS4uLn0KLQotQ2hvc2VuQ2hhbm5lbEluZm8gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCi0JLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdGhlIENob3NlbiBDaGFubmVsIGluZm9ybWF0aW9uIGVsZW1lbnQgaW4gM0dQUCBUUyA0OC4wMDgKLQotQ2hvc2VuU3BlZWNoVmVyc2lvbiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKLQktLSBPY3RldHMgYXJlIGNvZGVkIGFjY29yZGluZyB0aGUgU3BlZWNoIFZlcnNpb24gKGNob3NlbikgaW5mb3JtYXRpb24gZWxlbWVudCBpbiAzR1BQIFRTCi0JLS0gNDguMDA4IAotCi1QcmVwYXJlU3Vic2VxdWVudEhPLUFyZyA6Oj0gWzNdIFNFUVVFTkNFIHsKLQl0YXJnZXRDZWxsSWQJWzBdIEdsb2JhbENlbGxJZAlPUFRJT05BTCwKLQl0YXJnZXRNU0MtTnVtYmVyCVsxXSBJU0ROLUFkZHJlc3NTdHJpbmcsCi0JdGFyZ2V0Uk5DSWQJWzJdIFJOQ0lkCQlPUFRJT05BTCwKLQlhbi1BUERVCQlbM10JQWNjZXNzTmV0d29ya1NpZ25hbEluZm8JT1BUSU9OQUwsCi0Jc2VsZWN0ZWRSYWItSWQJWzRdCVJBQi1JZAlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzVdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4sCi0JZ2VyYW4tY2xhc3NtYXJrCVs2XSBHRVJBTi1DbGFzc21hcmsJT1BUSU9OQUwsCi0JcmFiLUNvbmZpZ3VyYXRpb25JbmRpY2F0b3IJWzddIE5VTEwJCU9QVElPTkFMIH0KLQotUHJlcGFyZVN1YnNlcXVlbnRITy1SZXMgOjo9IFszXSBTRVFVRU5DRSB7Ci0JYW4tQVBEVQkJQWNjZXNzTmV0d29ya1NpZ25hbEluZm8sCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVswXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1Qcm9jZXNzQWNjZXNzU2lnbmFsbGluZy1BcmcgOjo9IFszXSBTRVFVRU5DRSB7Ci0JYW4tQVBEVQkJQWNjZXNzTmV0d29ya1NpZ25hbEluZm8sCi0Jc2VsZWN0ZWRVTVRTLUFsZ29yaXRobXMJWzFdCVNlbGVjdGVkVU1UUy1BbGdvcml0aG1zCU9QVElPTkFMLAotCXNlbGVjdGVkR1NNLUFsZ29yaXRobQlbMl0JU2VsZWN0ZWRHU00tQWxnb3JpdGhtCU9QVElPTkFMLAotCWNob3NlblJhZGlvUmVzb3VyY2VJbmZvcm1hdGlvbglbM10gQ2hvc2VuUmFkaW9SZXNvdXJjZUluZm9ybWF0aW9uIE9QVElPTkFMLAotCXNlbGVjdGVkUmFiLUlkCVs0XSBSQUItSWQJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVswXQlFeHRlbnNpb25Db250YWluZXIgCU9QVElPTkFMLAotCS4uLiwKLQlpVVNlbGVjdGVkQ29kZWMJWzVdIENvZGVjCQlPUFRJT05BTCwKLQlpdUF2YWlsYWJsZUNvZGVjc0xpc3QJWzZdIENvZGVjTGlzdAlPUFRJT05BTCB9Ci0KLVN1cHBvcnRlZENvZGVjc0xpc3QgOjo9IFNFUVVFTkNFIHsKLQl1dHJhbkNvZGVjTGlzdAlbMF0gQ29kZWNMaXN0CU9QVElPTkFMLAotCWdlcmFuQ29kZWNMaXN0CVsxXSBDb2RlY0xpc3QJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1Db2RlY0xpc3QgOjo9IFNFUVVFTkNFIHsKLQljb2RlYzEJCVsxXSBDb2RlYywKLQljb2RlYzIJCVsyXSBDb2RlYwkJT1BUSU9OQUwsCi0JY29kZWMzCQlbM10gQ29kZWMJCU9QVElPTkFMLAotCWNvZGVjNAkJWzRdIENvZGVjCQlPUFRJT05BTCwKLQljb2RlYzUJCVs1XSBDb2RlYwkJT1BUSU9OQUwsCi0JY29kZWM2CQlbNl0gQ29kZWMJCU9QVElPTkFMLAotCWNvZGVjNwkJWzddIENvZGVjCQlPUFRJT05BTCwKLQljb2RlYzgJCVs4XSBDb2RlYwkJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVs5XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCS0tIENvZGVjcyBhcmUgc2VudCBpbiBwcmlvcml0eSBvcmRlciB3aGVyZSBjb2RlYzEgaGFzIGhpZ2hlc3QgcHJpb3JpdHkKLQotQ29kZWMgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uNCkpCi0KLQktLSBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgYXMgZm9sbG93czoKLQktLSBvY3RldCAxCUNvZGVkIGFzIENvZGVjIElkZW50aWZpY2F0aW9uIGNvZGUgaW4gM0dQUCBUUyAyNi4xMDMKLQktLSBvY3RldHMgMiwzLDQJUGFyYW1ldGVycyBmb3IgdGhlIENvZGVjIGFzIGRlZmluZWQgaW4gM0dQUCBUUwotCS0tCQkJMjYuMTAzLCBpZiBhdmFpbGFibGUsIGxlbmd0aCBkZXBlbmRpbmcgb24gdGhlIGNvZGVjCi0KLUdFUkFOLUNsYXNzbWFyayA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgyLi44NykpCi0JLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdGhlIEdFUkFOIENsYXNzbWFyayBpbmZvcm1hdGlvbiBlbGVtZW50IGluIDNHUFAgVFMgNDguMDA4Ci0KLVNlbGVjdGVkR1NNLUFsZ29yaXRobSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKLQktLSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgY29kZWQgYXMgQWxnb3JpdGhtIGlkZW50aWZpZXIgb2N0ZXQgZnJvbSBDaG9zZW4gRW5jcnlwdGlvbgotCS0tIEFsZ29yaXRobSBkZWZpbmVkIGluIDNHUFAgVFMgNDguMDA4Ci0JLS0gQSBub2RlIHNoYWxsIG1hcmsgb25seSB0aGUgc2VsZWN0ZWQgR1NNIGFsZ29yaXRobQotCi1TZW5kRW5kU2lnbmFsLUFyZyA6Oj0gWzNdIFNFUVVFTkNFIHsKLQlhbi1BUERVCQlBY2Nlc3NOZXR3b3JrU2lnbmFsSW5mbywKLQlleHRlbnNpb25Db250YWluZXIJWzBdCUV4dGVuc2lvbkNvbnRhaW5lciAJT1BUSU9OQUwsCi0JLi4ufQotCi1TZW5kRW5kU2lnbmFsLVJlcyA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglbMF0JRXh0ZW5zaW9uQ29udGFpbmVyIAlPUFRJT05BTCwKLQkuLi59Ci0KLVJOQ0lkIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDcpKQotCS0tIFRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgotCS0tIG9jdGV0IDEgYml0cyA0MzIxCU1vYmlsZSBDb3VudHJ5IENvZGUgMXN0IGRpZ2l0Ci0JLS0gICAgICAgICBiaXRzIDg3NjUJTW9iaWxlIENvdW50cnkgQ29kZSAybmQgZGlnaXQKLQktLSBvY3RldCAyIGJpdHMgNDMyMQlNb2JpbGUgQ291bnRyeSBDb2RlIDNyZCBkaWdpdAotCS0tICAgICAgICAgYml0cyA4NzY1CU1vYmlsZSBOZXR3b3JrIENvZGUgM3JkIGRpZ2l0Ci0JLS0JCQlvciBmaWxsZXIgKDExMTEpIGZvciAyIGRpZ2l0IE1OQ3MKLQktLSBvY3RldCAzIGJpdHMgNDMyMQlNb2JpbGUgTmV0d29yayBDb2RlIDFzdCBkaWdpdAotCS0tICAgICAgICAgYml0cyA4NzY1CU1vYmlsZSBOZXR3b3JrIENvZGUgMm5kIGRpZ2l0Ci0JLS0gb2N0ZXRzIDQgYW5kIDUJTG9jYXRpb24gQXJlYSBDb2RlIGFjY29yZGluZyB0byAzR1BQIFRTIDI0LjAwOAotCS0tIG9jdGV0cyA2IGFuZCA3CVJOQyBJZCB2YWx1ZSBhY2NvcmRpbmcgdG8gM0dQUCBUUyAyNS40MTMKLQotUmVsb2NhdGlvbk51bWJlckxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mUmVsb2NhdGlvbk51bWJlcikgT0YKLQkJCQlSZWxvY2F0aW9uTnVtYmVyCi0KLU11bHRpY2FsbEJlYXJlckluZm8gOjo9IElOVEVHRVIgKDEuLm1heE51bU9mUmVsb2NhdGlvbk51bWJlcikKLQotUmVsb2NhdGlvbk51bWJlciA6Oj0gU0VRVUVOQ0UgewotCWhhbmRvdmVyTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZywKLQlyYWItSWQJCVJBQi1JZCwKLQktLSBSQUIgSWRlbnRpdHkgaXMgbmVlZGVkIHRvIHJlbGF0ZSB0aGUgY2FsbHMgd2l0aCB0aGUgcmFkaW8gYWNjZXNzIGJlYXJlcnMuIAotCS4uLn0KLQotUkFCLUlkIDo6PSBJTlRFR0VSICgxLi5tYXhOck9mUkFCcykKLQotbWF4TnJPZlJBQnMgSU5URUdFUiA6Oj0gMjU1Ci0KLW1heE51bU9mUmVsb2NhdGlvbk51bWJlciAgSU5URUdFUiA6Oj0gNwotCi1SYWRpb1Jlc291cmNlSW5mb3JtYXRpb24gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMy4uMTMpKQotCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRoZSBDaGFubmVsIFR5cGUgaW5mb3JtYXRpb24gZWxlbWVudCBpbiAzR1BQIFRTIDQ4LjAwOAotCi1JbnRlZ3JpdHlQcm90ZWN0aW9uSW5mb3JtYXRpb24gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMTguLm1heE51bU9mSW50ZWdyaXR5SW5mbykpCi0JLS0gT2N0ZXRzIGNvbnRhaW4gYSBjb21wbGV0ZSBJbnRlZ3JpdHlQcm90ZWN0aW9uSW5mb3JtYXRpb24gZGF0YSB0eXBlIAotCS0tIGFzIGRlZmluZWQgaW4gM0dQUCBUUyAyNS40MTMsIGVuY29kZWQgYWNjb3JkaW5nIHRvIHRoZSBlbmNvZGluZyBzY2hlbWUgCi0JLS0gbWFuZGF0ZWQgYnkgM0dQUCBUUyAyNS40MTMKLQktLSBQYWRkaW5nIGJpdHMgYXJlIGluY2x1ZGVkLCBpZiBuZWVkZWQsIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSAKLQktLSBsYXN0IG9jdGV0IG9mIHRoZSBvY3RldCBzdHJpbmcuIAotCi1tYXhOdW1PZkludGVncml0eUluZm8gSU5URUdFUiA6Oj0gMTAwCi0KLUVuY3J5cHRpb25JbmZvcm1hdGlvbiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxOC4ubWF4TnVtT2ZFbmNyeXB0aW9uSW5mbykpCi0JLS0gT2N0ZXRzIGNvbnRhaW4gYSBjb21wbGV0ZSBFbmNyeXB0aW9uSW5mb3JtYXRpb24gZGF0YSB0eXBlIAotCS0tIGFzIGRlZmluZWQgaW4gM0dQUCBUUyAyNS40MTMsIGVuY29kZWQgYWNjb3JkaW5nIHRvIHRoZSBlbmNvZGluZyBzY2hlbWUgCi0JLS0gbWFuZGF0ZWQgYnkgM0dQUCBUUyAyNS40MTMKLQktLSBQYWRkaW5nIGJpdHMgYXJlIGluY2x1ZGVkLCBpZiBuZWVkZWQsIGluIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSAKLQktLSBsYXN0IG9jdGV0IG9mIHRoZSBvY3RldCBzdHJpbmcuIAotCi1tYXhOdW1PZkVuY3J5cHRpb25JbmZvIElOVEVHRVIgOjo9IDEwMAotCi0tLSBhdXRoZW50aWNhdGlvbiBtYW5hZ2VtZW50IHR5cGVzCi0KLVNlbmRBdXRoZW50aWNhdGlvbkluZm9BcmcgOjo9IFNFUVVFTkNFIHsKLQlpbXNpCQkJWzBdIElNU0ksCi0JbnVtYmVyT2ZSZXF1ZXN0ZWRWZWN0b3JzCU51bWJlck9mUmVxdWVzdGVkVmVjdG9ycywKLQlzZWdtZW50YXRpb25Qcm9oaWJpdGVkCU5VTEwJCQlPUFRJT05BTCwKLQlpbW1lZGlhdGVSZXNwb25zZVByZWZlcnJlZAlbMV0gTlVMTAkJCU9QVElPTkFMLAotCXJlLXN5bmNocm9uaXNhdGlvbkluZm8JUmUtc3luY2hyb25pc2F0aW9uSW5mbwlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4sCi0JcmVxdWVzdGluZ05vZGVUeXBlCVszXSBSZXF1ZXN0aW5nTm9kZVR5cGUJT1BUSU9OQUwsCi0JcmVxdWVzdGluZ1BMTU4tSWQJWzRdIFBMTU4tSWQJT1BUSU9OQUwsCi0JbnVtYmVyT2ZSZXF1ZXN0ZWRBZGRpdGlvbmFsLVZlY3RvcnMJWzVdIE51bWJlck9mUmVxdWVzdGVkVmVjdG9ycwlPUFRJT05BTCwKLQlhZGRpdGlvbmFsVmVjdG9yc0FyZUZvckVQUwlbNl0gTlVMTAkJT1BUSU9OQUwgfQkKLQotCi1OdW1iZXJPZlJlcXVlc3RlZFZlY3RvcnMgOjo9IElOVEVHRVIgKDEuLjUpCi0KLVJlLXN5bmNocm9uaXNhdGlvbkluZm8gOjo9IFNFUVVFTkNFIHsKLQlyYW5kCQkJUkFORCwKLQlhdXRzCQkJQVVUUywKLQkuLi59Ci0KLVNlbmRBdXRoZW50aWNhdGlvbkluZm9SZXMgOjo9IFszXSBTRVFVRU5DRSB7Ci0JYXV0aGVudGljYXRpb25TZXRMaXN0CUF1dGhlbnRpY2F0aW9uU2V0TGlzdCAJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4sCi0JZXBzLUF1dGhlbnRpY2F0aW9uU2V0TGlzdAlbMl0gRVBTLUF1dGhlbnRpY2F0aW9uU2V0TGlzdAlPUFRJT05BTCB9Ci0KLUVQUy1BdXRoZW50aWNhdGlvblNldExpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLjUpIE9GCi0JCQkJRVBDLUFWCi0KLUVQQy1BViA6Oj0gU0VRVUVOQ0UgewotCXJhbmQJCQlSQU5ELAotCXhyZXMJCQlYUkVTLAotCWF1dG4JCQlBVVROLAotCWthc21lCQlLQVNNRSwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotS0FTTUUgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMTYpKQotCi1SZXF1ZXN0aW5nTm9kZVR5cGUgOjo9IEVOVU1FUkFURUQgewotCXZsciAgKDApLAotCXNnc24gICgxKSwKLQkuLi4sCi0Jcy1jc2NmICAoMiksCi0JYnNmICAoMyksCi0JZ2FuLWFhYS1zZXJ2ZXIgICg0KSwKLQl3bGFuLWFhYS1zZXJ2ZXIgICg1KSwKLQltbWUJCSgxNiksCi0JbW1lLXNnc24JKDE3KQotCX0KLQktLSB0aGUgdmFsdWVzIDIsIDMsIDQgYW5kIDUgc2hhbGwgbm90IGJlIHVzZWQgb24gdGhlIE1BUC1EIG9yIEdyIGludGVyZmFjZXMKLQktLSBleGNlcHRpb24gaGFuZGxpbmc6Ci0JLS0gcmVjZWl2ZWQgdmFsdWVzIGluIHRoZSByYW5nZSAoNi0xNSkgc2hhbGwgYmUgdHJlYXRlZCBhcyAidmxyIgotCS0tIHJlY2VpdmVkIHZhbHVlcyBncmVhdGVyIHRoYW4gMTcgc2hhbGwgYmUgdHJlYXRlZCBhcyAic2dzbiIKLQotLS0gZXF1aXBtZW50IG1hbmFnZW1lbnQgdHlwZXMKLQotQ2hlY2tJTUVJLUFyZyA6Oj0gU0VRVUVOQ0UgewotCWltZWkJCQlJTUVJLAotCXJlcXVlc3RlZEVxdWlwbWVudEluZm8JUmVxdWVzdGVkRXF1aXBtZW50SW5mbywKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotQ2hlY2tJTUVJLVJlcyA6Oj0gU0VRVUVOQ0UgewotCWVxdWlwbWVudFN0YXR1cwlFcXVpcG1lbnRTdGF0dXMJT1BUSU9OQUwsCi0JYm11ZWYJCVVFU0JJLUl1CQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzBdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLVJlcXVlc3RlZEVxdWlwbWVudEluZm86Oj0gQklUIFNUUklORyB7Ci0JZXF1aXBtZW50U3RhdHVzICAoMCksCi0JYm11ZWYgICgxKX0gKFNJWkUgKDIuLjgpKQotCS0tIGV4Y2VwdGlvbiBoYW5kbGluZzogcmVjZXB0aW9uIG9mIHVua25vd24gYml0IGFzc2lnbm1lbnRzIGluIHRoZQotCS0tIFJlcXVlc3RlZEVxdWlwbWVudEluZm8gZGF0YSB0eXBlIHNoYWxsIGJlIGRpc2NhcmRlZCBieSB0aGUgcmVjZWl2ZXIgCi0KLVVFU0JJLUl1IDo6PSBTRVFVRU5DRSB7Ci0JdWVzYmktSXVBCVswXSBVRVNCSS1JdUEJCQkJT1BUSU9OQUwsCi0JdWVzYmktSXVCCVsxXSBVRVNCSS1JdUIJCQkJT1BUSU9OQUwsCi0JLi4ufQotCi1VRVNCSS1JdUEJCQkJOjo9IEJJVCBTVFJJTkcgKFNJWkUoMS4uMTI4KSkKLS0tIFNlZSAzR1BQIFRTIDI1LjQxMwotCi1VRVNCSS1JdUIJCQkJOjo9IEJJVCBTVFJJTkcgKFNJWkUoMS4uMTI4KSkKLS0tIFNlZSAzR1BQIFRTIDI1LjQxMwotCi1FcXVpcG1lbnRTdGF0dXMgOjo9IEVOVU1FUkFURUQgewotCXdoaXRlTGlzdGVkICAoMCksCi0JYmxhY2tMaXN0ZWQgICgxKSwKLQlncmV5TGlzdGVkICAoMil9Ci0KLS0tIHN1YnNjcmliZXIgbWFuYWdlbWVudCB0eXBlcwotCi1JbnNlcnRTdWJzY3JpYmVyRGF0YUFyZyA6Oj0gU0VRVUVOQ0UgewotCWltc2kJCQlbMF0gSU1TSQkJT1BUSU9OQUwsCi0JQ09NUE9ORU5UUyBPRglTdWJzY3JpYmVyRGF0YSwKLQlleHRlbnNpb25Db250YWluZXIJWzE0XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uICwJCi0JbmFlYS1QcmVmZXJyZWRDSQlbMTVdIE5BRUEtUHJlZmVycmVkQ0kJT1BUSU9OQUwsCi0JLS0gbmFlYS1QcmVmZXJyZWRDSSBpcyBpbmNsdWRlZCBhdCB0aGUgZGlzY3JldGlvbiBvZiB0aGUgSExSIG9wZXJhdG9yLgotCWdwcnNTdWJzY3JpcHRpb25EYXRhCVsxNl0gR1BSU1N1YnNjcmlwdGlvbkRhdGEJT1BUSU9OQUwsCi0Jcm9hbWluZ1Jlc3RyaWN0ZWRJblNnc25EdWVUb1Vuc3VwcG9ydGVkRmVhdHVyZSBbMjNdIAlOVUxMCQotCQkJCQkJCU9QVElPTkFMLCAKLQluZXR3b3JrQWNjZXNzTW9kZQlbMjRdIE5ldHdvcmtBY2Nlc3NNb2RlCU9QVElPTkFMLAotCWxzYUluZm9ybWF0aW9uCVsyNV0gTFNBSW5mb3JtYXRpb24JT1BUSU9OQUwsCi0JbG11LUluZGljYXRvcglbMjFdCU5VTEwJCU9QVElPTkFMLAotCWxjc0luZm9ybWF0aW9uCVsyMl0JTENTSW5mb3JtYXRpb24JT1BUSU9OQUwsCi0JaXN0QWxlcnRUaW1lcglbMjZdIElTVC1BbGVydFRpbWVyVmFsdWUJT1BUSU9OQUwsCi0Jc3VwZXJDaGFyZ2VyU3VwcG9ydGVkSW5ITFIJWzI3XSBBZ2VJbmRpY2F0b3IJT1BUSU9OQUwsCi0JbWMtU1MtSW5mbwlbMjhdIE1DLVNTLUluZm8JT1BUSU9OQUwsCi0JY3MtQWxsb2NhdGlvblJldGVudGlvblByaW9yaXR5CVsyOV0gQ1MtQWxsb2NhdGlvblJldGVudGlvblByaW9yaXR5CQlPUFRJT05BTCwKLQlzZ3NuLUNBTUVMLVN1YnNjcmlwdGlvbkluZm8JWzE3XSBTR1NOLUNBTUVMLVN1YnNjcmlwdGlvbkluZm8JT1BUSU9OQUwsCi0JY2hhcmdpbmdDaGFyYWN0ZXJpc3RpY3MgCVsxOF0JQ2hhcmdpbmdDaGFyYWN0ZXJpc3RpY3MgCU9QVElPTkFMLAotCWFjY2Vzc1Jlc3RyaWN0aW9uRGF0YQlbMTldIEFjY2Vzc1Jlc3RyaWN0aW9uRGF0YQlPUFRJT05BTCwKLQlpY3MtSW5kaWNhdG9yCVsyMF0JQk9PTEVBTglPUFRJT05BTCwKLQllcHMtU3Vic2NyaXB0aW9uRGF0YQlbMzFdCUVQUy1TdWJzY3JpcHRpb25EYXRhCU9QVElPTkFMLAotCWNzZy1TdWJzY3JpcHRpb25EYXRhTGlzdAlbMzJdIENTRy1TdWJzY3JpcHRpb25EYXRhTGlzdAlPUFRJT05BTCB9Ci0JLS0gSWYgdGhlIE5ldHdvcmsgQWNjZXNzIE1vZGUgcGFyYW1ldGVyIGlzIHNlbnQsIGl0IHNoYWxsIGJlIHByZXNlbnQgb25seSBpbiAKLQktLSB0aGUgZmlyc3Qgc2VxdWVuY2UgaWYgc2VxbWVudGF0aW9uIGlzIHVzZWQKLQotQ1NHLVN1YnNjcmlwdGlvbkRhdGFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi41MCkgT0YKLQkJCQlDU0ctU3Vic2NyaXB0aW9uRGF0YQotCi1DU0ctU3Vic2NyaXB0aW9uRGF0YSA6Oj0gU0VRVUVOQ0UgewotCWNzZy1JZAkgCQlDU0ctSWQsCi0JZXhwaXJhdGlvbkRhdGUJCVRpbWUJCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcgkJRXh0ZW5zaW9uQ29udGFpbmVyIAlPUFRJT05BTCwKLQkuLi59Ci0KLUNTRy1JZCA6Oj0gQklUIFNUUklORyAoU0laRSAoMjcpKQotCS0tIGNvZGVkIGFjY29yZGluZyB0byAzR1BQIFRTIDIzLjAwMyBbMTddLgotCi1UaW1lIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDQpKQotCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRvIElFVEYgUkZDIDM1ODggWzEzOV0KLQotCi1FUFMtU3Vic2NyaXB0aW9uRGF0YSA6Oj0gU0VRVUVOQ0UgewotCWFwbi1vaS1SZXBsYWNlbWVudAlbMF0JQVBOLU9JLVJlcGxhY2VtZW50CU9QVElPTkFMLAotCXJmc3AtaWQJCVsyXQlSRlNQLUlECQlPUFRJT05BTCwKLQlhbWJyCQkJWzNdCUFNQlIJCU9QVElPTkFMLAotCWFwbi1Db25maWd1cmF0aW9uUHJvZmlsZQlbNF0JQVBOLUNvbmZpZ3VyYXRpb25Qcm9maWxlCU9QVElPTkFMLAotCXN0bi1zcgkJWzZdCUlTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzVdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4gfQotCi1BUE4tT0ktUmVwbGFjZW1lbnQgOjo9ICBPQ1RFVCBTVFJJTkcgKFNJWkUgKDkuLjEwMCkpCi0JLS0gT2N0ZXRzIGFyZSBjb2RlZCBhcyBBUE4gT3BlcmF0b3IgSWRlbnRpZmllciBhY2NvcmRpbmcgdG8gVFMgM0dQUCBUUyAyMy4wMDMgWzE3XSAKLQotUkZTUC1JRCA6Oj0gIElOVEVHRVIgKDEuLjI1NikKLQotQVBOLUNvbmZpZ3VyYXRpb25Qcm9maWxlIDo6PSBTRVFVRU5DRSB7Ci0JZGVmYXVsdENvbnRleHQJQ29udGV4dElkLAotCWNvbXBsZXRlRGF0YUxpc3RJbmNsdWRlZAlOVUxMCQkJT1BUSU9OQUwsCi0JCS0tIElmIHNlZ21lbnRhdGlvbiBpcyB1c2VkLCBjb21wbGV0ZURhdGFMaXN0SW5jbHVkZWQgbWF5IG9ubHkgYmUgcHJlc2VudCBpbiB0aGUKLQkJLS0gZmlyc3Qgc2VnbWVudCBvZiBBUE4tQ29uZmlndXJhdGlvblByb2ZpbGUuCi0JZXBzRGF0YUxpc3QJWzFdCUVQUy1EYXRhTGlzdCwKLQlleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4gfQotCi1FUFMtRGF0YUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mQVBOLUNvbmZpZ3VyYXRpb25zKSBPRgotCQkJCUFQTi1Db25maWd1cmF0aW9uCi0KLQotbWF4TnVtT2ZBUE4tQ29uZmlndXJhdGlvbnMgIElOVEVHRVIgOjo9IDUwCi0KLQotQVBOLUNvbmZpZ3VyYXRpb24gOjo9IFNFUVVFTkNFIHsKLQljb250ZXh0SWQJCVswXSBDb250ZXh0SWQsCi0Jc2VydmVkUGFydHlJUC1BZGRyZXNzCVsxXSBQRFAtQWRkcmVzcwlPUFRJT05BTCwKLQlhcG4JCQlbMl0gQVBOLAotCWVwcy1xb3MtU3Vic2NyaWJlZAlbM10gRVBTLVFvUy1TdWJzY3JpYmVkLAotCXBkbi1ndy1JZGVudGl0eQlbNF0gUEROLUdXLUlkZW50aXR5CU9QVElPTkFMLAotCXBkbi1ndy1BbGxvY2F0aW9uVHlwZQlbNV0gUEROLUdXLUFsbG9jYXRpb25UeXBlCU9QVElPTkFMLAotCXZwbG1uQWRkcmVzc0FsbG93ZWQJWzZdIE5VTEwJCU9QVElPTkFMLAotCWNoYXJnaW5nQ2hhcmFjdGVyaXN0aWNzCVs3XSBDaGFyZ2luZ0NoYXJhY3RlcmlzdGljcwlPUFRJT05BTCwKLQlhbWJyCQkJWzhdIEFNQlIJCU9QVElPTkFMLAotCXNwZWNpZmljQVBOSW5mb0xpc3QJWzldIFNwZWNpZmljQVBOSW5mb0xpc3QJT1BUSU9OQUwsCWV4dGVuc2lvbkNvbnRhaW5lcglbMTBdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4gfQotCi1FUFMtUW9TLVN1YnNjcmliZWQgOjo9IFNFUVVFTkNFIHsKLQlxb3MtQ2xhc3MtSWRlbnRpZmllcglbMF0gUW9TLUNsYXNzLUlkZW50aWZpZXIsCi0JYWxsb2NhdGlvbi1SZXRlbnRpb24tUHJpb3JpdHkJWzFdIEFsbG9jYXRpb24tUmV0ZW50aW9uLVByaW9yaXR5LAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiB9Ci0KLUFNQlIgOjo9IFNFUVVFTkNFIHsKLQltYXgtUmVxdWVzdGVkQmFuZHdpZHRoLVVMCVswXSBCYW5kd2lkdGgsCi0JbWF4LVJlcXVlc3RlZEJhbmR3aWR0aC1ETAlbMV0gQmFuZHdpZHRoLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiB9Ci0KLQotU3BlY2lmaWNBUE5JbmZvTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZTcGVjaWZpY0FQTkluZm9zKSBPRgotCQkJCVNwZWNpZmljQVBOSW5mbwotCi1tYXhOdW1PZlNwZWNpZmljQVBOSW5mb3MgIElOVEVHRVIgOjo9IDUwCi0KLVNwZWNpZmljQVBOSW5mbyA6Oj0gU0VRVUVOQ0UgewotCWFwbgkJCVswXSBBUE4sCi0JcGRuLWd3LUlkZW50aXR5CVsxXSBQRE4tR1ctSWRlbnRpdHksCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uIH0KLQotQmFuZHdpZHRoIDo6PSBJTlRFR0VSIAotCS0tIGJpdHMgcGVyIHNlY29uZAotCi1Rb1MtQ2xhc3MtSWRlbnRpZmllciA6Oj0gSU5URUdFUiAoMS4uOSkKLQktLSB2YWx1ZXMgYXJlIGRlZmluZWQgaW4gIDNHUFAgVFMgMjkuMjEyCi0KLQotCi1BbGxvY2F0aW9uLVJldGVudGlvbi1Qcmlvcml0eSA6Oj0gU0VRVUVOQ0UgewotCXByaW9yaXR5LWxldmVsCVswXSBJTlRFR0VSLAotCXByZS1lbXB0aW9uLWNhcGFiaWxpdHkJWzFdIEJPT0xFQU4JT1BUSU9OQUwsCi0JcHJlLWVtcHRpb24tdnVsbmVyYWJpbGl0eQlbMl0gQk9PTEVBTglPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4gfQotCi1QRE4tR1ctSWRlbnRpdHkgOjo9IFNFUVVFTkNFIHsKLQlwZG4tZ3ctaXB2NC1BZGRyZXNzCVswXSBQRFAtQWRkcmVzcwlPUFRJT05BTCwKLQlwZG4tZ3ctaXB2Ni1BZGRyZXNzCVsxXSBQRFAtQWRkcmVzcwlPUFRJT05BTCwKLQlwZG4tZ3ctbmFtZQlbMl0gRlFETgkJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVszXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uIH0KLQotRlFETiA6Oj0gIE9DVEVUIFNUUklORyAoU0laRSAoOS4uMTAwKSkKLQotCi1QRE4tR1ctQWxsb2NhdGlvblR5cGUgOjo9IEVOVU1FUkFURUQgewotCXN0YXRpYwkoMCksCi0JZHluYW1pYwkoMSl9Ci0KLQotQWNjZXNzUmVzdHJpY3Rpb25EYXRhIDo6PSBCSVQgU1RSSU5HIHsKLQl1dHJhbk5vdEFsbG93ZWQgKDApLAotCWdlcmFuTm90QWxsb3dlZCAoMSksCi0JZ2FuTm90QWxsb3dlZCAgICgyKSwKLQlpLWhzcGEtZXZvbHV0aW9uTm90QWxsb3dlZCAoMyksCi0JZS11dHJhbk5vdEFsbG93ZWQgKDQpLAotCWhvLXRvTm9uM0dQUC1BY2Nlc3NOb3RBbGxvd2VkICg1KSB9IChTSVpFICgyLi44KSkKLQktLSBleGNlcHRpb24gaGFuZGxpbmc6IAotCS0tIGFjY2VzcyByZXN0cmljdGlvbiBkYXRhIHJlbGF0ZWQgdG8gYW4gYWNjZXNzIHR5cGUgbm90IHN1cHBvcnRlZCBieSBhIG5vZGUKLQktLSBzaGFsbCBiZSBpZ25vcmVkCi0JLS0gYml0cyA2IHRvIDcgc2hhbGwgYmUgaWdub3JlZCBpZiByZWNlaXZlZCBhbmQgbm90IHVuZGVyc3Rvb2QKLQkKLQotQ1MtQWxsb2NhdGlvblJldGVudGlvblByaW9yaXR5IDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQotCS0tIFRoaXMgZGF0YSB0eXBlIGVuY29kZXMgZWFjaCBwcmlvcml0eSBsZXZlbCBkZWZpbmVkIGluIFRTIDIzLjEwNyBhcyB0aGUgYmluYXJ5IHZhbHVlCi0JLS0gb2YgdGhlIHByaW9yaXR5IGxldmVsLgotCi1JU1QtQWxlcnRUaW1lclZhbHVlIDo6PSBJTlRFR0VSICgxNS4uMjU1KQotCi1MQ1NJbmZvcm1hdGlvbiA6Oj0gU0VRVUVOQ0UgewotCWdtbGMtTGlzdAlbMF0JR01MQy1MaXN0CU9QVElPTkFMLAotCWxjcy1Qcml2YWN5RXhjZXB0aW9uTGlzdAlbMV0JTENTLVByaXZhY3lFeGNlcHRpb25MaXN0CU9QVElPTkFMLAotCW1vbHItTGlzdAkJWzJdCU1PTFItTGlzdAlPUFRJT05BTCwKLQkuLi4sCi0JYWRkLWxjcy1Qcml2YWN5RXhjZXB0aW9uTGlzdAlbM10JTENTLVByaXZhY3lFeGNlcHRpb25MaXN0CU9QVElPTkFMIH0KLQktLSBhZGQtbGNzLVByaXZhY3lFeGNlcHRpb25MaXN0IG1heSBiZSBzZW50IG9ubHkgaWYgbGNzLVByaXZhY3lFeGNlcHRpb25MaXN0IGlzCi0JLS0gcHJlc2VudCBhbmQgY29udGFpbnMgZm91ciBpbnN0YW5jZXMgb2YgTENTLVByaXZhY3lDbGFzcy4gSWYgdGhlIG1lbnRpb25lZCBjb25kaXRpb24KLQktLSBpcyBub3Qgc2F0aXNmaWVkIHRoZSByZWNlaXZpbmcgbm9kZSBzaGFsbCBkaXNjYXJkIGFkZC1sY3MtUHJpdmFjeUV4Y2VwdGlvbkxpc3QuCi0JLS0gSWYgYW4gTENTLVByaXZhY3lDbGFzcyBpcyByZWNlaXZlZCBib3RoIGluIGxjcy1Qcml2YWN5RXhjZXB0aW9uTGlzdCBhbmQgaW4KLQktLSBhZGQtbGNzLVByaXZhY3lFeGNlcHRpb25MaXN0IHdpdGggdGhlIHNhbWUgU1MtQ29kZSwgdGhlbiB0aGUgZXJyb3IgdW5leHBlY3RlZCAKLQktLSBkYXRhIHZhbHVlIHNoYWxsIGJlIHJldHVybmVkLgotCi1HTUxDLUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mR01MQykgT0YKLQkJCQlJU0ROLUFkZHJlc3NTdHJpbmcKLQktLSBpZiBzZWdtZW50YXRpb24gaXMgdXNlZCwgdGhlIGNvbXBsZXRlIEdNTEMtTGlzdCBzaGFsbCBiZSBzZW50IGluIG9uZSBzZWdtZW50Ci0KLW1heE51bU9mR01MQyAgSU5URUdFUiA6Oj0gNQotCi1OZXR3b3JrQWNjZXNzTW9kZSA6Oj0gRU5VTUVSQVRFRCB7Ci0JcGFja2V0QW5kQ2lyY3VpdAkoMCksCi0Jb25seUNpcmN1aXQJCSgxKSwKLQlvbmx5UGFja2V0CQkoMiksCi0JLi4ufQotCS0tIGlmIHVua25vd24gdmFsdWVzIGFyZSByZWNlaXZlZCBpbiBOZXR3b3JrQWNjZXNzTW9kZQotCS0tIHRoZXkgc2hhbGwgYmUgZGlzY2FyZGVkLgotCi1HUFJTRGF0YUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mUERQLUNvbnRleHRzKSBPRgotCQkJCVBEUC1Db250ZXh0Ci0KLW1heE51bU9mUERQLUNvbnRleHRzICBJTlRFR0VSIDo6PSA1MAotCi1QRFAtQ29udGV4dCA6Oj0gU0VRVUVOQ0UgewotCXBkcC1Db250ZXh0SWQJQ29udGV4dElkLAotCXBkcC1UeXBlCQlbMTZdIFBEUC1UeXBlLAotCXBkcC1BZGRyZXNzCVsxN10gUERQLUFkZHJlc3MJT1BUSU9OQUwsCi0JcW9zLVN1YnNjcmliZWQJWzE4XSBRb1MtU3Vic2NyaWJlZCwKLQl2cGxtbkFkZHJlc3NBbGxvd2VkCVsxOV0gTlVMTAlPUFRJT05BTCwKLQlhcG4JCQlbMjBdIEFQTiwKLQlleHRlbnNpb25Db250YWluZXIJWzIxXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uICwKLQlleHQtUW9TLVN1YnNjcmliZWQJWzBdIEV4dC1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTCwgCi0JcGRwLUNoYXJnaW5nQ2hhcmFjdGVyaXN0aWNzCVsxXSBDaGFyZ2luZ0NoYXJhY3RlcmlzdGljcwlPUFRJT05BTCwKLQlleHQyLVFvUy1TdWJzY3JpYmVkCVsyXSBFeHQyLVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMLAotCS0tIGV4dDItUW9TLVN1YnNjcmliZWQgbWF5IGJlIHByZXNlbnQgb25seSBpZiBleHQtUW9TLVN1YnNjcmliZWQgaXMgcHJlc2VudC4KLQlleHQzLVFvUy1TdWJzY3JpYmVkCVszXSBFeHQzLVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMCi0JLS0gZXh0My1Rb1MtU3Vic2NyaWJlZCBtYXkgYmUgcHJlc2VudCBvbmx5IGlmIGV4dDItUW9TLVN1YnNjcmliZWQgaXMgcHJlc2VudC4KLQkgfQotCi1Db250ZXh0SWQgOjo9IElOVEVHRVIgKDEuLm1heE51bU9mUERQLUNvbnRleHRzKQotCi1HUFJTU3Vic2NyaXB0aW9uRGF0YSA6Oj0gU0VRVUVOQ0UgewotCWNvbXBsZXRlRGF0YUxpc3RJbmNsdWRlZAlOVUxMCQkJT1BUSU9OQUwsCi0JCS0tIElmIHNlZ21lbnRhdGlvbiBpcyB1c2VkLCBjb21wbGV0ZURhdGFMaXN0SW5jbHVkZWQgbWF5IG9ubHkgYmUgcHJlc2VudCBpbiB0aGUKLQkJLS0gZmlyc3Qgc2VnbWVudCBvZiBHUFJTU3Vic2NyaXB0aW9uRGF0YS4KLQlncHJzRGF0YUxpc3QJWzFdCUdQUlNEYXRhTGlzdCwKLQlleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4gfQotCi1TR1NOLUNBTUVMLVN1YnNjcmlwdGlvbkluZm8gOjo9IFNFUVVFTkNFIHsKLQlncHJzLUNTSQkJWzBdCUdQUlMtQ1NJCU9QVElPTkFMLAotCW1vLXNtcy1DU0kJWzFdCVNNUy1DU0kJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVsyXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCW10LXNtcy1DU0kJWzNdCVNNUy1DU0kJT1BUSU9OQUwsCi0JbXQtc21zQ0FNRUxURFAtQ3JpdGVyaWFMaXN0CVs0XQlNVC1zbXNDQU1FTFREUC1Dcml0ZXJpYUxpc3QJT1BUSU9OQUwsCi0JbWctY3NpCQlbNV0JTUctQ1NJCU9QVElPTkFMCi0JfQotCi1HUFJTLUNTSSA6Oj0gU0VRVUVOQ0UgewotCWdwcnMtQ2FtZWxURFBEYXRhTGlzdAlbMF0gR1BSUy1DYW1lbFREUERhdGFMaXN0CU9QVElPTkFMLAotCWNhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nCVsxXSBDYW1lbENhcGFiaWxpdHlIYW5kbGluZwlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQlub3RpZmljYXRpb25Ub0NTRQlbM10JTlVMTAkJT1BUSU9OQUwsCi0JY3NpLUFjdGl2ZQlbNF0JTlVMTAkJT1BUSU9OQUwsCi0JLi4ufQotLS0Jbm90aWZpY2F0aW9uVG9DU0UgYW5kIGNzaS1BY3RpdmUgc2hhbGwgbm90IGJlIHByZXNlbnQgd2hlbiBHUFJTLUNTSSBpcyBzZW50IHRvIFNHU04uCi0tLQlUaGV5IG1heSBvbmx5IGJlIGluY2x1ZGVkIGluIEFUU0kvQVRNIGFjay9OU0RDIG1lc3NhZ2UuIAotLS0JR1BSUy1DYW1lbFREUERhdGEgYW5kICBjYW1lbENhcGFiaWxpdHlIYW5kbGluZyBzaGFsbCBiZSBwcmVzZW50IGluIAotLS0JdGhlIEdQUlMtQ1NJIHNlcXVlbmNlLgotLS0JSWYgR1BSUy1DU0kgaXMgc2VnbWVudGVkLCBncHJzLUNhbWVsVERQRGF0YUxpc3QgYW5kIGNhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nIHNoYWxsIGJlIAotLS0JcHJlc2VudCBpbiB0aGUgZmlyc3Qgc2VnbWVudAotCi1HUFJTLUNhbWVsVERQRGF0YUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mQ2FtZWxURFBEYXRhKSBPRgotCUdQUlMtQ2FtZWxURFBEYXRhCi0tLQlHUFJTLUNhbWVsVERQRGF0YUxpc3Qgc2hhbGwgbm90IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBvZgotLS0JR1BSUy1DYW1lbFREUERhdGEgY29udGFpbmluZyB0aGUgc2FtZSB2YWx1ZSBmb3IgZ3Bycy1UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQuCi0KLUdQUlMtQ2FtZWxURFBEYXRhIDo6PSBTRVFVRU5DRSB7Ci0JZ3Bycy1UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQJWzBdIEdQUlMtVHJpZ2dlckRldGVjdGlvblBvaW50LAotCXNlcnZpY2VLZXkJWzFdIFNlcnZpY2VLZXksCi0JZ3NtU0NGLUFkZHJlc3MJWzJdIElTRE4tQWRkcmVzc1N0cmluZywKLQlkZWZhdWx0U2Vzc2lvbkhhbmRsaW5nCVszXSBEZWZhdWx0R1BSUy1IYW5kbGluZywKLQlleHRlbnNpb25Db250YWluZXIJWzRdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4KLQl9Ci0KLURlZmF1bHRHUFJTLUhhbmRsaW5nIDo6PSBFTlVNRVJBVEVEIHsKLQljb250aW51ZVRyYW5zYWN0aW9uICgwKSAsCi0JcmVsZWFzZVRyYW5zYWN0aW9uICgxKSAsCi0JLi4ufQotLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgotLS0gcmVjZXB0aW9uIG9mIHZhbHVlcyBpbiByYW5nZSAyLTMxIHNoYWxsIGJlIHRyZWF0ZWQgYXMgImNvbnRpbnVlVHJhbnNhY3Rpb24iCi0tLSByZWNlcHRpb24gb2YgdmFsdWVzIGdyZWF0ZXIgdGhhbiAzMSBzaGFsbCBiZSB0cmVhdGVkIGFzICJyZWxlYXNlVHJhbnNhY3Rpb24iCi0KLUdQUlMtVHJpZ2dlckRldGVjdGlvblBvaW50IDo6PSBFTlVNRVJBVEVEIHsKLQlhdHRhY2ggCQkJKDEpLAotCWF0dGFjaENoYW5nZU9mUG9zaXRpb24gCQkoMiksCi0JcGRwLUNvbnRleHRFc3RhYmxpc2htZW50IAkJKDExKSwKLQlwZHAtQ29udGV4dEVzdGFibGlzaG1lbnRBY2tub3dsZWRnZW1lbnQJKDEyKSwKLQlwZHAtQ29udGV4dENoYW5nZU9mUG9zaXRpb24gCQkoMTQpLAotCS4uLiB9Ci0tLSBleGNlcHRpb24gaGFuZGxpbmc6Ci0tLSBGb3IgR1BSUy1DYW1lbFREUERhdGEgc2VxdWVuY2VzIGNvbnRhaW5pbmcgdGhpcyBwYXJhbWV0ZXIgd2l0aCBhbnkKLS0tIG90aGVyIHZhbHVlIHRoYW4gdGhlIG9uZXMgbGlzdGVkIHRoZSByZWNlaXZlciBzaGFsbCBpZ25vcmUgdGhlIHdob2xlIAotLS0gR1BSUy1DYW1lbFREUERhdGFzZXF1ZW5jZS4KLQotQVBOIDo6PSAgT0NURVQgU1RSSU5HIChTSVpFICgyLi42MykpCi0JLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gVFMgM0dQUCBUUyAyMy4wMDMgWzE3XSAKLQotUERQLVR5cGUgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMikpCi0JLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gVFMgM0dQUCBUUyAyOS4wNjAgWzEwNV0KLQotUERQLUFkZHJlc3MgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uMTYpKQotCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRvIFRTIDNHUFAgVFMgMjkuMDYwIFsxMDVdCi0KLQktLSBUaGUgcG9zc2libGUgc2l6ZSB2YWx1ZXMgYXJlOgotCS0tIDEtNyBvY3RldHMgIFguMjUgYWRkcmVzcyB0eXBlCi0JLS0gIDQgIG9jdGV0cyAgSVB2NCBhZGRyZXNzIHR5cGUKLQktLSAxNiAgb2N0ZXRzICBJcHY2IGFkZHJlc3MgdHlwZQotCi1Rb1MtU3Vic2NyaWJlZCA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgzKSkKLQktLSBPY3RldHMgYXJlIGNvZGVkIGFjY29yZGluZyB0byBUUyAzR1BQIFRTIDI0LjAwOCBbMzVdIFF1YWxpdHkgb2YgU2VydmljZSBPY3RldHMgCi0JLS0gMy01LgotCi1FeHQtUW9TLVN1YnNjcmliZWQgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uOSkpCi0JLS0gT0NURVQgMTogCi0JLS0gIEFsbG9jYXRpb24vUmV0ZW50aW9uIFByaW9yaXR5IChUaGlzIG9jdGV0IGVuY29kZXMgZWFjaCBwcmlvcml0eSBsZXZlbCBkZWZpbmVkIGluCi0JLS0gICAgIDIzLjEwNyBhcyB0aGUgYmluYXJ5IHZhbHVlIG9mIHRoZSBwcmlvcml0eSBsZXZlbCwgZGVjbGFyYXRpb24gaW4gMjkuMDYwKQotCS0tIE9jdGV0cyAyLTkgYXJlIGNvZGVkIGFjY29yZGluZyB0byAzR1BQIFRTIDI0LjAwOCBbMzVdIFF1YWxpdHkgb2YgU2VydmljZSBPY3RldHMgCi0JLS0gNi0xMy4KLQotRXh0Mi1Rb1MtU3Vic2NyaWJlZCA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi4zKSkKLQktLSBPY3RldHMgMS0zIGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gM0dQUCBUUyAyNC4wMDggWzM1XSBRdWFsaXR5IG9mIFNlcnZpY2UgT2N0ZXRzIDE0LTE2LgotCS0tIElmIFF1YWxpdHkgb2YgU2VydmljZSBpbmZvcm1hdGlvbiBpcyBzdHJ1Y3R1cmVkIHdpdGggMTQgb2N0ZXQgbGVuZ3RoLCB0aGVuCi0JLS0gT2N0ZXQgMSBpcyBjb2RlZCBhY2NvcmRpbmcgdG8gM0dQUCBUUyAyNC4wMDggWzM1XSBRdWFsaXR5IG9mIFNlcnZpY2UgT2N0ZXQgMTQuCi0KLUV4dDMtUW9TLVN1YnNjcmliZWQgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uMikpCi0JLS0gT2N0ZXRzIDEtMiBhcmUgY29kZWQgYWNjb3JkaW5nIHRvIDNHUFAgVFMgMjQuMDA4IFszNV0gUXVhbGl0eSBvZiBTZXJ2aWNlIE9jdGV0cyAxNy0xOC4KLQotQ2hhcmdpbmdDaGFyYWN0ZXJpc3RpY3MgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMikpCi0JLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gM0dQUCBUUyAzMi4yMTUuCi0KLUxTQU9ubHlBY2Nlc3NJbmRpY2F0b3IgOjo9IEVOVU1FUkFURUQgewotCWFjY2Vzc091dHNpZGVMU0FzQWxsb3dlZCAgKDApLAotCWFjY2Vzc091dHNpZGVMU0FzUmVzdHJpY3RlZCAoMSl9Ci0KLUxTQURhdGFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkxTQXMpIE9GCi0JCQkJTFNBRGF0YQotCi1tYXhOdW1PZkxTQXMgIElOVEVHRVIgOjo9IDIwCi0KLUxTQURhdGEgOjo9IFNFUVVFTkNFIHsKLQlsc2FJZGVudGl0eQlbMF0gTFNBSWRlbnRpdHksCi0JbHNhQXR0cmlidXRlcwlbMV0gTFNBQXR0cmlidXRlcywKLQlsc2FBY3RpdmVNb2RlSW5kaWNhdG9yCVsyXSBOVUxMCQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLUxTQUluZm9ybWF0aW9uIDo6PSBTRVFVRU5DRSB7Ci0JY29tcGxldGVEYXRhTGlzdEluY2x1ZGVkCU5VTEwJCQlPUFRJT05BTCwKLQotCQktLSBJZiBzZWdtZW50YXRpb24gaXMgdXNlZCwgY29tcGxldGVEYXRhTGlzdEluY2x1ZGVkIG1heSBvbmx5IGJlIHByZXNlbnQgaW4gdGhlCi0JCS0tIGZpcnN0IHNlZ21lbnQuCi0JbHNhT25seUFjY2Vzc0luZGljYXRvcglbMV0JTFNBT25seUFjY2Vzc0luZGljYXRvcglPUFRJT05BTCwKLQlsc2FEYXRhTGlzdAlbMl0JTFNBRGF0YUxpc3QJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVszXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1MU0FJZGVudGl0eSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgzKSkKLQktLSBPY3RldHMgYXJlIGNvZGVkIGFjY29yZGluZyB0byBUUyAzR1BQIFRTIDIzLjAwMyBbMTddCi0KLUxTQUF0dHJpYnV0ZXMgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCi0JLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gVFMgM0dQUCBUUyA0OC4wMDggWzQ5XQotCi1TdWJzY3JpYmVyRGF0YSA6Oj0gU0VRVUVOQ0UgewotCW1zaXNkbgkJWzFdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKLQljYXRlZ29yeQkJWzJdIENhdGVnb3J5CU9QVElPTkFMLAotCXN1YnNjcmliZXJTdGF0dXMJWzNdIFN1YnNjcmliZXJTdGF0dXMJT1BUSU9OQUwsCi0JYmVhcmVyU2VydmljZUxpc3QJWzRdIEJlYXJlclNlcnZpY2VMaXN0CU9QVElPTkFMLAotCS0tIFRoZSBleGNlcHRpb24gaGFuZGxpbmcgZm9yIHJlY2VwdGlvbiBvZiB1bnN1cHBvcnRlZCAvIG5vdCBhbGxvY2F0ZWQKLQktLSBiZWFyZXJTZXJ2aWNlQ29kZXMgaXMgZGVmaW5lZCBpbiBzZWN0aW9uIDguOC4xCi0JdGVsZXNlcnZpY2VMaXN0CVs2XSBUZWxlc2VydmljZUxpc3QJT1BUSU9OQUwsCi0JLS0gVGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBmb3IgcmVjZXB0aW9uIG9mIHVuc3VwcG9ydGVkIC8gbm90IGFsbG9jYXRlZAotCS0tIHRlbGVzZXJ2aWNlQ29kZXMgaXMgZGVmaW5lZCBpbiBzZWN0aW9uIDguOC4xCi0JcHJvdmlzaW9uZWRTUwlbN10gRXh0LVNTLUluZm9MaXN0CU9QVElPTkFMLAotCW9kYi1EYXRhCQlbOF0gT0RCLURhdGEJT1BUSU9OQUwsCi0Jcm9hbWluZ1Jlc3RyaWN0aW9uRHVlVG9VbnN1cHBvcnRlZEZlYXR1cmUgIFs5XSBOVUxMCU9QVElPTkFMLAotCXJlZ2lvbmFsU3Vic2NyaXB0aW9uRGF0YQlbMTBdIFpvbmVDb2RlTGlzdAlPUFRJT05BTCwKLQl2YnNTdWJzY3JpcHRpb25EYXRhCVsxMV0gVkJTRGF0YUxpc3QJT1BUSU9OQUwsCi0Jdmdjc1N1YnNjcmlwdGlvbkRhdGEJWzEyXSBWR0NTRGF0YUxpc3QJT1BUSU9OQUwsCi0JdmxyQ2FtZWxTdWJzY3JpcHRpb25JbmZvCVsxM10gVmxyQ2FtZWxTdWJzY3JpcHRpb25JbmZvCU9QVElPTkFMCi0JfQotCi1DYXRlZ29yeSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKLQktLSBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gSVRVLVQgUmVjIFEuNzYzLgotCi1TdWJzY3JpYmVyU3RhdHVzIDo6PSBFTlVNRVJBVEVEIHsKLQlzZXJ2aWNlR3JhbnRlZCAgKDApLAotCW9wZXJhdG9yRGV0ZXJtaW5lZEJhcnJpbmcgICgxKX0KLQotQmVhcmVyU2VydmljZUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mQmVhcmVyU2VydmljZXMpIE9GCi0JCQkJRXh0LUJlYXJlclNlcnZpY2VDb2RlCi0KLW1heE51bU9mQmVhcmVyU2VydmljZXMgIElOVEVHRVIgOjo9IDUwCi0KLVRlbGVzZXJ2aWNlTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZUZWxlc2VydmljZXMpIE9GCi0JCQkJRXh0LVRlbGVzZXJ2aWNlQ29kZQotCi1tYXhOdW1PZlRlbGVzZXJ2aWNlcyAgSU5URUdFUiA6Oj0gMjAKLQotT0RCLURhdGEgOjo9IFNFUVVFTkNFIHsKLQlvZGItR2VuZXJhbERhdGEJT0RCLUdlbmVyYWxEYXRhLAotCW9kYi1IUExNTi1EYXRhCU9EQi1IUExNTi1EYXRhCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1PREItR2VuZXJhbERhdGEgOjo9IEJJVCBTVFJJTkcgewotCWFsbE9HLUNhbGxzQmFycmVkICAoMCksCi0JaW50ZXJuYXRpb25hbE9HQ2FsbHNCYXJyZWQgICgxKSwKLQlpbnRlcm5hdGlvbmFsT0dDYWxsc05vdFRvSFBMTU4tQ291bnRyeUJhcnJlZCAgKDIpLAotCWludGVyem9uYWxPR0NhbGxzQmFycmVkICg2KSwKLQlpbnRlcnpvbmFsT0dDYWxsc05vdFRvSFBMTU4tQ291bnRyeUJhcnJlZCAoNyksCi0JaW50ZXJ6b25hbE9HQ2FsbHNBbmRJbnRlcm5hdGlvbmFsT0dDYWxsc05vdFRvSFBMTU4tQ291bnRyeUJhcnJlZCAoOCksCi0JcHJlbWl1bVJhdGVJbmZvcm1hdGlvbk9HQ2FsbHNCYXJyZWQgICgzKSwKLQlwcmVtaXVtUmF0ZUVudGVydGFpbmVtZW50T0dDYWxsc0JhcnJlZCAgKDQpLAotCXNzLUFjY2Vzc0JhcnJlZCAgKDUpLAotCWFsbEVDVC1CYXJyZWQgKDkpLAotCWNoYXJnZWFibGVFQ1QtQmFycmVkICgxMCksCi0JaW50ZXJuYXRpb25hbEVDVC1CYXJyZWQgKDExKSwKLQlpbnRlcnpvbmFsRUNULUJhcnJlZCAoMTIpLAotCWRvdWJseUNoYXJnZWFibGVFQ1QtQmFycmVkICgxMyksCi0JbXVsdGlwbGVFQ1QtQmFycmVkICgxNCksCi0JYWxsUGFja2V0T3JpZW50ZWRTZXJ2aWNlc0JhcnJlZCAoMTUpLAotCXJvYW1lckFjY2Vzc1RvSFBMTU4tQVAtQmFycmVkICAoMTYpLAotCXJvYW1lckFjY2Vzc1RvVlBMTU4tQVAtQmFycmVkICAoMTcpLAotCXJvYW1pbmdPdXRzaWRlUExNTk9HLUNhbGxzQmFycmVkICAoMTgpLAotCWFsbElDLUNhbGxzQmFycmVkICAoMTkpLAotCXJvYW1pbmdPdXRzaWRlUExNTklDLUNhbGxzQmFycmVkICAoMjApLAotCXJvYW1pbmdPdXRzaWRlUExNTklDb3VudHJ5SUMtQ2FsbHNCYXJyZWQgICgyMSksCi0Jcm9hbWluZ091dHNpZGVQTE1OLUJhcnJlZCAgKDIyKSwKLQlyb2FtaW5nT3V0c2lkZVBMTU4tQ291bnRyeUJhcnJlZCAgKDIzKSwKLQlyZWdpc3RyYXRpb25BbGxDRi1CYXJyZWQgICgyNCksCi0JcmVnaXN0cmF0aW9uQ0ZOb3RUb0hQTE1OLUJhcnJlZCAgKDI1KSwKLQlyZWdpc3RyYXRpb25JbnRlcnpvbmFsQ0YtQmFycmVkICAoMjYpLAotCXJlZ2lzdHJhdGlvbkludGVyem9uYWxDRk5vdFRvSFBMTU4tQmFycmVkICAoMjcpLAotCXJlZ2lzdHJhdGlvbkludGVybmF0aW9uYWxDRi1CYXJyZWQgICgyOCl9IChTSVpFICgxNS4uMzIpKQotCS0tIGV4Y2VwdGlvbiBoYW5kbGluZzogcmVjZXB0aW9uIG9mIHVua25vd24gYml0IGFzc2lnbm1lbnRzIGluIHRoZQotCS0tIE9EQi1HZW5lcmFsRGF0YSB0eXBlIHNoYWxsIGJlIHRyZWF0ZWQgbGlrZSB1bnN1cHBvcnRlZCBPREItR2VuZXJhbERhdGEKLQktLSBXaGVuIHRoZSBPREItR2VuZXJhbERhdGEgdHlwZSBpcyByZW1vdmVkIGZyb20gdGhlIEhMUiBmb3IgYSBnaXZlbiBzdWJzY3JpYmVyLCAKLQktLSBpbiBOb3RlU3Vic2NyaWJlckRhdGFNb2RpZmllZCBvcGVyYXRpb24gc2VudCB0b3dhcmQgdGhlIGdzbVNDRiAKLQktLSBhbGwgYml0cyBzaGFsbCBiZSBzZXQgdG8gIk8iLgotCi1PREItSFBMTU4tRGF0YSA6Oj0gQklUIFNUUklORyB7Ci0JcGxtbi1TcGVjaWZpY0JhcnJpbmdUeXBlMSAgKDApLAotCXBsbW4tU3BlY2lmaWNCYXJyaW5nVHlwZTIgICgxKSwKLQlwbG1uLVNwZWNpZmljQmFycmluZ1R5cGUzICAoMiksCi0JcGxtbi1TcGVjaWZpY0JhcnJpbmdUeXBlNCAgKDMpfSAoU0laRSAoNC4uMzIpKQotCS0tIGV4Y2VwdGlvbiBoYW5kbGluZzogcmVjZXB0aW9uIG9mIHVua25vd24gYml0IGFzc2lnbm1lbnRzIGluIHRoZQotCS0tIE9EQi1IUExNTi1EYXRhIHR5cGUgc2hhbGwgYmUgdHJlYXRlZCBsaWtlIHVuc3VwcG9ydGVkIE9EQi1IUExNTi1EYXRhIAotCS0tIFdoZW4gdGhlIE9EQi1IUExNTi1EYXRhIHR5cGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBITFIgZm9yIGEgZ2l2ZW4gc3Vic2NyaWJlciwgCi0JLS0gaW4gTm90ZVN1YnNjcmliZXJEYXRhTW9kaWZpZWQgb3BlcmF0aW9uIHNlbnQgdG93YXJkIHRoZSBnc21TQ0YKLQktLSBhbGwgYml0cyBzaGFsbCBiZSBzZXQgdG8gIk8iLgotCi1FeHQtU1MtSW5mb0xpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mU1MpIE9GCi0JCQkJRXh0LVNTLUluZm8KLQotRXh0LVNTLUluZm8gOjo9IENIT0lDRSB7Ci0JZm9yd2FyZGluZ0luZm8JWzBdIEV4dC1Gb3J3SW5mbywKLQljYWxsQmFycmluZ0luZm8JWzFdIEV4dC1DYWxsQmFySW5mbywKLQljdWctSW5mbwkJWzJdIENVRy1JbmZvLAotCXNzLURhdGEJCVszXSBFeHQtU1MtRGF0YSwKLQllbWxwcC1JbmZvCVs0XSBFTUxQUC1JbmZvfQotCi1FeHQtRm9yd0luZm8gOjo9IFNFUVVFTkNFIHsKLQlzcy1Db2RlCQlTUy1Db2RlLAotCWZvcndhcmRpbmdGZWF0dXJlTGlzdAlFeHQtRm9yd0ZlYXR1cmVMaXN0LAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotRXh0LUZvcndGZWF0dXJlTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZFeHQtQmFzaWNTZXJ2aWNlR3JvdXBzKSBPRgotCQkJCUV4dC1Gb3J3RmVhdHVyZQotCi1FeHQtRm9yd0ZlYXR1cmUgOjo9IFNFUVVFTkNFIHsKLQliYXNpY1NlcnZpY2UJRXh0LUJhc2ljU2VydmljZUNvZGUJT1BUSU9OQUwsCi0Jc3MtU3RhdHVzCQlbNF0gRXh0LVNTLVN0YXR1cywKLQlmb3J3YXJkZWRUb051bWJlcglbNV0gSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAotCS0tIFdoZW4gdGhpcyBkYXRhIHR5cGUgaXMgc2VudCBmcm9tIGFuIEhMUiB3aGljaCBzdXBwb3J0cyBDQU1FTCBQaGFzZSAyCi0JLS0gdG8gYSBWTFIgdGhhdCBzdXBwb3J0cyBDQU1FTCBQaGFzZSAyIHRoZSBWTFIgc2hhbGwgbm90IGNoZWNrIHRoZQotCS0tIGZvcm1hdCBvZiB0aGUgbnVtYmVyCi0JZm9yd2FyZGVkVG9TdWJhZGRyZXNzCVs4XSBJU0ROLVN1YmFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCi0JZm9yd2FyZGluZ09wdGlvbnMJWzZdIEV4dC1Gb3J3T3B0aW9ucwlPUFRJT05BTCwKLQlub1JlcGx5Q29uZGl0aW9uVGltZQlbN10gRXh0LU5vUmVwQ29uZFRpbWUJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVs5XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCWxvbmdGb3J3YXJkZWRUb051bWJlcglbMTBdIEZUTi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMIH0KLQotRXh0LUZvcndPcHRpb25zIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjUpKQotCi0JLS0gT0NURVQgMToKLQotCS0tICBiaXQgODogbm90aWZpY2F0aW9uIHRvIGZvcndhcmRpbmcgcGFydHkKLQktLQkwICBubyBub3RpZmljYXRpb24KLQktLQkxICBub3RpZmljYXRpb24KLQotCS0tICBiaXQgNzogcmVkaXJlY3RpbmcgcHJlc2VudGF0aW9uCi0JLS0JMCBubyBwcmVzZW50YXRpb24gIAotCS0tCTEgIHByZXNlbnRhdGlvbgotCi0JLS0gIGJpdCA2OiBub3RpZmljYXRpb24gdG8gY2FsbGluZyBwYXJ0eQotCS0tCTAgIG5vIG5vdGlmaWNhdGlvbgotCS0tCTEgIG5vdGlmaWNhdGlvbgotCi0JLS0gIGJpdCA1OiAwICh1bnVzZWQpCi0KLQktLSAgYml0cyA0MzogZm9yd2FyZGluZyByZWFzb24KLQktLQkwMCAgbXMgbm90IHJlYWNoYWJsZQotCS0tCTAxICBtcyBidXN5Ci0JLS0JMTAgIG5vIHJlcGx5Ci0JLS0JMTEgIHVuY29uZGl0aW9uYWwKLQotCS0tIGJpdHMgMjE6IDAwICh1bnVzZWQpCi0KLQktLSBPQ1RFVFMgMi01OiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gVGhleSBzaGFsbCBiZSBkaXNjYXJkZWQgaWYKLQktLSByZWNlaXZlZCBhbmQgbm90IHVuZGVyc3Rvb2QuCi0KLUV4dC1Ob1JlcENvbmRUaW1lIDo6PSBJTlRFR0VSICgxLi4xMDApCi0JLS0gT25seSB2YWx1ZXMgNS0zMCBhcmUgdXNlZC4KLQktLSBWYWx1ZXMgaW4gdGhlIHJhbmdlcyAxLTQgYW5kIDMxLTEwMCBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKLQktLSBJZiByZWNlaXZlZDoKLQktLQkJdmFsdWVzIDEtNCBzaGFsbCBiZSBtYXBwZWQgb24gdG8gdmFsdWUgNQotCS0tCQl2YWx1ZXMgMzEtMTAwIHNoYWxsIGJlIG1hcHBlZCBvbiB0byB2YWx1ZSAzMAotCi1FeHQtQ2FsbEJhckluZm8gOjo9IFNFUVVFTkNFIHsKLQlzcy1Db2RlCQlTUy1Db2RlLAotCWNhbGxCYXJyaW5nRmVhdHVyZUxpc3QJRXh0LUNhbGxCYXJGZWF0dXJlTGlzdCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotRXh0LUNhbGxCYXJGZWF0dXJlTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZFeHQtQmFzaWNTZXJ2aWNlR3JvdXBzKSBPRgotCQkJCUV4dC1DYWxsQmFycmluZ0ZlYXR1cmUKLQotRXh0LUNhbGxCYXJyaW5nRmVhdHVyZSA6Oj0gU0VRVUVOQ0UgewotCWJhc2ljU2VydmljZQlFeHQtQmFzaWNTZXJ2aWNlQ29kZQlPUFRJT05BTCwKLQlzcy1TdGF0dXMJCVs0XSBFeHQtU1MtU3RhdHVzLAotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1DVUctSW5mbyA6Oj0gU0VRVUVOQ0UgewotCWN1Zy1TdWJzY3JpcHRpb25MaXN0CUNVRy1TdWJzY3JpcHRpb25MaXN0LAotCWN1Zy1GZWF0dXJlTGlzdAlDVUctRmVhdHVyZUxpc3QJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVswXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1DVUctU3Vic2NyaXB0aW9uTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMC4ubWF4TnVtT2ZDVUcpIE9GCi0JCQkJQ1VHLVN1YnNjcmlwdGlvbgotCi1DVUctU3Vic2NyaXB0aW9uIDo6PSBTRVFVRU5DRSB7Ci0JY3VnLUluZGV4CUNVRy1JbmRleCwKLQljdWctSW50ZXJsb2NrCUNVRy1JbnRlcmxvY2ssCi0JaW50cmFDVUctT3B0aW9ucwlJbnRyYUNVRy1PcHRpb25zLAotCWJhc2ljU2VydmljZUdyb3VwTGlzdAlFeHQtQmFzaWNTZXJ2aWNlR3JvdXBMaXN0CU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotQ1VHLUluZGV4IDo6PSBJTlRFR0VSICgwLi4zMjc2NykKLQktLSBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gRVRTIDMwMCAxMzguCi0KLUNVRy1JbnRlcmxvY2sgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoNCkpCi0KLUludHJhQ1VHLU9wdGlvbnMgOjo9IEVOVU1FUkFURUQgewotCW5vQ1VHLVJlc3RyaWN0aW9ucyAgKDApLAotCWN1Z0lDLUNhbGxCYXJyZWQgICgxKSwKLQljdWdPRy1DYWxsQmFycmVkICAoMil9Ci0KLW1heE51bU9mQ1VHICBJTlRFR0VSIDo6PSAxMAotCi1DVUctRmVhdHVyZUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mRXh0LUJhc2ljU2VydmljZUdyb3VwcykgT0YKLQkJCQlDVUctRmVhdHVyZQotCi1FeHQtQmFzaWNTZXJ2aWNlR3JvdXBMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkV4dC1CYXNpY1NlcnZpY2VHcm91cHMpIE9GCi0JCQkJRXh0LUJhc2ljU2VydmljZUNvZGUKLQotbWF4TnVtT2ZFeHQtQmFzaWNTZXJ2aWNlR3JvdXBzICBJTlRFR0VSIDo6PSAzMgotCi1DVUctRmVhdHVyZSA6Oj0gU0VRVUVOQ0UgewotCWJhc2ljU2VydmljZQlFeHQtQmFzaWNTZXJ2aWNlQ29kZQlPUFRJT05BTCwKLQlwcmVmZXJlbnRpYWxDVUctSW5kaWNhdG9yCUNVRy1JbmRleAlPUFRJT05BTCwKLQlpbnRlckNVRy1SZXN0cmljdGlvbnMJSW50ZXJDVUctUmVzdHJpY3Rpb25zLAotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1JbnRlckNVRy1SZXN0cmljdGlvbnMgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCi0KLQktLSBiaXRzIDg3NjU0MzogMDAwMDAwICh1bnVzZWQpCi0JLS0gRXhjZXB0aW9uIGhhbmRsaW5nOgotCS0tIGJpdHMgODc2NTQzIHNoYWxsIGJlIGlnbm9yZWQgaWYgcmVjZWl2ZWQgYW5kIG5vdCB1bmRlcnN0b29kCi0KLQktLSBiaXRzIDIxCi0JLS0JMDAgIENVRyBvbmx5IGZhY2lsaXRpZXMKLQktLQkwMSAgQ1VHIHdpdGggb3V0Z29pbmcgYWNjZXNzCi0JLS0JMTAgIENVRyB3aXRoIGluY29taW5nIGFjY2VzcwotCS0tCTExICBDVUcgd2l0aCBib3RoIG91dGdvaW5nIGFuZCBpbmNvbWluZyBhY2Nlc3MKLQotRXh0LVNTLURhdGEgOjo9IFNFUVVFTkNFIHsKLQlzcy1Db2RlCQlTUy1Db2RlLAotCXNzLVN0YXR1cwlbNF0gRXh0LVNTLVN0YXR1cywKLQlzcy1TdWJzY3JpcHRpb25PcHRpb24JU1MtU3Vic2NyaXB0aW9uT3B0aW9uCU9QVElPTkFMLAotCWJhc2ljU2VydmljZUdyb3VwTGlzdAlFeHQtQmFzaWNTZXJ2aWNlR3JvdXBMaXN0CU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbNV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotTENTLVByaXZhY3lFeGNlcHRpb25MaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlByaXZhY3lDbGFzcykgT0YKLQkJCQlMQ1MtUHJpdmFjeUNsYXNzCi0KLW1heE51bU9mUHJpdmFjeUNsYXNzICBJTlRFR0VSIDo6PSA0Ci0KLUxDUy1Qcml2YWN5Q2xhc3MgOjo9IFNFUVVFTkNFIHsKLQlzcy1Db2RlCQlTUy1Db2RlLAotCXNzLVN0YXR1cwkJRXh0LVNTLVN0YXR1cywKLQlub3RpZmljYXRpb25Ub01TVXNlcglbMF0gTm90aWZpY2F0aW9uVG9NU1VzZXIJT1BUSU9OQUwsCi0JLS0gbm90aWZpY2F0aW9uVG9NU1VzZXIgbWF5IGJlIHNlbnQgb25seSBmb3IgU1MtY29kZXMgY2FsbFNlc3Npb25SZWxhdGVkCi0JLS0gYW5kIGNhbGxTZXNzaW9uVW5yZWxhdGVkLiBJZiBub3QgcmVjZWl2ZWQgZm9yIFNTLWNvZGVzIGNhbGxTZXNzaW9uUmVsYXRlZAotCS0tIGFuZCBjYWxsU2Vzc2lvblVucmVsYXRlZCwKLQktLSB0aGUgZGVmYXVsdCB2YWx1ZXMgYWNjb3JkaW5nIHRvIDNHUFAgVFMgMjMuMjcxIHNoYWxsIGJlIGFzc3VtZWQuCi0JZXh0ZXJuYWxDbGllbnRMaXN0CVsxXSBFeHRlcm5hbENsaWVudExpc3QJT1BUSU9OQUwsCi0JLS0gZXh0ZXJuYWxDbGllbnRMaXN0IG1heSBiZSBzZW50IG9ubHkgZm9yIFNTLWNvZGUgY2FsbFNlc3Npb25VbnJlbGF0ZWQgdG8gYQotCS0tIHZpc2l0ZWQgbm9kZSB0aGF0IGRvZXMgbm90IHN1cHBvcnQgTENTIFJlbGVhc2UgNCBvciBsYXRlciB2ZXJzaW9ucy4KLQktLSBleHRlcm5hbENsaWVudExpc3QgbWF5IGJlIHNlbnQgb25seSBmb3IgU1MtY29kZXMgY2FsbFNlc3Npb25VbnJlbGF0ZWQgYW5kCi0JLS0gY2FsbFNlc3Npb25SZWxhdGVkIHRvIGEgdmlzaXRlZCBub2RlIHRoYXQgc3VwcG9ydHMgTENTIFJlbGVhc2UgNCBvciBsYXRlciB2ZXJzaW9ucy4KLQlwbG1uQ2xpZW50TGlzdAlbMl0gUExNTkNsaWVudExpc3QJT1BUSU9OQUwsCi0JLS0gcGxtbkNsaWVudExpc3QgbWF5IGJlIHNlbnQgb25seSBmb3IgU1MtY29kZSBwbG1ub3BlcmF0b3IuCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVszXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCWV4dC1leHRlcm5hbENsaWVudExpc3QJWzRdIEV4dC1FeHRlcm5hbENsaWVudExpc3QJT1BUSU9OQUwsCi0JLS0gRXh0LWV4dGVybmFsQ2xpZW50TGlzdCBtYXkgYmUgc2VudCBvbmx5IGlmIHRoZSB2aXNpdGVkIG5vZGUgc3VwcG9ydHMgTENTIFJlbGVhc2UgNCBvcgotCS0tIGxhdGVyIHZlcnNpb25zLCB0aGUgdXNlciBkaWQgc3BlY2lmeSBtb3JlIHRoYW4gNSBjbGllbnRzLCBhbmQgV2hpdGUgQm9vayBTQ0NQIGlzIHVzZWQuCi0Jc2VydmljZVR5cGVMaXN0CVs1XQlTZXJ2aWNlVHlwZUxpc3QJT1BUSU9OQUwKLQktLSBzZXJ2aWNlVHlwZUxpc3QgbWF5IGJlIHNlbnQgb25seSBmb3IgU1MtY29kZSBzZXJ2aWNlVHlwZSBhbmQgaWYgdGhlIHZpc2l0ZWQgbm9kZQotCS0tIHN1cHBvcnRzIExDUyBSZWxlYXNlIDUgb3IgbGF0ZXIgdmVyc2lvbnMuCi0JLS0gCi0JLS0gaWYgc2VnbWVudGF0aW9uIGlzIHVzZWQsIHRoZSBjb21wbGV0ZSBMQ1MtUHJpdmFjeUNsYXNzIHNoYWxsIGJlIHNlbnQgaW4gb25lIHNlZ21lbnQKLX0KLQotRXh0ZXJuYWxDbGllbnRMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgwLi5tYXhOdW1PZkV4dGVybmFsQ2xpZW50KSBPRgotCQkJCUV4dGVybmFsQ2xpZW50Ci0KLW1heE51bU9mRXh0ZXJuYWxDbGllbnQgIElOVEVHRVIgOjo9IDUKLQotUExNTkNsaWVudExpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mUExNTkNsaWVudCkgT0YKLQkJCQlMQ1NDbGllbnRJbnRlcm5hbElECi0KLW1heE51bU9mUExNTkNsaWVudCAgSU5URUdFUiA6Oj0gNQotCi1FeHQtRXh0ZXJuYWxDbGllbnRMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkV4dC1FeHRlcm5hbENsaWVudCkgT0YKLQkJCQlFeHRlcm5hbENsaWVudAotCi1tYXhOdW1PZkV4dC1FeHRlcm5hbENsaWVudCAgSU5URUdFUiA6Oj0gMzUKLQotRXh0ZXJuYWxDbGllbnQgOjo9IFNFUVVFTkNFIHsKLQljbGllbnRJZGVudGl0eQlMQ1NDbGllbnRFeHRlcm5hbElELAotCWdtbGMtUmVzdHJpY3Rpb24JWzBdIEdNTEMtUmVzdHJpY3Rpb24JT1BUSU9OQUwsCi0Jbm90aWZpY2F0aW9uVG9NU1VzZXIJWzFdIE5vdGlmaWNhdGlvblRvTVNVc2VyCU9QVElPTkFMLAotCS0tIElmIG5vdGlmaWNhdGlvblRvTVNVc2VyIGlzIG5vdCByZWNlaXZlZCwgdGhlIGRlZmF1bHQgdmFsdWUgYWNjb3JkaW5nIHRvIAotCS0tIDNHUFAgVFMgMjMuMjcxIHNoYWxsIGJlIGFzc3VtZWQuCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uIH0KLQotR01MQy1SZXN0cmljdGlvbiA6Oj0gRU5VTUVSQVRFRCB7Ci0JZ21sYy1MaXN0CQkoMCksCi0JaG9tZS1Db3VudHJ5CSgxKSAsCi0JLi4uIH0KLS0tIGV4Y2VwdGlvbiBoYW5kbGluZzoKLS0tIEF0IHJlY2VwdGlvbiBvZiBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGUgb25lcyBsaXN0ZWQgdGhlIHJlY2VpdmVyIHNoYWxsIGlnbm9yZQotLS0gR01MQy1SZXN0cmljdGlvbi4KLQotTm90aWZpY2F0aW9uVG9NU1VzZXIgOjo9IEVOVU1FUkFURUQgewotCW5vdGlmeUxvY2F0aW9uQWxsb3dlZAkoMCksCi0Jbm90aWZ5QW5kVmVyaWZ5LUxvY2F0aW9uQWxsb3dlZElmTm9SZXNwb25zZQkoMSksCi0Jbm90aWZ5QW5kVmVyaWZ5LUxvY2F0aW9uTm90QWxsb3dlZElmTm9SZXNwb25zZQkoMiksCi0JLi4uLAotCWxvY2F0aW9uTm90QWxsb3dlZCAoMykgfQotLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgotLS0gQXQgcmVjZXB0aW9uIG9mIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSBvbmVzIGxpc3RlZCB0aGUgcmVjZWl2ZXIgc2hhbGwgaWdub3JlCi0tLSBOb3RpZmljYXRpb25Ub01TVXNlci4KLQotU2VydmljZVR5cGVMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlNlcnZpY2VUeXBlKSBPRgotCQkJCVNlcnZpY2VUeXBlCi0KLW1heE51bU9mU2VydmljZVR5cGUgIElOVEVHRVIgOjo9IDMyCi0KLVNlcnZpY2VUeXBlIDo6PSBTRVFVRU5DRSB7Ci0Jc2VydmljZVR5cGVJZGVudGl0eQlMQ1NTZXJ2aWNlVHlwZUlELAotCWdtbGMtUmVzdHJpY3Rpb24JWzBdIEdNTEMtUmVzdHJpY3Rpb24JT1BUSU9OQUwsCi0Jbm90aWZpY2F0aW9uVG9NU1VzZXIJWzFdIE5vdGlmaWNhdGlvblRvTVNVc2VyCU9QVElPTkFMLAotCS0tIElmIG5vdGlmaWNhdGlvblRvTVNVc2VyIGlzIG5vdCByZWNlaXZlZCwgdGhlIGRlZmF1bHQgdmFsdWUgYWNjb3JkaW5nIHRvIAotCS0tIDNHUFAgVFMgMjMuMjcxIHNoYWxsIGJlIGFzc3VtZWQuCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uIH0KLQotTU9MUi1MaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZk1PTFItQ2xhc3MpIE9GCi0JCQkJTU9MUi1DbGFzcwotCi1tYXhOdW1PZk1PTFItQ2xhc3MgIElOVEVHRVIgOjo9IDMKLQotTU9MUi1DbGFzcyA6Oj0gU0VRVUVOQ0UgewotCXNzLUNvZGUJCVNTLUNvZGUsCi0Jc3MtU3RhdHVzCQlFeHQtU1MtU3RhdHVzLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotWm9uZUNvZGVMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlpvbmVDb2RlcykKLQkJCQlPRiBab25lQ29kZQotCi1ab25lQ29kZSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgyKSkKLQktLSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiBUUyAzR1BQIFRTIDIzLjAwMyBbMTddCi0KLW1heE51bU9mWm9uZUNvZGVzICBJTlRFR0VSIDo6PSAxMAotCi1JbnNlcnRTdWJzY3JpYmVyRGF0YVJlcyA6Oj0gU0VRVUVOQ0UgewotCXRlbGVzZXJ2aWNlTGlzdAlbMV0gVGVsZXNlcnZpY2VMaXN0CU9QVElPTkFMLAotCWJlYXJlclNlcnZpY2VMaXN0CVsyXSBCZWFyZXJTZXJ2aWNlTGlzdAlPUFRJT05BTCwKLQlzcy1MaXN0CQlbM10gU1MtTGlzdAlPUFRJT05BTCwKLQlvZGItR2VuZXJhbERhdGEJWzRdIE9EQi1HZW5lcmFsRGF0YQlPUFRJT05BTCwKLQlyZWdpb25hbFN1YnNjcmlwdGlvblJlc3BvbnNlCVs1XSBSZWdpb25hbFN1YnNjcmlwdGlvblJlc3BvbnNlCU9QVElPTkFMLAotCXN1cHBvcnRlZENhbWVsUGhhc2VzCVs2XSBTdXBwb3J0ZWRDYW1lbFBoYXNlcwlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzddIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4gLAotCW9mZmVyZWRDYW1lbDRDU0lzCVs4XSBPZmZlcmVkQ2FtZWw0Q1NJcwlPUFRJT05BTCwKLQlzdXBwb3J0ZWRGZWF0dXJlcwlbOV0gU3VwcG9ydGVkRmVhdHVyZXMJT1BUSU9OQUwgfQotCi1SZWdpb25hbFN1YnNjcmlwdGlvblJlc3BvbnNlIDo6PSBFTlVNRVJBVEVEIHsKLQluZXR3b3JrTm9kZS1BcmVhUmVzdHJpY3RlZAkoMCksCi0JdG9vTWFueVpvbmVDb2RlcwkoMSksCi0Jem9uZUNvZGVzQ29uZmxpY3QJKDIpLAotCXJlZ2lvbmFsU3Vic2NOb3RTdXBwb3J0ZWQJKDMpfQotCi1EZWxldGVTdWJzY3JpYmVyRGF0YUFyZyA6Oj0gU0VRVUVOQ0UgewotCWltc2kJCQlbMF0gSU1TSSwKLQliYXNpY1NlcnZpY2VMaXN0CVsxXSBCYXNpY1NlcnZpY2VMaXN0CU9QVElPTkFMLAotCS0tIFRoZSBleGNlcHRpb24gaGFuZGxpbmcgZm9yIHJlY2VwdGlvbiBvZiB1bnN1cHBvcnRlZC9ub3QgYWxsb2NhdGVkCi0JLS0gYmFzaWNTZXJ2aWNlQ29kZXMgaXMgZGVmaW5lZCBpbiBzZWN0aW9uIDYuOC4yCi0Jc3MtTGlzdAkJWzJdIFNTLUxpc3QJT1BUSU9OQUwsCi0Jcm9hbWluZ1Jlc3RyaWN0aW9uRHVlVG9VbnN1cHBvcnRlZEZlYXR1cmUgWzRdIE5VTEwJT1BUSU9OQUwsCi0JcmVnaW9uYWxTdWJzY3JpcHRpb25JZGVudGlmaWVyCVs1XSBab25lQ29kZQlPUFRJT05BTCwKLQl2YnNHcm91cEluZGljYXRpb24JWzddIE5VTEwJCU9QVElPTkFMLAotCXZnY3NHcm91cEluZGljYXRpb24JWzhdIE5VTEwJIAlPUFRJT05BTCwKLQljYW1lbFN1YnNjcmlwdGlvbkluZm9XaXRoZHJhdwlbOV0gTlVMTAkgCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbNl0gRXh0ZW5zaW9uQ29udGFpbmVyIAlPUFRJT05BTCwKLQkuLi4sCi0JZ3Byc1N1YnNjcmlwdGlvbkRhdGFXaXRoZHJhdwlbMTBdIEdQUlNTdWJzY3JpcHRpb25EYXRhV2l0aGRyYXcJT1BUSU9OQUwsCi0Jcm9hbWluZ1Jlc3RyaWN0ZWRJblNnc25EdWVUb1Vuc3VwcHBvcnRlZEZlYXR1cmUgWzExXSBOVUxMCU9QVElPTkFMLAotCWxzYUluZm9ybWF0aW9uV2l0aGRyYXcJWzEyXSBMU0FJbmZvcm1hdGlvbldpdGhkcmF3CU9QVElPTkFMLAotCWdtbGMtTGlzdFdpdGhkcmF3IAlbMTNdCU5VTEwJCU9QVElPTkFMLAotCWlzdEluZm9ybWF0aW9uV2l0aGRyYXcJWzE0XSBOVUxMCQlPUFRJT05BTCwKLQlzcGVjaWZpY0NTSS1XaXRoZHJhdwlbMTVdIFNwZWNpZmljQ1NJLVdpdGhkcmF3CU9QVElPTkFMLAotCWNoYXJnaW5nQ2hhcmFjdGVyaXN0aWNzV2l0aGRyYXcJWzE2XSBOVUxMCQlPUFRJT05BTCwKLQlzdG4tc3JXaXRoZHJhdwlbMTddIE5VTEwJCU9QVElPTkFMLAotCWVwc1N1YnNjcmlwdGlvbkRhdGFXaXRoZHJhdwlbMThdIEVQUy1TdWJzY3JpcHRpb25EYXRhV2l0aGRyYXcJT1BUSU9OQUwsCi0JYXBuLW9pLXJlcGxhY2VtZW50V2l0aGRyYXcJWzE5XSBOVUxMCQlPUFRJT05BTCwKLQljc2ctU3Vic2NyaXB0aW9uRGVsZXRlZAlbMjBdCU5VTEwJCU9QVElPTkFMIH0KLQotU3BlY2lmaWNDU0ktV2l0aGRyYXcgOjo9IEJJVCBTVFJJTkcgewotCW8tY3NpICgwKSwKLQlzcy1jc2kgKDEpLAotCXRpZi1jc2kgKDIpLAotCWQtY3NpICgzKSwKLQl2dC1jc2kgKDQpLAotCW1vLXNtcy1jc2kgKDUpLAotCW0tY3NpICg2KSwKLQlncHJzLWNzaSAoNyksCi0JdC1jc2kgKDgpLAotCW10LXNtcy1jc2kgKDkpLAotCW1nLWNzaSAoMTApLAotCW8tSU0tQ1NJICgxMSksIAotCWQtSU0tQ1NJICgxMiksCi0JdnQtSU0tQ1NJICgxMykgfSAoU0laRSg4Li4zMikpIAotLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgotLS0gYml0cyAxMSB0byAzMSBzaGFsbCBiZSBpZ25vcmVkIGlmIHJlY2VpdmVkIGJ5IGEgbm9uLUlQIE11bHRpbWVkaWEgQ29yZSBOZXR3b3JrIGVudGl0eS4KLS0tIGJpdHMgMC0xMCBhbmQgMTQtMzEgc2hhbGwgYmUgaWdub3JlZCBpZiByZWNlaXZlZCBieSBhbiBJUCBNdWx0aW1lZGlhIENvcmUgTmV0d29yayBlbnRpdHkuCi0tLSBiaXRzIDExLTEzIGFyZSBvbmx5IGFwcGxpY2FibGUgaW4gYW4gSVAgTXVsdGltZWRpYSBDb3JlIE5ldHdvcmsuCi0tLSBCaXQgOCBhbmQgYml0cyAxMS0xMyBhcmUgb25seSBhcHBsaWNhYmxlIGZvciB0aGUgTm90ZVN1YnNjcmliZXJEYXRhTW9kaWZpZWQgb3BlcmF0aW9uLgotCi1HUFJTU3Vic2NyaXB0aW9uRGF0YVdpdGhkcmF3IDo6PSBDSE9JQ0UgewotCWFsbEdQUlNEYXRhCU5VTEwsCi0JY29udGV4dElkTGlzdAlDb250ZXh0SWRMaXN0fQotCi1FUFMtU3Vic2NyaXB0aW9uRGF0YVdpdGhkcmF3IDo6PSBDSE9JQ0UgewotCWFsbEVQUy1EYXRhCU5VTEwsCi0JY29udGV4dElkTGlzdAlDb250ZXh0SWRMaXN0fQotCi1Db250ZXh0SWRMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlBEUC1Db250ZXh0cykgT0YKLQkJCQlDb250ZXh0SWQKLQotTFNBSW5mb3JtYXRpb25XaXRoZHJhdyA6Oj0gQ0hPSUNFIHsKLQlhbGxMU0FEYXRhCU5VTEwsCi0JbHNhSWRlbnRpdHlMaXN0CUxTQUlkZW50aXR5TGlzdCB9Ci0KLUxTQUlkZW50aXR5TGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZMU0FzKSBPRgotCQkJCUxTQUlkZW50aXR5Ci0KLUJhc2ljU2VydmljZUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mQmFzaWNTZXJ2aWNlcykgT0YKLQkJCQlFeHQtQmFzaWNTZXJ2aWNlQ29kZQotCi1tYXhOdW1PZkJhc2ljU2VydmljZXMgIElOVEVHRVIgOjo9IDcwCi0KLURlbGV0ZVN1YnNjcmliZXJEYXRhUmVzIDo6PSBTRVFVRU5DRSB7Ci0JcmVnaW9uYWxTdWJzY3JpcHRpb25SZXNwb25zZQlbMF0gUmVnaW9uYWxTdWJzY3JpcHRpb25SZXNwb25zZQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotVmxyQ2FtZWxTdWJzY3JpcHRpb25JbmZvIDo6PSBTRVFVRU5DRSB7Ci0Jby1DU0kJCVswXSBPLUNTSQkJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVsxXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCXNzLUNTSQkJWzJdIFNTLUNTSQlPUFRJT05BTCwKLQlvLUJjc21DYW1lbFREUC1Dcml0ZXJpYUxpc3QJWzRdIE8tQmNzbUNhbWVsVERQQ3JpdGVyaWFMaXN0CU9QVElPTkFMLAotCXRpZi1DU0kJCVszXSBOVUxMCU9QVElPTkFMLAotCW0tQ1NJCQlbNV0gTS1DU0kJT1BUSU9OQUwsCi0JbW8tc21zLUNTSQlbNl0gU01TLUNTSQlPUFRJT05BTCwKLQl2dC1DU0kJCVs3XSBULUNTSQlPUFRJT05BTCwKLQl0LUJDU00tQ0FNRUwtVERQLUNyaXRlcmlhTGlzdAlbOF0gVC1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYUxpc3QJT1BUSU9OQUwsCi0JZC1DU0kJCVs5XSBELUNTSQlPUFRJT05BTCwKLQltdC1zbXMtQ1NJCVsxMF0gU01TLUNTSQlPUFRJT05BTCwKLQltdC1zbXNDQU1FTFREUC1Dcml0ZXJpYUxpc3QJWzExXQlNVC1zbXNDQU1FTFREUC1Dcml0ZXJpYUxpc3QJT1BUSU9OQUwKLQl9Ci0KLU1ULXNtc0NBTUVMVERQLUNyaXRlcmlhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uIG1heE51bU9mQ2FtZWxURFBEYXRhKSBPRgotCU1ULXNtc0NBTUVMVERQLUNyaXRlcmlhCi0KLU1ULXNtc0NBTUVMVERQLUNyaXRlcmlhIDo6PSBTRVFVRU5DRSB7Ci0Jc21zLVRyaWdnZXJEZXRlY3Rpb25Qb2ludAlTTVMtVHJpZ2dlckRldGVjdGlvblBvaW50LAotCXRwZHUtVHlwZUNyaXRlcmlvbglbMF0JVFBEVS1UeXBlQ3JpdGVyaW9uCQlPUFRJT05BTCwKLQkuLi4gfQotCi1UUERVLVR5cGVDcml0ZXJpb24gOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mVFBEVVR5cGVzKSBPRgotCU1ULVNNUy1UUERVLVR5cGUKLQotCi1tYXhOdW1PZlRQRFVUeXBlcyBJTlRFR0VSIDo6PSA1Ci0KLU1ULVNNUy1UUERVLVR5cGUgOjo9IEVOVU1FUkFURUQgewotCXNtcy1ERUxJVkVSIAkoMCksCi0Jc21zLVNVQk1JVC1SRVBPUlQgCSgxKSwKLQlzbXMtU1RBVFVTLVJFUE9SVCAJKDIpLAotCS4uLiB9Ci0KLS0tCWV4Y2VwdGlvbiBoYW5kbGluZzoKLS0tCUZvciBUUERVLVR5cGVDcml0ZXJpb24gc2VxdWVuY2VzIGNvbnRhaW5pbmcgdGhpcyBwYXJhbWV0ZXIgd2l0aCBhbnkKLS0tCW90aGVyIHZhbHVlIHRoYW4gdGhlIG9uZXMgbGlzdGVkIGFib3ZlIHRoZSByZWNlaXZlciBzaGFsbCBpZ25vcmUgCi0tLQl0aGUgd2hvbGUgVFBEVS1UeXBlQ3JpdGVyaW9uIHNlcXVlbmNlLgotLS0JSW4gQ0FNRUwgcGhhc2UgNCwgc21zLVNVQk1JVC1SRVBPUlQgc2hhbGwgbm90IGJlIHVzZWQgYW5kIGEgcmVjZWl2ZWQgVFBEVS1UeXBlQ3JpdGVyaW9uCi0tLQlzZXF1ZW5jZSBjb250YWluaW5nIHNtcy1TVUJNSVQtUkVQT1JUIHNoYWxsIGJlIHdob2xseSBpZ25vcmVkLgotCi1ELUNTSSA6Oj0gU0VRVUVOQ0UgewotCWRwLUFuYWx5c2VkSW5mb0NyaXRlcmlhTGlzdAlbMF0gRFAtQW5hbHlzZWRJbmZvQ3JpdGVyaWFMaXN0CU9QVElPTkFMLAotCWNhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nCVsxXSBDYW1lbENhcGFiaWxpdHlIYW5kbGluZwlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQlub3RpZmljYXRpb25Ub0NTRQlbM10JTlVMTAkJT1BUSU9OQUwsCi0JY3NpLUFjdGl2ZQlbNF0JTlVMTAkJT1BUSU9OQUwsCi0JLi4ufSAKLS0tCW5vdGlmaWNhdGlvblRvQ1NFIGFuZCBjc2ktQWN0aXZlIHNoYWxsIG5vdCBiZSBwcmVzZW50IHdoZW4gRC1DU0kgaXMgc2VudCB0byBWTFIvR01TQy4KLS0tCVRoZXkgbWF5IG9ubHkgYmUgaW5jbHVkZWQgaW4gQVRTSS9BVE0gYWNrL05TREMgbWVzc2FnZS4KLS0tCURQLUFuYWx5c2VkSW5mb0NyaXRlcmlhIGFuZCAgY2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcgc2hhbGwgYmUgcHJlc2VudCBpbiAKLS0tCXRoZSBELUNTSSBzZXF1ZW5jZS4KLS0tCUlmIEQtQ1NJIGlzIHNlZ21lbnRlZCwgdGhlbiB0aGUgZmlyc3Qgc2VnbWVudCBzaGFsbCBjb250YWluIGRwLUFuYWx5c2VkSW5mb0NyaXRlcmlhTGlzdAotLS0JYW5kIGNhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nLiBTdWJzZXF1ZW50IHNlZ21lbnRzIHNoYWxsIG5vdCBjb250YWluCi0tLQljYW1lbENhcGFiaWxpdHlIYW5kbGluZywgYnV0IG1heSBjb250YWluIGRwLUFuYWx5c2VkSW5mb0NyaXRlcmlhTGlzdC4KLQotRFAtQW5hbHlzZWRJbmZvQ3JpdGVyaWFMaXN0ICA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZEUC1BbmFseXNlZEluZm9Dcml0ZXJpYSkgT0YKLQkJCQlEUC1BbmFseXNlZEluZm9Dcml0ZXJpdW0KLQotbWF4TnVtT2ZEUC1BbmFseXNlZEluZm9Dcml0ZXJpYSBJTlRFR0VSIDo6PSAxMAotCi1EUC1BbmFseXNlZEluZm9Dcml0ZXJpdW0gOjo9IFNFUVVFTkNFIHsKLQlkaWFsbGVkTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZywKLQlzZXJ2aWNlS2V5CVNlcnZpY2VLZXksCi0JZ3NtU0NGLUFkZHJlc3MJSVNETi1BZGRyZXNzU3RyaW5nLAotCWRlZmF1bHRDYWxsSGFuZGxpbmcJRGVmYXVsdENhbGxIYW5kbGluZywKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotU1MtQ1NJIDo6PSBTRVFVRU5DRSB7Ci0Jc3MtQ2FtZWxEYXRhCVNTLUNhbWVsRGF0YSwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQlub3RpZmljYXRpb25Ub0NTRQlbMF0JTlVMTAkJT1BUSU9OQUwsCi0JY3NpLUFjdGl2ZQlbMV0JTlVMTAkJT1BUSU9OQUwKLS0tCW5vdGlmaWNhdGlvblRvQ1NFIGFuZCBjc2ktQWN0aXZlIHNoYWxsIG5vdCBiZSBwcmVzZW50IHdoZW4gU1MtQ1NJIGlzIHNlbnQgdG8gVkxSLgotLS0JVGhleSBtYXkgb25seSBiZSBpbmNsdWRlZCBpbiBBVFNJL0FUTSBhY2svTlNEQyBtZXNzYWdlLgotfQotCi1TUy1DYW1lbERhdGEgIDo6PSBTRVFVRU5DRSB7Ci0Jc3MtRXZlbnRMaXN0CVNTLUV2ZW50TGlzdCwKLQlnc21TQ0YtQWRkcmVzcwlJU0ROLUFkZHJlc3NTdHJpbmcsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVswXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsIAotCS4uLn0KLQotU1MtRXZlbnRMaXN0ICA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZDYW1lbFNTRXZlbnRzKSBPRiBTUy1Db2RlCi0JLS0gQWN0aW9ucyBmb3IgdGhlIGZvbGxvd2luZyBTUy1Db2RlIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiBDQU1FTCBQaGFzZSAzOgotCS0tIGVjdAkJU1MtQ29kZSA6Oj0gJzAwMTEwMDAxJ0IKLQktLSBtdWx0aVBUWQlTUy1Db2RlIDo6PSAnMDEwMTAwMDEnQgotCS0tIGNkCQlTUy1Db2RlIDo6PSAnMDAxMDAxMDAnQgotCS0tIGNjYnMJCVNTLUNvZGUgOjo9ICcwMTAwMDEwMCdCCi0JLS0gYWxsIG90aGVyIFNTIGNvZGVzIHNoYWxsIGJlIGlnbm9yZWQKLQktLSBXaGVuIFNTLUNTSSBpcyBzZW50IHRvIHRoZSBWTFIsIGl0IHNoYWxsIG5vdCBjb250YWluIGEgbWFya2luZyBmb3IgY2Nicy4KLQktLSBJZiB0aGUgVkxSIHJlY2VpdmVzIFNTLUNTSSBjb250YWluaW5nIGEgbWFya2luZyBmb3IgY2NicywgdGhlIFZMUiBzaGFsbCBkaXNjYXJkIHRoZQotCS0tIGNjYnMgbWFya2luZyBpbiBTUy1DU0kuCi0KLW1heE51bU9mQ2FtZWxTU0V2ZW50cyBJTlRFR0VSIDo6PSAxMAotCi1PLUNTSSA6Oj0gU0VRVUVOQ0UgewotCW8tQmNzbUNhbWVsVERQRGF0YUxpc3QJTy1CY3NtQ2FtZWxURFBEYXRhTGlzdCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQljYW1lbENhcGFiaWxpdHlIYW5kbGluZwlbMF0gQ2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcJT1BUSU9OQUwsCi0Jbm90aWZpY2F0aW9uVG9DU0UJWzFdCU5VTEwJCU9QVElPTkFMLAotCWNzaUFjdGl2ZQkJWzJdCU5VTEwJCU9QVElPTkFMfQotLS0Jbm90aWZpY2F0aW9udG9DU0UgYW5kIGNzaUFjdGl2ZSBzaGFsbCBub3QgYmUgcHJlc2VudCB3aGVuIE8tQ1NJIGlzIHNlbnQgdG8gVkxSL0dNU0MuCi0tLQlUaGV5IG1heSBvbmx5IGJlIGluY2x1ZGVkIGluIEFUU0kvQVRNIGFjay9OU0RDIG1lc3NhZ2UuCi0tLQlPLUNTSSBzaGFsbCBub3QgYmUgc2VnbWVudGVkLgotCi1PLUJjc21DYW1lbFREUERhdGFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkNhbWVsVERQRGF0YSkgT0YKLQlPLUJjc21DYW1lbFREUERhdGEKLQktLSBPLUJjc21DYW1lbFREUERhdGFMaXN0IHNoYWxsIG5vdCBjb250YWluIG1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YKLQktLSBPLUJjc21DYW1lbFREUERhdGEgY29udGFpbmluZyB0aGUgc2FtZSB2YWx1ZSBmb3Igby1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50LgotCS0tIEZvciBDQU1FTCBQaGFzZSAyLCB0aGlzIG1lYW5zIHRoYXQgb25seSBvbmUgaW5zdGFuY2Ugb2YgTy1CY3NtQ2FtZWxURFBEYXRhIGlzIGFsbG93ZWQKLQktLSB3aXRoIG8tQmNzbVRyaWdnZXJEZXRlY3Rpb25Qb2ludCBiZWluZyBlcXVhbCB0byBEUDIuCi0KLW1heE51bU9mQ2FtZWxURFBEYXRhICBJTlRFR0VSIDo6PSAxMAotCi1PLUJjc21DYW1lbFREUERhdGEgOjo9IFNFUVVFTkNFIHsKLQlvLUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQJTy1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50LAotCXNlcnZpY2VLZXkJU2VydmljZUtleSwKLQlnc21TQ0YtQWRkcmVzcwlbMF0gSVNETi1BZGRyZXNzU3RyaW5nLAotCWRlZmF1bHRDYWxsSGFuZGxpbmcJWzFdIERlZmF1bHRDYWxsSGFuZGxpbmcsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uCi0JfQotCi1TZXJ2aWNlS2V5IDo6PSBJTlRFR0VSICgwLi4yMTQ3NDgzNjQ3KQotCi1PLUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQgOjo9IEVOVU1FUkFURUQgewotCWNvbGxlY3RlZEluZm8gKDIpLAotCS4uLiwKLQlyb3V0ZVNlbGVjdEZhaWx1cmUgKDQpIH0KLQktLSBleGNlcHRpb24gaGFuZGxpbmc6Ci0JLS0gRm9yIE8tQmNzbUNhbWVsVERQRGF0YSBzZXF1ZW5jZXMgY29udGFpbmluZyB0aGlzIHBhcmFtZXRlciB3aXRoIGFueQotCS0tIG90aGVyIHZhbHVlIHRoYW4gdGhlIG9uZXMgbGlzdGVkIHRoZSByZWNlaXZlciBzaGFsbCBpZ25vcmUgdGhlIHdob2xlIAotCS0tIE8tQmNzbUNhbWVsVERQRGF0YXNlcXVlbmNlLiAKLQktLSBGb3IgTy1CY3NtQ2FtZWxURFAtQ3JpdGVyaWEgc2VxdWVuY2VzIGNvbnRhaW5pbmcgdGhpcyBwYXJhbWV0ZXIgd2l0aCBhbnkKLQktLSBvdGhlciB2YWx1ZSB0aGFuIHRoZSBvbmVzIGxpc3RlZCB0aGUgcmVjZWl2ZXIgc2hhbGwgaWdub3JlIHRoZSB3aG9sZQotCS0tIE8tQmNzbUNhbWVsVERQLUNyaXRlcmlhIHNlcXVlbmNlLgotCi1PLUJjc21DYW1lbFREUENyaXRlcmlhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZDYW1lbFREUERhdGEpIE9GCi0JTy1CY3NtQ2FtZWxURFAtQ3JpdGVyaWEgCi0KLVQtQkNTTS1DQU1FTC1URFAtQ3JpdGVyaWFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkNhbWVsVERQRGF0YSkgT0YKLQlULUJDU00tQ0FNRUwtVERQLUNyaXRlcmlhIAotCi1PLUJjc21DYW1lbFREUC1Dcml0ZXJpYSA6Oj0gU0VRVUVOQ0UgewotCW8tQmNzbVRyaWdnZXJEZXRlY3Rpb25Qb2ludAlPLUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQsCQotCWRlc3RpbmF0aW9uTnVtYmVyQ3JpdGVyaWEgCVswXSBEZXN0aW5hdGlvbk51bWJlckNyaXRlcmlhCU9QVElPTkFMLAotCWJhc2ljU2VydmljZUNyaXRlcmlhCVsxXSBCYXNpY1NlcnZpY2VDcml0ZXJpYQlPUFRJT05BTCwKLQljYWxsVHlwZUNyaXRlcmlhCVsyXSBDYWxsVHlwZUNyaXRlcmlhCU9QVElPTkFMLAotCS4uLiwKLQlvLUNhdXNlVmFsdWVDcml0ZXJpYQlbM10gTy1DYXVzZVZhbHVlQ3JpdGVyaWEJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVs0XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwgfQotCi1ULUJDU00tQ0FNRUwtVERQLUNyaXRlcmlhIDo6PSBTRVFVRU5DRSB7Ci0JdC1CQ1NNLVRyaWdnZXJEZXRlY3Rpb25Qb2ludAlULUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQsCQotCWJhc2ljU2VydmljZUNyaXRlcmlhCVswXSBCYXNpY1NlcnZpY2VDcml0ZXJpYQlPUFRJT05BTCwKLQl0LUNhdXNlVmFsdWVDcml0ZXJpYQlbMV0gVC1DYXVzZVZhbHVlQ3JpdGVyaWEJT1BUSU9OQUwsCi0JLi4uIH0KLQotRGVzdGluYXRpb25OdW1iZXJDcml0ZXJpYSAgOjo9IFNFUVVFTkNFIHsKLQltYXRjaFR5cGUJCVswXSBNYXRjaFR5cGUsCi0JZGVzdGluYXRpb25OdW1iZXJMaXN0IAlbMV0gRGVzdGluYXRpb25OdW1iZXJMaXN0CU9QVElPTkFMLAotCWRlc3RpbmF0aW9uTnVtYmVyTGVuZ3RoTGlzdAlbMl0gRGVzdGluYXRpb25OdW1iZXJMZW5ndGhMaXN0CU9QVElPTkFMLAotCS0tIG9uZSBvciBib3RoIG9mIGRlc3RpbmF0aW9uTnVtYmVyTGlzdCBhbmQgZGVzdGluYXRpb25OdW1iZXJMZW5ndGhMaXN0IAotCS0tIHNoYWxsIGJlIHByZXNlbnQKLQkuLi59Ci0KLURlc3RpbmF0aW9uTnVtYmVyTGlzdCAgOjo9IFNFUVVFTkNFIFNJWkUJKDEuLm1heE51bU9mQ2FtZWxEZXN0aW5hdGlvbk51bWJlcnMpIE9GCi0JCQkJSVNETi1BZGRyZXNzU3RyaW5nCi0JLS0gVGhlIHJlY2VpdmluZyBlbnRpdHkgc2hhbGwgbm90IGNoZWNrIHRoZSBmb3JtYXQgb2YgYSBudW1iZXIgaW4KLQktLSB0aGUgZGlhbGxlZCBudW1iZXIgbGlzdAotCi1EZXN0aW5hdGlvbk51bWJlckxlbmd0aExpc3QgIDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkNhbWVsRGVzdGluYXRpb25OdW1iZXJMZW5ndGhzKSBPRiAKLQkJCQkJSU5URUdFUigxLi5tYXhOdW1PZklTRE4tQWRkcmVzc0RpZ2l0cykKLQotQmFzaWNTZXJ2aWNlQ3JpdGVyaWEgICA6Oj0gU0VRVUVOQ0UgU0laRSgxLi5tYXhOdW1PZkNhbWVsQmFzaWNTZXJ2aWNlQ3JpdGVyaWEpIE9GCi0JRXh0LUJhc2ljU2VydmljZUNvZGUKLQotbWF4TnVtT2ZJU0ROLUFkZHJlc3NEaWdpdHMgIElOVEVHRVIgOjo9IDE1Ci0KLW1heE51bU9mQ2FtZWxEZXN0aW5hdGlvbk51bWJlcnMgIElOVEVHRVIgOjo9IDEwCi0KLW1heE51bU9mQ2FtZWxEZXN0aW5hdGlvbk51bWJlckxlbmd0aHMgIElOVEVHRVIgOjo9IDMKLQotbWF4TnVtT2ZDYW1lbEJhc2ljU2VydmljZUNyaXRlcmlhICBJTlRFR0VSIDo6PSA1Ci0KLUNhbGxUeXBlQ3JpdGVyaWEgICAgICAgOjo9IEVOVU1FUkFURUQgewotCWZvcndhcmRlZCAJKDApLAotCW5vdEZvcndhcmRlZAkoMSl9Ci0KLU1hdGNoVHlwZSAgICAgICA6Oj0gRU5VTUVSQVRFRCB7Ci0JaW5oaWJpdGluZyAJKDApLAotCWVuYWJsaW5nCQkoMSl9Ci0KLU8tQ2F1c2VWYWx1ZUNyaXRlcmlhICAgOjo9IFNFUVVFTkNFIFNJWkUoMS4ubWF4TnVtT2ZDQU1FTC1PLUNhdXNlVmFsdWVDcml0ZXJpYSkgT0YKLQlDYXVzZVZhbHVlCi0KLVQtQ2F1c2VWYWx1ZUNyaXRlcmlhICAgOjo9IFNFUVVFTkNFIFNJWkUoMS4ubWF4TnVtT2ZDQU1FTC1ULUNhdXNlVmFsdWVDcml0ZXJpYSkgT0YKLQlDYXVzZVZhbHVlCi0KLW1heE51bU9mQ0FNRUwtTy1DYXVzZVZhbHVlQ3JpdGVyaWEgIElOVEVHRVIgOjo9IDUKLQotbWF4TnVtT2ZDQU1FTC1ULUNhdXNlVmFsdWVDcml0ZXJpYSAgSU5URUdFUiA6Oj0gNQotCi1DYXVzZVZhbHVlIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUoMSkpCi0tLSBUeXBlIGV4dHJhY3RlZCBmcm9tIENhdXNlIHBhcmFtZXRlciBpbiBJVFUtVCBSZWNvbW1lbmRhdGlvbiBRLjc2My4KLS0tIEZvciB0aGUgdXNlIG9mIGNhdXNlIHZhbHVlIHJlZmVyIHRvIElUVS1UIFJlY29tbWVuZGF0aW9uIFEuODUwLgotCi1EZWZhdWx0Q2FsbEhhbmRsaW5nIDo6PSBFTlVNRVJBVEVEIHsKLQljb250aW51ZUNhbGwgKDApICwKLQlyZWxlYXNlQ2FsbCAoMSkgLAotCS4uLn0KLQktLSBleGNlcHRpb24gaGFuZGxpbmc6Ci0JLS0gcmVjZXB0aW9uIG9mIHZhbHVlcyBpbiByYW5nZSAyLTMxIHNoYWxsIGJlIHRyZWF0ZWQgYXMgImNvbnRpbnVlQ2FsbCIKLQktLSByZWNlcHRpb24gb2YgdmFsdWVzIGdyZWF0ZXIgdGhhbiAzMSBzaGFsbCBiZSB0cmVhdGVkIGFzICJyZWxlYXNlQ2FsbCIKLQotQ2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcgOjo9IElOVEVHRVIoMS4uMTYpIAotCS0tIHZhbHVlIDEgPSBDQU1FTCBwaGFzZSAxLAotCS0tIHZhbHVlIDIgPSBDQU1FTCBwaGFzZSAyLAotCS0tIHZhbHVlIDMgPSBDQU1FTCBQaGFzZSAzLAotCS0tIHZhbHVlIDQgPSBDQU1FTCBwaGFzZSA0OgotCS0tIHJlY2VwdGlvbiBvZiB2YWx1ZXMgZ3JlYXRlciB0aGFuIDQgc2hhbGwgYmUgdHJlYXRlZCBhcyBDQU1FTCBwaGFzZSA0LgotCi1TdXBwb3J0ZWRDYW1lbFBoYXNlcyA6Oj0gQklUIFNUUklORyB7Ci0JcGhhc2UxICgwKSwKLQlwaGFzZTIgKDEpLAotCXBoYXNlMyAoMiksCi0JcGhhc2U0ICgzKX0gKFNJWkUgKDEuLjE2KSkgCi0tLSBBIG5vZGUgc2hhbGwgbWFyayBpbiB0aGUgQklUIFNUUklORyBhbGwgQ0FNRUwgUGhhc2VzIGl0IHN1cHBvcnRzLgotLS0gT3RoZXIgdmFsdWVzIHRoYW4gbGlzdGVkIGFib3ZlIHNoYWxsIGJlIGRpc2NhcmRlZC4KLQotT2ZmZXJlZENhbWVsNENTSXMgOjo9IEJJVCBTVFJJTkcgeyAJCi0Jby1jc2kJCSgwKSwKLQlkLWNzaQkJKDEpLAotCXZ0LWNzaQkJKDIpLAotCXQtY3NpCQkoMyksCi0JbXQtc21zLWNzaQkoNCksCi0JbWctY3NpCQkoNSksCi0JcHNpLWVuaGFuY2VtZW50cwkoNikgCi19IChTSVpFICg3Li4xNikpCi0tLSBBIG5vZGUgc3VwcG9ydGluZyBDYW1lbCBwaGFzZSA0IHNoYWxsIG1hcmsgaW4gdGhlIEJJVCBTVFJJTkcgYWxsIENhbWVsNCBDU0lzIAotLS0gaXQgb2ZmZXJzLgotLS0gT3RoZXIgdmFsdWVzIHRoYW4gbGlzdGVkIGFib3ZlIHNoYWxsIGJlIGRpc2NhcmRlZC4KLQotT2ZmZXJlZENhbWVsNEZ1bmN0aW9uYWxpdGllcyA6Oj0gQklUIFNUUklORyB7IAkKLQlpbml0aWF0ZUNhbGxBdHRlbXB0CSgwKSwKLQlzcGxpdExlZwkJKDEpLAotCW1vdmVMZWcJCSgyKSwKLQlkaXNjb25uZWN0TGVnCSgzKSwKLQllbnRpdHlSZWxlYXNlZAkoNCksCi0JZGZjLVdpdGhBcmd1bWVudAkoNSksCi0JcGxheVRvbmUJCSg2KSwKLQlkdG1mLU1pZENhbGwJKDcpLAotCWNoYXJnaW5nSW5kaWNhdG9yCSg4KSwKLQlhbGVydGluZ0RQCSg5KSwKLQlsb2NhdGlvbkF0QWxlcnRpbmcJKDEwKSwKLQljaGFuZ2VPZlBvc2l0aW9uRFAJKDExKSwKLQlvci1JbnRlcmFjdGlvbnMJKDEyKSwKLQl3YXJuaW5nVG9uZUVuaGFuY2VtZW50cwkoMTMpLAotCWNmLUVuaGFuY2VtZW50cwkoMTQpLAotCXN1YnNjcmliZWRFbmhhbmNlZERpYWxsZWRTZXJ2aWNlcyAJKDE1KSwKLQlzZXJ2aW5nTmV0d29ya0VuaGFuY2VkRGlhbGxlZFNlcnZpY2VzICgxNiksCi0JY3JpdGVyaWFGb3JDaGFuZ2VPZlBvc2l0aW9uRFAJKDE3KSwKLQlzZXJ2aWNlQ2hhbmdlRFAJKDE4KSwKLQljb2xsZWN0SW5mb3JtYXRpb24JKDE5KQotfSAoU0laRSAoMTUuLjY0KSkKLS0tIEEgbm9kZSBzdXBwb3J0aW5nIENhbWVsIHBoYXNlIDQgc2hhbGwgbWFyayBpbiB0aGUgQklUIFNUUklORyBhbGwgQ0FNRUw0IAotLS0gZnVuY3Rpb25hbGl0aWVzIGl0IG9mZmVycy4KLS0tIE90aGVyIHZhbHVlcyB0aGFuIGxpc3RlZCBhYm92ZSBzaGFsbCBiZSBkaXNjYXJkZWQuCi0KLVNNUy1DU0kgOjo9IFNFUVVFTkNFIHsKLQlzbXMtQ0FNRUwtVERQLURhdGFMaXN0CVswXSBTTVMtQ0FNRUwtVERQLURhdGFMaXN0CU9QVElPTkFMLAotCWNhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nCVsxXSBDYW1lbENhcGFiaWxpdHlIYW5kbGluZwlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQlub3RpZmljYXRpb25Ub0NTRQlbM10gTlVMTAkJT1BUSU9OQUwsCi0JY3NpLUFjdGl2ZQlbNF0gTlVMTAkJT1BUSU9OQUwsCi0JLi4ufQotLS0Jbm90aWZpY2F0aW9uVG9DU0UgYW5kIGNzaS1BY3RpdmUgc2hhbGwgbm90IGJlIHByZXNlbnQKLS0tCXdoZW4gTU8tU01TLUNTSSBvciBNVC1TTVMtQ1NJIGlzIHNlbnQgdG8gVkxSIG9yIFNHU04uCi0tLQlUaGV5IG1heSBvbmx5IGJlIGluY2x1ZGVkIGluIEFUU0kvQVRNIGFjay9OU0RDIG1lc3NhZ2UuCi0tLQlTTVMtQ0FNRUwtVERQLURhdGEgYW5kICBjYW1lbENhcGFiaWxpdHlIYW5kbGluZyBzaGFsbCBiZSBwcmVzZW50IGluIAotLS0JdGhlIFNNUy1DU0kgc2VxdWVuY2UuCi0tLQlJZiBTTVMtQ1NJIGlzIHNlZ21lbnRlZCwgc21zLUNBTUVMLVREUC1EYXRhTGlzdCBhbmQgY2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcgc2hhbGwgYmUgCi0tLQlwcmVzZW50IGluIHRoZSBmaXJzdCBzZWdtZW50Ci0KLVNNUy1DQU1FTC1URFAtRGF0YUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mQ2FtZWxURFBEYXRhKSBPRgotCVNNUy1DQU1FTC1URFAtRGF0YQotLS0JU01TLUNBTUVMLVREUC1EYXRhTGlzdCBzaGFsbCBub3QgY29udGFpbiBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mCi0tLQlTTVMtQ0FNRUwtVERQLURhdGEgY29udGFpbmluZyB0aGUgc2FtZSB2YWx1ZSBmb3Igc21zLVRyaWdnZXJEZXRlY3Rpb25Qb2ludC4KLQotU01TLUNBTUVMLVREUC1EYXRhIDo6PSBTRVFVRU5DRSB7Ci0Jc21zLVRyaWdnZXJEZXRlY3Rpb25Qb2ludAlbMF0gU01TLVRyaWdnZXJEZXRlY3Rpb25Qb2ludCwKLQlzZXJ2aWNlS2V5CVsxXSBTZXJ2aWNlS2V5LAotCWdzbVNDRi1BZGRyZXNzCVsyXSBJU0ROLUFkZHJlc3NTdHJpbmcsCi0JZGVmYXVsdFNNUy1IYW5kbGluZwlbM10gRGVmYXVsdFNNUy1IYW5kbGluZywKLQlleHRlbnNpb25Db250YWluZXIJWzRdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4KLQl9Ci0KLVNNUy1UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQgOjo9IEVOVU1FUkFURUQgewotCXNtcy1Db2xsZWN0ZWRJbmZvICgxKSwKLQkuLi4sCi0Jc21zLURlbGl2ZXJ5UmVxdWVzdCAoMikKLQl9Ci0tLQlleGNlcHRpb24gaGFuZGxpbmc6Ci0tLQlGb3IgU01TLUNBTUVMLVREUC1EYXRhIGFuZCBNVC1zbXNDQU1FTFREUC1Dcml0ZXJpYSBzZXF1ZW5jZXMgY29udGFpbmluZyB0aGlzIAotLS0JcGFyYW1ldGVyIHdpdGggYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIG9uZXMgbGlzdGVkIHRoZSByZWNlaXZlciBzaGFsbCBpZ25vcmUKLS0tCXRoZSB3aG9sZSBzZXF1ZW5jZS4KLS0tCi0tLQlJZiB0aGlzIHBhcmFtZXRlciBpcyByZWNlaXZlZCB3aXRoIGFueSBvdGhlciB2YWx1ZSB0aGFuIHNtcy1Db2xsZWN0ZWRJbmZvCi0tLQlpbiBhbiBTTVMtQ0FNRUwtVERQLURhdGEgc2VxdWVuY2UgY29udGFpbmVkIGluIG1vLXNtcy1DU0ksIHRoZW4gdGhlIHJlY2VpdmVyIHNoYWxsCi0tLQlpZ25vcmUgdGhlIHdob2xlIFNNUy1DQU1FTC1URFAtRGF0YSBzZXF1ZW5jZS4KLS0tCi0tLQlJZiB0aGlzIHBhcmFtZXRlciBpcyByZWNlaXZlZCB3aXRoIGFueSBvdGhlciB2YWx1ZSB0aGFuIHNtcy1EZWxpdmVyeVJlcXVlc3QKLS0tCWluIGFuIFNNUy1DQU1FTC1URFAtRGF0YSBzZXF1ZW5jZSBjb250YWluZWQgaW4gbXQtc21zLUNTSSB0aGVuIHRoZSByZWNlaXZlciBzaGFsbAotLS0JaWdub3JlIHRoZSB3aG9sZSBTTVMtQ0FNRUwtVERQLURhdGEgc2VxdWVuY2UuCi0tLQotLS0JSWYgdGhpcyBwYXJhbWV0ZXIgaXMgcmVjZWl2ZWQgd2l0aCBhbnkgb3RoZXIgdmFsdWUgdGhhbiBzbXMtRGVsaXZlcnlSZXF1ZXN0Ci0tLQlpbiBhbiBNVC1zbXNDQU1FTFREUC1Dcml0ZXJpYSBzZXF1ZW5jZSB0aGVuIHRoZSByZWNlaXZlciBzaGFsbAotLS0JaWdub3JlIHRoZSB3aG9sZSBNVC1zbXNDQU1FTFREUC1Dcml0ZXJpYSBzZXF1ZW5jZS4KLQotRGVmYXVsdFNNUy1IYW5kbGluZyA6Oj0gRU5VTUVSQVRFRCB7Ci0JY29udGludWVUcmFuc2FjdGlvbiAoMCkgLAotCXJlbGVhc2VUcmFuc2FjdGlvbiAoMSkgLAotCS4uLn0KLS0tCWV4Y2VwdGlvbiBoYW5kbGluZzoKLS0tCXJlY2VwdGlvbiBvZiB2YWx1ZXMgaW4gcmFuZ2UgMi0zMSBzaGFsbCBiZSB0cmVhdGVkIGFzICJjb250aW51ZVRyYW5zYWN0aW9uIgotLS0JcmVjZXB0aW9uIG9mIHZhbHVlcyBncmVhdGVyIHRoYW4gMzEgc2hhbGwgYmUgdHJlYXRlZCBhcyAicmVsZWFzZVRyYW5zYWN0aW9uIgotCi1NLUNTSSA6Oj0gU0VRVUVOQ0UgewotCW1vYmlsaXR5VHJpZ2dlcnMJTW9iaWxpdHlUcmlnZ2VycywKLQlzZXJ2aWNlS2V5CVNlcnZpY2VLZXksCi0JZ3NtU0NGLUFkZHJlc3MJWzBdCUlTRE4tQWRkcmVzc1N0cmluZywKLQlleHRlbnNpb25Db250YWluZXIJWzFdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQlub3RpZmljYXRpb25Ub0NTRQlbMl0gTlVMTAkJT1BUSU9OQUwsCi0JY3NpLUFjdGl2ZQlbM10gTlVMTAkJT1BUSU9OQUwsCi0JLi4ufQotLS0Jbm90aWZpY2F0aW9uVG9DU0UgYW5kIGNzaS1BY3RpdmUgc2hhbGwgbm90IGJlIHByZXNlbnQgd2hlbiBNLUNTSSBpcyBzZW50IHRvIFZMUi4KLS0tCVRoZXkgbWF5IG9ubHkgYmUgaW5jbHVkZWQgaW4gQVRTSS9BVE0gYWNrL05TREMgbWVzc2FnZS4KLQotTUctQ1NJIDo6PSBTRVFVRU5DRSB7Ci0JbW9iaWxpdHlUcmlnZ2VycwlNb2JpbGl0eVRyaWdnZXJzLAotCXNlcnZpY2VLZXkJU2VydmljZUtleSwKLQlnc21TQ0YtQWRkcmVzcwlbMF0JSVNETi1BZGRyZXNzU3RyaW5nLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMV0JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCW5vdGlmaWNhdGlvblRvQ1NFCVsyXSBOVUxMCQlPUFRJT05BTCwKLQljc2ktQWN0aXZlCVszXSBOVUxMCQlPUFRJT05BTCwKLQkuLi59Ci0tLQlub3RpZmljYXRpb25Ub0NTRSBhbmQgY3NpLUFjdGl2ZSBzaGFsbCBub3QgYmUgcHJlc2VudCB3aGVuIE1HLUNTSSBpcyBzZW50IHRvIFNHU04uCi0tLQlUaGV5IG1heSBvbmx5IGJlIGluY2x1ZGVkIGluIEFUU0kvQVRNIGFjay9OU0RDIG1lc3NhZ2UuCi0KLU1vYmlsaXR5VHJpZ2dlcnMgIDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZk1vYmlsaXR5VHJpZ2dlcnMpIE9GCi0JTU0tQ29kZQotCi1tYXhOdW1PZk1vYmlsaXR5VHJpZ2dlcnMgSU5URUdFUiA6Oj0gMTAKLQotTU0tQ29kZSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKLS0tCVRoaXMgdHlwZSBpcyB1c2VkIHRvIGluZGljYXRlIGEgTW9iaWxpdHkgTWFuYWdlbWVudCBldmVudC4KLS0tCUFjdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgTU0tQ29kZSB2YWx1ZXMgYXJlIGRlZmluZWQgaW4gQ0FNRUwgUGhhc2UgNDoKLS0tCi0tLQlDUyBkb21haW4gTU0gZXZlbnRzOgotLS0JTG9jYXRpb24tdXBkYXRlLWluLXNhbWUtVkxSCU1NLUNvZGUgOjo9ICcwMDAwMDAwMCdCCi0tLQlMb2NhdGlvbi11cGRhdGUtdG8tb3RoZXItVkxSCU1NLUNvZGUgOjo9ICcwMDAwMDAwMSdCCi0tLQlJTVNJLUF0dGFjaAlNTS1Db2RlIDo6PSAnMDAwMDAwMTAnQgotLS0JTVMtaW5pdGlhdGVkLUlNU0ktRGV0YWNoCU1NLUNvZGUgOjo9ICcwMDAwMDAxMSdCCi0tLQlOZXR3b3JrLWluaXRpYXRlZC1JTVNJLURldGFjaAlNTS1Db2RlIDo6PSAnMDAwMDAxMDAnQgotLS0KLS0tCVBTIGRvbWFpbiBNTSBldmVudHM6Ci0tLQlSb3V0ZWluZy1BcmVhLXVwZGF0ZS1pbi1zYW1lLVNHU04JTU0tQ29kZSA6Oj0gJzEwMDAwMDAwJ0IKLS0tCVJvdXRlaW5nLUFyZWEtdXBkYXRlLXRvLW90aGVyLVNHU04tdXBkYXRlLWZyb20tbmV3LVNHU04KLS0tCQkJCU1NLUNvZGUgOjo9ICcxMDAwMDAwMSdCCi0tLQlSb3V0ZWluZy1BcmVhLXVwZGF0ZS10by1vdGhlci1TR1NOLWRpc2Nvbm5lY3QtYnktZGV0YWNoCi0tLQkJCQlNTS1Db2RlIDo6PSAnMTAwMDAwMTAnQgotLS0JR1BSUy1BdHRhY2gJTU0tQ29kZSA6Oj0gJzEwMDAwMDExJ0IKLS0tCU1TLWluaXRpYXRlZC1HUFJTLURldGFjaAlNTS1Db2RlIDo6PSAnMTAwMDAxMDAnQgotLS0JTmV0d29yay1pbml0aWF0ZWQtR1BSUy1EZXRhY2gJTU0tQ29kZSA6Oj0gJzEwMDAwMTAxJ0IgCi0tLQlOZXR3b3JrLWluaXRpYXRlZC10cmFuc2Zlci10by1NUy1ub3QtcmVhY2hhYmxlLWZvci1wYWdpbmcKLS0tCQkJCU1NLUNvZGUgOjo9ICcxMDAwMDExMCdCCi0tLQotLS0JSWYgdGhlIE1TQyByZWNlaXZlcyBhbnkgb3RoZXIgTU0tY29kZSB0aGFuIHRoZSBvbmVzIGxpc3RlZCBhYm92ZSBmb3IgdGhlCi0tLQlDUyBkb21haW4sIHRoZW4gdGhlIE1TQyBzaGFsbCBpZ25vcmUgdGhhdCBNTS1jb2RlLgotLS0JSWYgdGhlIFNHU04gcmVjZWl2ZXMgYW55IG90aGVyIE1NLWNvZGUgdGhhbiB0aGUgb25lcyBsaXN0ZWQgYWJvdmUgZm9yIHRoZQotLS0JUFMgZG9tYWluLCB0aGVuIHRoZSBTR1NOIHNoYWxsIGlnbm9yZSB0aGF0IE1NLWNvZGUuCi0KLVQtQ1NJIDo6PSBTRVFVRU5DRSB7Ci0JdC1CY3NtQ2FtZWxURFBEYXRhTGlzdAlULUJjc21DYW1lbFREUERhdGFMaXN0LAotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCWNhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nCVswXSBDYW1lbENhcGFiaWxpdHlIYW5kbGluZwlPUFRJT05BTCwKLQlub3RpZmljYXRpb25Ub0NTRQlbMV0gTlVMTAkJT1BUSU9OQUwsCi0JY3NpLUFjdGl2ZQlbMl0gTlVMTAkJT1BUSU9OQUx9Ci0tLQlub3RpZmljYXRpb25Ub0NTRSBhbmQgY3NpLUFjdGl2ZSBzaGFsbCBub3QgYmUgcHJlc2VudCB3aGVuIFZULUNTSS9ULUNTSSBpcyBzZW50Ci0tLQl0byBWTFIvR01TQy4KLS0tCVRoZXkgbWF5IG9ubHkgYmUgaW5jbHVkZWQgaW4gQVRTSS9BVE0gYWNrL05TREMgbWVzc2FnZS4KLS0tCVQtQ1NJIHNoYWxsIG5vdCBiZSBzZWdtZW50ZWQuCi0KLVQtQmNzbUNhbWVsVERQRGF0YUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mQ2FtZWxURFBEYXRhKSBPRgotCVQtQmNzbUNhbWVsVERQRGF0YQotCS0tLSBULUJjc21DYW1lbFREUERhdGFMaXN0IHNoYWxsIG5vdCBjb250YWluIG1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YKLQktLS0gVC1CY3NtQ2FtZWxURFBEYXRhIGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWUgZm9yIHQtQmNzbVRyaWdnZXJEZXRlY3Rpb25Qb2ludC4KLQktLS0gRm9yIENBTUVMIFBoYXNlIDIsIHRoaXMgbWVhbnMgdGhhdCBvbmx5IG9uZSBpbnN0YW5jZSBvZiBULUJjc21DYW1lbFREUERhdGEgaXMgYWxsb3dlZAotCS0tLSB3aXRoIHQtQmNzbVRyaWdnZXJEZXRlY3Rpb25Qb2ludCBiZWluZyBlcXVhbCB0byBEUDEyLiAKLQktLS0gRm9yIENBTUVMIFBoYXNlIDMsIG1vcmUgVERQknMgYXJlIGFsbG93ZWQuCi0KLVQtQmNzbUNhbWVsVERQRGF0YSA6Oj0gU0VRVUVOQ0UgewotCXQtQmNzbVRyaWdnZXJEZXRlY3Rpb25Qb2ludAlULUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQsCi0Jc2VydmljZUtleQlTZXJ2aWNlS2V5LAotCWdzbVNDRi1BZGRyZXNzCVswXSBJU0ROLUFkZHJlc3NTdHJpbmcsCi0JZGVmYXVsdENhbGxIYW5kbGluZwlbMV0gRGVmYXVsdENhbGxIYW5kbGluZywKLQlleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLVQtQmNzbVRyaWdnZXJEZXRlY3Rpb25Qb2ludCA6Oj0gRU5VTUVSQVRFRCB7Ci0JdGVybUF0dGVtcHRBdXRob3JpemVkICgxMiksCi0JLi4uICwKLQl0QnVzeSAoMTMpLAotCXROb0Fuc3dlciAoMTQpfQotCS0tIGV4Y2VwdGlvbiBoYW5kbGluZzoKLQktLSBGb3IgVC1CY3NtQ2FtZWxURFBEYXRhIHNlcXVlbmNlcyBjb250YWluaW5nIHRoaXMgcGFyYW1ldGVyIHdpdGggYW55IG90aGVyCi0JLS0gdmFsdWUgdGhhbiB0aGUgb25lcyBsaXN0ZWQgYWJvdmUsIHRoZSByZWNlaXZlciBzaGFsbCBpZ25vcmUgdGhlIHdob2xlCi0JLS0gVC1CY3NtQ2FtZWxURFBEYXRhIHNlcXVlbmNlLgotCi0tLSBncHJzIGxvY2F0aW9uIGluZm9ybWF0aW9uIHJldHJpZXZhbCB0eXBlcwotCi1TZW5kUm91dGluZ0luZm9Gb3JHcHJzQXJnIDo6PSBTRVFVRU5DRSB7Ci0JaW1zaQkJCQlbMF0gSU1TSSwKLQlnZ3NuLUFkZHJlc3MJCVsxXSBHU04tQWRkcmVzcwlPUFRJT05BTCwgCi0JZ2dzbi1OdW1iZXIJCVsyXQlJU0ROLUFkZHJlc3NTdHJpbmcsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCQlbM10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotU2VuZFJvdXRpbmdJbmZvRm9yR3Byc1JlcyA6Oj0gU0VRVUVOQ0UgewotCXNnc24tQWRkcmVzcwkJWzBdIEdTTi1BZGRyZXNzLAotCWdnc24tQWRkcmVzcwkJWzFdCUdTTi1BZGRyZXNzCU9QVElPTkFMLAotCW1vYmlsZU5vdFJlYWNoYWJsZVJlYXNvbgkJWzJdCUFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00JCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcgkJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLS0tIGZhaWx1cmUgcmVwb3J0IHR5cGVzCi0KLUZhaWx1cmVSZXBvcnRBcmcgOjo9IFNFUVVFTkNFIHsKLQlpbXNpCQkJCVswXSBJTVNJLAotCWdnc24tTnVtYmVyCQlbMV0gSVNETi1BZGRyZXNzU3RyaW5nCSwKLQlnZ3NuLUFkZHJlc3MJCVsyXSBHU04tQWRkcmVzcwlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJCVszXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1GYWlsdXJlUmVwb3J0UmVzIDo6PSBTRVFVRU5DRSB7Ci0JZ2dzbi1BZGRyZXNzCQlbMF0gR1NOLUFkZHJlc3MJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCQlbMV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotLS0gZ3BycyBub3RpZmljYXRpb24gdHlwZXMKLQotTm90ZU1zUHJlc2VudEZvckdwcnNBcmcgOjo9IFNFUVVFTkNFIHsKLQlpbXNpCQkJCVswXSBJTVNJLAotCXNnc24tQWRkcmVzcwkJWzFdIEdTTi1BZGRyZXNzLAotCWdnc24tQWRkcmVzcwkJWzJdIEdTTi1BZGRyZXNzCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcgkJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLU5vdGVNc1ByZXNlbnRGb3JHcHJzUmVzIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCQlbMF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotLS0gZmF1bHQgcmVjb3ZlcnkgdHlwZXMKLQotUmVzZXRBcmcgOjo9IFNFUVVFTkNFIHsKLQlobHItTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZywKLQlobHItTGlzdAkJSExSLUxpc3QJCU9QVElPTkFMLAotCS4uLn0KLQotUmVzdG9yZURhdGFBcmcgOjo9IFNFUVVFTkNFIHsKLQlpbXNpCQkJSU1TSSwKLQlsbXNpCQkJTE1TSQkJCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uICwKLQl2bHItQ2FwYWJpbGl0eQlbNl0gVkxSLUNhcGFiaWxpdHkJT1BUSU9OQUwgfQotCi1SZXN0b3JlRGF0YVJlcyA6Oj0gU0VRVUVOQ0UgewotCWhsci1OdW1iZXIJSVNETi1BZGRyZXNzU3RyaW5nLAotCW1zTm90UmVhY2hhYmxlCU5VTEwJCQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotLS0gVkJTL1ZHQ1MgdHlwZXMKLVZCU0RhdGFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlZCU0dyb3VwSWRzKSBPRgotCQkJCVZvaWNlQnJvYWRjYXN0RGF0YQotCi1WR0NTRGF0YUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mVkdDU0dyb3VwSWRzKSBPRgotCQkJCVZvaWNlR3JvdXBDYWxsRGF0YQotCi1tYXhOdW1PZlZCU0dyb3VwSWRzICBJTlRFR0VSIDo6PSA1MAotCi1tYXhOdW1PZlZHQ1NHcm91cElkcyAgSU5URUdFUiA6Oj0gNTAKLQotVm9pY2VHcm91cENhbGxEYXRhICA6Oj0gU0VRVUVOQ0UgewotCWdyb3VwSWQJCUdyb3VwSWQsIAotCS0tIGdyb3VwSWQgc2hhbGwgYmUgZmlsbGVkIHdpdGggc2l4IFRCQ0QgZmlsbGVycyAoMTExMSlpZiB0aGUgbG9uZ0dyb3VwSWQgaXMgcHJlc2VudCAgCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4sCi0JYWRkaXRpb25hbFN1YnNjcmlwdGlvbnMJQWRkaXRpb25hbFN1YnNjcmlwdGlvbnMJT1BUSU9OQUwsCi0JYWRkaXRpb25hbEluZm8JWzBdIEFkZGl0aW9uYWxJbmZvCU9QVElPTkFMLAotCWxvbmdHcm91cElkCVsxXSBMb25nLUdyb3VwSWQJT1BUSU9OQUwgfQotCi0JLS0gVm9pY2VHcm91cENhbGxEYXRhIGNvbnRhaW5pbmcgYSBsb25nR3JvdXBJZCBzaGFsbCBub3QgYmUgc2VudCB0byBWTFJzIHRoYXQgZGlkIG5vdAotCS0tIGluZGljYXRlIHN1cHBvcnQgb2YgbG9uZyBHcm91cCBJRHMgd2l0aGluIHRoZSBVcGRhdGUgTG9jYXRpb24gb3IgUmVzdG9yZSBEYXRhIAotCS0tIHJlcXVlc3QgbWVzc2FnZQotCi1BZGRpdGlvbmFsSW5mbyA6Oj0gQklUIFNUUklORyAoU0laRSAoMS4uMTM2KSkKLS0tCSBSZWZlcnMgdG8gQWRkaXRpb25hbCBJbmZvIGFzIHNwZWNpZmllZCBpbiAzR1BQIFRTIDQzLjA2OCAKLQotQWRkaXRpb25hbFN1YnNjcmlwdGlvbnMgOjo9IEJJVCBTVFJJTkcgewotCXByaXZpbGVnZWRVcGxpbmtSZXF1ZXN0ICgwKSwKLQllbWVyZ2VuY3lVcGxpbmtSZXF1ZXN0ICgxKSwKLQllbWVyZ2VuY3lSZXNldCAoMil9IChTSVpFICgzLi44KSkKLS0tIE90aGVyIGJpdHMgdGhhbiBsaXN0ZWQgYWJvdmUgc2hhbGwgYmUgZGlzY2FyZGVkLgotCi1Wb2ljZUJyb2FkY2FzdERhdGEgOjo9IFNFUVVFTkNFIHsKLQlncm91cGlkCQlHcm91cElkLCAKLQktLSBncm91cElkIHNoYWxsIGJlIGZpbGxlZCB3aXRoIHNpeCBUQkNEIGZpbGxlcnMgKDExMTEpaWYgdGhlIGxvbmdHcm91cElkIGlzIHByZXNlbnQKLQlicm9hZGNhc3RJbml0RW50aXRsZW1lbnQJTlVMTAkJCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCWxvbmdHcm91cElkCVswXSBMb25nLUdyb3VwSWQJT1BUSU9OQUwgfQotCQotLS0gVm9pY2VCcm9hZGNhc3REYXRhIGNvbnRhaW5pbmcgYSBsb25nR3JvdXBJZCBzaGFsbCBub3QgYmUgc2VudCB0byBWTFJzIHRoYXQgZGlkIG5vdAotLS0gaW5kaWNhdGUgc3VwcG9ydCBvZiBsb25nIEdyb3VwIElEcyB3aXRoaW4gdGhlIFVwZGF0ZSBMb2NhdGlvbiBvciBSZXN0b3JlIERhdGEgCi0JLS0gcmVxdWVzdCBtZXNzYWdlCi0KLUdyb3VwSWQgIDo6PSBUQkNELVNUUklORyAoU0laRSAoMykpCi0JLS0gV2hlbiBHcm91cC1JZCBpcyBsZXNzIHRoYW4gc2l4IGNoYXJhY3RlcnMgaW4gbGVuZ3RoLCB0aGUgVEJDRCBmaWxsZXIgKDExMTEpCi0JLS0gaXMgdXNlZCB0byBmaWxsIHVudXNlZCBoYWxmIG9jdGV0cy4KLQktLSBSZWZlcnMgdG8gdGhlIEdyb3VwIElkZW50aWZpY2F0aW9uIGFzIHNwZWNpZmllZCBpbiAzR1BQIFRTIDIzLjAwMyAKLQktLSBhbmQgM0dQUCBUUyA0My4wNjgvIDQzLjA2OQotCi1Mb25nLUdyb3VwSWQgIDo6PSBUQkNELVNUUklORyAoU0laRSAoNCkpCi0JLS0gV2hlbiBMb25nLUdyb3VwLUlkIGlzIGxlc3MgdGhhbiBlaWdodCBjaGFyYWN0ZXJzIGluIGxlbmd0aCwgdGhlIFRCQ0QgZmlsbGVyICgxMTExKQotCS0tIGlzIHVzZWQgdG8gZmlsbCB1bnVzZWQgaGFsZiBvY3RldHMuCi0JLS0gUmVmZXJzIHRvIHRoZSBHcm91cCBJZGVudGlmaWNhdGlvbiBhcyBzcGVjaWZpZWQgaW4gM0dQUCBUUyAyMy4wMDMgCi0JLS0gYW5kIDNHUFAgVFMgNDMuMDY4LyA0My4wNjkKLQotCi0tLSBwcm92aWRlIHN1YnNjcmliZXIgaW5mbyB0eXBlcwotCi1Qcm92aWRlU3Vic2NyaWJlckluZm9BcmcgOjo9IFNFUVVFTkNFIHsKLQlpbXNpCQlbMF0gSU1TSSwKLQlsbXNpCQlbMV0gTE1TSQlPUFRJT05BTCwKLQlyZXF1ZXN0ZWRJbmZvCVsyXSBSZXF1ZXN0ZWRJbmZvLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbM10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQljYWxsUHJpb3JpdHkJWzRdCUVNTFBQLVByaW9yaXR5CU9QVElPTkFMCi0JfQotCi1Qcm92aWRlU3Vic2NyaWJlckluZm9SZXMgOjo9IFNFUVVFTkNFIHsKLQlzdWJzY3JpYmVySW5mbwlTdWJzY3JpYmVySW5mbywKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotU3Vic2NyaWJlckluZm8gOjo9IFNFUVVFTkNFIHsKLQlsb2NhdGlvbkluZm9ybWF0aW9uCVswXSBMb2NhdGlvbkluZm9ybWF0aW9uCU9QVElPTkFMLAotCXN1YnNjcmliZXJTdGF0ZQlbMV0gU3Vic2NyaWJlclN0YXRlCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiAsCi0JbG9jYXRpb25JbmZvcm1hdGlvbkdQUlMJWzNdIExvY2F0aW9uSW5mb3JtYXRpb25HUFJTCU9QVElPTkFMLAotCXBzLVN1YnNjcmliZXJTdGF0ZQlbNF0gUFMtU3Vic2NyaWJlclN0YXRlCU9QVElPTkFMLAotCWltZWkJCQlbNV0gSU1FSQkJT1BUSU9OQUwsCi0JbXMtQ2xhc3NtYXJrMglbNl0gTVMtQ2xhc3NtYXJrMglPUFRJT05BTCwKLQlncHJzLU1TLUNsYXNzCVs3XSBHUFJTTVNDbGFzcwlPUFRJT05BTCwKLQltbnBJbmZvUmVzCVs4XSBNTlBJbmZvUmVzCU9QVElPTkFMIH0KLQotLS0JSWYgdGhlIEhMUiByZWNlaXZlcyBsb2NhdGlvbkluZm9ybWF0aW9uLCBzdWJzY3JpYmVyU3RhdGUgb3IgbXMtQ2xhc3NtYXJrMiBmcm9tIGFuIFNHU04KLS0tCWl0IHNoYWxsIGRpc2NhcmQgdGhlbS4KLS0tCUlmIHRoZSBITFIgcmVjZWl2ZXMgbG9jYXRpb25JbmZvcm1hdGlvbkdQUlMsIHBzLVN1YnNjcmliZXJTdGF0ZSBvciBncHJzLU1TLUNsYXNzIGZyb20KLS0tCWEgVkxSIGl0IHNoYWxsIGRpc2NhcmQgdGhlbS4KLS0tCUlmIHRoZSBITFIgcmVjZWl2ZXMgcGFyYW1ldGVycyB3aGljaCBpdCBoYXMgbm90IHJlcXVlc3RlZCwgaXQgc2hhbGwgZGlzY2FyZCB0aGVtLgotCi1NTlBJbmZvUmVzIDo6PSBTRVFVRU5DRSB7Ci0Jcm91dGVpbmdOdW1iZXIJWzBdIFJvdXRlaW5nTnVtYmVyIAlPUFRJT05BTCwKLQlpbXNpCQkJWzFdIElNU0kJCU9QVElPTkFMLAotCW1zaXNkbgkJWzJdIElTRE4tQWRkcmVzc1N0cmluZyAJT1BUSU9OQUwsCi0JbnVtYmVyUG9ydGFiaWxpdHlTdGF0dXMJWzNdIE51bWJlclBvcnRhYmlsaXR5U3RhdHVzCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbNF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiB9Ci0tLQlUaGUgSU1TSSBwYXJhbWV0ZXIgY29udGFpbnMgYSBnZW5lcmljIElNU0ksIGkuZS4gaXQgaXMgbm90IHRpZWQgbmVjZXNzYXJpbHkgdG8gdGhlIAotLS0JU3Vic2NyaWJlci4gTUNDIGFuZCBNTkMgdmFsdWVzIGluIHRoaXMgSU1TSSBzaGFsbCBwb2ludCB0byB0aGUgU3Vic2NyaXB0aW9uIE5ldHdvcmsgb2YgCi0tLQl0aGUgU3Vic2NyaWJlci4gU2VlIDNHUFAgVFMgMjMuMDY2IFsxMDhdLgotCi1Sb3V0ZWluZ051bWJlciA6Oj0gVEJDRC1TVFJJTkcgKFNJWkUgKDEuLjUpKQotCi0KLU51bWJlclBvcnRhYmlsaXR5U3RhdHVzIDo6PSBFTlVNRVJBVEVEIHsKLQlub3RLbm93blRvQmVQb3J0ZWQJKDApLAotCW93bk51bWJlclBvcnRlZE91dAkoMSksCi0JZm9yZWlnbk51bWJlclBvcnRlZFRvRm9yZWlnbk5ldHdvcmsJKDIpLAotCS4uLiwKLQlvd25OdW1iZXJOb3RQb3J0ZWRPdXQJKDQpLAotCWZvcmVpZ25OdW1iZXJQb3J0ZWRJbgkoNSkKLQl9Ci0JLS0JZXhjZXB0aW9uIGhhbmRsaW5nOiAKLQktLSAgcmVjZXB0aW9uIG9mIG90aGVyIHZhbHVlcyB0aGFuIHRoZSBvbmVzIGxpc3RlZCB0aGUgcmVjZWl2ZXIgc2hhbGwgaWdub3JlIHRoZSAKLQktLSAgd2hvbGUgTnVtYmVyUG9ydGFiaWxpdHlTdGF0dXM7Ci0JLS0gIG93bk51bWJlck5vdFBvcnRlZE91dCBvciBmb3JlaWduTnVtYmVyUG9ydGVkSW4gbWF5IG9ubHkgYmUgaW5jbHVkZWQgaW4gQW55IFRpbWUgCi0JLS0gIEludGVycm9nYXRpb24gbWVzc2FnZS4KLQotTVMtQ2xhc3NtYXJrMiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgzKSkKLQktLSBUaGlzIHBhcmFtZXRlciBjYXJyaWVzIHRoZSB2YWx1ZSBwYXJ0IG9mIHRoZSBNUyBDbGFzc21hcmsgMiBJRSBkZWZpbmVkIGluIAotCS0tIDNHUFAgVFMgMjQuMDA4IFszNV0uCi0KLUdQUlNNU0NsYXNzIDo6PSBTRVFVRU5DRSB7Ci0JbVNOZXR3b3JrQ2FwYWJpbGl0eQlbMF0gTVNOZXR3b3JrQ2FwYWJpbGl0eSwKLQltU1JhZGlvQWNjZXNzQ2FwYWJpbGl0eQlbMV0gTVNSYWRpb0FjY2Vzc0NhcGFiaWxpdHkJT1BUSU9OQUwKLQl9Ci0KLU1TTmV0d29ya0NhcGFiaWxpdHkgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uOCkpCi0JLS0gVGhpcyBwYXJhbWV0ZXIgY2FycmllcyB0aGUgdmFsdWUgcGFydCBvZiB0aGUgTVMgTmV0d29yayBDYXBhYmlsaXR5IElFIGRlZmluZWQgaW4gCi0JLS0gM0dQUCBUUyAyNC4wMDggWzM1XS4KLQkKLU1TUmFkaW9BY2Nlc3NDYXBhYmlsaXR5IDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjUwKSkKLQktLSBUaGlzIHBhcmFtZXRlciBjYXJyaWVzIHRoZSB2YWx1ZSBwYXJ0IG9mIHRoZSBNUyBSYWRpbyBBY2Nlc3MgQ2FwYWJpbGl0eSBJRSBkZWZpbmVkIGluCi0JLS0gM0dQUCBUUyAyNC4wMDggWzM1XS4KLQotUmVxdWVzdGVkSW5mbyA6Oj0gU0VRVUVOQ0UgewotCWxvY2F0aW9uSW5mb3JtYXRpb24JWzBdIE5VTEwJCU9QVElPTkFMLAotCXN1YnNjcmliZXJTdGF0ZQlbMV0gTlVMTAkJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLCAKLQljdXJyZW50TG9jYXRpb24JWzNdIE5VTEwJCU9QVElPTkFMLAotCXJlcXVlc3RlZERvbWFpbglbNF0gRG9tYWluVHlwZQlPUFRJT05BTCwKLQlpbWVpCQkJWzZdIE5VTEwJCU9QVElPTkFMLAotCW1zLWNsYXNzbWFyawlbNV0gTlVMTAkJT1BUSU9OQUwsCi0JbW5wUmVxdWVzdGVkSW5mbwlbN10gTlVMTCAJCU9QVElPTkFMIH0KLQotLS0JY3VycmVudExvY2F0aW9uIHNoYWxsIGJlIGFic2VudCBpZiBsb2NhdGlvbkluZm9ybWF0aW9uIGlzIGFic2VudAotCi1Eb21haW5UeXBlIDo6PSAgRU5VTUVSQVRFRCB7Ci0JY3MtRG9tYWluCQkoMCksCi0JcHMtRG9tYWluCQkoMSksCi0JLi4ufQotLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgotLS0gcmVjZXB0aW9uIG9mIHZhbHVlcyA+IDEgc2hhbGwgYmUgbWFwcGVkIHRvICdjcy1Eb21haW4nCi0KLUxvY2F0aW9uSW5mb3JtYXRpb24gOjo9IFNFUVVFTkNFIHsKLQlhZ2VPZkxvY2F0aW9uSW5mb3JtYXRpb24JQWdlT2ZMb2NhdGlvbkluZm9ybWF0aW9uCU9QVElPTkFMLAotCWdlb2dyYXBoaWNhbEluZm9ybWF0aW9uCVswXSBHZW9ncmFwaGljYWxJbmZvcm1hdGlvbglPUFRJT05BTCwKLQl2bHItbnVtYmVyCVsxXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCi0JbG9jYXRpb25OdW1iZXIJWzJdIExvY2F0aW9uTnVtYmVyCU9QVElPTkFMLAotCWNlbGxHbG9iYWxJZE9yU2VydmljZUFyZWFJZE9yTEFJCVszXSBDZWxsR2xvYmFsSWRPclNlcnZpY2VBcmVhSWRPckxBSQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzRdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4gLAotCXNlbGVjdGVkTFNBLUlkCVs1XSBMU0FJZGVudGl0eQlPUFRJT05BTCwKLQltc2MtTnVtYmVyCVs2XSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCi0JZ2VvZGV0aWNJbmZvcm1hdGlvbglbN10gR2VvZGV0aWNJbmZvcm1hdGlvbglPUFRJT05BTCwgCi0JY3VycmVudExvY2F0aW9uUmV0cmlldmVkCVs4XSBOVUxMCQlPUFRJT05BTCwKLQlzYWktUHJlc2VudAlbOV0gTlVMTAkJT1BUSU9OQUwgfQotLS0gc2FpLVByZXNlbnQgaW5kaWNhdGVzIHRoYXQgdGhlIGNlbGxHbG9iYWxJZE9yU2VydmljZUFyZWFJZE9yTEFJIHBhcmFtZXRlciBjb250YWlucwotLS0gYSBTZXJ2aWNlIEFyZWEgSWRlbnRpdHkuCi0tLSBjdXJyZW50TG9jYXRpb25SZXRyaWV2ZWQgc2hhbGwgYmUgcHJlc2VudCAKLS0tIGlmIHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiB3ZXJlIHJldHJpZXZlZCBhZnRlciBhIHN1Y2Nlc3NmdWxsIHBhZ2luZy4KLQotTG9jYXRpb25JbmZvcm1hdGlvbkdQUlMgOjo9IFNFUVVFTkNFIHsKLQljZWxsR2xvYmFsSWRPclNlcnZpY2VBcmVhSWRPckxBSQlbMF0gQ2VsbEdsb2JhbElkT3JTZXJ2aWNlQXJlYUlkT3JMQUkgT1BUSU9OQUwsCi0Jcm91dGVpbmdBcmVhSWRlbnRpdHkJWzFdIFJBSWRlbnRpdHkJT1BUSU9OQUwsCi0JZ2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24JWzJdIEdlb2dyYXBoaWNhbEluZm9ybWF0aW9uCU9QVElPTkFMLAotCXNnc24tTnVtYmVyCVszXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCi0Jc2VsZWN0ZWRMU0FJZGVudGl0eQlbNF0gTFNBSWRlbnRpdHkJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVs1XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCXNhaS1QcmVzZW50CVs2XSBOVUxMCQlPUFRJT05BTCwKLQlnZW9kZXRpY0luZm9ybWF0aW9uCVs3XSBHZW9kZXRpY0luZm9ybWF0aW9uCU9QVElPTkFMLAotCWN1cnJlbnRMb2NhdGlvblJldHJpZXZlZAlbOF0gTlVMTAkJT1BUSU9OQUwsCi0JYWdlT2ZMb2NhdGlvbkluZm9ybWF0aW9uCVs5XSBBZ2VPZkxvY2F0aW9uSW5mb3JtYXRpb24JT1BUSU9OQUwgfQotLS0gc2FpLVByZXNlbnQgaW5kaWNhdGVzIHRoYXQgdGhlIGNlbGxHbG9iYWxJZE9yU2VydmljZUFyZWFJZE9yTEFJIHBhcmFtZXRlciBjb250YWlucwotLS0gYSBTZXJ2aWNlIEFyZWEgSWRlbnRpdHkuCi0tLSBjdXJyZW50TG9jYXRpb25SZXRyaWV2ZWQgc2hhbGwgYmUgcHJlc2VudCBpZiB0aGUgbG9jYXRpb24gaW5mb3JtYXRpb24KLS0tIHdhcyByZXRyaWV2ZWQgYWZ0ZXIgc3VjY2Vzc2Z1bCBwYWdpbmcuCi0KLVJBSWRlbnRpdHkgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoNikpCi0tLSBSb3V0aW5nIEFyZWEgSWRlbnRpdHkgaXMgY29kZWQgaW4gYWNjb3JkYW5jZSB3aXRoIDNHUFAgVFMgMjkuMDYwIFsxMDVdLgotLS0gSXQgc2hhbGwgY29udGFpbiB0aGUgdmFsdWUgcGFydCBkZWZpbmVkIGluIDNHUFAgVFMgMjkuMDYwIG9ubHkuIEkuZS4gdGhlIDNHUFAgVFMgMjkuMDYwCi0tLSB0eXBlIGlkZW50aWZpZXIgb2N0ZXQgc2hhbGwgbm90IGJlIGluY2x1ZGVkLgotCi0KLUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDgpKQotLS0JUmVmZXJzIHRvIGdlb2dyYXBoaWNhbCBJbmZvcm1hdGlvbiBkZWZpbmVkIGluIDNHUFAgVFMgMjMuMDMyLgotLS0JT25seSB0aGUgZGVzY3JpcHRpb24gb2YgYW4gZWxsaXBzb2lkIHBvaW50IHdpdGggdW5jZXJ0YWludHkgY2lyY2xlCi0tLQlhcyBzcGVjaWZpZWQgaW4gM0dQUCBUUyAyMy4wMzIgaXMgYWxsb3dlZCB0byBiZSB1c2VkCi0tLQlUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGFjY29yZGluZyB0byAzR1BQIFRTIDIzLjAzMiBpcyBhcyBmb2xsb3dzOgotLS0JCVR5cGUgb2Ygc2hhcGUgKGVsbGlwc29pZCBwb2ludCB3aXRoIHVuY2VydGFpbnR5IGNpcmNsZSkJMSBvY3RldAotLS0JCURlZ3JlZXMgb2YgTGF0aXR1ZGUJCQkJMyBvY3RldHMKLS0tCQlEZWdyZWVzIG9mIExvbmdpdHVkZQkJCQkzIG9jdGV0cwotLS0JCVVuY2VydGFpbnR5IGNvZGUJCQkJMSBvY3RldAotCi1HZW9kZXRpY0luZm9ybWF0aW9uIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEwKSkKLS0tCVJlZmVycyB0byBDYWxsaW5nIEdlb2RldGljIExvY2F0aW9uIGRlZmluZWQgaW4gUS43NjMgKDE5OTkpLgotLS0JT25seSB0aGUgZGVzY3JpcHRpb24gb2YgYW4gZWxsaXBzb2lkIHBvaW50IHdpdGggdW5jZXJ0YWludHkgY2lyY2xlCi0tLQlhcyBzcGVjaWZpZWQgaW4gUS43NjMgKDE5OTkpIGlzIGFsbG93ZWQgdG8gYmUgdXNlZAotLS0JVGhlIGludGVybmFsIHN0cnVjdHVyZSBhY2NvcmRpbmcgdG8gUS43NjMgKDE5OTkpIGlzIGFzIGZvbGxvd3M6Ci0tLQkJU2NyZWVuaW5nIGFuZCBwcmVzZW50YXRpb24gaW5kaWNhdG9ycwkJMSBvY3RldAotLS0JCVR5cGUgb2Ygc2hhcGUgKGVsbGlwc29pZCBwb2ludCB3aXRoIHVuY2VydGFpbnR5IGNpcmNsZSkJMSBvY3RldAotLS0JCURlZ3JlZXMgb2YgTGF0aXR1ZGUJCQkJMyBvY3RldHMKLS0tCQlEZWdyZWVzIG9mIExvbmdpdHVkZQkJCQkzIG9jdGV0cwotLS0JCVVuY2VydGFpbnR5IGNvZGUJCQkJMSBvY3RldAotLS0JCUNvbmZpZGVuY2UJCQkJMSBvY3RldAotCi1Mb2NhdGlvbk51bWJlciA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgyLi4xMCkpCi0JLS0gdGhlIGludGVybmFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIElUVS1UIFJlYyBRLjc2MwotCi1TdWJzY3JpYmVyU3RhdGUgOjo9IENIT0lDRSB7Ci0JYXNzdW1lZElkbGUJWzBdIE5VTEwsCi0JY2FtZWxCdXN5CQlbMV0gTlVMTCwKLQluZXREZXROb3RSZWFjaGFibGUJTm90UmVhY2hhYmxlUmVhc29uLAotCW5vdFByb3ZpZGVkRnJvbVZMUglbMl0gTlVMTH0KLQotUFMtU3Vic2NyaWJlclN0YXRlIDo6PSBDSE9JQ0UgewotCW5vdFByb3ZpZGVkRnJvbVNHU04JWzBdIE5VTEwsCi0JcHMtRGV0YWNoZWQJWzFdIE5VTEwsCi0JcHMtQXR0YWNoZWROb3RSZWFjaGFibGVGb3JQYWdpbmcJWzJdIE5VTEwsCi0JcHMtQXR0YWNoZWRSZWFjaGFibGVGb3JQYWdpbmcJWzNdIE5VTEwsCi0JcHMtUERQLUFjdGl2ZU5vdFJlYWNoYWJsZUZvclBhZ2luZwlbNF0gUERQLUNvbnRleHRJbmZvTGlzdCwKLQlwcy1QRFAtQWN0aXZlUmVhY2hhYmxlRm9yUGFnaW5nCVs1XSBQRFAtQ29udGV4dEluZm9MaXN0LAotCW5ldERldE5vdFJlYWNoYWJsZQlOb3RSZWFjaGFibGVSZWFzb24gfQotCi1QRFAtQ29udGV4dEluZm9MaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlBEUC1Db250ZXh0cykgT0YKLQkJCQlQRFAtQ29udGV4dEluZm8KLQotUERQLUNvbnRleHRJbmZvIDo6PSBTRVFVRU5DRSB7Ci0JcGRwLUNvbnRleHRJZGVudGlmaWVyCVswXSBDb250ZXh0SWQsCi0JcGRwLUNvbnRleHRBY3RpdmUJWzFdIE5VTEwJCU9QVElPTkFMLAotCXBkcC1UeXBlCQlbMl0gUERQLVR5cGUsCi0JcGRwLUFkZHJlc3MJWzNdIFBEUC1BZGRyZXNzCU9QVElPTkFMLAotCWFwbi1TdWJzY3JpYmVkCVs0XSBBUE4JCU9QVElPTkFMLAotCWFwbi1JblVzZQkJWzVdIEFQTgkJT1BUSU9OQUwsCi0JbnNhcGkJCVs2XSBOU0FQSQkJT1BUSU9OQUwsCi0JdHJhbnNhY3Rpb25JZAlbN10gVHJhbnNhY3Rpb25JZAlPUFRJT05BTCwKLQl0ZWlkLUZvckduQW5kR3AJWzhdIFRFSUQJCU9QVElPTkFMLAotCXRlaWQtRm9ySXUJWzldIFRFSUQJCU9QVElPTkFMLAotCWdnc24tQWRkcmVzcwlbMTBdIEdTTi1BZGRyZXNzIAlPUFRJT05BTCwKLQlxb3MtU3Vic2NyaWJlZAlbMTFdIEV4dC1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTCwKLQlxb3MtUmVxdWVzdGVkCVsxMl0gRXh0LVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMLAotCXFvcy1OZWdvdGlhdGVkCVsxM10gRXh0LVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMLAotCWNoYXJnaW5nSWQJWzE0XSBHUFJTQ2hhcmdpbmdJRAlPUFRJT05BTCwKLQljaGFyZ2luZ0NoYXJhY3RlcmlzdGljcwlbMTVdIENoYXJnaW5nQ2hhcmFjdGVyaXN0aWNzCU9QVElPTkFMLAotCXJuYy1BZGRyZXNzCVsxNl0gR1NOLUFkZHJlc3MJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVsxN10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQlxb3MyLVN1YnNjcmliZWQJWzE4XSBFeHQyLVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMLAotCS0tIHFvczItU3Vic2NyaWJlZCBtYXkgYmUgcHJlc2VudCBvbmx5IGlmIHFvcy1TdWJzY3JpYmVkIGlzIHByZXNlbnQuCi0JcW9zMi1SZXF1ZXN0ZWQJWzE5XSBFeHQyLVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMLAotCS0tIHFvczItUmVxdWVzdGVkIG1heSBiZSBwcmVzZW50IG9ubHkgaWYgcW9zLVJlcXVlc3RlZCBpcyBwcmVzZW50LgotCXFvczItTmVnb3RpYXRlZAlbMjBdIEV4dDItUW9TLVN1YnNjcmliZWQJT1BUSU9OQUwsCi0JLS0gcW9zMi1OZWdvdGlhdGVkIG1heSBiZSBwcmVzZW50IG9ubHkgaWYgcW9zLU5lZ290aWF0ZWQgaXMgcHJlc2VudC4KLQkJcW9zMy1TdWJzY3JpYmVkCVsyMV0gRXh0My1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTCwKLQktLSBxb3MzLVN1YnNjcmliZWQgbWF5IGJlIHByZXNlbnQgb25seSBpZiBxb3MyLVN1YnNjcmliZWQgaXMgcHJlc2VudC4KLQlxb3MzLVJlcXVlc3RlZAlbMjJdIEV4dDMtUW9TLVN1YnNjcmliZWQJT1BUSU9OQUwsCi0JLS0gcW9zMy1SZXF1ZXN0ZWQgbWF5IGJlIHByZXNlbnQgb25seSBpZiBxb3MyLVJlcXVlc3RlZCBpcyBwcmVzZW50LgotCXFvczMtTmVnb3RpYXRlZAlbMjNdIEV4dDMtUW9TLVN1YnNjcmliZWQJT1BUSU9OQUwKLQktLSBxb3MzLU5lZ290aWF0ZWQgbWF5IGJlIHByZXNlbnQgb25seSBpZiBxb3MyLU5lZ290aWF0ZWQgaXMgcHJlc2VudC4KLX0KLQotTlNBUEkgOjo9IElOVEVHRVIgKDAuLjE1KQotLS0JVGhpcyB0eXBlIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIE5ldHdvcmsgbGF5ZXIgU2VydmljZSBBY2Nlc3MgUG9pbnQKLQotVHJhbnNhY3Rpb25JZCA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi4yKSkKLS0tCVRoaXMgdHlwZSBjYXJyaWVzIHRoZSB2YWx1ZSBwYXJ0IG9mIHRoZSB0cmFuc2FjdGlvbiBpZGVudGlmaWVyIHdoaWNoIGlzIHVzZWQgaW4gdGhlIAotLS0Jc2Vzc2lvbiBtYW5hZ2VtZW50IG1lc3NhZ2VzIG9uIHRoZSBhY2Nlc3MgaW50ZXJmYWNlLiBUaGUgZW5jb2RpbmcgaXMgZGVmaW5lZCBpbiAKLS0tCTNHUFAgVFMgMjQuMDA4Ci0KLVRFSUQgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoNCkpCi0tLQlUaGlzIHR5cGUgY2FycmllcyB0aGUgdmFsdWUgcGFydCBvZiB0aGUgVHVubmVsIEVuZHBvaW50IElkZW50aWZpZXIgd2hpY2ggaXMgdXNlZCB0byAKLS0tCWRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IHR1bm5lbHMgYmV0d2VlbiB0aGUgc2FtZSBwYWlyIG9mIGVudGl0aWVzIHdoaWNoIGNvbW11bmljYXRlIAotLS0JdXNpbmcgdGhlIEdQUlMgVHVubmVsbGluZyBQcm90b2NvbCBUaGUgZW5jb2RpbmcgaXMgZGVmaW5lZCBpbiAzR1BQIFRTIDI5LjA2MC4KLQotR1BSU0NoYXJnaW5nSUQgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoNCkpCi0tLQlUaGUgQ2hhcmdpbmcgSUQgaXMgYSB1bmlxdWUgZm91ciBvY3RldCB2YWx1ZSBnZW5lcmF0ZWQgYnkgdGhlIEdHU04gd2hlbiAKLS0tCWEgUERQIENvbnRleHQgaXMgYWN0aXZhdGVkLiBBIENoYXJnaW5nIElEIGlzIGdlbmVyYXRlZCBmb3IgZWFjaCBhY3RpdmF0ZWQgY29udGV4dC4KLS0tCVRoZSBlbmNvZGluZyBpcyBkZWZpbmVkIGluIDNHUFAgVFMgMjkuMDYwLgotCi1Ob3RSZWFjaGFibGVSZWFzb24gOjo9IEVOVU1FUkFURUQgewotCW1zUHVyZ2VkICgwKSwKLQlpbXNpRGV0YWNoZWQgKDEpLAotCXJlc3RyaWN0ZWRBcmVhICgyKSwKLQlub3RSZWdpc3RlcmVkICgzKX0KLQotLS0gYW55IHRpbWUgaW50ZXJyb2dhdGlvbiBpbmZvIHR5cGVzCi0KLUFueVRpbWVJbnRlcnJvZ2F0aW9uQXJnIDo6PSBTRVFVRU5DRSB7Ci0Jc3Vic2NyaWJlcklkZW50aXR5CVswXSBTdWJzY3JpYmVySWRlbnRpdHksCi0JcmVxdWVzdGVkSW5mbwlbMV0gUmVxdWVzdGVkSW5mbywKLQlnc21TQ0YtQWRkcmVzcwlbM10gSVNETi1BZGRyZXNzU3RyaW5nLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotQW55VGltZUludGVycm9nYXRpb25SZXMgOjo9IFNFUVVFTkNFIHsKLQlzdWJzY3JpYmVySW5mbwlTdWJzY3JpYmVySW5mbywKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotLS0gYW55IHRpbWUgaW5mb3JtYXRpb24gaGFuZGxpbmcgdHlwZXMKLQotQW55VGltZVN1YnNjcmlwdGlvbkludGVycm9nYXRpb25BcmcgOjo9IFNFUVVFTkNFIHsKLQlzdWJzY3JpYmVySWRlbnRpdHkJWzBdIFN1YnNjcmliZXJJZGVudGl0eSwKLQlyZXF1ZXN0ZWRTdWJzY3JpcHRpb25JbmZvCVsxXSBSZXF1ZXN0ZWRTdWJzY3JpcHRpb25JbmZvLAotCWdzbVNDRi1BZGRyZXNzCVsyXSBJU0ROLUFkZHJlc3NTdHJpbmcsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVszXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JbG9uZ0ZUTi1TdXBwb3J0ZWQJWzRdCU5VTEwJCU9QVElPTkFMLAotCS4uLn0KLQotQW55VGltZVN1YnNjcmlwdGlvbkludGVycm9nYXRpb25SZXMgOjo9IFNFUVVFTkNFIHsKLQljYWxsRm9yd2FyZGluZ0RhdGEJWzFdIENhbGxGb3J3YXJkaW5nRGF0YQlPUFRJT05BTCwKLQljYWxsQmFycmluZ0RhdGEJWzJdIENhbGxCYXJyaW5nRGF0YQlPUFRJT05BTCwKLQlvZGItSW5mbwkJWzNdIE9EQi1JbmZvCU9QVElPTkFMLAotCWNhbWVsLVN1YnNjcmlwdGlvbkluZm8JWzRdIENBTUVMLVN1YnNjcmlwdGlvbkluZm8JT1BUSU9OQUwsCi0Jc3VwcG9ydGVkVkxSLUNBTUVMLVBoYXNlcwlbNV0gU3VwcG9ydGVkQ2FtZWxQaGFzZXMJT1BUSU9OQUwsCi0Jc3VwcG9ydGVkU0dTTi1DQU1FTC1QaGFzZXMJWzZdIFN1cHBvcnRlZENhbWVsUGhhc2VzCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbN10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiAsCi0Jb2ZmZXJlZENhbWVsNENTSXNJblZMUglbOF0gT2ZmZXJlZENhbWVsNENTSXMJT1BUSU9OQUwsCi0Jb2ZmZXJlZENhbWVsNENTSXNJblNHU04JWzldIE9mZmVyZWRDYW1lbDRDU0lzCU9QVElPTkFMLAotCW1zaXNkbi1CUy1MaXN0CVsxMF0gTVNJU0ROLUJTLUxpc3QJT1BUSU9OQUwgfQotCi1SZXF1ZXN0ZWRTdWJzY3JpcHRpb25JbmZvIDo6PSBTRVFVRU5DRSB7Ci0JcmVxdWVzdGVkU1MtSW5mbwlbMV0gU1MtRm9yQlMtQ29kZQlPUFRJT05BTCwKLQlvZGIJCQlbMl0gTlVMTAkJT1BUSU9OQUwsCi0JcmVxdWVzdGVkQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbwlbM10gUmVxdWVzdGVkQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbwkJT1BUSU9OQUwsCi0Jc3VwcG9ydGVkVkxSLUNBTUVMLVBoYXNlcwlbNF0gTlVMTAkJT1BUSU9OQUwsCi0Jc3VwcG9ydGVkU0dTTi1DQU1FTC1QaGFzZXMJWzVdIE5VTEwJCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbNl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQlhZGRpdGlvbmFsUmVxdWVzdGVkQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbwotCQkJCVs3XSBBZGRpdGlvbmFsUmVxdWVzdGVkQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbwotCQkJCQkJCU9QVElPTkFMLAotCW1zaXNkbi1CUy1MaXN0CVs4XSBOVUxMCQlPUFRJT05BTCB9Ci0KLU1TSVNETi1CUy1MaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZk1TSVNETikgT0YKLQkJCQlNU0lTRE4tQlMKLQotbWF4TnVtT2ZNU0lTRE4gIElOVEVHRVIgOjo9IDUwCi0KLQotTVNJU0ROLUJTIDo6PSBTRVFVRU5DRSB7Ci0JbXNpc2RuCQkJSVNETi1BZGRyZXNzU3RyaW5nLAkKLQliYXNpY1NlcnZpY2VMaXN0CVswXQlCYXNpY1NlcnZpY2VMaXN0CU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMV0JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotUmVxdWVzdGVkQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbyA6Oj0gRU5VTUVSQVRFRCB7Ci0Jby1DU0kJCSgwKSwKLQl0LUNTSQkJKDEpLAotCXZ0LUNTSQkJKDIpLAotCXRpZi1DU0kJCSgzKSwKLQlncHJzLUNTSQkJKDQpLAotCW1vLXNtcy1DU0kJKDUpLAotCXNzLUNTSQkJKDYpLAotCW0tQ1NJCQkoNyksCi0JZC1jc2kJCSg4KX0KLQotQWRkaXRpb25hbFJlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8gOjo9IEVOVU1FUkFURUQgewotCW10LXNtcy1DU0kJKDApLAotCW1nLWNzaQkJKDEpLAotCW8tSU0tQ1NJIAkJKDIpLAotCWQtSU0tQ1NJCQkoMyksCi0JdnQtSU0tQ1NJCSAJKDQpLAotCS4uLn0KLS0tCWV4Y2VwdGlvbiBoYW5kbGluZzogdW5rbm93biB2YWx1ZXMgc2hhbGwgYmUgZGlzY2FyZGVkIGJ5IHRoZSByZWNlaXZlci4KLQotQ2FsbEZvcndhcmRpbmdEYXRhIDo6PSBTRVFVRU5DRSB7Ci0JZm9yd2FyZGluZ0ZlYXR1cmVMaXN0CUV4dC1Gb3J3RmVhdHVyZUxpc3QsCi0Jbm90aWZpY2F0aW9uVG9DU0UJTlVMTAkJCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotQ2FsbEJhcnJpbmdEYXRhIDo6PSBTRVFVRU5DRSB7Ci0JY2FsbEJhcnJpbmdGZWF0dXJlTGlzdAlFeHQtQ2FsbEJhckZlYXR1cmVMaXN0LAotCXBhc3N3b3JkCQlQYXNzd29yZAkJT1BUSU9OQUwsCi0Jd3JvbmdQYXNzd29yZEF0dGVtcHRzQ291bnRlcglXcm9uZ1Bhc3N3b3JkQXR0ZW1wdHNDb3VudGVyCU9QVElPTkFMLAotCW5vdGlmaWNhdGlvblRvQ1NFCU5VTEwJCQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotV3JvbmdQYXNzd29yZEF0dGVtcHRzQ291bnRlciA6Oj0gSU5URUdFUiAoMC4uNCkKLQotT0RCLUluZm8gOjo9IFNFUVVFTkNFIHsKLQlvZGItRGF0YQkJT0RCLURhdGEsCi0Jbm90aWZpY2F0aW9uVG9DU0UJTlVMTAkJCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1DQU1FTC1TdWJzY3JpcHRpb25JbmZvIDo6PSBTRVFVRU5DRSB7Ci0Jby1DU0kJCVswXQlPLUNTSQlPUFRJT05BTCwKLQlvLUJjc21DYW1lbFREUC1Dcml0ZXJpYUxpc3QJWzFdCU8tQmNzbUNhbWVsVERQQ3JpdGVyaWFMaXN0CU9QVElPTkFMLCAKLQlkLUNTSQkJWzJdCUQtQ1NJCU9QVElPTkFMLAotCXQtQ1NJCQlbM10JVC1DU0kJT1BUSU9OQUwsCi0JdC1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYUxpc3QJWzRdCVQtQkNTTS1DQU1FTC1URFAtQ3JpdGVyaWFMaXN0CU9QVElPTkFMLAotCXZ0LUNTSQkJWzVdCVQtQ1NJCU9QVElPTkFMLAotCXZ0LUJDU00tQ0FNRUwtVERQLUNyaXRlcmlhTGlzdAlbNl0JVC1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYUxpc3QJT1BUSU9OQUwsCi0JdGlmLUNTSQkJWzddCU5VTEwJCU9QVElPTkFMLAotCXRpZi1DU0ktTm90aWZpY2F0aW9uVG9DU0UJWzhdCU5VTEwJCU9QVElPTkFMLAotCWdwcnMtQ1NJCQlbOV0JR1BSUy1DU0kJT1BUSU9OQUwsCi0JbW8tc21zLUNTSQlbMTBdCVNNUy1DU0kJT1BUSU9OQUwsCi0Jc3MtQ1NJCQlbMTFdCVNTLUNTSQlPUFRJT05BTCwKLQltLUNTSQkJWzEyXQlNLUNTSQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzEzXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCXNwZWNpZmljQ1NJRGVsZXRlZExpc3QJWzE0XQlTcGVjaWZpY0NTSS1XaXRoZHJhdwlPUFRJT05BTCwKLQltdC1zbXMtQ1NJCVsxNV0JU01TLUNTSQlPUFRJT05BTCwKLQltdC1zbXNDQU1FTFREUC1Dcml0ZXJpYUxpc3QJWzE2XQlNVC1zbXNDQU1FTFREUC1Dcml0ZXJpYUxpc3QJT1BUSU9OQUwsCi0JbWctY3NpCQlbMTddCU1HLUNTSQlPUFRJT05BTCwKLQlvLUlNLUNTSQkJWzE4XSBPLUNTSQlPUFRJT05BTCwKLQlvLUlNLUJjc21DYW1lbFREUC1Dcml0ZXJpYUxpc3QJWzE5XSBPLUJjc21DYW1lbFREUENyaXRlcmlhTGlzdAlPUFRJT05BTCwKLQlkLUlNLUNTSQkJWzIwXSBELUNTSQlPUFRJT05BTCwKLQl2dC1JTS1DU0kJCVsyMV0gVC1DU0kJT1BUSU9OQUwsCi0JdnQtSU0tQkNTTS1DQU1FTC1URFAtQ3JpdGVyaWFMaXN0CVsyMl0JVC1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYUxpc3QJT1BUSU9OQUwKLQl9Ci0KLUFueVRpbWVNb2RpZmljYXRpb25BcmcgOjo9IFNFUVVFTkNFIHsKLQlzdWJzY3JpYmVySWRlbnRpdHkJWzBdCVN1YnNjcmliZXJJZGVudGl0eSwKLQlnc21TQ0YtQWRkcmVzcwlbMV0JSVNETi1BZGRyZXNzU3RyaW5nLAotCW1vZGlmaWNhdGlvblJlcXVlc3RGb3ItQ0YtSW5mbwlbMl0JTW9kaWZpY2F0aW9uUmVxdWVzdEZvci1DRi1JbmZvIE9QVElPTkFMLAotCW1vZGlmaWNhdGlvblJlcXVlc3RGb3ItQ0ItSW5mbwlbM10JTW9kaWZpY2F0aW9uUmVxdWVzdEZvci1DQi1JbmZvIE9QVElPTkFMLAotCW1vZGlmaWNhdGlvblJlcXVlc3RGb3ItQ1NJCVs0XQlNb2RpZmljYXRpb25SZXF1ZXN0Rm9yLUNTSQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzVdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQlsb25nRlROLVN1cHBvcnRlZAlbNl0JTlVMTAkJT1BUSU9OQUwsCi0JLi4uLAotCW1vZGlmaWNhdGlvblJlcXVlc3RGb3ItT0RCLWRhdGEJWzddCU1vZGlmaWNhdGlvblJlcXVlc3RGb3ItT0RCLWRhdGEgT1BUSU9OQUwsCi0JbW9kaWZpY2F0aW9uUmVxdWVzdEZvci1JUC1TTS1HVy1EYXRhCVs4XQlNb2RpZmljYXRpb25SZXF1ZXN0Rm9yLUlQLVNNLUdXLURhdGEgT1BUSU9OQUwgfQotCi1BbnlUaW1lTW9kaWZpY2F0aW9uUmVzIDo6PSBTRVFVRU5DRSB7Ci0Jc3MtSW5mb0Zvci1DU0UJWzBdCUV4dC1TUy1JbmZvRm9yLUNTRQlPUFRJT05BTCwKLQljYW1lbC1TdWJzY3JpcHRpb25JbmZvCVsxXQlDQU1FTC1TdWJzY3JpcHRpb25JbmZvCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQlvZGItSW5mbwkJWzNdCU9EQi1JbmZvCU9QVElPTkFMIH0KLQotTW9kaWZpY2F0aW9uUmVxdWVzdEZvci1DRi1JbmZvIDo6PSBTRVFVRU5DRSB7Ci0Jc3MtQ29kZQkJWzBdCVNTLUNvZGUsCi0JYmFzaWNTZXJ2aWNlCVsxXQlFeHQtQmFzaWNTZXJ2aWNlQ29kZQlPUFRJT05BTCwKLQlzcy1TdGF0dXMJCVsyXQlFeHQtU1MtU3RhdHVzCU9QVElPTkFMLAotCWZvcndhcmRlZFRvTnVtYmVyCVszXQlBZGRyZXNzU3RyaW5nCU9QVElPTkFMLAotCWZvcndhcmRlZFRvU3ViYWRkcmVzcwlbNF0JSVNETi1TdWJhZGRyZXNzU3RyaW5nCU9QVElPTkFMLAotCW5vUmVwbHlDb25kaXRpb25UaW1lCVs1XQlFeHQtTm9SZXBDb25kVGltZQlPUFRJT05BTCwKLQltb2RpZnlOb3RpZmljYXRpb25Ub0NTRQlbNl0JTW9kaWZpY2F0aW9uSW5zdHJ1Y3Rpb24JT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVs3XQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1Nb2RpZmljYXRpb25SZXF1ZXN0Rm9yLUNCLUluZm8gOjo9IFNFUVVFTkNFIHsKLQlzcy1Db2RlCQlbMF0JU1MtQ29kZSwKLQliYXNpY1NlcnZpY2UJWzFdCUV4dC1CYXNpY1NlcnZpY2VDb2RlCU9QVElPTkFMLAotCXNzLVN0YXR1cwkJWzJdCUV4dC1TUy1TdGF0dXMJT1BUSU9OQUwsCi0JcGFzc3dvcmQJCVszXQlQYXNzd29yZAlPUFRJT05BTCwKLQl3cm9uZ1Bhc3N3b3JkQXR0ZW1wdHNDb3VudGVyCVs0XQlXcm9uZ1Bhc3N3b3JkQXR0ZW1wdHNDb3VudGVyCU9QVElPTkFMLAotCW1vZGlmeU5vdGlmaWNhdGlvblRvQ1NFCVs1XQlNb2RpZmljYXRpb25JbnN0cnVjdGlvbglPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzZdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLU1vZGlmaWNhdGlvblJlcXVlc3RGb3ItT0RCLWRhdGEgOjo9IFNFUVVFTkNFIHsKLQlvZGItZGF0YQkJWzBdCU9EQi1EYXRhCU9QVElPTkFMLAotCW1vZGlmeU5vdGlmaWNhdGlvblRvQ1NFCVsxXQlNb2RpZmljYXRpb25JbnN0cnVjdGlvbglPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzJdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLU1vZGlmaWNhdGlvblJlcXVlc3RGb3ItQ1NJIDo6PSBTRVFVRU5DRSB7Ci0JcmVxdWVzdGVkQ2FtZWwtU3Vic2NyaXB0aW9uSW5mbwlbMF0JUmVxdWVzdGVkQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbywKLQltb2RpZnlOb3RpZmljYXRpb25Ub0NTRQlbMV0JTW9kaWZpY2F0aW9uSW5zdHJ1Y3Rpb24JT1BUSU9OQUwsCi0JbW9kaWZ5Q1NJLVN0YXRlCVsyXQlNb2RpZmljYXRpb25JbnN0cnVjdGlvbglPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzNdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4sCi0JYWRkaXRpb25hbFJlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8KLQkJCQlbNF0gQWRkaXRpb25hbFJlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8KLQkJCQkJCQlPUFRJT05BTCB9Ci0tLSByZXF1ZXN0ZWRDYW1lbC1TdWJzY3JpcHRpb25JbmZvIHNoYWxsIGJlIGRpc2NhcmRlZCBpZgotLS0gYWRkaXRpb25hbFJlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8gaXMgcmVjZWl2ZWQKLQotTW9kaWZpY2F0aW9uUmVxdWVzdEZvci1JUC1TTS1HVy1EYXRhIDo6PSBTRVFVRU5DRSB7Ci0JbW9kaWZ5UmVnaXN0cmF0aW9uU3RhdHVzCVswXQlNb2RpZmljYXRpb25JbnN0cnVjdGlvbglPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzFdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLU1vZGlmaWNhdGlvbkluc3RydWN0aW9uIDo6PSBFTlVNRVJBVEVEIHsKLQlkZWFjdGl2YXRlCSgwKSwKLQlhY3RpdmF0ZQkJKDEpfQotCi0tLSBzdWJzY3JpYmVyIGRhdGEgbW9kaWZpY2F0aW9uIG5vdGlmaWNhdGlvbiB0eXBlcwotCi1Ob3RlU3Vic2NyaWJlckRhdGFNb2RpZmllZEFyZyA6Oj0gU0VRVUVOQ0UgewotCWltc2kJCQlJTVNJLAotCW1zaXNkbgkJSVNETi1BZGRyZXNzU3RyaW5nLAotCWZvcndhcmRpbmdJbmZvRm9yLUNTRQlbMF0gRXh0LUZvcndhcmRpbmdJbmZvRm9yLUNTRQlPUFRJT05BTCwKLQljYWxsQmFycmluZ0luZm9Gb3ItQ1NFCVsxXSBFeHQtQ2FsbEJhcnJpbmdJbmZvRm9yLUNTRQlPUFRJT05BTCwKLQlvZGItSW5mbwkJWzJdIE9EQi1JbmZvCU9QVElPTkFMLAotCWNhbWVsLVN1YnNjcmlwdGlvbkluZm8JWzNdIENBTUVMLVN1YnNjcmlwdGlvbkluZm8JT1BUSU9OQUwsCi0JYWxsSW5mb3JtYXRpb25TZW50CVs0XSBOVUxMCQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotTm90ZVN1YnNjcmliZXJEYXRhTW9kaWZpZWRSZXMgOjo9IFNFUVVFTkNFIHsKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotLS0gbW9iaWxpdHkgbWFuYWdlbWVudCBldmVudCBub3RpZmljYXRpb29uIGluZm8gdHlwZXMKLQotTm90ZU1NLUV2ZW50QXJnOjo9IFNFUVVFTkNFIHsKLQlzZXJ2aWNlS2V5CVNlcnZpY2VLZXksCi0JZXZlbnRNZXQJCVswXQlNTS1Db2RlLAotCWltc2kJCQlbMV0JSU1TSSwKLQltc2lzZG4JCVsyXQlJU0ROLUFkZHJlc3NTdHJpbmcsCi0JbG9jYXRpb25JbmZvcm1hdGlvbglbM10JTG9jYXRpb25JbmZvcm1hdGlvbglPUFRJT05BTCwKLQlzdXBwb3J0ZWRDQU1FTFBoYXNlcwlbNV0JU3VwcG9ydGVkQ2FtZWxQaGFzZXMJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVs2XQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCWxvY2F0aW9uSW5mb3JtYXRpb25HUFJTCVs3XQlMb2NhdGlvbkluZm9ybWF0aW9uR1BSUwlPUFRJT05BTCwKLQlvZmZlcmVkQ2FtZWw0RnVuY3Rpb25hbGl0aWVzCVs4XSBPZmZlcmVkQ2FtZWw0RnVuY3Rpb25hbGl0aWVzCU9QVElPTkFMCi19Ci0KLU5vdGVNTS1FdmVudFJlcyA6Oj0gU0VRVUVOQ0UgewotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIgCU9QVElPTkFMLAotCS4uLn0KLQotRXh0LVNTLUluZm9Gb3ItQ1NFIDo6PSBDSE9JQ0UgewotCWZvcndhcmRpbmdJbmZvRm9yLUNTRQlbMF0gRXh0LUZvcndhcmRpbmdJbmZvRm9yLUNTRSwKLQljYWxsQmFycmluZ0luZm9Gb3ItQ1NFCVsxXSBFeHQtQ2FsbEJhcnJpbmdJbmZvRm9yLUNTRQotCX0KLQotRXh0LUZvcndhcmRpbmdJbmZvRm9yLUNTRSA6Oj0gU0VRVUVOQ0UgewotCXNzLUNvZGUJCVswXQlTUy1Db2RlLAotCWZvcndhcmRpbmdGZWF0dXJlTGlzdAlbMV0JRXh0LUZvcndGZWF0dXJlTGlzdCwKLQlub3RpZmljYXRpb25Ub0NTRQlbMl0JTlVMTAkJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVszXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1FeHQtQ2FsbEJhcnJpbmdJbmZvRm9yLUNTRSA6Oj0gU0VRVUVOQ0UgewotCXNzLUNvZGUJCVswXQlTUy1Db2RlLAotCWNhbGxCYXJyaW5nRmVhdHVyZUxpc3QJWzFdCUV4dC1DYWxsQmFyRmVhdHVyZUxpc3QsCi0JcGFzc3dvcmQJCVsyXQlQYXNzd29yZAlPUFRJT05BTCwKLQl3cm9uZ1Bhc3N3b3JkQXR0ZW1wdHNDb3VudGVyCVszXQlXcm9uZ1Bhc3N3b3JkQXR0ZW1wdHNDb3VudGVyCU9QVElPTkFMLAotCW5vdGlmaWNhdGlvblRvQ1NFCVs0XQlOVUxMCQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJWzVdCUV4dGVuc2lvbkNvbnRhaW5lciAJT1BUSU9OQUwsCi0JLi4ufQotCi1FTkQKLQpkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtT00tRGF0YVR5cGVzLmFzbiBiL3JybHAtZXBoZW1lcmlzL2FzbjEvTUFQLU9NLURhdGFUeXBlcy5hc24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNGRkNmYuLjAwMDAwMDAKLS0tIGEvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtT00tRGF0YVR5cGVzLmFzbgorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0tLSAkSWQ6IE1BUC1PTS1EYXRhVHlwZXMuYXNuIDI4MTQ5IDIwMDktMDQtMjUgMTc6NDU6MzRaIGV0eHJhYiAkCi0tLSAxNy43LjIJT3BlcmF0aW9uIGFuZCBtYWludGVuYW5jZSBkYXRhIHR5cGVzCi0tLSAzR1BQIFRTIDI5LjAwMiBWOC45LjAgKDIwMDktMDQpCi0gCi1NQVAtT00tRGF0YVR5cGVzIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLU9NLURhdGFUeXBlcyAoMTIpIHZlcnNpb24xMSAoMTEpfQotCi1ERUZJTklUSU9OUwotCi1JTVBMSUNJVCBUQUdTCi0KLTo6PQotCi1CRUdJTgotCi1FWFBPUlRTCi0JQWN0aXZhdGVUcmFjZU1vZGVBcmcsCi0JQWN0aXZhdGVUcmFjZU1vZGVSZXMsCi0JRGVhY3RpdmF0ZVRyYWNlTW9kZUFyZywKLQlEZWFjdGl2YXRlVHJhY2VNb2RlUmVzLAotCVRyYWNlUHJvcGFnYXRpb25MaXN0Ci07Ci0KLUlNUE9SVFMKLQlBZGRyZXNzU3RyaW5nLAotCUlNU0kKLUZST00gTUFQLUNvbW1vbkRhdGFUeXBlcyB7Ci0gICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1Db21tb25EYXRhVHlwZXMgKDE4KSB2ZXJzaW9uMTEgKDExKX0KLQotCUV4dGVuc2lvbkNvbnRhaW5lcgotRlJPTSBNQVAtRXh0ZW5zaW9uRGF0YVR5cGVzIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUV4dGVuc2lvbkRhdGFUeXBlcyAoMjEpIHZlcnNpb24xMSAoMTEpfQotCi07Ci0KLUFjdGl2YXRlVHJhY2VNb2RlQXJnIDo6PSBTRVFVRU5DRSB7Ci0JaW1zaQkJCVswXSBJTVNJCQlPUFRJT05BTCwKLQl0cmFjZVJlZmVyZW5jZQlbMV0gVHJhY2VSZWZlcmVuY2UsCi0JdHJhY2VUeXBlCQlbMl0gVHJhY2VUeXBlLAotCW9tYy1JZAkJWzNdIEFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCVs0XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCXRyYWNlUmVmZXJlbmNlMglbNV0gVHJhY2VSZWZlcmVuY2UyCU9QVElPTkFMLAotCXRyYWNlRGVwdGhMaXN0CVs2XSBUcmFjZURlcHRoTGlzdAlPUFRJT05BTCwKLQl0cmFjZU5FLVR5cGVMaXN0CVs3XSBUcmFjZU5FLVR5cGVMaXN0CU9QVElPTkFMLAotCXRyYWNlSW50ZXJmYWNlTGlzdAlbOF0gVHJhY2VJbnRlcmZhY2VMaXN0CU9QVElPTkFMLAotCXRyYWNlRXZlbnRMaXN0CVs5XSBUcmFjZUV2ZW50TGlzdAlPUFRJT05BTAotCX0KLQotVHJhY2VSZWZlcmVuY2UgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uMikpCi0KLVRyYWNlUmVmZXJlbmNlMiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgzKSkKLQotVHJhY2VSZWNvcmRpbmdTZXNzaW9uUmVmZXJlbmNlIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIpKQotCi1UcmFjZVR5cGUgOjo9IElOVEVHRVIKLQkoMC4uMjU1KQotCS0tIFRyYWNlIHR5cGVzIGFyZSBmdWxseSBkZWZpbmVkIGluICAzR1BQIFRTIDUyLjAwOC4gWzYxXQotCi1UcmFjZURlcHRoTGlzdCA6Oj0gU0VRVUVOQ0UgewotCW1zYy1zLVRyYWNlRGVwdGgJWzBdIFRyYWNlRGVwdGgJT1BUSU9OQUwsCi0JbWd3LVRyYWNlRGVwdGgJWzFdIFRyYWNlRGVwdGgJT1BUSU9OQUwsCi0Jc2dzbi1UcmFjZURlcHRoCVsyXSBUcmFjZURlcHRoCU9QVElPTkFMLAotCWdnc24tVHJhY2VEZXB0aAlbM10gVHJhY2VEZXB0aAlPUFRJT05BTCwKLQlybmMtVHJhY2VEZXB0aAlbNF0gVHJhY2VEZXB0aAlPUFRJT05BTCwKLQlibXNjLVRyYWNlRGVwdGgJWzVdIFRyYWNlRGVwdGgJT1BUSU9OQUwsCi0JLi4ufQotCi1UcmFjZURlcHRoIDo6PSBFTlVNRVJBVEVEIHsKLQltaW5pbXVtICgwKSwKLQltZWRpdW0gKDEpLAotCW1heGltdW0gKDIpLAotCS4uLn0KLS0tIFRoZSB2YWx1ZSBtZWRpdW0gaXMgYXBwbGljYWJsZSBvbmx5IGZvciBSTkMuIEZvciBvdGhlciBuZXR3b3JrIGVsZW1lbnRzLCBpZiB2YWx1ZSBtZWRpdW0KLS0tIGlzIHJlY2VpdmVkLCB2YWx1ZSBtaW5pbXVtIHNoYWxsIGJlIGFwcGxpZWQuCi0KLVRyYWNlTkUtVHlwZUxpc3QgOjo9IEJJVCBTVFJJTkcgewotCW1zYy1zICgwKSwKLQltZ3cgKDEpLAotCXNnc24gKDIpLAotCWdnc24gKDMpLAotCXJuYyAoNCksCi0JYm0tc2MgKDUpfSAoU0laRSAoNi4uMTYpKQotLS0gT3RoZXIgYml0cyB0aGFuIGxpc3RlZCBhYm92ZSBzaGFsbCBiZSBkaXNjYXJkZWQuCi0KLVRyYWNlSW50ZXJmYWNlTGlzdCA6Oj0gU0VRVUVOQ0UgewotCW1zYy1zLUxpc3QJWzBdIE1TQy1TLUludGVyZmFjZUxpc3QJT1BUSU9OQUwsCi0JbWd3LUxpc3QJCVsxXSBNR1ctSW50ZXJmYWNlTGlzdAlPUFRJT05BTCwKLQlzZ3NuLUxpc3QJCVsyXSBTR1NOLUludGVyZmFjZUxpc3QJT1BUSU9OQUwsCi0JZ2dzbi1MaXN0CQlbM10gR0dTTi1JbnRlcmZhY2VMaXN0CU9QVElPTkFMLAotCXJuYy1MaXN0CQlbNF0gUk5DLUludGVyZmFjZUxpc3QJT1BUSU9OQUwsCi0JYm1zYy1MaXN0CQlbNV0gQk1TQy1JbnRlcmZhY2VMaXN0CU9QVElPTkFMLAotCS4uLn0KLQotTVNDLVMtSW50ZXJmYWNlTGlzdCA6Oj0gQklUIFNUUklORyB7Ci0JYSAoMCksCi0JaXUgKDEpLAotCW1jICgyKSwKLQltYXAtZyAoMyksCi0JbWFwLWIgKDQpLAotCW1hcC1lICg1KSwKLQltYXAtZiAoNiksCi0JY2FwICg3KSwKLQltYXAtZCAoOCksCi0JbWFwLWMgKDkpfSAoU0laRSAoMTAuLjE2KSkKLS0tIE90aGVyIGJpdHMgdGhhbiBsaXN0ZWQgYWJvdmUgc2hhbGwgYmUgZGlzY2FyZGVkLgotCi1NR1ctSW50ZXJmYWNlTGlzdCA6Oj0gQklUIFNUUklORyB7Ci0JbWMgKDApLAotCW5iLXVwICgxKSwKLQlpdS11cCAoMil9IChTSVpFICgzLi44KSkKLS0tIE90aGVyIGJpdHMgdGhhbiBsaXN0ZWQgYWJvdmUgc2hhbGwgYmUgZGlzY2FyZGVkLgotCi1TR1NOLUludGVyZmFjZUxpc3QgOjo9IEJJVCBTVFJJTkcgewotCWdiICgwKSwKLQlpdSAoMSksCi0JZ24gKDIpLAotCW1hcC1nciAoMyksCi0JbWFwLWdkICg0KSwKLQltYXAtZ2YgKDUpLAotCWdzICg2KSwKLQlnZSAoNyl9IChTSVpFICg4Li4xNikpCi0tLSBPdGhlciBiaXRzIHRoYW4gbGlzdGVkIGFib3ZlIHNoYWxsIGJlIGRpc2NhcmRlZC4KLQotR0dTTi1JbnRlcmZhY2VMaXN0IDo6PSBCSVQgU1RSSU5HIHsKLQlnbiAoMCksCi0JZ2kgKDEpLAotCWdtYiAoMil9IChTSVpFICgzLi44KSkKLS0tIE90aGVyIGJpdHMgdGhhbiBsaXN0ZWQgYWJvdmUgc2hhbGwgYmUgZGlzY2FyZGVkLgotCi1STkMtSW50ZXJmYWNlTGlzdCA6Oj0gQklUIFNUUklORyB7Ci0JaXUgKDApLAotCWl1ciAoMSksCi0JaXViICgyKSwKLQl1dSAoMyl9IChTSVpFICg0Li44KSkKLS0tIE90aGVyIGJpdHMgdGhhbiBsaXN0ZWQgYWJvdmUgc2hhbGwgYmUgZGlzY2FyZGVkLgotCi1CTVNDLUludGVyZmFjZUxpc3QgOjo9IEJJVCBTVFJJTkcgewotCWdtYiAoMCl9IChTSVpFICgxLi44KSkKLS0tIE90aGVyIGJpdHMgdGhhbiBsaXN0ZWQgYWJvdmUgc2hhbGwgYmUgZGlzY2FyZGVkLgotCi1UcmFjZUV2ZW50TGlzdCA6Oj0gU0VRVUVOQ0UgewotCW1zYy1zLUxpc3QJWzBdIE1TQy1TLUV2ZW50TGlzdAlPUFRJT05BTCwKLQltZ3ctTGlzdAkJWzFdIE1HVy1FdmVudExpc3QJT1BUSU9OQUwsCi0Jc2dzbi1MaXN0CQlbMl0gU0dTTi1FdmVudExpc3QJT1BUSU9OQUwsCi0JZ2dzbi1MaXN0CQlbM10gR0dTTi1FdmVudExpc3QJT1BUSU9OQUwsCi0JYm1zYy1MaXN0CQlbNF0gQk1TQy1FdmVudExpc3QJT1BUSU9OQUwsCi0JLi4ufQotCi1NU0MtUy1FdmVudExpc3QgOjo9IEJJVCBTVFJJTkcgewotCW1vLW10Q2FsbCAoMCksCi0JbW8tbXQtc21zICgxKSwKLQlsdS1pbXNpQXR0YWNoLWltc2lEZXRhY2ggKDIpLAotCWhhbmRvdmVycyAoMyksCi0Jc3MgKDQpfSAoU0laRSAoNS4uMTYpKQotLS0gT3RoZXIgYml0cyB0aGFuIGxpc3RlZCBhYm92ZSBzaGFsbCBiZSBkaXNjYXJkZWQuCi0KLU1HVy1FdmVudExpc3QgOjo9IEJJVCBTVFJJTkcgewotCWNvbnRleHQgKDApfSAoU0laRSAoMS4uOCkpCi0tLSBPdGhlciBiaXRzIHRoYW4gbGlzdGVkIGFib3ZlIHNoYWxsIGJlIGRpc2NhcmRlZC4KLQotU0dTTi1FdmVudExpc3QgOjo9IEJJVCBTVFJJTkcgewotCXBkcENvbnRleHQgKDApLAotCW1vLW10LXNtcyAoMSksCi0JcmF1LWdwcnNBdHRhY2gtZ3Byc0RldGFjaCAoMiksCi0JbWJtc0NvbnRleHQgKDMpfSAoU0laRSAoNC4uMTYpKQotLS0gT3RoZXIgYml0cyB0aGFuIGxpc3RlZCBhYm92ZSBzaGFsbCBiZSBkaXNjYXJkZWQuCi0KLUdHU04tRXZlbnRMaXN0IDo6PSBCSVQgU1RSSU5HIHsKLQlwZHBDb250ZXh0ICgwKSwKLQltYm1zQ29udGV4dCAoMSl9IChTSVpFICgyLi44KSkKLS0tIE90aGVyIGJpdHMgdGhhbiBsaXN0ZWQgYWJvdmUgc2hhbGwgYmUgZGlzY2FyZGVkLgotCi1CTVNDLUV2ZW50TGlzdCA6Oj0gQklUIFNUUklORyB7Ci0JbWJtc011bHRpY2FzdFNlcnZpY2VBY3RpdmF0aW9uICgwKX0gKFNJWkUgKDEuLjgpKQotLS0gT3RoZXIgYml0cyB0aGFuIGxpc3RlZCBhYm92ZSBzaGFsbCBiZSBkaXNjYXJkZWQuCi0KLQotVHJhY2VQcm9wYWdhdGlvbkxpc3QgOjo9IFNFUVVFTkNFIHsKLQl0cmFjZVJlZmVyZW5jZQlbMF0gVHJhY2VSZWZlcmVuY2UJT1BUSU9OQUwsCi0JdHJhY2VUeXBlCQlbMV0gVHJhY2VUeXBlCU9QVElPTkFMLAotCXRyYWNlUmVmZXJlbmNlMglbMl0gVHJhY2VSZWZlcmVuY2UyCU9QVElPTkFMLAotCXRyYWNlUmVjb3JkaW5nU2Vzc2lvblJlZmVyZW5jZQlbM10gVHJhY2VSZWNvcmRpbmdTZXNzaW9uUmVmZXJlbmNlIE9QVElPTkFMLAotCXJuYy1UcmFjZURlcHRoCVs0XSBUcmFjZURlcHRoCU9QVElPTkFMLAotCXJuYy1JbnRlcmZhY2VMaXN0CVs1XSBSTkMtSW50ZXJmYWNlTGlzdAlPUFRJT05BTCwKLQltc2Mtcy1UcmFjZURlcHRoCVs2XSBUcmFjZURlcHRoCU9QVElPTkFMLAotCW1zYy1zLUludGVyZmFjZUxpc3QJWzddIE1TQy1TLUludGVyZmFjZUxpc3QJT1BUSU9OQUwsCi0JbXNjLXMtRXZlbnRMaXN0CVs4XSBNU0MtUy1FdmVudExpc3QJT1BUSU9OQUwsCi0JbWd3LVRyYWNlRGVwdGgJWzldIFRyYWNlRGVwdGgJT1BUSU9OQUwsCi0JbWd3LUludGVyZmFjZUxpc3QJWzEwXSBNR1ctSW50ZXJmYWNlTGlzdAlPUFRJT05BTCwKLQltZ3ctRXZlbnRMaXN0CVsxMV0gTUdXLUV2ZW50TGlzdAlPUFRJT05BTCwKLQkuLi59Ci0KLUFjdGl2YXRlVHJhY2VNb2RlUmVzIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCVswXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCXRyYWNlU3VwcG9ydEluZGljYXRvcglbMV0JTlVMTAkJT1BUSU9OQUwKLQl9Ci0KLURlYWN0aXZhdGVUcmFjZU1vZGVBcmcgOjo9IFNFUVVFTkNFIHsKLQlpbXNpCQkJWzBdIElNU0kJCU9QVElPTkFMLAotCXRyYWNlUmVmZXJlbmNlCVsxXSBUcmFjZVJlZmVyZW5jZSwKLQlleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4sCi0JdHJhY2VSZWZlcmVuY2UyCVszXSBUcmFjZVJlZmVyZW5jZTIJT1BUSU9OQUwKLQl9Ci0KLURlYWN0aXZhdGVUcmFjZU1vZGVSZXMgOjo9IFNFUVVFTkNFIHsKLQlleHRlbnNpb25Db250YWluZXIJWzBdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLUVORAotCmRpZmYgLS1naXQgYS9ycmxwLWVwaGVtZXJpcy9hc24xL01BUC1TTS1EYXRhVHlwZXMuYXNuIGIvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtU00tRGF0YVR5cGVzLmFzbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVmOTQxZi4uMDAwMDAwMAotLS0gYS9ycmxwLWVwaGVtZXJpcy9hc24xL01BUC1TTS1EYXRhVHlwZXMuYXNuCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLS0tICRJZDogTUFQLVNNLURhdGFUeXBlcy5hc24gMjgxNDkgMjAwOS0wNC0yNSAxNzo0NTozNFogZXR4cmFiICQKLS0tIDNHUFAgVFMgMjkuMDAyICBWOC45LjAgKDIwMDktMDQpICAKLS0tIDE3LjcuNglTaG9ydCBtZXNzYWdlIGRhdGEgdHlwZXMKLQotTUFQLVNNLURhdGFUeXBlcyB7Ci0gICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1TTS1EYXRhVHlwZXMgKDE2KSB2ZXJzaW9uMTEgKDExKX0KLQotREVGSU5JVElPTlMKLQotSU1QTElDSVQgVEFHUwotCi06Oj0KLQotQkVHSU4KLQotRVhQT1JUUwotCVJvdXRpbmdJbmZvRm9yU00tQXJnLAotCVJvdXRpbmdJbmZvRm9yU00tUmVzLAotCU1PLUZvcndhcmRTTS1BcmcsCi0JTU8tRm9yd2FyZFNNLVJlcywKLQlNVC1Gb3J3YXJkU00tQXJnLAotCU1ULUZvcndhcmRTTS1SZXMsCi0JUmVwb3J0U00tRGVsaXZlcnlTdGF0dXNBcmcsCi0JUmVwb3J0U00tRGVsaXZlcnlTdGF0dXNSZXMsCi0JQWxlcnRTZXJ2aWNlQ2VudHJlQXJnLAotCUluZm9ybVNlcnZpY2VDZW50cmVBcmcsCi0JUmVhZHlGb3JTTS1BcmcsIAotCVJlYWR5Rm9yU00tUmVzLAotCVNNLURlbGl2ZXJ5T3V0Y29tZSwKLQlBbGVydFJlYXNvbiwKLQlBZGRpdGlvbmFsLU51bWJlciwKLQlNVC1Gb3J3YXJkU00tVkdDUy1BcmcsCi0JTVQtRm9yd2FyZFNNLVZHQ1MtUmVzCi07Ci0KLUlNUE9SVFMKLQlBZGRyZXNzU3RyaW5nLAotCUlTRE4tQWRkcmVzc1N0cmluZywKLQlTaWduYWxJbmZvLAotCUlNU0ksCi0JTE1TSSwKLQlBU0NJLUNhbGxSZWZlcmVuY2UKLQotRlJPTSBNQVAtQ29tbW9uRGF0YVR5cGVzIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUNvbW1vbkRhdGFUeXBlcyAoMTgpIHZlcnNpb24xMSAoMTEpfQotCi0JQWJzZW50U3Vic2NyaWJlckRpYWdub3N0aWNTTQotRlJPTSBNQVAtRVItRGF0YVR5cGVzIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUVSLURhdGFUeXBlcyAoMTcpIHZlcnNpb24xMSAoMTEpfQotCi0JRXh0ZW5zaW9uQ29udGFpbmVyCi1GUk9NIE1BUC1FeHRlbnNpb25EYXRhVHlwZXMgewotICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKLSAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtRXh0ZW5zaW9uRGF0YVR5cGVzICgyMSkgdmVyc2lvbjExICgxMSl9Ci07Ci0KLQotUm91dGluZ0luZm9Gb3JTTS1BcmcgOjo9IFNFUVVFTkNFIHsKLQltc2lzZG4JCVswXSBJU0ROLUFkZHJlc3NTdHJpbmcsCi0Jc20tUlAtUFJJCQlbMV0gQk9PTEVBTiwKLQlzZXJ2aWNlQ2VudHJlQWRkcmVzcwlbMl0gQWRkcmVzc1N0cmluZywKLQlleHRlbnNpb25Db250YWluZXIJWzZdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4gLAotCWdwcnNTdXBwb3J0SW5kaWNhdG9yCVs3XQlOVUxMCQlPUFRJT05BTCwKLQktLSBncHJzU3VwcG9ydEluZGljYXRvciBpcyBzZXQgb25seSBpZiB0aGUgU01TLUdNU0Mgc3VwcG9ydHMKLQktLSByZWNlaXZpbmcgb2YgdHdvIG51bWJlcnMgZnJvbSB0aGUgSExSCi0Jc20tUlAtTVRJCQlbOF0gU00tUlAtTVRJCU9QVElPTkFMLAotCXNtLVJQLVNNRUEJWzldIFNNLVJQLVNNRUEJT1BUSU9OQUwsCi0Jc20tZGVsaXZlcnlOb3RJbnRlbmRlZAlbMTBdIFNNLURlbGl2ZXJ5Tm90SW50ZW5kZWQJT1BUSU9OQUwgfQotCi1TTS1EZWxpdmVyeU5vdEludGVuZGVkIDo6PSBFTlVNRVJBVEVEIHsKLQlvbmx5SU1TSS1yZXF1ZXN0ZWQgICgwKSwKLQlvbmx5TUNDLU1OQy1yZXF1ZXN0ZWQgICgxKSwKLQkuLi59Ci0KLVNNLVJQLU1USSA6Oj0gSU5URUdFUiAoMC4uMTApCi0JLS0gMCBTTVMgRGVsaXZlciAKLQktLSAxIFNNUyBTdGF0dXMgUmVwb3J0Ci0JLS0gb3RoZXIgdmFsdWVzIGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSBhbmQgc2hhbGwgYmUgZGlzY2FyZGVkIGlmCi0JLS0gcmVjZWl2ZWQKLQotU00tUlAtU01FQSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi4xMikpCi0JLS0gdGhpcyBwYXJhbWV0ZXIgY29udGFpbnMgYW4gYWRkcmVzcyBmaWVsZCB3aGljaCBpcyBlbmNvZGVkIAotCS0tIGFzIGRlZmluZWQgaW4gM0dQUCBUUyAyMy4wNDAuIEFuIGFkZHJlc3MgZmllbGQgY29udGFpbnMgMyBlbGVtZW50cyA6Ci0JLS0gCQlhZGRyZXNzLWxlbmd0aAotCS0tIAkJdHlwZS1vZi1hZGRyZXNzCi0JLS0gCQlhZGRyZXNzLXZhbHVlCi0KLVJvdXRpbmdJbmZvRm9yU00tUmVzIDo6PSBTRVFVRU5DRSB7Ci0JaW1zaQkJCUlNU0ksCi0JbG9jYXRpb25JbmZvV2l0aExNU0kJWzBdIExvY2F0aW9uSW5mb1dpdGhMTVNJLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbNF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotTG9jYXRpb25JbmZvV2l0aExNU0kgOjo9IFNFUVVFTkNFIHsKLQluZXR3b3JrTm9kZS1OdW1iZXIJWzFdIElTRE4tQWRkcmVzc1N0cmluZywKLQlsbXNpCQkJTE1TSQkJCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCWdwcnNOb2RlSW5kaWNhdG9yCVs1XQlOVUxMCQlPUFRJT05BTCwKLQktLSBncHJzTm9kZUluZGljYXRvciBpcyBzZXQgb25seSBpZiB0aGUgU0dTTiBudW1iZXIgaXMgc2VudCBhcyB0aGUgCi0JLS0gTmV0d29yayBOb2RlIE51bWJlcgotCWFkZGl0aW9uYWwtTnVtYmVyCVs2XSBBZGRpdGlvbmFsLU51bWJlcglPUFRJT05BTCAKLQktLSBOZXR3b3JrTm9kZS1udW1iZXIgY2FuIGJlIGVpdGhlciBtc2MtbnVtYmVyIG9yIHNnc24tbnVtYmVyIG9yIElQLVNNLUdXCi0JLS0gbnVtYmVyIG9yIFNNUyBSb3V0ZXIgbnVtYmVyCi0JfQotCi1BZGRpdGlvbmFsLU51bWJlciA6Oj0gQ0hPSUNFIHsKLQltc2MtTnVtYmVyCVswXSBJU0ROLUFkZHJlc3NTdHJpbmcsCi0Jc2dzbi1OdW1iZXIJWzFdIElTRE4tQWRkcmVzc1N0cmluZ30KLQktLSBhZGRpdGlvbmFsLW51bWJlciBjYW4gYmUgZWl0aGVyIG1zYy1udW1iZXIgb3Igc2dzbi1udW1iZXIKLQktLSBpZiByZWNlaXZlZCBuZXR3b3JrTm9kZS1udW1iZXIgaXMgbXNjLW51bWJlciB0aGVuIHRoZSAJCi0JLS0gYWRkaXRpb25hbCBudW1iZXIgaXMgc2dzbi1udW1iZXIgCi0JLS0gaWYgcmVjZWl2ZWQgbmV0d29ya05vZGUtbnVtYmVyIGlzIHNnc24tbnVtYmVyIHRoZW4gdGhlIAotCS0tIGFkZGl0aW9uYWwgbnVtYmVyIGlzIG1zYy1udW1iZXIgCi0KLU1PLUZvcndhcmRTTS1BcmcgOjo9IFNFUVVFTkNFIHsKLQlzbS1SUC1EQQkJU00tUlAtREEsCi0Jc20tUlAtT0EJCVNNLVJQLU9BLAotCXNtLVJQLVVJCQlTaWduYWxJbmZvLAotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uICwKLQlpbXNpCQkJSU1TSSAJCU9QVElPTkFMIH0KLQotTU8tRm9yd2FyZFNNLVJlcyA6Oj0gU0VRVUVOQ0UgewotCXNtLVJQLVVJCQlTaWduYWxJbmZvIAlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotTVQtRm9yd2FyZFNNLUFyZyA6Oj0gU0VRVUVOQ0UgewotCXNtLVJQLURBCQlTTS1SUC1EQSwKLQlzbS1SUC1PQQkJU00tUlAtT0EsCi0Jc20tUlAtVUkJCVNpZ25hbEluZm8sCi0JbW9yZU1lc3NhZ2VzVG9TZW5kCU5VTEwJCQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotTVQtRm9yd2FyZFNNLVJlcyA6Oj0gU0VRVUVOQ0UgewotCXNtLVJQLVVJCQlTaWduYWxJbmZvCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4ufQotCi1TTS1SUC1EQSA6Oj0gQ0hPSUNFIHsKLQlpbXNpCQkJWzBdIElNU0ksCi0JbG1zaQkJCVsxXSBMTVNJLAotCXNlcnZpY2VDZW50cmVBZGRyZXNzREEJWzRdIEFkZHJlc3NTdHJpbmcsCi0Jbm9TTS1SUC1EQQlbNV0gTlVMTH0KLQotU00tUlAtT0EgOjo9IENIT0lDRSB7Ci0JbXNpc2RuCQlbMl0gSVNETi1BZGRyZXNzU3RyaW5nLAotCXNlcnZpY2VDZW50cmVBZGRyZXNzT0EJWzRdIEFkZHJlc3NTdHJpbmcsCi0Jbm9TTS1SUC1PQQlbNV0gTlVMTH0KLQotUmVwb3J0U00tRGVsaXZlcnlTdGF0dXNBcmcgOjo9IFNFUVVFTkNFIHsKLQltc2lzZG4JCUlTRE4tQWRkcmVzc1N0cmluZywKLQlzZXJ2aWNlQ2VudHJlQWRkcmVzcwlBZGRyZXNzU3RyaW5nLAotCXNtLURlbGl2ZXJ5T3V0Y29tZQlTTS1EZWxpdmVyeU91dGNvbWUsCi0JYWJzZW50U3Vic2NyaWJlckRpYWdub3N0aWNTTQlbMF0gQWJzZW50U3Vic2NyaWJlckRpYWdub3N0aWNTTQotCQkJCQkJCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQlncHJzU3VwcG9ydEluZGljYXRvcglbMl0JTlVMTAkJT1BUSU9OQUwsCi0JLS0gZ3Byc1N1cHBvcnRJbmRpY2F0b3IgaXMgc2V0IG9ubHkgaWYgdGhlIFNNUy1HTVNDIHN1cHBvcnRzIAotCS0tIGhhbmRsaW5nIG9mIHR3byBkZWxpdmVyeSBvdXRjb21lcwotCWRlbGl2ZXJ5T3V0Y29tZUluZGljYXRvcglbM10gCU5VTEwJCU9QVElPTkFMLAotCS0tIERlbGl2ZXJ5T3V0Y29tZUluZGljYXRvciBpcyBzZXQgd2hlbiB0aGUgU00tRGVsaXZlcnlPdXRjb21lCi0JLS0gaXMgZm9yIEdQUlMKLQlhZGRpdGlvbmFsU00tRGVsaXZlcnlPdXRjb21lCVs0XSAJU00tRGVsaXZlcnlPdXRjb21lIAlPUFRJT05BTCwKLQktLSBJZiByZWNlaXZlZCwgYWRkaXRpb25hbFNNLURlbGl2ZXJ5T3V0Y29tZSBpcyBmb3IgR1BSUwotCS0tIElmIERlbGl2ZXJ5T3V0Y29tZUluZGljYXRvciBpcyBzZXQsIHRoZW4gQWRkaXRpb25hbFNNLURlbGl2ZXJ5T3V0Y29tZSBzaGFsbCBiZSBhYnNlbnQKLQlhZGRpdGlvbmFsQWJzZW50U3Vic2NyaWJlckRpYWdub3N0aWNTTQlbNV0gCUFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00gT1BUSU9OQUwsCi0JLS0gSWYgcmVjZWl2ZWQgYWRkaXRpb25hbEFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00gaXMgZm9yIEdQUlMKLQktLSBJZiBEZWxpdmVyeU91dGNvbWVJbmRpY2F0b3IgaXMgc2V0LCB0aGVuIEFkZGl0aW9uYWxBYnNlbnRTdWJzY3JpYmVyRGlhZ25vc3RpY1NNIAotCS0tIHNoYWxsIGJlIGFic2VudAotCWlwLXNtLWd3LUluZGljYXRvcglbNl0gCU5VTEwJCU9QVElPTkFMLAotCS0tIHRoZSBpcC1zbS1ndyBpbmRpY2F0b3IgaW5kaWNhdGVzIGJ5IGl0cyBwcmVzZW5jZSB0aGF0IHNtLWRlbGl2ZXJ5T3V0Y29tZQotCS0tIGlzIGZvciBkZWxpdmVyeSB2aWEgSU1TCi0JLS0gSWYgcHJlc2VudCwgZGVsaXZlcnlPdXRjb21lSW5kaWNhdG9yIHNoYWxsIGJlIGFic2VudC4KLQlpcC1zbS1ndy1zbS1kZWxpdmVyeU91dGNvbWUJWzddIAlTTS1EZWxpdmVyeU91dGNvbWUJT1BUSU9OQUwsIAotCS0tIElmIHJlY2VpdmVkIGlwLXNtLWd3LXNtLWRlbGl2ZXJ5T3V0Y29tZSBpcyBmb3IgZGVsaXZlcnkgdmlhIElNUwotCS0tIElmIGlwLXNtLWd3LUluZGljYXRvciBpcyBzZXQsIHRoZW4gaXAtc20tZ3ctc20tZGVsaXZlcnlPdXRjb21lIHNoYWxsIGJlIGFic2VudAotCWlwLXNtLWd3LWFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00JWzhdCUFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00JT1BUSU9OQUwKLQktLSBJZiByZWNlaXZlZCBpcC1zbS1ndy1zbS1hYnNlbnRTdWJzY3JpYmVyRGlhZ25vc3RpY1NNIGlzIGZvciBkZWxpdmVyeSB2aWEgSU1TCi0JLS0gSWYgaXAtc20tZ3ctSW5kaWNhdG9yIGlzIHNldCwgdGhlbiBpcC1zbS1ndy1zbS1hYnNlbnRTdWJzY3JpYmVyRGlhZ25vc3RpY1NNIAotCS0tIHNoYWxsIGJlIGFic2VudAotfQotCi1TTS1EZWxpdmVyeU91dGNvbWUgOjo9IEVOVU1FUkFURUQgewotCW1lbW9yeUNhcGFjaXR5RXhjZWVkZWQgICgwKSwKLQlhYnNlbnRTdWJzY3JpYmVyICAoMSksCi0Jc3VjY2Vzc2Z1bFRyYW5zZmVyICAoMil9Ci0KLVJlcG9ydFNNLURlbGl2ZXJ5U3RhdHVzUmVzIDo6PSBTRVFVRU5DRSB7Ci0Jc3RvcmVkTVNJU0ROCUlTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotQWxlcnRTZXJ2aWNlQ2VudHJlQXJnIDo6PSBTRVFVRU5DRSB7Ci0JbXNpc2RuCQlJU0ROLUFkZHJlc3NTdHJpbmcsCi0Jc2VydmljZUNlbnRyZUFkZHJlc3MJQWRkcmVzc1N0cmluZywKLQkuLi59Ci0KLUluZm9ybVNlcnZpY2VDZW50cmVBcmcgOjo9IFNFUVVFTkNFIHsKLQlzdG9yZWRNU0lTRE4JSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAotCW13LVN0YXR1cwlNVy1TdGF0dXMJT1BUSU9OQUwsCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi4gLAotCWFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00JQWJzZW50U3Vic2NyaWJlckRpYWdub3N0aWNTTQlPUFRJT05BTCwKLQlhZGRpdGlvbmFsQWJzZW50U3Vic2NyaWJlckRpYWdub3N0aWNTTQlbMF0JQWJzZW50U3Vic2NyaWJlckRpYWdub3N0aWNTTQlPUFRJT05BTCB9Ci0JLS0gYWRkaXRpb25hbEFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00gbWF5IGJlIHByZXNlbnQgb25seSBpZiAKLQktLSBhYnNlbnRTdWJzY3JpYmVyRGlhZ25vc3RpY1NNIGlzIHByZXNlbnQuCi0JLS0gaWYgaW5jbHVkZWQsIGFkZGl0aW9uYWxBYnNlbnRTdWJzY3JpYmVyRGlhZ25vc3RpY1NNIGlzIGZvciBHUFJTIGFuZAotCS0tIGFic2VudFN1YnNjcmliZXJEaWFnbm9zdGljU00gaXMgZm9yIG5vbi1HUFJTCi0KLU1XLVN0YXR1cyA6Oj0gQklUIFNUUklORyB7Ci0Jc2MtQWRkcmVzc05vdEluY2x1ZGVkICAoMCksCi0JbW5yZi1TZXQgICgxKSwKLQltY2VmLVNldCAgKDIpICwKLQltbnJnLVNldAkgICgzKX0gKFNJWkUgKDYuLjE2KSkKLQktLSBleGNlcHRpb24gaGFuZGxpbmc6Ci0JLS0gYml0cyA0IHRvIDE1IHNoYWxsIGJlIGlnbm9yZWQgaWYgcmVjZWl2ZWQgYW5kIG5vdCB1bmRlcnN0b29kCi0KLVJlYWR5Rm9yU00tQXJnIDo6PSBTRVFVRU5DRSB7Ci0JaW1zaQkJCVswXSBJTVNJLAotCWFsZXJ0UmVhc29uCUFsZXJ0UmVhc29uLAotCWFsZXJ0UmVhc29uSW5kaWNhdG9yCU5VTEwJCQlPUFRJT05BTCwKLQktLSBhbGVydFJlYXNvbkluZGljYXRvciBpcyBzZXQgb25seSB3aGVuIHRoZSBhbGVydFJlYXNvbiAKLQktLSBzZW50IHRvIEhMUiBpcyBmb3IgR1BSUwotCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCi0JLi4uLAotCWFkZGl0aW9uYWxBbGVydFJlYXNvbkluZGljYXRvcglbMV0gTlVMTAkJT1BUSU9OQUwKLQktLSBhZGRpdGlvbmFsQWxlcnRSZWFzb25JbmRpY2F0b3IgaXMgc2V0IG9ubHkgd2hlbiB0aGUgYWxlcnRSZWFzb24KLQktLSBzZW50IHRvIEhMUiBpcyBmb3IgSVAtU00tR1cKLQl9Ci0KLVJlYWR5Rm9yU00tUmVzIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLUFsZXJ0UmVhc29uIDo6PSBFTlVNRVJBVEVEIHsKLQltcy1QcmVzZW50ICAoMCksCi0JbWVtb3J5QXZhaWxhYmxlICAoMSl9Ci0KLU1ULUZvcndhcmRTTS1WR0NTLUFyZyA6Oj0gU0VRVUVOQ0UgewotCWFzY2lDYWxsUmVmZXJlbmNlCUFTQ0ktQ2FsbFJlZmVyZW5jZSwKLQlzbS1SUC1PQQkJU00tUlAtT0EsCi0Jc20tUlAtVUkJCVNpZ25hbEluZm8sCi0JZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKLQkuLi59Ci0KLU1ULUZvcndhcmRTTS1WR0NTLVJlcyA6Oj0gU0VRVUVOQ0UgewotCXNtLVJQLVVJCQlbMF0gU2lnbmFsSW5mbwlPUFRJT05BTCwKLQlkaXNwYXRjaGVyTGlzdAlbMV0gRGlzcGF0Y2hlckxpc3QJT1BUSU9OQUwsCi0Jb25nb2luZ0NhbGwJTlVMTAkJCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLn0KLQotRGlzcGF0Y2hlckxpc3QgOjo9IAotCVNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mRGlzcGF0Y2hlcnMpIE9GCi0JCQkJSVNETi1BZGRyZXNzU3RyaW5nCi0KLW1heE51bU9mRGlzcGF0Y2hlcnMgIElOVEVHRVIgOjo9IDUKLQotCi0KLUVORAotCmRpZmYgLS1naXQgYS9ycmxwLWVwaGVtZXJpcy9hc24xL01BUC1TUy1Db2RlLmFzbiBiL3JybHAtZXBoZW1lcmlzL2FzbjEvTUFQLVNTLUNvZGUuYXNuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjNmMmRjLi4wMDAwMDAwCi0tLSBhL3JybHAtZXBoZW1lcmlzL2FzbjEvTUFQLVNTLUNvZGUuYXNuCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS0tICRJZDogTUFQLVNTLUNvZGUuYXNuIDI4MTQ5IDIwMDktMDQtMjUgMTc6NDU6MzRaIGV0eHJhYiAkCi0tLSAzR1BQIFRTIDI5LjAwMiBWOC45LjAgKDIwMDktMDQpCi0tLSAxNy43LjUJU3VwcGxlbWVudGFyeSBzZXJ2aWNlIGNvZGVzCi0KLU1BUC1TUy1Db2RlIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLVNTLUNvZGUgKDE1KSB2ZXJzaW9uMTEgKDExKX0KLQotREVGSU5JVElPTlMKLQotOjo9Ci0KLUJFR0lOCi0KLVNTLUNvZGUgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCi0JLS0gVGhpcyB0eXBlIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjb2RlIGlkZW50aWZ5aW5nIGEgc2luZ2xlCi0JLS0gc3VwcGxlbWVudGFyeSBzZXJ2aWNlLCBhIGdyb3VwIG9mIHN1cHBsZW1lbnRhcnkgc2VydmljZXMsIG9yCi0JLS0gYWxsIHN1cHBsZW1lbnRhcnkgc2VydmljZXMuIFRoZSBzZXJ2aWNlcyBhbmQgYWJicmV2aWF0aW9ucwotCS0tIHVzZWQgYXJlIGRlZmluZWQgaW4gVFMgM0dQUCBUUyAyMi4wMDQgWzVdLiBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzCi0JLS0gZGVmaW5lZCBhcyBmb2xsb3dzOgotCS0tCi0JLS0gYml0cyA4NzY1NDMyMTogZ3JvdXAgKGJpdHMgODc2NSksIGFuZCBzcGVjaWZpYyBzZXJ2aWNlCi0JLS0gKGJpdHMgNDMyMSkKLQotYWxsU1MJCQlTUy1Db2RlIDo6PSAnMDAwMDAwMDAnQgotCS0tIHJlc2VydmVkIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlCi0JLS0gYWxsIFNTCi0KLWFsbExpbmVJZGVudGlmaWNhdGlvblNTCVNTLUNvZGUgOjo9ICcwMDAxMDAwMCdCCi0JLS0gcmVzZXJ2ZWQgZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UKLQktLSBhbGwgbGluZSBpZGVudGlmaWNhdGlvbiBTUwotY2xpcAkJCQlTUy1Db2RlIDo6PSAnMDAwMTAwMDEnQgotCS0tIGNhbGxpbmcgbGluZSBpZGVudGlmaWNhdGlvbiBwcmVzZW50YXRpb24KLWNsaXIJCQkJU1MtQ29kZSA6Oj0gJzAwMDEwMDEwJ0IKLQktLSBjYWxsaW5nIGxpbmUgaWRlbnRpZmljYXRpb24gcmVzdHJpY3Rpb24KLWNvbHAJCQkJU1MtQ29kZSA6Oj0gJzAwMDEwMDExJ0IKLQktLSBjb25uZWN0ZWQgbGluZSBpZGVudGlmaWNhdGlvbiBwcmVzZW50YXRpb24KLWNvbHIJCQkJU1MtQ29kZSA6Oj0gJzAwMDEwMTAwJ0IKLQktLSBjb25uZWN0ZWQgbGluZSBpZGVudGlmaWNhdGlvbiByZXN0cmljdGlvbgotbWNpCQkJCVNTLUNvZGUgOjo9ICcwMDAxMDEwMSdCCi0JLS0gcmVzZXJ2ZWQgZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UKLQktLSBtYWxpY2lvdXMgY2FsbCBpZGVudGlmaWNhdGlvbgotCi1hbGxOYW1lSWRlbnRpZmljYXRpb25TUwlTUy1Db2RlIDo6PSAnMDAwMTEwMDAnQgotCS0tIGFsbCBuYW1lIGlkZW50aWZpY2F0aW9uIFNTCi1jbmFwCQkJCVNTLUNvZGUgOjo9ICcwMDAxMTAwMSdCCi0JLS0gY2FsbGluZyBuYW1lIHByZXNlbnRhdGlvbgotCi0JLS0gU1MtQ29kZXMgJzAwMDExMDEwJ0IgdG8gJzAwMDExMTExJ0IgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgCi0JLS0gTmFtZUlkZW50aWZpY2F0aW9uIFN1cHBsZW1lbnRhcnkgU2VydmljZSB1c2UuCi0KLWFsbEZvcndhcmRpbmdTUwlTUy1Db2RlIDo6PSAnMDAxMDAwMDAnQgotCS0tIGFsbCBmb3J3YXJkaW5nIFNTCi1jZnUJCQkJU1MtQ29kZSA6Oj0gJzAwMTAwMDAxJ0IKLQktLSBjYWxsIGZvcndhcmRpbmcgdW5jb25kaXRpb25hbAotYWxsQ29uZEZvcndhcmRpbmdTUwlTUy1Db2RlIDo6PSAnMDAxMDEwMDAnQgotCS0tIGFsbCBjb25kaXRpb25hbCBmb3J3YXJkaW5nIFNTCi1jZmIJCQkJU1MtQ29kZSA6Oj0gJzAwMTAxMDAxJ0IKLQktLSBjYWxsIGZvcndhcmRpbmcgb24gbW9iaWxlIHN1YnNjcmliZXIgYnVzeQotY2ZucnkJCQlTUy1Db2RlIDo6PSAnMDAxMDEwMTAnQgotCS0tIGNhbGwgZm9yd2FyZGluZyBvbiBubyByZXBseQotY2ZucmMJCQlTUy1Db2RlIDo6PSAnMDAxMDEwMTEnQgotCS0tIGNhbGwgZm9yd2FyZGluZyBvbiBtb2JpbGUgc3Vic2NyaWJlciBub3QgcmVhY2hhYmxlIAotY2QJCQkJU1MtQ29kZSA6Oj0gJzAwMTAwMTAwJ0IKLQktLSBjYWxsIGRlZmxlY3Rpb24KLQotYWxsQ2FsbE9mZmVyaW5nU1MJU1MtQ29kZSA6Oj0gJzAwMTEwMDAwJ0IKLQktLSByZXNlcnZlZCBmb3IgcG9zc2libGUgZnV0dXJlIHVzZQotCS0tIGFsbCBjYWxsIG9mZmVyaW5nIFNTIGluY2x1ZGVzIGFsc28gYWxsIGZvcndhcmRpbmcgU1MKLWVjdAkJCQlTUy1Db2RlIDo6PSAnMDAxMTAwMDEnQgotCQktLSBleHBsaWNpdCBjYWxsIHRyYW5zZmVyCi1tYWgJCQkJU1MtQ29kZSA6Oj0gJzAwMTEwMDEwJ0IKLQktLSByZXNlcnZlZCBmb3IgcG9zc2libGUgZnV0dXJlIHVzZQotCS0tIG1vYmlsZSBhY2Nlc3MgaHVudGluZwotCi1hbGxDYWxsQ29tcGxldGlvblNTCVNTLUNvZGUgOjo9ICcwMTAwMDAwMCdCCi0JLS0gcmVzZXJ2ZWQgZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UKLQktLSBhbGwgQ2FsbCBjb21wbGV0aW9uIFNTCi1jdwkJCQlTUy1Db2RlIDo6PSAnMDEwMDAwMDEnQgotCS0tIGNhbGwgd2FpdGluZwotaG9sZAkJCQlTUy1Db2RlIDo6PSAnMDEwMDAwMTAnQgotCS0tIGNhbGwgaG9sZAotY2Nicy1BCQkJU1MtQ29kZSA6Oj0gJzAxMDAwMDExJ0IKLQktLSBjb21wbGV0aW9uIG9mIGNhbGwgdG8gYnVzeSBzdWJzY3JpYmVycywgb3JpZ2luYXRpbmcgc2lkZQotCS0tIHRoaXMgU1MtQ29kZSBpcyB1c2VkIG9ubHkgaW4gSW5zZXJ0U3Vic2NyaWJlckRhdGEsIERlbGV0ZVN1YnNjcmliZXJEYXRhIAotCS0tIGFuZCBJbnRlcnJvZ2F0ZVNTCi1jY2JzLUIJCQlTUy1Db2RlIDo6PSAnMDEwMDAxMDAnQgotCS0tIGNvbXBsZXRpb24gb2YgY2FsbCB0byBidXN5IHN1YnNjcmliZXJzLCBkZXN0aW5hdGlvbiBzaWRlCi0JLS0gdGhpcyBTUy1Db2RlIGlzIHVzZWQgb25seSBpbiBJbnNlcnRTdWJzY3JpYmVyRGF0YSBhbmQgRGVsZXRlU3Vic2NyaWJlckRhdGEKLW1jCQkJCVNTLUNvZGUgOjo9ICcwMTAwMDEwMSdCCi0JLS0gbXVsdGljYWxsCi0KLWFsbE11bHRpUGFydHlTUwlTUy1Db2RlIDo6PSAnMDEwMTAwMDAnQgotCS0tIHJlc2VydmVkIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlCi0JLS0gYWxsIG11bHRpcGFydHkgU1MKLW11bHRpUFRZCQkJU1MtQ29kZSA6Oj0gJzAxMDEwMDAxJ0IKLQktLSBtdWx0aXBhcnR5Ci0KLWFsbENvbW11bml0eU9mSW50ZXJlc3QtU1MJU1MtQ29kZSA6Oj0gJzAxMTAwMDAwJ0IKLQktLSByZXNlcnZlZCBmb3IgcG9zc2libGUgZnV0dXJlIHVzZQotCS0tIGFsbCBjb21tdW5pdHkgb2YgaW50ZXJlc3QgU1MKLWN1ZwkJCQlTUy1Db2RlIDo6PSAnMDExMDAwMDEnQgotCS0tIGNsb3NlZCB1c2VyIGdyb3VwCi0KLWFsbENoYXJnaW5nU1MJCVNTLUNvZGUgOjo9ICcwMTExMDAwMCdCCi0JLS0gcmVzZXJ2ZWQgZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UKLQktLSBhbGwgY2hhcmdpbmcgU1MKLWFvY2kJCQkJU1MtQ29kZSA6Oj0gJzAxMTEwMDAxJ0IKLQktLSBhZHZpY2Ugb2YgY2hhcmdlIGluZm9ybWF0aW9uCi1hb2NjCQkJCVNTLUNvZGUgOjo9ICcwMTExMDAxMCdCCi0JLS0gYWR2aWNlIG9mIGNoYXJnZSBjaGFyZ2luZwotCi1hbGxBZGRpdGlvbmFsSW5mb1RyYW5zZmVyU1MJU1MtQ29kZSA6Oj0gJzEwMDAwMDAwJ0IKLQktLSByZXNlcnZlZCBmb3IgcG9zc2libGUgZnV0dXJlIHVzZQotCS0tIGFsbCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRyYW5zZmVyIFNTCi11dXMxCQkJCVNTLUNvZGUgOjo9ICcxMDAwMDAwMSdCCi0JLS0gVVVTMSB1c2VyLXRvLXVzZXIgc2lnbmFsbGluZyAKLXV1czIJCQkJU1MtQ29kZSA6Oj0gJzEwMDAwMDEwJ0IKLQktLSBVVVMyIHVzZXItdG8tdXNlciBzaWduYWxsaW5nCi11dXMzCQkJCVNTLUNvZGUgOjo9ICcxMDAwMDAxMSdCCi0JLS0gVVVTMyB1c2VyLXRvLXVzZXIgc2lnbmFsbGluZwotCi1hbGxCYXJyaW5nU1MJCVNTLUNvZGUgOjo9ICcxMDAxMDAwMCdCCi0JLS0gYWxsIGJhcnJpbmcgU1MKLWJhcnJpbmdPZk91dGdvaW5nQ2FsbHMJU1MtQ29kZSA6Oj0gJzEwMDEwMDAxJ0IKLQktLSBiYXJyaW5nIG9mIG91dGdvaW5nIGNhbGxzCi1iYW9jCQkJCVNTLUNvZGUgOjo9ICcxMDAxMDAxMCdCCi0JLS0gYmFycmluZyBvZiBhbGwgb3V0Z29pbmcgY2FsbHMKLWJvaWMJCQkJU1MtQ29kZSA6Oj0gJzEwMDEwMDExJ0IKLQktLSBiYXJyaW5nIG9mIG91dGdvaW5nIGludGVybmF0aW9uYWwgY2FsbHMKLWJvaWNFeEhDCQkJU1MtQ29kZSA6Oj0gJzEwMDEwMTAwJ0IKLQktLSBiYXJyaW5nIG9mIG91dGdvaW5nIGludGVybmF0aW9uYWwgY2FsbHMgZXhjZXB0IHRob3NlIGRpcmVjdGVkCi0JLS0gdG8gdGhlIGhvbWUgUExNTiBDb3VudHJ5Ci1iYXJyaW5nT2ZJbmNvbWluZ0NhbGxzCVNTLUNvZGUgOjo9ICcxMDAxMTAwMSdCCi0JLS0gYmFycmluZyBvZiBpbmNvbWluZyBjYWxscwotYmFpYwkJCQlTUy1Db2RlIDo6PSAnMTAwMTEwMTAnQgotCS0tIGJhcnJpbmcgb2YgYWxsIGluY29taW5nIGNhbGxzCi1iaWNSb2FtCQkJU1MtQ29kZSA6Oj0gJzEwMDExMDExJ0IKLQktLSBiYXJyaW5nIG9mIGluY29taW5nIGNhbGxzIHdoZW4gcm9hbWluZyBvdXRzaWRlIGhvbWUgUExNTgotCS0tIENvdW50cnkKLQotYWxsUExNTi1zcGVjaWZpY1NTCVNTLUNvZGUgOjo9ICcxMTExMDAwMCdCCi1wbG1uLXNwZWNpZmljU1MtMQlTUy1Db2RlIDo6PSAnMTExMTAwMDEnQgotcGxtbi1zcGVjaWZpY1NTLTIJU1MtQ29kZSA6Oj0gJzExMTEwMDEwJ0IKLXBsbW4tc3BlY2lmaWNTUy0zCVNTLUNvZGUgOjo9ICcxMTExMDAxMSdCCi1wbG1uLXNwZWNpZmljU1MtNAlTUy1Db2RlIDo6PSAnMTExMTAxMDAnQgotcGxtbi1zcGVjaWZpY1NTLTUJU1MtQ29kZSA6Oj0gJzExMTEwMTAxJ0IKLXBsbW4tc3BlY2lmaWNTUy02CVNTLUNvZGUgOjo9ICcxMTExMDExMCdCCi1wbG1uLXNwZWNpZmljU1MtNwlTUy1Db2RlIDo6PSAnMTExMTAxMTEnQgotcGxtbi1zcGVjaWZpY1NTLTgJU1MtQ29kZSA6Oj0gJzExMTExMDAwJ0IKLXBsbW4tc3BlY2lmaWNTUy05CVNTLUNvZGUgOjo9ICcxMTExMTAwMSdCCi1wbG1uLXNwZWNpZmljU1MtQQlTUy1Db2RlIDo6PSAnMTExMTEwMTAnQgotcGxtbi1zcGVjaWZpY1NTLUIJU1MtQ29kZSA6Oj0gJzExMTExMDExJ0IKLXBsbW4tc3BlY2lmaWNTUy1DCVNTLUNvZGUgOjo9ICcxMTExMTEwMCdCCi1wbG1uLXNwZWNpZmljU1MtRAlTUy1Db2RlIDo6PSAnMTExMTExMDEnQgotcGxtbi1zcGVjaWZpY1NTLUUJU1MtQ29kZSA6Oj0gJzExMTExMTEwJ0IKLXBsbW4tc3BlY2lmaWNTUy1GCVNTLUNvZGUgOjo9ICcxMTExMTExMSdCCi0KLWFsbENhbGxQcmlvcml0eVNTCVNTLUNvZGUgOjo9ICcxMDEwMDAwMCdCCi0JLS0gcmVzZXJ2ZWQgZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UKLQktLSBhbGwgY2FsbCBwcmlvcml0eSBTUwotZW1scHAJCQlTUy1Db2RlIDo6PSAnMTAxMDAwMDEnQgotCS0tIGVuaGFuY2VkIE11bHRpbGV2ZWwgUHJlY2VkZW5jZSBQcmUtZW1wdGlvbiAoRU1MUFApIHNlcnZpY2UKLQotYWxsTENTUHJpdmFjeUV4Y2VwdGlvbglTUy1Db2RlIDo6PSAnMTAxMTAwMDAnQgotCS0tIGFsbCBMQ1MgUHJpdmFjeSBFeGNlcHRpb24gQ2xhc3NlcwotdW5pdmVyc2FsCQkJU1MtQ29kZSA6Oj0gJzEwMTEwMDAxJ0IKLQktLSBhbGxvdyBsb2NhdGlvbiBieSBhbnkgTENTIGNsaWVudAotY2FsbFNlc3Npb25SZWxhdGVkCVNTLUNvZGUgOjo9ICcxMDExMDAxMCdCCi0JLS0gYWxsb3cgbG9jYXRpb24gYnkgYW55IHZhbHVlIGFkZGVkIExDUyBjbGllbnQgdG8gd2hpY2ggYSBjYWxsL3Nlc3Npb24gCi0JLS0gaXMgZXN0YWJsaXNoZWQgZnJvbSB0aGUgdGFyZ2V0IE1TCi1jYWxsU2Vzc2lvblVucmVsYXRlZAlTUy1Db2RlIDo6PSAnMTAxMTAwMTEnQgotCS0tIGFsbG93IGxvY2F0aW9uIGJ5IGRlc2lnbmF0ZWQgZXh0ZXJuYWwgdmFsdWUgYWRkZWQgTENTIGNsaWVudHMKLXBsbW5vcGVyYXRvcgkJU1MtQ29kZSA6Oj0gJzEwMTEwMTAwJ0IKLQktLSBhbGxvdyBsb2NhdGlvbiBieSBkZXNpZ25hdGVkIFBMTU4gb3BlcmF0b3IgTENTIGNsaWVudHMgCi1zZXJ2aWNlVHlwZQkJU1MtQ29kZSA6Oj0gJzEwMTEwMTAxJ0IKLQktLSBhbGxvdyBsb2NhdGlvbiBieSBMQ1MgY2xpZW50cyBvZiBhIGRlc2lnbmF0ZWQgTENTIHNlcnZpY2UgdHlwZQotCi1hbGxNT0xSLVNTCQlTUy1Db2RlIDo6PSAnMTEwMDAwMDAnQgotCS0tIGFsbCBNb2JpbGUgT3JpZ2luYXRpbmcgTG9jYXRpb24gUmVxdWVzdCBDbGFzc2VzCi1iYXNpY1NlbGZMb2NhdGlvbglTUy1Db2RlIDo6PSAnMTEwMDAwMDEnQgotCS0tIGFsbG93IGFuIE1TIHRvIHJlcXVlc3QgaXRzIG93biBsb2NhdGlvbgotYXV0b25vbW91c1NlbGZMb2NhdGlvbglTUy1Db2RlIDo6PSAnMTEwMDAwMTAnQgotCS0tIGFsbG93IGFuIE1TIHRvIHBlcmZvcm0gc2VsZiBsb2NhdGlvbiB3aXRob3V0IGludGVyYWN0aW9uCi0JLS0gd2l0aCB0aGUgUExNTiBmb3IgYSBwcmVkZXRlcm1pbmVkIHBlcmlvZCBvZiB0aW1lCi10cmFuc2ZlclRvVGhpcmRQYXJ0eQlTUy1Db2RlIDo6PSAnMTEwMDAwMTEnQgotCS0tIGFsbG93IGFuIE1TIHRvIHJlcXVlc3QgdHJhbnNmZXIgb2YgaXRzIGxvY2F0aW9uIHRvIGFub3RoZXIgTENTIGNsaWVudAotCi1FTkQKLQpkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtU1MtRGF0YVR5cGVzLmFzbiBiL3JybHAtZXBoZW1lcmlzL2FzbjEvTUFQLVNTLURhdGFUeXBlcy5hc24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1M2Y3ZjAuLjAwMDAwMDAKLS0tIGEvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtU1MtRGF0YVR5cGVzLmFzbgorKysgL2Rldi9udWxsCkBAIC0xLDM0MiArMCwwIEBACi0tLSAkSWQ6IE1BUC1TUy1EYXRhVHlwZXMuYXNuIDI4MTQ5IDIwMDktMDQtMjUgMTc6NDU6MzRaIGV0eHJhYiAkCi0tLSAzR1BQIFRTIDI5LjAwMiBWOC45LjAgKDIwMDktMDQpICAKLS0tIDE3LjcuNAlTdXBwbGVtZW50YXJ5IHNlcnZpY2UgZGF0YSB0eXBlcwotIAotTUFQLVNTLURhdGFUeXBlcyB7Ci0gICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1TUy1EYXRhVHlwZXMgKDE0KSB2ZXJzaW9uMTEgKDExKX0KLQotREVGSU5JVElPTlMKLQotSU1QTElDSVQgVEFHUwotCi06Oj0KLQotQkVHSU4KLQotRVhQT1JUUwotCVJlZ2lzdGVyU1MtQXJnLAotCVNTLUluZm8sCi0JU1MtU3RhdHVzLAotCVNTLVN1YnNjcmlwdGlvbk9wdGlvbiwKLQlTUy1Gb3JCUy1Db2RlLAotCUludGVycm9nYXRlU1MtUmVzLAotCVVTU0QtQXJnLAotCVVTU0QtUmVzLCAKLQlVU1NELURhdGFDb2RpbmdTY2hlbWUsCi0JVVNTRC1TdHJpbmcsCi0JUGFzc3dvcmQsCi0JR3VpZGFuY2VJbmZvLAotCVNTLUxpc3QsCi0JU1MtSW5mb0xpc3QsCi0JT3ZlcnJpZGVDYXRlZ29yeSwKLQlDbGlSZXN0cmljdGlvbk9wdGlvbiwKLQlOb1JlcGx5Q29uZGl0aW9uVGltZSwKLQlGb3J3YXJkaW5nT3B0aW9ucywKLQltYXhOdW1PZlNTLAotCVNTLURhdGEsCi0JU1MtSW52b2NhdGlvbk5vdGlmaWNhdGlvbkFyZywKLQlTUy1JbnZvY2F0aW9uTm90aWZpY2F0aW9uUmVzLAotCUNDQlMtRmVhdHVyZSwKLQlSZWdpc3RlckNDLUVudHJ5QXJnLAotCVJlZ2lzdGVyQ0MtRW50cnlSZXMsCi0JRXJhc2VDQy1FbnRyeUFyZywKLQlFcmFzZUNDLUVudHJ5UmVzCi07Ci0KLUlNUE9SVFMKLQlBZGRyZXNzU3RyaW5nLAotCUlTRE4tQWRkcmVzc1N0cmluZywKLQlJU0ROLVN1YmFkZHJlc3NTdHJpbmcsCi0JRlROLUFkZHJlc3NTdHJpbmcsCi0JSU1TSSwKLQlCYXNpY1NlcnZpY2VDb2RlLAotCUFsZXJ0aW5nUGF0dGVybiwKLQlFTUxQUC1Qcmlvcml0eSwgCi0JTWF4TUMtQmVhcmVycywKLQlNQy1CZWFyZXJzLAotCUV4dGVybmFsU2lnbmFsSW5mbwotRlJPTSBNQVAtQ29tbW9uRGF0YVR5cGVzIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUNvbW1vbkRhdGFUeXBlcyAoMTgpIHZlcnNpb24xMSAoMTEpfQotCi0JRXh0ZW5zaW9uQ29udGFpbmVyCi1GUk9NIE1BUC1FeHRlbnNpb25EYXRhVHlwZXMgewotICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKLSAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtRXh0ZW5zaW9uRGF0YVR5cGVzICgyMSkgdmVyc2lvbjExICgxMSl9Ci0KLQlTUy1Db2RlCi1GUk9NIE1BUC1TUy1Db2RlIHsKLSAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0gICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLVNTLUNvZGUgKDE1KSB2ZXJzaW9uMTEgKDExKX0KLTsKLQotCi1SZWdpc3RlclNTLUFyZyA6Oj0gU0VRVUVOQ0UgewotCXNzLUNvZGUJCVNTLUNvZGUsCi0JYmFzaWNTZXJ2aWNlCUJhc2ljU2VydmljZUNvZGUJT1BUSU9OQUwsCi0JZm9yd2FyZGVkVG9OdW1iZXIJWzRdIEFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCi0JZm9yd2FyZGVkVG9TdWJhZGRyZXNzCVs2XSBJU0ROLVN1YmFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCi0Jbm9SZXBseUNvbmRpdGlvblRpbWUJWzVdIE5vUmVwbHlDb25kaXRpb25UaW1lCU9QVElPTkFMLAotCS4uLiwKLQlkZWZhdWx0UHJpb3JpdHkJWzddIEVNTFBQLVByaW9yaXR5CU9QVElPTkFMLAotCW5iclVzZXIJCVs4XSBNQy1CZWFyZXJzCU9QVElPTkFMLAotCWxvbmdGVE4tU3VwcG9ydGVkCVs5XQlOVUxMCQlPUFRJT05BTCB9Ci0KLU5vUmVwbHlDb25kaXRpb25UaW1lIDo6PSBJTlRFR0VSICg1Li4zMCkKLQotU1MtSW5mbyA6Oj0gQ0hPSUNFIHsKLQlmb3J3YXJkaW5nSW5mbwlbMF0gRm9yd2FyZGluZ0luZm8sCi0JY2FsbEJhcnJpbmdJbmZvCVsxXSBDYWxsQmFycmluZ0luZm8sCi0Jc3MtRGF0YQkJWzNdIFNTLURhdGF9Ci0KLUZvcndhcmRpbmdJbmZvIDo6PSBTRVFVRU5DRSB7Ci0Jc3MtQ29kZQkJU1MtQ29kZQkJT1BUSU9OQUwsCi0JZm9yd2FyZGluZ0ZlYXR1cmVMaXN0CUZvcndhcmRpbmdGZWF0dXJlTGlzdCwKLQkuLi59Ci0KLUZvcndhcmRpbmdGZWF0dXJlTGlzdCA6Oj0gCi0JU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZCYXNpY1NlcnZpY2VHcm91cHMpIE9GCi0JCQkJRm9yd2FyZGluZ0ZlYXR1cmUKLQotRm9yd2FyZGluZ0ZlYXR1cmUgOjo9IFNFUVVFTkNFIHsKLQliYXNpY1NlcnZpY2UJQmFzaWNTZXJ2aWNlQ29kZQlPUFRJT05BTCwKLQlzcy1TdGF0dXMJCVs0XSBTUy1TdGF0dXMJT1BUSU9OQUwsCi0JZm9yd2FyZGVkVG9OdW1iZXIJWzVdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKLQlmb3J3YXJkZWRUb1N1YmFkZHJlc3MJWzhdIElTRE4tU3ViYWRkcmVzc1N0cmluZwlPUFRJT05BTCwKLQlmb3J3YXJkaW5nT3B0aW9ucwlbNl0gRm9yd2FyZGluZ09wdGlvbnMJT1BUSU9OQUwsCi0Jbm9SZXBseUNvbmRpdGlvblRpbWUJWzddIE5vUmVwbHlDb25kaXRpb25UaW1lCU9QVElPTkFMLAotCS4uLiwKLQlsb25nRm9yd2FyZGVkVG9OdW1iZXIJWzldIEZUTi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMIH0KLQotU1MtU3RhdHVzIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQotCi0JLS0gYml0cyA4NzY1OiAwMDAwICh1bnVzZWQpCi0JLS0gYml0cyA0MzIxOiBVc2VkIHRvIGNvbnZleSB0aGUgIlAgYml0IiwiUiBiaXQiLCJBIGJpdCIgYW5kICJRIGJpdCIsCi0JLS0JCSAgICByZXByZXNlbnRpbmcgc3VwcGxlbWVudGFyeSBzZXJ2aWNlIHN0YXRlIGluZm9ybWF0aW9uCi0JLS0JCSAgICBhcyBkZWZpbmVkIGluIFRTIDNHUFAgVFMgMjMuMDExIFsyMl0KLQotCS0tIGJpdCA0OiAiUSBiaXQiCi0KLQktLSBiaXQgMzogIlAgYml0IgotCi0JLS0gYml0IDI6ICJSIGJpdCIKLQotCS0tIGJpdCAxOiAiQSBiaXQiCi0KLUZvcndhcmRpbmdPcHRpb25zIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQotCi0JLS0gYml0IDg6IG5vdGlmaWNhdGlvbiB0byBmb3J3YXJkaW5nIHBhcnR5Ci0JLS0JMCAgbm8gbm90aWZpY2F0aW9uCi0JLS0JMSAgbm90aWZpY2F0aW9uCi0KLQktLSBiaXQgNzogcmVkaXJlY3RpbmcgcHJlc2VudGF0aW9uCi0JLS0JMCBubyBwcmVzZW50YXRpb24gIAotCS0tCTEgIHByZXNlbnRhdGlvbgotCi0JLS0gYml0IDY6IG5vdGlmaWNhdGlvbiB0byBjYWxsaW5nIHBhcnR5Ci0JLS0JMCAgbm8gbm90aWZpY2F0aW9uCi0JLS0JMSAgbm90aWZpY2F0aW9uCi0KLQktLSBiaXQgNTogMCAodW51c2VkKQotCi0JLS0gYml0cyA0MzogZm9yd2FyZGluZyByZWFzb24KLQktLQkwMCAgbXMgbm90IHJlYWNoYWJsZQotCS0tCTAxICBtcyBidXN5Ci0JLS0JMTAgIG5vIHJlcGx5Ci0JLS0JMTEgIHVuY29uZGl0aW9uYWwgd2hlbiB1c2VkIGluIGEgU1JJIFJlc3VsdCwgCi0JLS0JICAgIG9yIGNhbGwgZGVmbGVjdGlvbiB3aGVuIHVzZWQgaW4gYSBSQ0ggQXJndW1lbnQKLQktLSBiaXRzIDIxOiAwMCAodW51c2VkKQotCi1DYWxsQmFycmluZ0luZm8gOjo9IFNFUVVFTkNFIHsKLQlzcy1Db2RlCQlTUy1Db2RlCQlPUFRJT05BTCwKLQljYWxsQmFycmluZ0ZlYXR1cmVMaXN0CUNhbGxCYXJyaW5nRmVhdHVyZUxpc3QsCi0JLi4ufQotCi1DYWxsQmFycmluZ0ZlYXR1cmVMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkJhc2ljU2VydmljZUdyb3VwcykgT0YKLQkJCQlDYWxsQmFycmluZ0ZlYXR1cmUKLQotQ2FsbEJhcnJpbmdGZWF0dXJlIDo6PSBTRVFVRU5DRSB7Ci0JYmFzaWNTZXJ2aWNlCUJhc2ljU2VydmljZUNvZGUJT1BUSU9OQUwsCi0Jc3MtU3RhdHVzCVs0XSBTUy1TdGF0dXMJT1BUSU9OQUwsCi0JLi4ufQotCi1TUy1EYXRhIDo6PSBTRVFVRU5DRSB7Ci0Jc3MtQ29kZQkJU1MtQ29kZQkJT1BUSU9OQUwsCi0Jc3MtU3RhdHVzCQlbNF0gU1MtU3RhdHVzCU9QVElPTkFMLAotCXNzLVN1YnNjcmlwdGlvbk9wdGlvbglTUy1TdWJzY3JpcHRpb25PcHRpb24JT1BUSU9OQUwsCi0JYmFzaWNTZXJ2aWNlR3JvdXBMaXN0CUJhc2ljU2VydmljZUdyb3VwTGlzdAlPUFRJT05BTCwKLQkuLi4sCi0JZGVmYXVsdFByaW9yaXR5CUVNTFBQLVByaW9yaXR5CU9QVElPTkFMLAotCW5iclVzZXIJCVs1XSBNQy1CZWFyZXJzCU9QVElPTkFMCi0JfQotCi1TUy1TdWJzY3JpcHRpb25PcHRpb24gOjo9IENIT0lDRSB7Ci0JY2xpUmVzdHJpY3Rpb25PcHRpb24JWzJdIENsaVJlc3RyaWN0aW9uT3B0aW9uLAotCW92ZXJyaWRlQ2F0ZWdvcnkJWzFdIE92ZXJyaWRlQ2F0ZWdvcnl9Ci0KLUNsaVJlc3RyaWN0aW9uT3B0aW9uIDo6PSBFTlVNRVJBVEVEIHsKLQlwZXJtYW5lbnQgICgwKSwKLQl0ZW1wb3JhcnlEZWZhdWx0UmVzdHJpY3RlZCAgKDEpLAotCXRlbXBvcmFyeURlZmF1bHRBbGxvd2VkICAoMil9Ci0KLU92ZXJyaWRlQ2F0ZWdvcnkgOjo9IEVOVU1FUkFURUQgewotCW92ZXJyaWRlRW5hYmxlZCAgKDApLAotCW92ZXJyaWRlRGlzYWJsZWQgICgxKX0KLQotU1MtRm9yQlMtQ29kZSA6Oj0gU0VRVUVOQ0UgewotCXNzLUNvZGUJCVNTLUNvZGUsCi0JYmFzaWNTZXJ2aWNlCUJhc2ljU2VydmljZUNvZGUJT1BUSU9OQUwsCi0JLi4uLAotCWxvbmdGVE4tU3VwcG9ydGVkCVs0XQlOVUxMCQlPUFRJT05BTCB9Ci0KLUdlbmVyaWNTZXJ2aWNlSW5mbyA6Oj0gU0VRVUVOQ0UgewotCXNzLVN0YXR1cwlTUy1TdGF0dXMsCi0JY2xpUmVzdHJpY3Rpb25PcHRpb24JQ2xpUmVzdHJpY3Rpb25PcHRpb24JT1BUSU9OQUwsCi0JLi4uLAotCW1heGltdW1FbnRpdGxlZFByaW9yaXR5CVswXSBFTUxQUC1Qcmlvcml0eQlPUFRJT05BTCwKLQlkZWZhdWx0UHJpb3JpdHkJWzFdIEVNTFBQLVByaW9yaXR5CU9QVElPTkFMLAotCWNjYnMtRmVhdHVyZUxpc3QJWzJdIENDQlMtRmVhdHVyZUxpc3QJT1BUSU9OQUwsCi0JbmJyU0IJCVszXSBNYXhNQy1CZWFyZXJzCU9QVElPTkFMLAotCW5iclVzZXIJCVs0XSBNQy1CZWFyZXJzCU9QVElPTkFMLAotCW5iclNOCQlbNV0gTUMtQmVhcmVycwlPUFRJT05BTCB9Ci0KLUNDQlMtRmVhdHVyZUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mQ0NCUy1SZXF1ZXN0cykgT0YKLQkJCQlDQ0JTLUZlYXR1cmUKLQotbWF4TnVtT2ZDQ0JTLVJlcXVlc3RzICBJTlRFR0VSIDo6PSA1Ci0KLUNDQlMtRmVhdHVyZSA6Oj0gU0VRVUVOQ0UgewotCWNjYnMtSW5kZXgJWzBdIENDQlMtSW5kZXgJT1BUSU9OQUwsCi0JYi1zdWJzY3JpYmVyTnVtYmVyCVsxXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCi0JYi1zdWJzY3JpYmVyU3ViYWRkcmVzcwlbMl0gSVNETi1TdWJhZGRyZXNzU3RyaW5nCU9QVElPTkFMLAotCWJhc2ljU2VydmljZUdyb3VwCVszXSBCYXNpY1NlcnZpY2VDb2RlCU9QVElPTkFMLAotCS4uLn0KLQotQ0NCUy1JbmRleCAgOjo9IElOVEVHRVIgKDEuLm1heE51bU9mQ0NCUy1SZXF1ZXN0cykKLQotSW50ZXJyb2dhdGVTUy1SZXMgOjo9IENIT0lDRSB7Ci0Jc3MtU3RhdHVzCQlbMF0gU1MtU3RhdHVzLAotCWJhc2ljU2VydmljZUdyb3VwTGlzdAlbMl0gQmFzaWNTZXJ2aWNlR3JvdXBMaXN0LAotCWZvcndhcmRpbmdGZWF0dXJlTGlzdAlbM10gRm9yd2FyZGluZ0ZlYXR1cmVMaXN0LAotCWdlbmVyaWNTZXJ2aWNlSW5mbwlbNF0JR2VuZXJpY1NlcnZpY2VJbmZvIH0KLQotVVNTRC1BcmcgOjo9IFNFUVVFTkNFIHsKLQl1c3NkLURhdGFDb2RpbmdTY2hlbWUJVVNTRC1EYXRhQ29kaW5nU2NoZW1lLAotCXVzc2QtU3RyaW5nCVVTU0QtU3RyaW5nLAotCS4uLiAsCi0JYWxlcnRpbmdQYXR0ZXJuCUFsZXJ0aW5nUGF0dGVybglPUFRJT05BTCwKLQltc2lzZG4JCVswXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwgfQotCi1VU1NELVJlcyA6Oj0gU0VRVUVOQ0UgewotCXVzc2QtRGF0YUNvZGluZ1NjaGVtZQlVU1NELURhdGFDb2RpbmdTY2hlbWUsCi0JdXNzZC1TdHJpbmcJVVNTRC1TdHJpbmcsCi0JLi4ufQotCi1VU1NELURhdGFDb2RpbmdTY2hlbWUgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCi0JLS0gVGhlIHN0cnVjdHVyZSBvZiB0aGUgVVNTRC1EYXRhQ29kaW5nU2NoZW1lIGlzIGRlZmluZWQgYnkKLQktLSB0aGUgQ2VsbCBCcm9hZGNhc3QgRGF0YSBDb2RpbmcgU2NoZW1lIGFzIGRlc2NyaWJlZCBpbgotCS0tIFRTIDNHUFAgVFMgMjMuMDM4IFsyNV0KLQotVVNTRC1TdHJpbmcgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4ubWF4VVNTRC1TdHJpbmdMZW5ndGgpKQotCS0tIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBVU1NELVN0cmluZyBpcyBkZXBlbmRlbnQKLQktLSBvbiB0aGUgVVNTRC1EYXRhQ29kaW5nU2NoZW1lIGFzIGRlc2NyaWJlZCBpbiBUUyAzR1BQIFRTIDIzLjAzOCBbMjVdLgotCi1tYXhVU1NELVN0cmluZ0xlbmd0aCAgSU5URUdFUiA6Oj0gMTYwCi0KLVBhc3N3b3JkIDo6PSBOdW1lcmljU3RyaW5nCi0JKEZST00gKCIwInwiMSJ8IjIifCIzInwiNCJ8IjUifCI2InwiNyJ8IjgifCI5IikpCi0JKFNJWkUgKDQpKQotCi1HdWlkYW5jZUluZm8gOjo9IEVOVU1FUkFURUQgewotCWVudGVyUFcgICgwKSwKLQllbnRlck5ld1BXICAoMSksCi0JZW50ZXJOZXdQVy1BZ2FpbiAgKDIpfQotCS0tIEhvdyB0aGlzIGluZm9ybWF0aW9uIGlzIHJlYWxseSBkZWxpdmVyZWQgdG8gdGhlIHN1YnNjcmliZXIKLQktLSAoZGlzcGxheSwgYW5ub3VuY2VtZW50LCAuLi4pIGlzIG5vdCBwYXJ0IG9mIHRoaXMKLQktLSBzcGVjaWZpY2F0aW9uLgotCi1TUy1MaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlNTKSBPRgotCQkJCVNTLUNvZGUKLQotbWF4TnVtT2ZTUyAgSU5URUdFUiA6Oj0gMzAKLQotU1MtSW5mb0xpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mU1MpIE9GCi0JCQkJU1MtSW5mbwotCi1CYXNpY1NlcnZpY2VHcm91cExpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mQmFzaWNTZXJ2aWNlR3JvdXBzKSBPRgotCQkJCUJhc2ljU2VydmljZUNvZGUKLQotbWF4TnVtT2ZCYXNpY1NlcnZpY2VHcm91cHMgIElOVEVHRVIgOjo9IDEzCi0KLVNTLUludm9jYXRpb25Ob3RpZmljYXRpb25BcmcgOjo9IFNFUVVFTkNFIHsKLQlpbXNpCQkJWzBdIElNU0ksCi0JbXNpc2RuCQlbMV0gSVNETi1BZGRyZXNzU3RyaW5nLAotCXNzLUV2ZW50CQlbMl0gU1MtQ29kZSwKLQktLSBUaGUgZm9sbG93aW5nIFNTLUNvZGUgdmFsdWVzIGFyZSBhbGxvd2VkIDoKLQktLSBlY3QJCVNTLUNvZGUgOjo9ICcwMDExMDAwMSdCCi0JLS0gbXVsdGlQVFkJU1MtQ29kZSA6Oj0gJzAxMDEwMDAxJ0IKLQktLSBjZAkJU1MtQ29kZSA6Oj0gJzAwMTAwMTAwJ0IKLQktLSBjY2JzCQlTUy1Db2RlIDo6PSAnMDEwMDAxMDAnQgotCXNzLUV2ZW50U3BlY2lmaWNhdGlvbglbM10gU1MtRXZlbnRTcGVjaWZpY2F0aW9uCU9QVElPTkFMLAotCWV4dGVuc2lvbkNvbnRhaW5lcglbNF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLiwKLQliLXN1YnNjcmliZXJOdW1iZXIJWzVdCUlTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKLQljY2JzLVJlcXVlc3RTdGF0ZQlbNl0JQ0NCUy1SZXF1ZXN0U3RhdGUJT1BUSU9OQUwKLQl9Ci0KLUNDQlMtUmVxdWVzdFN0YXRlIDo6PSBFTlVNRVJBVEVEIHsKLQlyZXF1ZXN0ICAJKDApLAotCXJlY2FsbCAgCSgxKSwKLQlhY3RpdmUgIAkoMiksCi0JY29tcGxldGVkCSgzKSwKLQlzdXNwZW5kZWQJKDQpLAotCWZyb3plbgkoNSksCi0JZGVsZXRlZAkoNikKLQl9Ci0KLVNTLUludm9jYXRpb25Ob3RpZmljYXRpb25SZXMgOjo9IFNFUVVFTkNFIHsKLQlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAotCS4uLgotCX0KLQotU1MtRXZlbnRTcGVjaWZpY2F0aW9uIDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhFdmVudFNwZWNpZmljYXRpb24pIE9GCi0JCQkJQWRkcmVzc1N0cmluZwotCi1tYXhFdmVudFNwZWNpZmljYXRpb24gIElOVEVHRVIgOjo9IDIKLQotUmVnaXN0ZXJDQy1FbnRyeUFyZyA6Oj0gU0VRVUVOQ0UgewotCXNzLUNvZGUJCVswXQlTUy1Db2RlLAotCWNjYnMtRGF0YQkJWzFdCUNDQlMtRGF0YQlPUFRJT05BTCwKLQkuLi59Ci0KLUNDQlMtRGF0YSA6Oj0gU0VRVUVOQ0UgewotCWNjYnMtRmVhdHVyZQlbMF0JQ0NCUy1GZWF0dXJlLAotCXRyYW5zbGF0ZWRCLU51bWJlcglbMV0JSVNETi1BZGRyZXNzU3RyaW5nLAotCXNlcnZpY2VJbmRpY2F0b3IJWzJdCVNlcnZpY2VJbmRpY2F0b3IJT1BUSU9OQUwsCi0JY2FsbEluZm8JCVszXQlFeHRlcm5hbFNpZ25hbEluZm8sCi0JbmV0d29ya1NpZ25hbEluZm8JWzRdCUV4dGVybmFsU2lnbmFsSW5mbywKLQkuLi59Ci0KLVNlcnZpY2VJbmRpY2F0b3IgOjo9IEJJVCBTVFJJTkcgewotCWNsaXItaW52b2tlZCAoMCksCi0JY2FtZWwtaW52b2tlZCAoMSl9IChTSVpFKDIuLjMyKSkgCi0JLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgotCS0tIGJpdHMgMiB0byAzMSBzaGFsbCBiZSBpZ25vcmVkIGlmIHJlY2VpdmVkIGFuZCBub3QgdW5kZXJzdG9vZAotCi1SZWdpc3RlckNDLUVudHJ5UmVzIDo6PSBTRVFVRU5DRSB7Ci0JY2Nicy1GZWF0dXJlCVswXSBDQ0JTLUZlYXR1cmUJT1BUSU9OQUwsCi0JLi4ufQotCi1FcmFzZUNDLUVudHJ5QXJnIDo6PSBTRVFVRU5DRSB7Ci0Jc3MtQ29kZQkJWzBdCVNTLUNvZGUsCi0JY2Nicy1JbmRleAlbMV0JQ0NCUy1JbmRleAlPUFRJT05BTCwKLQkuLi59Ci0KLUVyYXNlQ0MtRW50cnlSZXMgOjo9IFNFUVVFTkNFIHsKLQlzcy1Db2RlCQlbMF0JU1MtQ29kZSwKLQlzcy1TdGF0dXMJCVsxXSBTUy1TdGF0dXMJT1BUSU9OQUwsCi0JLi4ufQotCi1FTkQKLQpkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvYXNuMS9NQVAtVFMtQ29kZS5hc24gYi9ycmxwLWVwaGVtZXJpcy9hc24xL01BUC1UUy1Db2RlLmFzbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjMDBiZi4uMDAwMDAwMAotLS0gYS9ycmxwLWVwaGVtZXJpcy9hc24xL01BUC1UUy1Db2RlLmFzbgorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS0tICRJZDogTUFQLVRTLUNvZGUuYXNuIDI4MTQ5IDIwMDktMDQtMjUgMTc6NDU6MzRaIGV0eHJhYiAkCi0tLSAzR1BQIFRTIDI5LjAwMiBWOC45LjAgKDIwMDktMDQpIAotLS0gMTcuNy45CVRlbGVzZXJ2aWNlIENvZGVzCi0gCi1NQVAtVFMtQ29kZSB7Ci0gICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1UUy1Db2RlICgxOSkgdmVyc2lvbjExICgxMSl9Ci0KLURFRklOSVRJT05TCi0KLTo6PQotCi1CRUdJTgotCi1UZWxlc2VydmljZUNvZGUgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCi0JLS0gVGhpcyB0eXBlIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjb2RlIGlkZW50aWZ5aW5nIGEgc2luZ2xlCi0JLS0gdGVsZXNlcnZpY2UsIGEgZ3JvdXAgb2YgdGVsZXNlcnZpY2VzLCBvciBhbGwgdGVsZXNlcnZpY2VzLiBUaGUKLQktLSBzZXJ2aWNlcyBhcmUgZGVmaW5lZCBpbiBUUyBHU00gMjIuMDAzIFs0XS4KLQktLSBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgYXMgZm9sbG93czoKLQotCS0tIGJpdHMgODc2NTQzMjE6IGdyb3VwIChiaXRzIDg3NjUpIGFuZCBzcGVjaWZpYyBzZXJ2aWNlCi0JLS0gKGJpdHMgNDMyMSkKLQotRXh0LVRlbGVzZXJ2aWNlQ29kZSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi41KSkKLQktLSBUaGlzIHR5cGUgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGNvZGUgaWRlbnRpZnlpbmcgYSBzaW5nbGUKLQktLSB0ZWxlc2VydmljZSwgYSBncm91cCBvZiB0ZWxlc2VydmljZXMsIG9yIGFsbCB0ZWxlc2VydmljZXMuIFRoZQotCS0tIHNlcnZpY2VzIGFyZSBkZWZpbmVkIGluIFRTIEdTTSAyMi4wMDMgWzRdLgotCS0tIFRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgotCi0JLS0gT0NURVQgMToKLQktLSBiaXRzIDg3NjU0MzIxOiBncm91cCAoYml0cyA4NzY1KSBhbmQgc3BlY2lmaWMgc2VydmljZQotCS0tIChiaXRzIDQzMjEpCi0KLQktLSBPQ1RFVFMgMi01OiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gSWYgcmVjZWl2ZWQgdGhlCi0gICAgLS0gRXh0LVRlbGVzZXJ2aWNlQ29kZSBzaGFsbCBiZQotIAktLSB0cmVhdGVkIGFjY29yZGluZyB0byB0aGUgZXhjZXB0aW9uIGhhbmRsaW5nIGRlZmluZWQgZm9yIHRoZQotCS0tIG9wZXJhdGlvbiB0aGF0IHVzZXMgdGhpcyB0eXBlLgotCi0JLS0gRXh0LVRlbGVzZXJ2aWNlQ29kZSBpbmNsdWRlcyBhbGwgdmFsdWVzIGRlZmluZWQgZm9yIFRlbGVzZXJ2aWNlQ29kZS4KLQotYWxsVGVsZXNlcnZpY2VzCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzAwMDAwMDAwJ0IKLQotYWxsU3BlZWNoVHJhbnNtaXNzaW9uU2VydmljZXMJVGVsZXNlcnZpY2VDb2RlIDo6PSAnMDAwMTAwMDAnQgotdGVsZXBob255CQkJVGVsZXNlcnZpY2VDb2RlIDo6PSAnMDAwMTAwMDEnQgotZW1lcmdlbmN5Q2FsbHMJCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzAwMDEwMDEwJ0IKLQotYWxsU2hvcnRNZXNzYWdlU2VydmljZXMJVGVsZXNlcnZpY2VDb2RlIDo6PSAnMDAxMDAwMDAnQgotc2hvcnRNZXNzYWdlTVQtUFAJVGVsZXNlcnZpY2VDb2RlIDo6PSAnMDAxMDAwMDEnQgotc2hvcnRNZXNzYWdlTU8tUFAJVGVsZXNlcnZpY2VDb2RlIDo6PSAnMDAxMDAwMTAnQgotCi1hbGxGYWNzaW1pbGVUcmFuc21pc3Npb25TZXJ2aWNlcwlUZWxlc2VydmljZUNvZGUgOjo9ICcwMTEwMDAwMCdCCi1mYWNzaW1pbGVHcm91cDNBbmRBbHRlclNwZWVjaAlUZWxlc2VydmljZUNvZGUgOjo9ICcwMTEwMDAwMSdCCi1hdXRvbWF0aWNGYWNzaW1pbGVHcm91cDMJVGVsZXNlcnZpY2VDb2RlIDo6PSAnMDExMDAwMTAnQgotZmFjc2ltaWxlR3JvdXA0CVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzAxMTAwMDExJ0IKLQotLS0gVGhlIGZvbGxvd2luZyBub24taGllcmFyY2hpY2FsIENvbXBvdW5kIFRlbGVzZXJ2aWNlIEdyb3VwcwotLS0gYXJlIGRlZmluZWQgaW4gVFMgM0dQUCBUUyAyMi4wMzA6Ci1hbGxEYXRhVGVsZXNlcnZpY2VzCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzAxMTEwMDAwJ0IKLQktLSBjb3ZlcnMgVGVsZXNlcnZpY2UgR3JvdXBzICdhbGxGYWNzaW1pbGVUcmFuc21pc3Npb25TZXJ2aWNlcycKLQktLSBhbmQgJ2FsbFNob3J0TWVzc2FnZVNlcnZpY2VzJwotYWxsVGVsZXNlcnZpY2VzLUV4ZXB0U01TCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzEwMDAwMDAwJ0IKLQktLSBjb3ZlcnMgVGVsZXNlcnZpY2UgR3JvdXBzICdhbGxTcGVlY2hUcmFuc21pc3Npb25TZXJ2aWNlcycgYW5kCi0JLS0gJ2FsbEZhY3NpbWlsZVRyYW5zbWlzc2lvblNlcnZpY2VzJwotLS0KLS0tIENvbXBvdW5kIFRlbGVzZXJ2aWNlIEdyb3VwIENvZGVzIGFyZSBvbmx5IHVzZWQgaW4gY2FsbAotLS0gaW5kZXBlbmRlbnQgc3VwcGxlbWVudGFyeSBzZXJ2aWNlIG9wZXJhdGlvbnMsIGkuZS4gdGhleQotLS0gYXJlIG5vdCB1c2VkIGluIEluc2VydFN1YnNjcmliZXJEYXRhIG9yIGluCi0tLSBEZWxldGVTdWJzY3JpYmVyRGF0YSBtZXNzYWdlcy4KLQotYWxsVm9pY2VHcm91cENhbGxTZXJ2aWNlcwlUZWxlc2VydmljZUNvZGUgOjo9ICcxMDAxMDAwMCdCCi12b2ljZUdyb3VwQ2FsbAkJVGVsZXNlcnZpY2VDb2RlIDo6PSAnMTAwMTAwMDEnQgotdm9pY2VCcm9hZGNhc3RDYWxsCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzEwMDEwMDEwJ0IKLQotYWxsUExNTi1zcGVjaWZpY1RTCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDEwMDAwJ0IKLXBsbW4tc3BlY2lmaWNUUy0xCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDEwMDAxJ0IKLXBsbW4tc3BlY2lmaWNUUy0yCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDEwMDEwJ0IKLXBsbW4tc3BlY2lmaWNUUy0zCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDEwMDExJ0IKLXBsbW4tc3BlY2lmaWNUUy00CVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDEwMTAwJ0IKLXBsbW4tc3BlY2lmaWNUUy01CVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDEwMTAxJ0IKLXBsbW4tc3BlY2lmaWNUUy02CVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDEwMTEwJ0IKLXBsbW4tc3BlY2lmaWNUUy03CVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDEwMTExJ0IKLXBsbW4tc3BlY2lmaWNUUy04CVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDExMDAwJ0IKLXBsbW4tc3BlY2lmaWNUUy05CVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDExMDAxJ0IKLXBsbW4tc3BlY2lmaWNUUy1BCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDExMDEwJ0IKLXBsbW4tc3BlY2lmaWNUUy1CCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDExMDExJ0IKLXBsbW4tc3BlY2lmaWNUUy1DCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDExMTAwJ0IKLXBsbW4tc3BlY2lmaWNUUy1ECVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDExMTAxJ0IKLXBsbW4tc3BlY2lmaWNUUy1FCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDExMTEwJ0IKLXBsbW4tc3BlY2lmaWNUUy1GCVRlbGVzZXJ2aWNlQ29kZSA6Oj0gJzExMDExMTExJ0IKLQotRU5ECi0KZGlmZiAtLWdpdCBhL3JybHAtZXBoZW1lcmlzL2FzbjEvUlJMUC1Db21wb25lbnRzLmFzbiBiL3JybHAtZXBoZW1lcmlzL2FzbjEvUlJMUC1Db21wb25lbnRzLmFzbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JhZGU2YS4uMDAwMDAwMAotLS0gYS9ycmxwLWVwaGVtZXJpcy9hc24xL1JSTFAtQ29tcG9uZW50cy5hc24KKysrIC9kZXYvbnVsbApAQCAtMSwxNDg4ICswLDAgQEAKLS0tIFJSTFAtQ29tcG9uZW50cy5hc24KLS0tICRJZCQKLS0tIFRha2VuIGZyb20gM0dQUCBUUyA0NC4wMzEgVjcuNC4wICgyMDA3LTAzKQotLS0gaHR0cDovL3d3dy4zZ3BwLm9yZy9mdHAvU3BlY3MvYXJjaGl2ZS80NF9zZXJpZXMvNDQuMDMxLzQ0MDMxLTc0MC56aXAvNDQwMzEtNzQwLmRvYwotLS0KLS0tIDQgQ29tcG9uZW50cwotLS0gNSBFbGVtZW50cyBvZiBDb21wb25lbnRzCi0tLQotCi1SUkxQLUNvbXBvbmVudHMKLS0tIHsgUlJMUC1Db21wb25lbnRzIH0KLQotREVGSU5JVElPTlMgQVVUT01BVElDIFRBR1MgOjo9Ci0KLUJFR0lOCi0KLUlNUE9SVFMKLQlFeHQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24sIFZlbG9jaXR5RXN0aW1hdGUKLUZST00KLQlNQVAtTENTLURhdGFUeXBlcyB7Ci0JaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKLQlnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUxDUy1EYXRhVHlwZXMgKDI1KSB2ZXJzaW9uMTEgKDExKX0KLQotCUV4dGVuc2lvbkNvbnRhaW5lcgotRlJPTSBNQVAtRXh0ZW5zaW9uRGF0YVR5cGVzIHsKLQlpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotCWdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtRXh0ZW5zaW9uRGF0YVR5cGVzICgyMSkgdmVyc2lvbjExICgxMSl9Ci07Ci0KLQotLS0gQWRkIGhlcmUgb3RoZXIgQVNOLjEgZGVmaW5pdGlvbnMgcHJlc2VudGVkIGJlbG93Ci0tLSBpbiBjaGFwdGVycyA0IGFuZCA1LgotCi0tLSBNZWFzdXJlbWVudCBQb3NpdGlvbiByZXF1ZXN0IGNvbXBvbmVudAotTXNyUG9zaXRpb24tUmVxIDo6PSBTRVFVRU5DRSB7Ci0JcG9zaXRpb25JbnN0cnVjdAkJUG9zaXRpb25JbnN0cnVjdCwKLQlyZWZlcmVuY2VBc3Npc3REYXRhCQlSZWZlcmVuY2VBc3Npc3REYXRhCQlPUFRJT05BTCwKLQltc3JBc3Npc3REYXRhCQkJTXNyQXNzaXN0RGF0YQkJCU9QVElPTkFMLAotCXN5c3RlbUluZm9Bc3Npc3REYXRhCVN5c3RlbUluZm9Bc3Npc3REYXRhCU9QVElPTkFMLAotCWdwcy1Bc3Npc3REYXRhCQkJR1BTLUFzc2lzdERhdGEJCQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJCUV4dGVuc2lvbkNvbnRhaW5lcgkJT1BUSU9OQUwsCi0JLi4uLAotCS0tIFJlbGVhc2UgOTggZXh0ZW5zaW9uIGVsZW1lbnQKLXJlbDk4LU1zclBvc2l0aW9uLVJlcS1leHRlbnNpb24JCQlSZWw5OC1Nc3JQb3NpdGlvbi1SZXEtRXh0ZW5zaW9uCQkJT1BUSU9OQUwsCQotCS0tIFJlbGVhc2UgNSBleHRlbnNpb24gZWxlbWVudAotcmVsNS1Nc3JQb3NpdGlvbi1SZXEtZXh0ZW5zaW9uCQkJUmVsNS1Nc3JQb3NpdGlvbi1SZXEtRXh0ZW5zaW9uCQkJT1BUSU9OQUwsCi0JLS0gUmVsZWFzZSA3IGV4dGVuc2lvbiBlbGVtZW50Ci1yZWw3LU1zclBvc2l0aW9uLVJlcS1leHRlbnNpb24JCQlSZWw3LU1zclBvc2l0aW9uLVJlcS1FeHRlbnNpb24JCQlPUFRJT05BTAotfQotCi0tLSBNZWFzdXJlbWVudCBQb3NpdGlvbiByZXNwb25zZSBjb21wb25lbnQKLU1zclBvc2l0aW9uLVJzcCA6Oj0gU0VRVUVOQ0UgewotCW11bHRpcGxlU2V0cwkJCU11bHRpcGxlU2V0cwkJCU9QVElPTkFMLAotCXJlZmVyZW5jZUlkZW50aXR5CQlSZWZlcmVuY2VJZGVudGl0eQkJT1BUSU9OQUwsCi0Jb3RkLU1lYXN1cmVJbmZvCQkJT1RELU1lYXN1cmVJbmZvCQkJT1BUSU9OQUwsCi0JbG9jYXRpb25JbmZvCQkJTG9jYXRpb25JbmZvCQkJT1BUSU9OQUwsCi0JZ3BzLU1lYXN1cmVJbmZvCQkJR1BTLU1lYXN1cmVJbmZvCQkJT1BUSU9OQUwsCi0JbG9jYXRpb25FcnJvcgkJCUxvY2F0aW9uRXJyb3IJCQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJCUV4dGVuc2lvbkNvbnRhaW5lcgkJT1BUSU9OQUwsCi0JLi4uLAkKLQktLSBSZWxlYXNlIGV4dGVuc2lvbiBoZXJlCi0JcmVsLTk4LU1zclBvc2l0aW9uLVJzcC1FeHRlbnNpb24JCQotCQkJCQkJCVJlbC05OC1Nc3JQb3NpdGlvbi1Sc3AtRXh0ZW5zaW9uCQlPUFRJT05BTCwKLQlyZWwtNS1Nc3JQb3NpdGlvbi1Sc3AtRXh0ZW5zaW9uCi0JCQkJCQkJUmVsLTUtTXNyUG9zaXRpb24tUnNwLUV4dGVuc2lvbgkJT1BUSU9OQUwsCi0JLS0gcmVsLTUtTXNyUG9zaXRpb24tUnNwLUV4dGVuc2lvbiBhbmQgb3RoZXIgcG9zc2libGUgZnV0dXJlIGV4dGVuc2lvbnMKLQktLSBhcmUgdGhlIG9ubHkgaW5mb3JtYXRpb24gZWxlbWVudHMgdGhhdCBtYXkgYmUgaW5jbHVkZWQgaW4gdGhlIDJuZAotCS0tIE1zclBvc2l0aW9uLVJzcCBjb21wb25lbnQgd2hlbiBSUkxQIHBzZXVkby1zZWdtZW50YXRpb24gaXMgdXNlZAotCXJlbC03LU1zclBvc2l0aW9uLVJzcC1FeHRlbnNpb24KLQkJCQkJCQlSZWwtNy1Nc3JQb3NpdGlvbi1Sc3AtRXh0ZW5zaW9uCQlPUFRJT05BTAotfQotCi0tLSBBc3Npc3RhbmNlIERhdGEgY29tcG9uZW50Ci1Bc3Npc3RhbmNlRGF0YSA6Oj0gU0VRVUVOQ0UgewotCXJlZmVyZW5jZUFzc2lzdERhdGEJUmVmZXJlbmNlQXNzaXN0RGF0YQkJCU9QVElPTkFMLAotCW1zckFzc2lzdERhdGEJCQlNc3JBc3Npc3REYXRhCQkJT1BUSU9OQUwsCi0Jc3lzdGVtSW5mb0Fzc2lzdERhdGEJU3lzdGVtSW5mb0Fzc2lzdERhdGEJT1BUSU9OQUwsCi0JZ3BzLUFzc2lzdERhdGEJCQlHUFMtQXNzaXN0RGF0YQkJCU9QVElPTkFMLAkKLQltb3JlQXNzRGF0YVRvQmVTZW50CQlNb3JlQXNzRGF0YVRvQmVTZW50CQlPUFRJT05BTCwJLS0gSWYgbm90IHByZXNlbnQsIGludGVycHJldCBhcyBvbmx5Ci0JCQkJCQkJCQkJCQkJCQkJLS0gQXNzaXN0YW5jZSBEYXRhIGNvbXBvbmVudCB1c2VkIHRvCi0JCQkJCQkJCQkJCQkJCQkJLS0gZGVsaXZlciBlbnRpcmUgc2V0IG9mIGFzc2lzdGFuY2UKLQkJCQkJCQkJCQkJCQkJCQktLSBkYXRhLgotCWV4dGVuc2lvbkNvbnRhaW5lcgkJRXh0ZW5zaW9uQ29udGFpbmVyCQlPUFRJT05BTCwKLQkuLi4sCi0JLS0gUmVsZWFzZSBleHRlbnNpb24gaGVyZQotCXJlbDk4LUFzc2lzdGFuY2VEYXRhLUV4dGVuc2lvbglSZWw5OC1Bc3Npc3RhbmNlRGF0YS1FeHRlbnNpb24JT1BUSU9OQUwsCi0JcmVsNS1Bc3Npc3RhbmNlRGF0YS1FeHRlbnNpb24JUmVsNS1Bc3Npc3RhbmNlRGF0YS1FeHRlbnNpb24JT1BUSU9OQUwsCi0gcmVsNy1Bc3Npc3RhbmNlRGF0YS1FeHRlbnNpb24gUmVsNy1Bc3Npc3RhbmNlRGF0YS1FeHRlbnNpb24gT1BUSU9OQUwJCi19Ci0KLS0tIFByb3RvY29sIEVycm9yIGNvbXBvbmVudAotUHJvdG9jb2xFcnJvciA6Oj0gU0VRVUVOQ0UgewotCWVycm9yQ2F1c2UJCQkJRXJyb3JDb2RlcywJCi0JZXh0ZW5zaW9uQ29udGFpbmVyCQlFeHRlbnNpb25Db250YWluZXIJCU9QVElPTkFMLAotCS4uLiwKLQktLSBSZWxlYXNlIGV4dGVuc2lvbnMgaGVyZQotCXJlbC01LVByb3RvY29sRXJyb3ItRXh0ZW5zaW9uIFJlbC01LVByb3RvY29sRXJyb3ItRXh0ZW5zaW9uCQlPUFRJT05BTAotfQotCi0tLSBQb3NpdGlvbiBpbnN0cnVjdGlvbnMKLVBvc2l0aW9uSW5zdHJ1Y3QgOjo9IFNFUVVFTkNFIHsKLQktLSBNZXRob2QgdHlwZQotCW1ldGhvZFR5cGUJCQkJTWV0aG9kVHlwZSwJCi0JcG9zaXRpb25NZXRob2QJCQlQb3NpdGlvbk1ldGhvZCwKLQltZWFzdXJlUmVzcG9uc2VUaW1lCQlNZWFzdXJlUmVzcG9uc2VUaW1lLAkJCi0JdXNlTXVsdGlwbGVTZXRzCQkJVXNlTXVsdGlwbGVTZXRzLAkJCi0JZW52aXJvbm1lbnRDaGFyYWN0ZXIJRW52aXJvbm1lbnRDaGFyYWN0ZXIJT1BUSU9OQUwJCi19Ci0KLS0tCi1NZXRob2RUeXBlIDo6PSBDSE9JQ0UgewotCW1zQXNzaXN0ZWQJCUFjY3VyYWN5T3B0LAktLSBhY2N1cmFjeSBpcyBvcHRpb25hbAotCW1zQmFzZWQJCQlBY2N1cmFjeSwJCS0tIGFjY3VyYWN5IGlzIG1hbmRhdG9yeQotCW1zQmFzZWRQcmVmCQlBY2N1cmFjeSwJCS0tIGFjY3VyYWN5IGlzIG1hbmRhdG9yeQotCW1zQXNzaXN0ZWRQcmVmCUFjY3VyYWN5IAkJLS0gYWNjdXJhY3kgaXMgbWFuZGF0b3J5Ci19Ci0KLS0tIEFjY3VyYWN5IG9mIHRoZSBsb2NhdGlvbiBlc3RpbWF0aW9uCi1BY2N1cmFjeU9wdCA6Oj0gU0VRVUVOQ0UgewotCWFjY3VyYWN5CQlBY2N1cmFjeQlPUFRJT05BTAotfQotCi0tLSBUaGUgdmFsdWVzIG9mIHRoaXMgZmllbGQgYXJlIGRlZmluZWQgaW4gM0dQUCBUUyAyMy4wMzIgKFVuY2VydGFpbnR5IGNvZGUpCi1BY2N1cmFjeSA6Oj0gSU5URUdFUiAoMC4uMTI3KQotCi0KLS0tIFBvc2l0aW9uIE1ldGhvZAotUG9zaXRpb25NZXRob2QgOjo9IEVOVU1FUkFURUQgewotCWVvdGQgKDApLAotCWdwcyAoMSksCi0JZ3BzT3JFT1REICgyKQotfQotCi0tLSBNZWFzdXJlbWVudCByZXF1ZXN0IHJlc3BvbnNlIHRpbWUKLU1lYXN1cmVSZXNwb25zZVRpbWUgOjo9IElOVEVHRVIgKDAuLjcpCi0KLS0tIHVzZU11bHRpcGxlIFNldHMsIEZGUyEKLVVzZU11bHRpcGxlU2V0cyA6Oj0gRU5VTUVSQVRFRCB7Ci0JbXVsdGlwbGVTZXRzICgwKSwJCS0tIG11bHRpcGxlIHNldHMgYXJlIGFsbG93ZWQKLQlvbmVTZXQgKDEpCQkJCS0tIHNlbmRpbmcgb2YgbXVsdGlwbGUgaXMgbm90IGFsbG93ZWQKLX0KLQotLS0gRW52aXJvbm1lbnQgY2hhcmFjdGVyaXphdGlvbgotRW52aXJvbm1lbnRDaGFyYWN0ZXIgOjo9IEVOVU1FUkFURUQgewotCWJhZEFyZWEgKDApLAkJLS0gYmFkIHVyYmFuIG9yIHN1YnVyYmFuLCBoZWF2eSBtdWx0aXBhdGggYW5kIE5MT1MKLQlub3RCYWRBcmVhICgxKSwJCS0tIGxpZ2h0IG11bHRpcGF0aCBhbmQgTkxPUwotCW1peGVkQXJlYSAoMiksCQktLSBub3QgZGVmaW5lZCBvciBtaXhlZCBlbnZpcm9ubWVudAotCS4uLgotfQotCi0tLSBFLU9URCByZWZlcmVuY2UgQlRTIGZvciBBc3NpdGFuY2UgZGF0YSBJRQotUmVmZXJlbmNlQXNzaXN0RGF0YSA6Oj0gU0VRVUVOQ0UgewotCWJjY2hDYXJyaWVyCQlCQ0NIQ2FycmllciwJCQkJCQktLSBCQ0NIIGNhcnJpZXIKLQlic2ljCQkJQlNJQywJCQkJCQkJCS0tIEJTSUMKLQl0aW1lU2xvdFNjaGVtZQlUaW1lU2xvdFNjaGVtZSwgCQkJCQktLSBUaW1lc2xvdCBzY2hlbWUKLQlidHNQb3NpdGlvbgkJQlRTUG9zaXRpb24JCQlPUFRJT05BTAotfQotCi0tLSBlbGxpcHNvaWQgcG9pbnQgYW5kCi0tLSBlbGxpcHNvaWQgcG9pbnQgd2l0aCBhbHRpdHVkZSBhbmQgdW5jZXJ0YWludHkgZWxsaXBzb2lkIHNoYXBlcyBhcmUgc3VwcG9ydGVkCi1CVFNQb3NpdGlvbiA6Oj0gRXh0LUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uCi0KLS0tIFJGIGNoYW5uZWwgbnVtYmVyIG9mIEJDQ0gKLUJDQ0hDYXJyaWVyIDo6PSBJTlRFR0VSICgwLi4xMDIzKQotCi0tLSBCYXNlIHN0YXRpb24gSWRlbnRpdHkgQ29kZQotQlNJQyA6Oj0gSU5URUdFUiAoMC4uNjMpCi0KLS0tIFRpbWVzbG90IHNjaGVtZQotVGltZVNsb3RTY2hlbWUgOjo9IEVOVU1FUkFURUQgewotCWVxdWFsTGVuZ3RoICgwKSwKLQl2YXJpb3VzTGVuZ3RoICgxKQotfQotCi0tLSBUaW1lIHNsb3QgKG1vZHVsbykKLU1vZHVsb1RpbWVTbG90IDo6PSBJTlRFR0VSICgwLi4zKQotCi0tLSBFLU9URCBtZWFzdXJlbWVudCBhc3Npc3RhbmNlIGRhdGEgSUUKLS0tIFRoZSB0b3RhbCBudW1iZXIgb2YgbmVpZ2hib3JzIGluIHRoaXMgZWxlbWVudCAoTXNyQXNzaXN0RGF0YSkKLS0tIGFuZCBpbiBTeXN0ZW1JbmZvQXNzaXN0RGF0YSBlbGVtZW50IChwcmVzZW50ZWQgbmVpZ2hib3JzCi0tLSBjYW4gYmUgYXQgYSBtYXhpbXVtIDE1ISkKLU1zckFzc2lzdERhdGEgOjo9IFNFUVVFTkNFIHsKLQkgbXNyQXNzaXN0TGlzdCBTZXFPZk1zckFzc2lzdEJUUwotfQotU2VxT2ZNc3JBc3Npc3RCVFMgOjo9IFNFUVVFTkNFIChTSVpFKDEuLjE1KSkgT0YgTXNyQXNzaXN0QlRTCi0KLU1zckFzc2lzdEJUUyA6Oj0gU0VRVUVOQ0UgewotCWJjY2hDYXJyaWVyCQkJQkNDSENhcnJpZXIsCQktLSBCQ0NIIGNhcnJpZXIKLQlic2ljCQkJCUJTSUMsCQkJCS0tIEJTSUMKLQltdWx0aUZyYW1lT2Zmc2V0CU11bHRpRnJhbWVPZmZzZXQsIAktLSBtdWx0aWZyYW1lIG9mZnNldAotCXRpbWVTbG90U2NoZW1lCQlUaW1lU2xvdFNjaGVtZSwJCS0tIFRpbWVzbG90IHNjaGVtZQotCXJvdWdoUlRECQkJUm91Z2hSVEQsCQkJLS0gcm91Z2ggUlREIHZhbHVlCi0KLQktLSBMb2NhdGlvbiBDYWxjdWxhdGlvbiBBc3Npc3RhbmNlIGRhdGEgaXMgbW92ZWQgaGVyZQotCWNhbGNBc3Npc3RhbmNlQlRTCUNhbGNBc3Npc3RhbmNlQlRTCU9QVElPTkFMCi19Ci0KLS0tIE11bHRpZnJhbWUgb2Zmc2V0Ci1NdWx0aUZyYW1lT2Zmc2V0IDo6PSBJTlRFR0VSICgwLi41MSkKLS0tIFRoZSBNdWx0aWZyYW1lIE9mZnNldCB2YWx1ZSA1MSBzaGFsbCBub3QgYmUgZW5jb2RlZCBieSB0aGUgdHJhbnNtaXR0aW5nIGVudGl0eSBhbmQKLS0tIHNoYWxsIGJlIHRyZWF0ZWQgYnkgdGhlIHJlY2VpdmluZyBlbnRpdHkgYXMgMC4KLQotLS0gUm91Z2ggUlREIHZhbHVlIGJldHdlZW4gb25lIGJhc2Ugc3RhdGlvbiBhbmQgcmVmZXJlbmNlIEJUUwotUm91Z2hSVEQgOjo9IElOVEVHRVIgKDAuLjEyNTApCi0tLSBUaGUgUm91Z2hSVEQgdmFsdWUgMTI1MCBzaGFsbCBub3QgYmUgZW5jb2RlZCBieSB0aGUgdHJhbnNtaXR0aW5nIGVudGl0eSBhbmQgc2hhbGwKLS0tIGJlIHRyZWF0ZWQgYnkgdGhlIHJlY2VpdmluZyBlbnRpdHkgYXMgMC4KLQotLS0gRS1PVEQgTWVhc3VyZW1lbnQgYXNzaXN0YW5jZSBkYXRhIGZvciBzeXN0ZW0gaW5mb3JtYXRpb24gTGlzdCBJRQotLS0gVGhlIHRvdGFsIG51bWJlciBvZiBiYXNlIHN0YXRpb25zIGluIHRoaXMgZWxlbWVudCAoU3lzdGVtSW5mb0Fzc2lzdERhdGEKLS0tIHByZXNlbnRlZCBuZWlnaGJvcnMpIGFuZCBpbiBNc3JBc3Npc3REYXRhIGVsZW1lbnQgY2FuIGJlIGF0IGEgbWF4aW11bSAxNS4KLVN5c3RlbUluZm9Bc3Npc3REYXRhIDo6PSBTRVFVRU5DRSB7Ci0Jc3lzdGVtSW5mb0Fzc2lzdExpc3QgCVNlcU9mU3lzdGVtSW5mb0Fzc2lzdEJUUwotfQotU2VxT2ZTeXN0ZW1JbmZvQXNzaXN0QlRTOjo9IFNFUVVFTkNFIChTSVpFKDEuLjMyKSkgT0YgU3lzdGVtSW5mb0Fzc2lzdEJUUwotCi0tLSB3aGV0aGVyIG4udGggaXMgcHJlc2VudCBvciBub3QgPwotU3lzdGVtSW5mb0Fzc2lzdEJUUyA6Oj0gQ0hPSUNFIHsKLQlub3RQcmVzZW50CQlOVUxMLAotCXByZXNlbnQJCQlBc3Npc3RCVFNEYXRhCi19Ci0KLS0tIEFjdHVhbCBhc3Npc3RhbmNlIGRhdGEgZm9yIHN5c3RlbSBpbmZvcm1hdGlvbiBiYXNlIHN0YXRpb24KLUFzc2lzdEJUU0RhdGEgOjo9IFNFUVVFTkNFIHsKLQlic2ljCQkJCUJTSUMsCQkJCS0tIEJTSUMKLQltdWx0aUZyYW1lT2Zmc2V0CU11bHRpRnJhbWVPZmZzZXQsCS0tIG11bHRpZnJhbWUgb2Zmc2V0Ci0JdGltZVNsb3RTY2hlbWUJCVRpbWVTbG90U2NoZW1lLAkJLS0gVGltZXNsb3Qgc2NoZW1lCi0Jcm91Z2hSVEQJCQlSb3VnaFJURCwJCQktLSByb3VnaCBSVEQgdmFsdWUKLQotCS0tIExvY2F0aW9uIENhbGN1bGF0aW9uIEFzc2lzdGFuY2UgZGF0YQotCWNhbGNBc3Npc3RhbmNlQlRTCUNhbGNBc3Npc3RhbmNlQlRTCU9QVElPTkFMCi19Ci0KLS0tIEUtT1REIExvY2F0aW9uIGNhbGN1bGF0aW9uIGFzc2lzdGFuY2UgZGF0YSwKLS0tIENhbGNBc3Npc3RhbmNlQlRTIGVsZW1lbnQgaXMgb3B0aW9uYWwgbm90IHN1YmZpZWxkcwotQ2FsY0Fzc2lzdGFuY2VCVFMgOjo9IFNFUVVFTkNFIHsKLQlmaW5lUlRECQkJCUZpbmVSVEQsCQktLSBmaW5lIFJURCB2YWx1ZSBiZXR3ZWVuIGJhc2Ugc3RhdGlvbnMKLQlyZWZlcmVuY2VXR1M4NAkJUmVmZXJlbmNlV0dTODQJLS0gcmVmZXJlbmNlIGNvb3JkaW5hdGVzCi19Ci0KLS0tIENvb3JkaW5hdGVzIG9mIG5laWdoYm91ciBCVFMsIFdHUy04NCBlbGxpcHNvaWQKLVJlZmVyZW5jZVdHUzg0IDo6PSBTRVFVRU5DRSB7Ci0JcmVsYXRpdmVOb3J0aAlSZWxEaXN0YW5jZSwJCQkJLS0gcmVsYXRpdmUgZGlzdGFuY2UgKHNvdXRoIG5lZ2F0aXZlKQotCXJlbGF0aXZlRWFzdAlSZWxEaXN0YW5jZSwJCQkJLS0gcmVsYXRpdmUgZGlzdGFuY2UgKHdlc3QgbmVnYXRpdmUpCi0JLS0gUmVsYXRpdmUgQWx0aXR1ZGUgaXMgbm90IGFsd2F5cyBrbm93bgotCXJlbGF0aXZlQWx0CQlSZWxhdGl2ZUFsdAkJT1BUSU9OQUwJLS0gcmVsYXRpdmUgYWx0aXR1ZGUKLX0KLQotLS0gRmluZSBSVEQgdmFsdWUgYmV0d2VlbiB0aGlzIEJUUyBhbmQgdGhlIHJlZmVyZW5jZSBCVFMJCi1GaW5lUlREIDo6PSBJTlRFR0VSICgwLi4yNTUpCi0KLS0tIFJlbGF0aXZlIG5vcnRoL2Vhc3QgZGlzdGFuY2UKLVJlbERpc3RhbmNlIDo6PSBJTlRFR0VSICgtMjAwMDAwLi4yMDAwMDApCi0KLS0tIFJlbGF0aXZlIGFsdGl0dWRlCi1SZWxhdGl2ZUFsdCA6Oj0gSU5URUdFUiAoLTQwMDAuLjQwMDApCi0KLS0tIE1lYXN1cmUgcG9zaXRpb24gcmVzcG9uc2UgSUVzCi0tLSBSZWZlcmVuY2UgSWRlbnRpdHkKLS0tIE11bHRpcGxlIHNldHMKLU11bHRpcGxlU2V0cyA6Oj0gU0VRVUVOQ0UgewotCS0tIG51bWJlciBvZiByZWZlcmVuY2Ugc2V0cwotCW5ick9mU2V0cwkJCUlOVEVHRVIgKDIuLjMpLAkJCi0KLQktLSBUaGlzIGZpZWxkIGFjdHVhbGx5IHRlbGxzIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlIEJUU3MKLQluYnJPZlJlZmVyZW5jZUJUU3MJSU5URUdFUiAoMS4uMyksCi0KLQktLSBUaGlzIGZpZWxkIGlzIGNvbmRpdGlvbmFsIGFuZCBpbmNsdWRlZCBvcHRpb25hbGx5IG9ubHkgaWYKLQktLSBuYnJPZlNldHMgaXMgMyBhbmQgbnVtYmVyIG9mIHJlZmVyZW5jZSBCVFNzIGlzIDIuCi0JcmVmZXJlbmNlUmVsYXRpb24JCVJlZmVyZW5jZVJlbGF0aW9uCQlPUFRJT05BTAotfQotCi0tLSBSZWxhdGlvbiBiZXR3ZWVuIHJlZmVuY2UgQlRTcyBhbmQgc2V0cwotUmVmZXJlbmNlUmVsYXRpb24gOjo9IEVOVU1FUkFURUQgewotCXNlY29uZEJUU1RoaXJkU2V0ICgwKSwJLS0gMXN0IEJUUyByZWxhdGVkIHRvIDFzdCBhbmQgMm5kIHNldHMKLQlzZWNvbmRCVFNTZWNvbmRTZXQgKDEpLAktLSAxc3QgQlRTIHJlbGF0ZWQgdG8gMXN0IGFuZCAzcmQgc2V0cwotCWZpcnN0QlRTRmlyc3RTZXQgKDIpCS0tIDFzdCBCVFMgcmVsYXRlZCB0byAxc3Qgc2V0Ci19Ci0KLS0tIFJlZmVyZW5jZSBCVFMgSWRlbnRpdHksIHRoaXMgZWxlbWVudCBjb250YWlucyBudW1iZXIgb2YKLS0tIEJUU3MgdG9sZCBuYnJPZlJlZmVyZW5jZUJUU3MgZmllbGQgaW4gTXVsdGlwbGUgc2V0cyBlbGVtZW50KQotUmVmZXJlbmNlSWRlbnRpdHkgOjo9IFNFUVVFTkNFIHsKLQktLSBSZWZlcmVuY2UgQlRTIGxpc3QKLQlyZWZCVFNMaXN0CQlTZXFPZlJlZmVyZW5jZUlkZW50aXR5VHlwZQotfQotU2VxT2ZSZWZlcmVuY2VJZGVudGl0eVR5cGUgOjo9IFNFUVVFTkNFIChTSVpFKDEuLjMpKSBPRiBSZWZlcmVuY2VJZGVudGl0eVR5cGUKLQotLS0gQ2VsbCBpZGVudGl0eQotUmVmZXJlbmNlSWRlbnRpdHlUeXBlIDo6PSBDSE9JQ0UgewotCWJzaWNBbmRDYXJyaWVyCUJTSUNBbmRDYXJyaWVyLAkJLS0gQlNJQyBhbmQgQ2FycmllcgotCWNpCQkJCUNlbGxJRCwJCQkJLS0gQ2VsbCBJRCwgTEFDIG5vdCBuZWVkZWQKLQlyZXF1ZXN0SW5kZXgJUmVxdWVzdEluZGV4LAkJLS0gSW5kZXggdG8gUmVxdWVzdGVkIE5laWdoYm9yIExpc3QKLQlzeXN0ZW1JbmZvSW5kZXgJU3lzdGVtSW5mb0luZGV4LAktLSBJbmRleCB0byBTeXN0ZW0gaW5mbyBsaXN0LCB0aGlzIHR5cGUgb2YgcmVmLiBpZGVudGl0eQotCQkJCQkJCQkJCS0tIHNoYWxsIG5vdCBiZSB1c2VkIGJ5IHRoZSBNUyB1bmxlc3MgaXQgaGFzIHJlY2VpdmVkCi0JCQkJCQkJCQkJLS0gdGhlIFN5c3RlbUluZm9Bc3Npc3REYXRhIGZyb20gdGhlIFNNTEMgZm9yIHRoaXMgY2VsbC4KLQljaUFuZExBQwkJQ2VsbElEQW5kTEFDCQktLSBDSSBhbmQgTEFDCi19Ci0KLUJTSUNBbmRDYXJyaWVyIDo6PSBTRVFVRU5DRSB7Ci0JY2FycmllcglCQ0NIQ2FycmllciwKLQlic2ljCQlCU0lDCi19Ci0KLVJlcXVlc3RJbmRleCA6Oj0gSU5URUdFUiAoMS4uMTYpCi0KLVN5c3RlbUluZm9JbmRleCA6Oj0gSU5URUdFUiAoMS4uMzIpCi0KLUNlbGxJREFuZExBQyA6Oj0gU0VRVUVOQ0UgewotCXJlZmVyZW5jZUxBQwlMQUNJRCwJCQkJLS0gTG9jYXRpb24gYXJlYSBjb2RlCi0JcmVmZXJlbmNlQ0kJCUNlbGxJRAkJCQktLSBDZWxsIGlkZW50aXR5Ci19Ci1DZWxsSUQgOjo9IElOVEVHRVIgKDAuLjY1NTM1KQotTEFDSUQgOjo9IElOVEVHRVIgKDAuLjY1NTM1KQotCi0tLSBPVEQtTWVhc3VyZUluZm8KLU9URC1NZWFzdXJlSW5mbyA6Oj0gU0VRVUVOQ0UgewotCS0tIE1lYXN1cmVtZW50IGluZm8gZWxlbWVudHMsIE9URC1Nc3JFbGVtZW50IGlzIHJlcGVhdGVkIG51bWJlciBvZiB0aW1lcwotCS0tIHRvbGQgaW4gbmJyT2ZSZWZlcmVuY2VCVFNzIGluIE11bHRpcGxlU2V0cywgZGVmYXVsdCB2YWx1ZSBpcyAxCi0Jb3RkTXNyRmlyc3RTZXRzCQlPVEQtTXNyRWxlbWVudEZpcnN0LAotCi0JLS0gaWYgbW9yZSB0aGFuIG9uZSBzZXRzIGFyZSBwcmVzZW50IHRoaXMgZWxlbWVudCBpcyByZXBlYXRlZAotCS0tIE51bWJlck9mU2V0cyAtIDEgKC0xID0gZmlyc3Qgc2V0KQotCW90ZE1zclJlc3RTZXRzCQlTZXFPZk9URC1Nc3JFbGVtZW50UmVzdAkJT1BUSU9OQUwKLX0KLQotU2VxT2ZPVEQtTXNyRWxlbWVudFJlc3QgOjo9IFNFUVVFTkNFIChTSVpFKDEuLjIpKSBPRiBPVEQtTXNyRWxlbWVudFJlc3QKLQotLS0gT1REIG1lYXN1cmVudCBpbmZvcm1hdGlvbiBmb3IgMSBzZXQKLU9URC1Nc3JFbGVtZW50Rmlyc3QgOjo9IFNFUVVFTkNFIHsKLQlyZWZGcmFtZU51bWJlcgkJCUlOVEVHRVIgKDAuLjQyNDMxKSwgCQkJCS0tIEZyYW1lIG51bWJlciBtb2R1bG8gNDI0MzIKLQlyZWZlcmVuY2VUaW1lU2xvdAkJTW9kdWxvVGltZVNsb3QsCi0JdG9hTWVhc3VyZW1lbnRzT2ZSZWYJVE9BLU1lYXN1cmVtZW50c09mUmVmCU9QVElPTkFMLAotCXN0ZFJlc29sdXRpb24JCQlTdGRSZXNvbHV0aW9uLAotCXRhQ29ycmVjdGlvbgkJCUlOVEVHRVIgKDAuLjk2MCkJCU9QVElPTkFMLAktLSBUQSBjb3JyZWN0aW9uCi0KLQktLSBtZWFzdXJlZCBuZWlnaGJvcnMgaW4gT1REIG1lYXN1cmVtZW50cwotCW90ZC1GaXJzdFNldE1zcnMgCQlTZXFPZk9URC1GaXJzdFNldE1zcnMgCU9QVElPTkFMCi19Ci1TZXFPZk9URC1GaXJzdFNldE1zcnMgOjo9IFNFUVVFTkNFIChTSVpFKDEuLjEwKSkgT0YgT1RELUZpcnN0U2V0TXNycwotCi0tLSBPVEQgbWVhc3VyZW50IGluZm9ybWF0aW9uIDIgYW5kIDMgc2V0cyBpZiBleGlzdAotT1RELU1zckVsZW1lbnRSZXN0IDo6PSBTRVFVRU5DRSB7Ci0JcmVmRnJhbWVOdW1iZXIJCQlJTlRFR0VSICgwLi40MjQzMSksIAkJCQkJLS0gRnJhbWUgbnVtYmVyIG1vZHVsbyA0MjQzMgotCXJlZmVyZW5jZVRpbWVTbG90CQlNb2R1bG9UaW1lU2xvdCwKLQl0b2FNZWFzdXJlbWVudHNPZlJlZglUT0EtTWVhc3VyZW1lbnRzT2ZSZWYJCU9QVElPTkFMLAotCXN0ZFJlc29sdXRpb24JCQlTdGRSZXNvbHV0aW9uLAotCXRhQ29ycmVjdGlvbgkJCUlOVEVHRVIgKDAuLjk2MCkJCQlPUFRJT05BTCwJLS0gVEEgY29ycmVjdGlvbgotCi0JLS0gbWVhc3VyZWQgbmVpZ2hib3JzIGluIE9URCBtZWFzdXJlbWVudHMKLQlvdGQtTXNyc09mT3RoZXJTZXRzIAlTZXFPZk9URC1Nc3JzT2ZPdGhlclNldHMJT1BUSU9OQUwKLX0KLVNlcU9mT1RELU1zcnNPZk90aGVyU2V0cyA6Oj0gU0VRVUVOQ0UgKFNJWkUoMS4uMTApKSBPRiBPVEQtTXNyc09mT3RoZXJTZXRzCi0KLS0tIFN0YW5kYXJkIGRldmlhdGlvbiBvZiB0aGUgVE9BIG1lYXN1cmVtZW50cyBmcm9tIHRoZSByZWZlcmVuY2UgQlRTCi1UT0EtTWVhc3VyZW1lbnRzT2ZSZWYgOjo9IFNFUVVFTkNFIHsKLQlyZWZRdWFsaXR5CQkJUmVmUXVhbGl0eSwKLQludW1PZk1lYXN1cmVtZW50cwlOdW1PZk1lYXN1cmVtZW50cwotfQotCi1SZWZRdWFsaXR5IDo6PSBJTlRFR0VSICgwLi4zMSkJCQktLSBTdCBEZXYgb2YgVE9BIG9mIHJlZmVyZW5jZSBhcyBkZWZpbmVkIGluIGFubmV4Ci1OdW1PZk1lYXN1cmVtZW50cyA6Oj0gSU5URUdFUiAoMC4uNykJLS0gTm8uIG9mIG1lYXN1cmVtZW50cyBmb3IgUmVmUXVhbGl0eSBhcyBkZWZpbmVkIGluIGFubmV4Ci1TdGRSZXNvbHV0aW9uIDo6PSBJTlRFR0VSICgwLi4zKQkJLS0gVmFsdWVzIG9mIHJlc29sdXRpb24gYXJlIGRlZmluZWQgaW4gYW5uZXgKLQotT1RELUZpcnN0U2V0TXNycyA6Oj0gT1RELU1lYXN1cmVtZW50V2l0aElECi0KLS0tIE5laWdoYm91ciBpbmZvIGluIE9URCBtZWFzdXJlbWVudHMgMC0xMCB0aW1lcyBpbiBURCBtZWFzdXJlbWVudCBpbmZvCi1PVEQtTXNyc09mT3RoZXJTZXRzIDo6PSBDSE9JQ0UgewotCWlkZW50aXR5Tm90UHJlc2VudAlPVEQtTWVhc3VyZW1lbnQsCQotCWlkZW50aXR5UHJlc2VudAkJT1RELU1lYXN1cmVtZW50V2l0aElECi19Ci0KLS0tIEZvciB0aGlzIE9URCBtZWFzdXJlbWVudCBpZGVudGl0eSBpcyBzYW1lIGFzIHRoZSBpZGVudGl0eSBvZiBCVFMKLS0tIGluIHRoZSBmaXJzdCBzZXQgd2l0aCBzYW1lIHNlcXVlbmNlIG51bWJlcgotT1RELU1lYXN1cmVtZW50IDo6PSBTRVFVRU5DRSB7Ci0JbmJvclRpbWVTbG90CU1vZHVsb1RpbWVTbG90LAotCWVvdGRRdWFsaXR5CQlFT1REUXVhbGl0eSwKLQlvdGRWYWx1ZQkJT1REVmFsdWUKLX0KLQotLS0gVGhpcyBtZWFzdXJlbWVudCBjb250YWlucyB0aGUgQlRTIGlkZW50aXR5IGFuZCBtZWFzdXJlbWVudAotT1RELU1lYXN1cmVtZW50V2l0aElEIDo6PVNFUVVFTkNFIHsKLQluZWlnaGJvcklkZW50aXR5CU5laWdoYm9ySWRlbnRpdHksCi0JbmJvclRpbWVTbG90CQlNb2R1bG9UaW1lU2xvdCwKLQllb3RkUXVhbGl0eQkJCUVPVERRdWFsaXR5LAotCW90ZFZhbHVlCQkJT1REVmFsdWUKLX0KLQotRU9URFF1YWxpdHkgOjo9IFNFUVVFTkNFIHsKLQluYnJPZk1lYXN1cmVtZW50cwlJTlRFR0VSCSgwLi43KSwKLQlzdGRPZkVPVEQJCQlJTlRFR0VSICgwLi4zMSkKLX0KLQotTmVpZ2hib3JJZGVudGl0eSA6Oj0gQ0hPSUNFIHsKLQlic2ljQW5kQ2FycmllcgkJQlNJQ0FuZENhcnJpZXIsCQktLSBCU0lDIGFuZCBDYXJyaWVyCi0JY2kJCQkJCUNlbGxJRCwJCQkJLS0gQ2VsbCBJRCwgTEFDIG5vdCBuZWVkZWQKLQltdWx0aUZyYW1lQ2FycmllcglNdWx0aUZyYW1lQ2FycmllciwgCS0tIE11bHRpRnJhbWVPZmZlc3QgYW5kIEJTSUMKLQlyZXF1ZXN0SW5kZXgJCVJlcXVlc3RJbmRleCwJCS0tIEluZGV4IHRvIFJlcXVlc3RlZCBOZWlnaGJvciBMaXN0Ci0Jc3lzdGVtSW5mb0luZGV4CQlTeXN0ZW1JbmZvSW5kZXgsCS0tIEluZGV4IHRvIFN5c3RlbSBpbmZvIGxpc3QsIHRoaXMgdHlwZSBvZiBuZWlnaGJvdXIKLQkJCQkJCQkJCQkJLS0gaWRlbnRpdHkgc2hhbGwgbm90IGJlIHVzZWQgYnkgdGhlIE1TIHVubGVzcyBpdCBoYXMKLQkJCQkJCQkJCQkJLS0gcmVjZWl2ZWQgdGhlIFN5c3RlbUluZm9Bc3Npc3REYXRhIGZyb20gdGhlIFNNTEMgZm9yCi0JCQkJCQkJCQkJCS0tIHRoaXMgY2VsbC4KLQljaUFuZExBQwkJCUNlbGxJREFuZExBQwkJLS0gQ0kgYW5kIExBQwotfQotCi0tLSBNdWx0aWZyYW1lIGFuZCBjYXJyaWVyCi1NdWx0aUZyYW1lQ2FycmllciA6Oj0gU0VRVUVOQ0UgewotCWJjY2hDYXJyaWVyCQkJQkNDSENhcnJpZXIsCi0JbXVsdGlGcmFtZU9mZnNldAlNdWx0aUZyYW1lT2Zmc2V0Ci19Ci0KLS0tIE9URCBtZWFzdXJlbWVudCB2YWx1ZSBmb3IgbmVpZ2hib3VyCi1PVERWYWx1ZSA6Oj0gSU5URUdFUiAoMC4uMzk5OTkpCi0KLS0tIExvY2F0aW9uIGluZm9ybWF0aW9uIElFCi1Mb2NhdGlvbkluZm8gOjo9IFNFUVVFTkNFIHsKLQlyZWZGcmFtZQkJSU5URUdFUiAoMC4uNjU1MzUpLAkJCS0tIFJlZmVyZW5jZSBGcmFtZSBudW1iZXIKLQktLSBJZiByZWZGcmFtZSBpcyB3aXRoaW4gKDQyNDMyLi42NTUzNSksIGl0IHNoYWxsIGJlIGlnbm9yZWQgYnkgdGhlIHJlY2VpdmVyCi0JLS0gaW4gdGhhdCBjYXNlIHRoZSBNUyBzaG91bGQgcHJvdmlkZSBHUFMgVE9XIGlmIGF2YWlsYWJsZQotCWdwc1RPVwkJCUlOVEVHRVIgKDAuLjE0Mzk5OTk5KQlPUFRJT05BTCwJLS0gR1BTIFRPVwotCWZpeFR5cGUJCQlGaXhUeXBlLAotCS0tIE5vdGUgdGhhdCBhcHBsaWNhYmxlIHJhbmdlIGZvciByZWZGcmFtZSBpcyAwIC0gNDI0MzEKLQktLSBQb3NzaWJsZSBzaGFwZXMgY2FycmllZCBpbiBwb3NFc3RpbWF0ZSBhcmUKLQktLSBlbGxpcHNvaWQgcG9pbnQsCi0JLS0gZWxsaXBzb2lkIHBvaW50IHdpdGggdW5jZXJ0YWludHkgY2lyY2xlCi0JLS0gZWxsaXBzb2lkIHBvaW50IHdpdGggdW5jZXJ0YWludHkgZWxsaXBzZQotCS0tIGVsbGlwc29pZCBwb2ludCB3aXRoIGFsdGl0dWRlIGFuZCB1bmNlcnRhaW50eSBlbGxpcHNvaWQKLQlwb3NFc3RpbWF0ZQkJRXh0LUdlb2dyYXBoaWNhbEluZm9ybWF0aW9uCi19Ci0KLUZpeFR5cGUgOjo9IElOVEVHRVIgewotCXR3b0RGaXggKDApLAotCXRocmVlREZpeCAoMSkKLX0gKDAuLjEpCi0KLS0tIEdQUy1NZWFzdXJlbWVudCBpbmZvcm1hdGlvbgotR1BTLU1lYXN1cmVJbmZvIDo6PSBTRVFVRU5DRSB7Ci0JLS0gTWVhc3VyZW1lbnQgaW5mbyBlbGVtZW50cwotCS0tIHVzZXIgaGFzIHRvIG1ha2Ugc3VyZSB0aGF0IGluIHRoaXMgZWxlbWVudCBpcyBudW1iZXIgb2YgZWxlbWVudHMKLQktLSBkZWZpbmVkIGluIHJlZmVyZW5jZSBCVFMgaWRlbnRpdHkKLQlncHNNc3JTZXRMaXN0CVNlcU9mR1BTLU1zclNldEVsZW1lbnQJCi19Ci1TZXFPZkdQUy1Nc3JTZXRFbGVtZW50IDo6PSBTRVFVRU5DRSAoU0laRSgxLi4zKSkgT0YgR1BTLU1zclNldEVsZW1lbnQKLQotLS0gT1REIG1lYXN1cmVudCBpbmZvcm1hdGlvbiAxLTMgdGltZXMgaW4gbWVzc2FnZQotR1BTLU1zclNldEVsZW1lbnQgOjo9IFNFUVVFTkNFIHsKLQlyZWZGcmFtZQkJSU5URUdFUiAoMC4uNjU1MzUpCU9QVElPTkFMLCAJLS0gUmVmZXJlbmNlIEZyYW1lIG51bWJlcgotCWdwc1RPVwkJCUdQU1RPVzI0YiwJCQkJCQktLSBHUFMgVE9XCi0JLS0gTm90ZSB0aGF0IGFwcGxpY2FibGUgcmFuZ2UgZm9yIHJlZkZyYW1lIGlzIDAgLSA0MjQzMQotCi0tLU5fU0FUIGNhbiBiZSByZWFkIGZyb20gbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGdwcy1tc3JMaXN0Ci0KLQlncHMtbXNyTGlzdAkJU2VxT2ZHUFMtTXNyRWxlbWVudAotfQotCi0tLSAyNCBiaXQgcHJlc2VudGF0aW9uIGZvciBHUFNUT1cKLUdQU1RPVzI0YiA6Oj0gSU5URUdFUiAoMC4uMTQzOTk5OTkpCi0KLS0tIG1lYXN1cmVkIGVsZW1lbnRzIGluIG1lYXN1cmVtZW50IHBhcmFtZXRlcnMgZmllbGQKLVNlcU9mR1BTLU1zckVsZW1lbnQgOjo9IFNFUVVFTkNFIChTSVpFKDEuLjE2KSkgT0YgR1BTLU1zckVsZW1lbnQKLQotR1BTLU1zckVsZW1lbnQgOjo9IFNFUVVFTkNFIHsKLQlzYXRlbGxpdGVJRAkJU2F0ZWxsaXRlSUQsCQkJCS0tIFNhdGVsbGl0ZSBpZGVudGlmaWVyCi0JY05vCQkJCUlOVEVHRVIgKDAuLjYzKSwJCQktLSBjYXJyaWVyIG5vaXNlIHJhdGlvCi0JZG9wcGxlcgkJCUlOVEVHRVIgKC0zMjc2OC4uMzI3NjcpLCAJLS0gZG9wcGxlciwgbXVsbHRpcGx5IGJ5IDAuMgotCXdob2xlQ2hpcHMJCUlOVEVHRVIgKDAuLjEwMjIpLAkJCS0tIHdob2xlIHZhbHVlIG9mIHRoZSBjb2RlIHBoYXNlIG1lYXN1cmVtZW50Ci0JZnJhY0NoaXBzCQlJTlRFR0VSICgwLi4xMDI0KSwJCQktLSBmcmFjdGlvbmFsIHZhbHVlIG9mIHRoZSBjb2RlIHBoYXNlIG1lYXN1cmVtZW50Ci0JCQkJCQkJCQkJCS0tIGEgdmFsdWUgb2YgMTAyNCBzaGFsbCBub3QgYmUgZW5jb2RlZCBieSB0aGUgc2VuZGVyCi0JCQkJCQkJCQkJCS0tIHRoZSByZWNlaXZlciBzaGFsbCBjb25zaWRlciBhIHZhbHVlIG9mIDEwMjQgdG8gYmUKLQkJCQkJCQkJCQkJLS0gaW52YWxpZCBkYXRhCi0JbXBhdGhJbmRpYwkJTXBhdGhJbmRpYywJCQkJCS0tIG11bHRpcGF0aCBpbmRpY2F0b3IKLQlwc2V1UmFuZ2VSTVNFcnIJSU5URUdFUiAoMC4uNjMpCQkJCS0tIGluZGV4CQkKLX0KLQotLS0gTXVsdGlwYXRoIGluZGljYXRvcgotTXBhdGhJbmRpYyA6Oj0gRU5VTUVSQVRFRCB7Ci0Jbm90TWVhc3VyZWQgKDApLAotCWxvdyAoMSksCi0JbWVkaXVtICgyKSwKLQloaWdoICgzKQotfQotCi0tLSBMb2NhdGlvbiBlcnJvciBJRQotTG9jYXRpb25FcnJvciA6Oj0gU0VRVUVOQ0UgewotCWxvY0Vycm9yUmVhc29uCQkJCUxvY0Vycm9yUmVhc29uLAotCWFkZGl0aW9uYWxBc3Npc3RhbmNlRGF0YQlBZGRpdGlvbmFsQXNzaXN0YW5jZURhdGEJT1BUSU9OQUwsCi0JLi4uCi19Ci0KLUxvY0Vycm9yUmVhc29uIDo6PSBFTlVNRVJBVEVEIHsKLQl1bkRlZmluZWQgKDApLAkKLQlub3RFbm91Z2hCVFNzICgxKSwKLQlub3RFbm91Z2hTYXRzICgyKSwKLQllb3RkTG9jQ2FsQXNzRGF0YU1pc3NpbmcgKDMpLAotCWVvdGRBc3NEYXRhTWlzc2luZyAoNCksCi0JZ3BzTG9jQ2FsQXNzRGF0YU1pc3NpbmcgKDUpLAotCWdwc0Fzc0RhdGFNaXNzaW5nICg2KSwKLQltZXRob2ROb3RTdXBwb3J0ZWQgKDcpLAotCW5vdFByb2Nlc3NlZCAoOCksCi0JcmVmQlRTRm9yR1BTTm90U2VydmluZ0JUUyAoOSksCi0JcmVmQlRTRm9yRU9URE5vdFNlcnZpbmdCVFMgKDEwKSwKLQkuLi4sCi0Jbm90RW5vdWdoR0FOU1NTYXRzICgxMSksCQotIGdhbnNzQXNzRGF0YU1pc3NpbmcgKDEyKSwKLQlyZWZCVFNGb3JHQU5TU05vdFNlcnZpbmdCVFMgKDEzKQotfQotCi0tLSBleGNlcHRpb24gaGFuZGxpbmc6Ci0tLSBhbiB1bnJlY29nbml6ZWQgdmFsdWUgc2hhbGwgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyB2YWx1ZSAwCi0KLQotLS0gZGVmaW5lcyBhZGRpdGlvbmFsIGFzc2lzdGFuY2UgZGF0YSBuZWVkZWQgZm9yIGFueSBuZXcgbG9jYXRpb24gYXR0ZW1wdAotLS0gTVMgc2hhbGwgcmV0YWluIGFueSBhc3Npc3RhbmNlIGRhdGEgYWxyZWFkeSByZWNlaXZlZAotQWRkaXRpb25hbEFzc2lzdGFuY2VEYXRhIDo6PSBTRVFVRU5DRSB7Ci0JZ3BzQXNzaXN0YW5jZURhdGEJCUdQU0Fzc2lzdGFuY2VEYXRhCQlPUFRJT05BTCwKLQlleHRlbnNpb25Db250YWluZXIJCUV4dGVuc2lvbkNvbnRhaW5lcgkJT1BUSU9OQUwsCi0JLi4uLAotCWdhbnNzQXNzaXN0YW5jZURhdGEgR0FOU1NBc3Npc3RhbmNlRGF0YSBPUFRJT05BTAotfQotCi1HUFNBc3Npc3RhbmNlRGF0YSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi5tYXhHUFNBc3Npc3RhbmNlRGF0YSkpCi0tLSBHUFNBc3Npc3RhbmNlRGF0YSBoYXMgaWRlbnRpY2FsIHN0cnVjdHVyZSBhbmQgZW5jb2RpbmcgdG8gb2N0ZXRzIDMgdG8gbiBvZiB0aGUKLS0tIEdQUyBBc3Npc3RhbmNlIERhdGEgSUUgaW4gM0dQUCBUUyA0OS4wMzEKLQotbWF4R1BTQXNzaXN0YW5jZURhdGEJSU5URUdFUiA6Oj0gNDAKLQotR0FOU1NBc3Npc3RhbmNlRGF0YSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi5tYXhHQU5TU0Fzc2lzdGFuY2VEYXRhKSkKLS0tIEdBTlNTQXNzaXN0YW5jZURhdGEgaGFzIGlkZW50aWNhbCBzdHJ1Y3R1cmUgYW5kIGVuY29kaW5nIHRvIG9jdGV0cyAzIHRvIG4gb2YgdGhlCi0tLSBHQU5TUyBBc3Npc3RhbmNlIERhdGEgSUUgaW4gM0dQUCBUUyA0OS4wMzEKLQotbWF4R0FOU1NBc3Npc3RhbmNlRGF0YQlJTlRFR0VSIDo6PSA0MAotCi0KLS0tIFByb3RvY29sIEVycm9yIENhdXNlcwotRXJyb3JDb2RlcyA6Oj0gRU5VTUVSQVRFRCB7Ci0JdW5EZWZpbmVkICgwKSwKLW1pc3NpbmdDb21wb25ldCAoMSksCQkJCi1pbmNvcnJlY3REYXRhICgyKSwJCQkKLW1pc3NpbmdJRW9yQ29tcG9uZW50RWxlbWVudCAoMyksCQkKLW1lc3NhZ2VUb29TaG9ydCAoNCksCQkJCi11bmtub3dSZWZlcmVuY2VOdW1iZXIgKDUpLAkJCi0uLi4KLX0KLQotLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgotLS0gYW4gdW5yZWNvZ25pemVkIHZhbHVlIHNoYWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgdmFsdWUgMAotCi0tLSBHUFMgYXNzaXN0YW5jZSBkYXRhIElFCi1HUFMtQXNzaXN0RGF0YSA6Oj0gU0VRVUVOQ0UgewotCWNvbnRyb2xIZWFkZXIJCUNvbnRyb2xIZWFkZXIKLX0KLQotLS0gTW9yZSBBc3Npc3RhbmNlIERhdGEgVG8gQmUgU2VudCBJRQotLS0gTW9yZSBBc3Npc3RhbmNlIERhdGEgQ29tcG9uZW50cyBPbiB0aGUgV2F5IGluZGljYXRpb24gZm9yIGRlbGl2ZXJ5IG9mIGFuIGVudGlyZSBzZXQgb2YgYXNzaXN0YW5jZQotLS0gZGF0YSBpbiBtdWx0aXBsZSBBc3Npc3RhbmNlIERhdGEgY29tcG9uZW50cy4KLQotTW9yZUFzc0RhdGFUb0JlU2VudCA6Oj0gRU5VTUVSQVRFRCB7Ci0Jbm9Nb3JlTWVzc2FnZXMgKDApLAkJCS0tIFRoaXMgaXMgdGhlIG9ubHkgb3IgbGFzdCBBc3Npc3RhbmNlIERhdGEgbWVzc2FnZSB1c2VkIHRvIGRlbGl2ZXIKLQkJCQkJCQkJLS0gdGhlIGVudGlyZSBzZXQgb2YgYXNzaXN0YW5jZSBkYXRhLgotCW1vcmVNZXNzYWdlc09uVGhlV2F5ICgxKQktLSBUaGUgU01MQyB3aWxsIHNlbmQgbW9yZSBBc3Npc3RhbmNlIERhdGEgbWVzc2FnZXMgb3IgYSBmaW5hbCBSUkxQCi0JCQkJCQkJCS0tIE1lYXN1cmUgUG9zaXRpb24gUmVxdWVzdCBtZXNzYWdlIHRvIGRlbGl2ZXIgdGhlCi0JCQkJCQkJCS0tIHRoZSBlbnRpcmUgc2V0IG9mIGFzc2lzdGFuY2UgZGF0YS4KLX0KLQotLS0gQ29udHJvbCBoZWFkZXIgb2YgdGhlIEdQUyBhc3Npc3RhbmNlIGRhdGEKLUNvbnRyb2xIZWFkZXIgOjo9IFNFUVVFTkNFIHsKLQotCS0tIEZpZWxkIHR5cGUgUHJlc2VudCBpbmZvcm1hdGlvbgotCXJlZmVyZW5jZVRpbWUJCVJlZmVyZW5jZVRpbWUJCU9QVElPTkFMLAotCXJlZkxvY2F0aW9uCQkJUmVmTG9jYXRpb24JCQlPUFRJT05BTCwKLQlkZ3BzQ29ycmVjdGlvbnMJCURHUFNDb3JyZWN0aW9ucwkJT1BUSU9OQUwsCi0JbmF2aWdhdGlvbk1vZGVsCQlOYXZpZ2F0aW9uTW9kZWwJCU9QVElPTkFMLAotCWlvbm9zcGhlcmljTW9kZWwJCUlvbm9zcGhlcmljTW9kZWwJCU9QVElPTkFMLAotCXV0Y01vZGVsCQkJVVRDTW9kZWwJCQlPUFRJT05BTCwKLQlhbG1hbmFjCQkJQWxtYW5hYwkJCU9QVElPTkFMLAotCWFjcXVpc0Fzc2lzdAkJQWNxdWlzQXNzaXN0CQlPUFRJT05BTCwKLQlyZWFsVGltZUludGVncml0eSBTZXFPZi1CYWRTYXRlbGxpdGVTZXQgT1BUSU9OQUwKLX0KLQotUmVmZXJlbmNlVGltZSA6Oj0gU0VRVUVOQ0UgewotCWdwc1RpbWUJCQkJR1BTVGltZSwKLQlnc21UaW1lCQkJCUdTTVRpbWUJCQkJT1BUSU9OQUwsCi0JZ3BzVG93QXNzaXN0CQlHUFNUT1dBc3Npc3QJCU9QVElPTkFMCi19Ci0KLS0tIEdQUyBUaW1lIGluY2x1ZGVzIHdlZWsgbnVtYmVyIGFuZCB0aW1lLW9mLXdlZWsgKFRPVykKLUdQU1RpbWUgOjo9IFNFUVVFTkNFIHsKLQlncHNUT1cyM2IJCQlHUFNUT1cyM2IsCi0JZ3BzV2VlawkJCQlHUFNXZWVrCi19Ci0KLS0tIEdQU1RPVywgcmFuZ2UgMC02MDQ3OTkuOTIsIHJlc29sdXRpb24gMC4wOCBzZWMsIDIzLWJpdCBwcmVzZW50YXRpb24KLUdQU1RPVzIzYiA6Oj0gSU5URUdFUiAoMC4uNzU1OTk5OSkKLQotLS0gR1BTIHdlZWsgbnVtYmVyCi1HUFNXZWVrIDo6PSBJTlRFR0VSICgwLi4xMDIzKQotCi0tLSBHUFNUT1dBc3Npc3QgY29uc2lzdHMgb2YgVExNIG1lc3NhZ2UsIEFudGktc3Bvb2YgZmxhZywgQWxlcnQgZmxhZywgYW5kIDIgcmVzZXJ2ZWQgYml0cyBpbiBUTE0gV29yZAotLS0gZm9yIGVhY2ggdmlzaWJsZSBzYXRlbGxpdGUuCi0tLSBOX1NBVCBjYW4gYmUgcmVhZCBmcm9tIG51bWJlciBvZiBlbGVtZW50cyBpbiBHUFNUT1dBc3Npc3QKLUdQU1RPV0Fzc2lzdCA6Oj0gU0VRVUVOQ0UgKFNJWkUoMS4uMTIpKSBPRiBHUFNUT1dBc3Npc3RFbGVtZW50Ci0KLUdQU1RPV0Fzc2lzdEVsZW1lbnQgOjo9IFNFUVVFTkNFIHsKLQlzYXRlbGxpdGVJRAkJCVNhdGVsbGl0ZUlELAotCXRsbVdvcmQJCQkJVExNV29yZCwKLQlhbnRpU3Bvb2YJCQlBbnRpU3Bvb2ZGbGFnLAotCWFsZXJ0CQkJCUFsZXJ0RmxhZywKLQl0bG1Sc3ZkQml0cwkJCVRMTVJlc2VydmVkQml0cwotfQotCi0tLSBUTE0gV29yZCwgMTQgYml0cwotVExNV29yZCA6Oj0gSU5URUdFUiAoMC4uMTYzODMpCi0KLS0tIEFudGktU3Bvb2YgZmxhZwotQW50aVNwb29mRmxhZyA6Oj0gSU5URUdFUiAoMC4uMSkKLQotLS0gQWxlcnQgZmxhZwotQWxlcnRGbGFnIDo6PSBJTlRFR0VSICgwLi4xKQotCi0tLSBSZXNlcnZlZCBiaXRzIGluIFRMTSB3b3JkLCBNU0Igb2NjdXJzIGVhcmxpZXIgaW4gVExNIFdvcmQgdHJhbnNtaXR0ZWQgYnkgc2F0ZWxsaXRlCi1UTE1SZXNlcnZlZEJpdHMgOjo9IElOVEVHRVIgKDAuLjMpCi0KLUdTTVRpbWUgOjo9IFNFUVVFTkNFIHsKLQliY2NoQ2FycmllcgkJQkNDSENhcnJpZXIsCS0tIEJDQ0ggY2FycmllcgotCWJzaWMJCQlCU0lDLAkJCS0tIEJTSUMKLQlmcmFtZU51bWJlcgkJRnJhbWVOdW1iZXIsCi0JdGltZVNsb3QJCVRpbWVTbG90LAotCWJpdE51bWJlcgkJQml0TnVtYmVyCi19Ci0KLS0tIEZyYW1lIG51bWJlcgotRnJhbWVOdW1iZXIgOjo9IElOVEVHRVIgKDAuLjIwOTcxNTEpCi0KLS0tIFRpbWUgc2xvdCBudW1iZXIKLVRpbWVTbG90IDo6PSBJTlRFR0VSICgwLi43KQotCi0tLSBCaXQgbnVtYmVyCi1CaXROdW1iZXIgOjo9IElOVEVHRVIgKDAuLjE1NikKLQotCi0tLSBSZWZlcmVuY2UgTG9jYXRpb24gSUUKLVJlZkxvY2F0aW9uIDo6PSBTRVFVRU5DRSB7Ci0JdGhyZWVETG9jYXRpb24JCQlFeHQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24KLX0KLQotLS0gREdQUyBDb3JyZWN0aW9ucyBJRQotREdQU0NvcnJlY3Rpb25zIDo6PSBTRVFVRU5DRSB7Ci0KLQlncHNUT1cJCUlOVEVHRVIgKDAuLjYwNDc5OSksCS0tIERHUFMgcmVmZXJlbmNlIHRpbWUKLQlzdGF0dXMJCUlOVEVHRVIgKDAuLjcpLAotCS0tIE5fU0FUIGNhbiBiZSByZWFkIGZyb20gbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHNhdExpc3QKLQlzYXRMaXN0CQlTZXFPZlNhdEVsZW1lbnQgCQotfQotU2VxT2ZTYXRFbGVtZW50IDo6PSBTRVFVRU5DRSAoU0laRSAoMS4uMTYpKSBPRiBTYXRFbGVtZW50Ci0KLS0tIG51bWJlciBvZiBjb3JyZWN0aW9uIGZvciBzYXRlbGxpdGVzCi1TYXRFbGVtZW50IDo6PSBTRVFVRU5DRSB7Ci0Jc2F0ZWxsaXRlSUQJCVNhdGVsbGl0ZUlELAotCi0KLS0tLSBTZXF1ZW5jZSBudW1iZXIgZm9yIGVwaGVtZXJpcwotCWlvZGUgCQkJSU5URUdFUiAoMC4uMjM5KSwKLQktLSBVc2VyIERpZmZlcmVudGlhbCBSYW5nZSBFcnJvcgotCXVkcmUJCQlJTlRFR0VSICgwLi4zKSwJCQotCi0JLS0gUHNldWRvIFJhbmdlIENvcnJlY3Rpb24sIHJhbmdlIGlzCi0JLS0gLTY1NS4wNCAtICs2NTUuMDQsCi0JcHNldWRvUmFuZ2VDb3IJSU5URUdFUiAoLTIwNDcuLjIwNDcpLCAJCi0KLQktLSBQc2V1ZG8gUmFuZ2UgUmF0ZSBDb3JyZWN0aW9uLCByYW5nZSBpcwotCS0tIC00LjA2NCAtICs0LjA2NCwKLQlyYW5nZVJhdGVDb3IJSU5URUdFUiAoLTEyNy4uMTI3KSwKLQotLS0gRGVsdGEgUHNldWRvIFJhbmdlIENvcnJlY3Rpb24gMiAJCi0JZGVsdGFQc2V1ZG9SYW5nZUNvcjIgCUlOVEVHRVIgKC0xMjcuLjEyNyksCS0tIFRoaXMgSUUgc2hhbGwgYmUgaWdub3JlZCBieSB0aGUgcmVjZWl2ZXIgYW5kCi0JCQkJCQkJCQkJCQkJLS0gc2V0IHRvIHplcm8gYnkgdGhlIHNlbmRlcgotCS0tIERlbHRhIFBzZXVkbyBSYW5nZSBDb3JyZWN0aW9uIDIJCi0JZGVsdGFSYW5nZVJhdGVDb3IyCQlJTlRFR0VSICgtNy4uNyksCQktLSBUaGlzIElFIHNoYWxsIGJlIGlnbm9yZWQgYnkgdGhlIHJlY2VpdmVyIGFuZAotCQkJCQkJCQkJCQkJCS0tIHNldCB0byB6ZXJvIGJ5IHRoZSBzZW5kZXIKLQktLSBEZWx0YSBQc2V1ZG8gUmFuZ2UgQ29ycmVjdGlvbiAzCi0JZGVsdGFQc2V1ZG9SYW5nZUNvcjMgCUlOVEVHRVIgKC0xMjcuLjEyNyksCS0tIFRoaXMgSUUgc2hhbGwgYmUgaWdub3JlZCBieSB0aGUgcmVjZWl2ZXIgYW5kCi0JCQkJCQkJCQkJCQkJLS0gc2V0IHRvIHplcm8gYnkgdGhlIHNlbmRlcgotCS0tIERlbHRhIFBzZXVkbyBSYW5nZSBDb3JyZWN0aW9uIDMKLQlkZWx0YVJhbmdlUmF0ZUNvcjMJCUlOVEVHRVIgKC03Li43KQkJCS0tIFRoaXMgSUUgc2hhbGwgYmUgaWdub3JlZCBieSB0aGUgcmVjZWl2ZXIgYW5kCi0JCQkJCQkJCQkJCQkJLS0gc2V0IHRvIHplcm8gYnkgdGhlIHNlbmRlcgotfQotCi1TYXRlbGxpdGVJRCA6Oj0gSU5URUdFUiAoMC4uNjMpCS0tIGlkZW50aWZpZXMgc2F0ZWxsaXRlCi0KLS0tIE5hdmlnYXRpb24gTW9kZWwgSUUKLU5hdmlnYXRpb25Nb2RlbCA6Oj0gU0VRVUVOQ0UgewotCW5hdk1vZGVsTGlzdAlTZXFPZk5hdk1vZGVsRWxlbWVudAkKLX0KLQotLS0gbmF2aWdhdGlvbiBtb2RlbCBzYXRlbGxpdGUgbGlzdAotU2VxT2ZOYXZNb2RlbEVsZW1lbnQgOjo9IFNFUVVFTkNFIChTSVpFKDEuLjE2KSkgT0YgTmF2TW9kZWxFbGVtZW50Ci0KLU5hdk1vZGVsRWxlbWVudCA6Oj0gU0VRVUVOQ0UgewotCXNhdGVsbGl0ZUlECQlTYXRlbGxpdGVJRCwJCQkKLQlzYXRTdGF0dXMJCVNhdFN0YXR1cwkJLS0gc2F0ZWxsaXRlIHN0YXR1cwotfQotCi0tLSB0aGUgU3RhdHVzIG9mIHRoZSBuYXZpZ2F0aW9uIG1vZGVsCi1TYXRTdGF0dXMgOjo9IENIT0lDRSB7Ci0JLS0gTmV3IHNhdGVsbGl0ZSwgbmV3IE5hdmlnYXRpb24gTW9kZWwKLQluZXdTYXRlbGxpdGVBbmRNb2RlbFVDCVVuY29tcHJlc3NlZEVwaGVtZXJpcywKLQotCS0tIEV4aXN0aW5nIHNhdGVsbGl0ZSwgRXhpc3RpbmcgTmF2aWdhdGlvbiBNb2RlbAotCW9sZFNhdGVsbGl0ZUFuZE1vZGVsCU5VTEwsCi0KLQktLSBFeGlzdGluZyBzYXRlbGxpdGUsIG5ldyBOYXZpZ2F0aW9uIE1vZGVsCi0JbmV3TmF2aU1vZGVsVUMJCQlVbmNvbXByZXNzZWRFcGhlbWVyaXMsCi0JLi4uCi19Ci0KLS0tIFVuY29tcHJlc3NlZCBzYXRlbGxpdGUgZW1oZW1lcmlzIGFuZCBjbG9jayBjb3JyZWN0aW9ucwotVW5jb21wcmVzc2VkRXBoZW1lcmlzIDo6PSBTRVFVRU5DRSB7Ci0JZXBoZW1Db2RlT25MMglJTlRFR0VSICgwLi4zKSwKLQllcGhlbVVSQQkJSU5URUdFUiAoMC4uMTUpLAotCWVwaGVtU1ZoZWFsdGgJSU5URUdFUiAoMC4uNjMpLAotCWVwaGVtSU9EQwkJSU5URUdFUgkoMC4uMTAyMyksCi0JZXBoZW1MMlBmbGFnCUlOVEVHRVIgKDAuLjEpLAotCWVwaGVtU0YxUnN2ZAlFcGhlbWVyaXNTdWJmcmFtZTFSZXNlcnZlZCwKLQllcGhlbVRnZAkJSU5URUdFUiAoLTEyOC4uMTI3KSwKLQllcGhlbVRvYwkJSU5URUdFUiAoMC4uMzc3OTkpLAotCWVwaGVtQUYyCQlJTlRFR0VSICgtMTI4Li4xMjcpLAotCWVwaGVtQUYxCQlJTlRFR0VSICgtMzI3NjguLjMyNzY3KSwKLQllcGhlbUFGMAkJSU5URUdFUiAoLTIwOTcxNTIuLjIwOTcxNTEpLAotCWVwaGVtQ3JzCQlJTlRFR0VSICgtMzI3NjguLjMyNzY3KSwKLQllcGhlbURlbHRhTgkJSU5URUdFUiAoLTMyNzY4Li4zMjc2NyksCi0JZXBoZW1NMAkJCUlOVEVHRVIgKC0yMTQ3NDgzNjQ4Li4yMTQ3NDgzNjQ3KSwKLQllcGhlbUN1YwkJSU5URUdFUiAoLTMyNzY4Li4zMjc2NyksCi0JZXBoZW1FCQkJSU5URUdFUiAoMC4uNDI5NDk2NzI5NSksCi0JZXBoZW1DdXMJCUlOVEVHRVIgKC0zMjc2OC4uMzI3NjcpLAotCWVwaGVtQVBvd2VySGFsZglJTlRFR0VSICgwLi40Mjk0OTY3Mjk1KSwKLQllcGhlbVRvZQkJSU5URUdFUiAoMC4uMzc3OTkpLAotCWVwaGVtRml0RmxhZwlJTlRFR0VSICgwLi4xKSwKLQllcGhlbUFPREEJCUlOVEVHRVIgKDAuLjMxKSwKLQllcGhlbUNpYwkJSU5URUdFUiAoLTMyNzY4Li4zMjc2NyksCi0JZXBoZW1PbWVnYUEwCUlOVEVHRVIgKC0yMTQ3NDgzNjQ4Li4yMTQ3NDgzNjQ3KSwKLQllcGhlbUNpcwkJSU5URUdFUiAoLTMyNzY4Li4zMjc2NyksCi0JZXBoZW1JMAkJCUlOVEVHRVIgKC0yMTQ3NDgzNjQ4Li4yMTQ3NDgzNjQ3KSwKLQllcGhlbUNyYwkJSU5URUdFUiAoLTMyNzY4Li4zMjc2NyksCi0JZXBoZW1XCQkJSU5URUdFUiAoLTIxNDc0ODM2NDguLjIxNDc0ODM2NDcpLAotCWVwaGVtT21lZ2FBRG90CUlOVEVHRVIgKC04Mzg4NjA4Li44Mzg4NjA3KSwKLQllcGhlbUlEb3QJCUlOVEVHRVIgKC04MTkyLi44MTkxKQotfQotCi0tLSBSZXNlcnZlZCBiaXRzIGluIHN1YmZyYW1lIDEgb2YgbmF2aWdhdGlvbiBtZXNzYWdlCi1FcGhlbWVyaXNTdWJmcmFtZTFSZXNlcnZlZCA6Oj0gU0VRVUVOQ0UgewotCXJlc2VydmVkMQkJSU5URUdFUiAoMC4uODM4ODYwNyksCS0tIDIzLWJpdCBmaWVsZAotCXJlc2VydmVkMgkJSU5URUdFUiAoMC4uMTY3NzcyMTUpLAktLSAyNC1iaXQgZmllbGQKLQlyZXNlcnZlZDMJCUlOVEVHRVIgKDAuLjE2Nzc3MjE1KSwJLS0gMjQtYml0IGZpZWxkCi0JcmVzZXJ2ZWQ0CQlJTlRFR0VSICgwLi42NTUzNSkJCS0tIDE2LWJpdCBmaWVsZAotfQotCi0tLSBJb25vc3BoZXJpYyBNb2RlbCBJRQotSW9ub3NwaGVyaWNNb2RlbCA6Oj0gU0VRVUVOQ0UgewotCWFsZmEwCQkJSU5URUdFUiAoLTEyOC4uMTI3KSwKLQlhbGZhMQkJCUlOVEVHRVIgKC0xMjguLjEyNyksCi0JYWxmYTIJCQlJTlRFR0VSICgtMTI4Li4xMjcpLAotCWFsZmEzCQkJSU5URUdFUiAoLTEyOC4uMTI3KSwKLQliZXRhMAkJCUlOVEVHRVIgKC0xMjguLjEyNyksCi0JYmV0YTEJCQlJTlRFR0VSICgtMTI4Li4xMjcpLAotCWJldGEyCQkJSU5URUdFUiAoLTEyOC4uMTI3KSwKLQliZXRhMwkJCUlOVEVHRVIgKC0xMjguLjEyNykKLX0KLQotLS0gVW5pdmVyc2FsIFRpbWUgQ29vcmRpbmF0ZSBNb2RlbAotVVRDTW9kZWwgOjo9IFNFUVVFTkNFIHsKLQl1dGNBMQkJCUlOVEVHRVIgKC04Mzg4NjA4Li44Mzg4NjA3KSwKLQl1dGNBMAkJCUlOVEVHRVIgKC0yMTQ3NDgzNjQ4Li4yMTQ3NDgzNjQ3KSwKLQl1dGNUb3QJCQlJTlRFR0VSICgwLi4yNTUpLAotCXV0Y1dOdAkJCUlOVEVHRVIgKDAuLjI1NSksCi0JdXRjRGVsdGFUbHMJCUlOVEVHRVIgKC0xMjguLjEyNyksCi0JdXRjV05sc2YJCUlOVEVHRVIgKDAuLjI1NSksCi0JdXRjRE4JCQlJTlRFR0VSICgtMTI4Li4xMjcpLAotCXV0Y0RlbHRhVGxzZglJTlRFR0VSICgtMTI4Li4xMjcpCi19Ci0KLS0tIEFsbWFuYWMsIExvbmcgdGVybSBtb2RlbAotLS0gTk9URTogVGhlc2UgYXJlIHBhcmFtZXRlcnMgYXJlIHN1YnNldCBvZiB0aGUgZXBoZW1lcmlzCi0tLSBOT1RFOiBCdXQgd2l0aCByZWR1Y2VkIHJlc29sdXRpb24gYW5kIGFjY3VyYWN5Ci1BbG1hbmFjIDo6PSBTRVFVRU5DRSB7Ci0JYWxhbWFuYWNXTmEJCUlOVEVHRVIgKDAuLjI1NSksCS0tIE9uY2UgcGVyIG1lc3NhZ2UKLQotCS0tIG5hdmlnYXRpb24gbW9kZWwgc2F0ZWxsaXRlIGxpc3QuCi0JLS0gVGhlIHNpemUgb2YgYWxtYW5hY0xpc3QgaXMgYWN0dWFsbHkgTnVtc19TYXRzX1RvdGFsIGZpZWxkCi0JYWxtYW5hY0xpc3QJCVNlcU9mQWxtYW5hY0VsZW1lbnQJCQotfQotU2VxT2ZBbG1hbmFjRWxlbWVudCA6Oj0gU0VRVUVOQ0UgKFNJWkUoMS4uNjQpKSBPRiBBbG1hbmFjRWxlbWVudAotCi0tLSBBbG1hbmFjIGluZm8gb25jZSBwZXIgc2F0ZWxsaXRlCi1BbG1hbmFjRWxlbWVudCA6Oj0gU0VRVUVOQ0UgewotCXNhdGVsbGl0ZUlECQkJU2F0ZWxsaXRlSUQsCi0JYWxtYW5hY0UJCQlJTlRFR0VSICgwLi42NTUzNSksCi0JYWxhbWFuYWNUb2EJCQlJTlRFR0VSICgwLi4yNTUpLAotCWFsbWFuYWNLc2lpCQkJSU5URUdFUiAoLTMyNzY4Li4zMjc2NyksCi0JYWxtYW5hY09tZWdhRG90CQlJTlRFR0VSICgtMzI3NjguLjMyNzY3KSwKLQlhbG1hbmFjU1ZoZWFsdGgJCUlOVEVHRVIgKDAuLjI1NSksCi0JYWxtYW5hY0FQb3dlckhhbGYJSU5URUdFUiAoMC4uMTY3NzcyMTUpLAotCWFsbWFuYWNPbWVnYTAJCUlOVEVHRVIgKC04Mzg4NjA4Li44Mzg4NjA3KSwKLQlhbG1hbmFjVwkJCUlOVEVHRVIgKC04Mzg4NjA4Li44Mzg4NjA3KSwKLQlhbG1hbmFjTTAJCQlJTlRFR0VSICgtODM4ODYwOC4uODM4ODYwNyksCi0JYWxtYW5hY0FGMAkJCUlOVEVHRVIgKC0xMDI0Li4xMDIzKSwKLQlhbG1hbmFjQUYxCQkJSU5URUdFUiAoLTEwMjQuLjEwMjMpCi19Ci0KLS0tIEFjcXVpc2l0aW9uIEFzc2lzdGFuY2UKLUFjcXVpc0Fzc2lzdCA6Oj0gU0VRVUVOQ0UgewotCi0JLS0gTnVtYmVyIG9mIFNhdGVsbGl0ZXMgY2FuIGJlIHJlYWQgZnJvbSBhY3F1aXN0TGlzdAotCXRpbWVSZWxhdGlvbglUaW1lUmVsYXRpb24sCi0KLQktLSBBY3F1aXNpdGlvbiBhc3Npc3RhbmNlIGxpc3QKLQktLSBUaGUgc2l6ZSBvZiBOdW1iZXIgb2YgU2F0ZWxsaXRlcyBpcyBhY3R1YWxseSBOdW1iZXIgb2YgU2F0ZWxsaXRlcyBmaWVsZAotCWFjcXVpc0xpc3QJCVNlcU9mQWNxdWlzRWxlbWVudAkJCi19Ci1TZXFPZkFjcXVpc0VsZW1lbnQgOjo9IFNFUVVFTkNFIChTSVpFKDEuLjE2KSkgT0YgQWNxdWlzRWxlbWVudAotCi0tLSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gR1BTIHRpbWUgYW5kIGFpci1pbnRlcmZhY2UgdGltaW5nCi1UaW1lUmVsYXRpb24gOjo9IFNFUVVFTkNFIHsKLQktLQotCWdwc1RPVwkJR1BTVE9XMjNiLAkJLS0gMjNiIHByZXNlbnRhdGlvbgotCWdzbVRpbWUJCUdTTVRpbWUJCU9QVElPTkFMCi19Ci0KLS0tIGRhdGEgb2NjdXJpbmcgcGVyIG51bWJlciBvZiBzYXRlbGxpdGVzCi1BY3F1aXNFbGVtZW50IDo6PSBTRVFVRU5DRSB7Ci0Jc3ZpZAkJCQkJU2F0ZWxsaXRlSUQsCi0KLQktLSBEb3BwbGVyIDB0aCBvcmRlciB0ZXJtLAotCS0tIC01MTIwLjAgLSA1MTE3LjUgSHogKD0gLTIwNDggLSAyMDQ3IHdpdGggMi41IEh6IHJlc29sdXRpb24pCi0JZG9wcGxlcjAJCQkJSU5URUdFUiAoLTIwNDguLjIwNDcpLAkKLQlhZGRpb25hbERvcHBsZXIJCQlBZGRpb25hbERvcHBsZXJGaWVsZHMJT1BUSU9OQUwsCi0JY29kZVBoYXNlCQkJCUlOVEVHRVIgKDAuLjEwMjIpLAktLSBDb2RlIFBoYXNlCi0JaW50Q29kZVBoYXNlCQkJSU5URUdFUiAoMC4uMTkpLAktLSBJbnRlZ2VyIENvZGUgUGhhc2UKLQlncHNCaXROdW1iZXIJCQlJTlRFR0VSICgwLi4zKSwgCS0tIEdQUyBiaXQgbnVtYmVyCi0JY29kZVBoYXNlU2VhcmNoV2luZG93CUlOVEVHRVIgKDAuLjE1KSwJLS0gQ29kZSBQaGFzZSBTZWFyY2ggV2luZG93Ci0JYWRkaW9uYWxBbmdsZQkJCUFkZGlvbmFsQW5nbGVGaWVsZHMJCU9QVElPTkFMCi19Ci0KLUFkZGlvbmFsRG9wcGxlckZpZWxkcyA6Oj0gU0VRVUVOQ0UgewotCS0tIERvcHBsZXIgMXN0IG9yZGVyIHRlcm0sIC0xLjAgLSArMC41IEh6L3NlYwotIC0tICg9IC00MiArICgwIHRvIDYzKSB3aXRoIDEvNDIgSHovc2VjLiByZXNvbHV0aW9uKQotCWRvcHBsZXIxCQkJCUlOVEVHRVIgKDAuLjYzKSwKLQlkb3BwbGVyVW5jZXJ0YWludHkJCUlOVEVHRVIgKDAuLjcpCi0gLS0gYSBzZW5kZXIgc2hhbGwgbm90IGVuY29kZSBhbnkgRG9wcGxlclVuY2VydGFpbnR5IHZhbHVlIGluIHRoZSByYW5nZSA1IHRvIDcKLSAtLSBhIHJlY2VpdmVyIHNoYWxsIGlnbm9yZSBhbnkgdmFsdWUgYmV0d2VlbiA1IGFuZCA3LgotfQotCi1BZGRpb25hbEFuZ2xlRmllbGRzCTo6PSBTRVFVRU5DRSB7Ci0JLS0gYXppbXV0aCBhbmdsZSwgMCAtIDM0OC43NSBkZWcgKD0gMCAtIDMxIHdpdGggMTEuMjUgZGVnIHJlc29sdXRpb24pCi0JYXppbXV0aAkJCQkJSU5URUdFUiAoMC4uMzEpLAotCS0tIGVsZXZhdGlvbiBhbmdsZSwgMCAtIDc4Ljc1IGRlZyAoPSAwIC0gNyB3aXRoIDExLjI1IGRlZyByZXNvbHV0aW9uKQotCWVsZXZhdGlvbgkJCQlJTlRFR0VSICgwLi43KQotfQotCi0tLSBSZWFsLVRpbWUgSW50ZWdyaXR5Ci0tLSBudW1iZXIgb2YgYmFkIHNhdGVsbGl0ZXMgY2FuIGJlIHJlYWQgZnJvbSB0aGlzIGVsZW1lbnQKLVNlcU9mLUJhZFNhdGVsbGl0ZVNldCA6Oj0gU0VRVUVOQ0UgKFNJWkUoMS4uMTYpKSBPRiBTYXRlbGxpdGVJRAotCi0tLSBFeHRlbnNpb24gRWxlbWVudHMKLQotLS0gUmVsZWFzZSA5OCBFeHRlbnNpb25zIGhlcmUKLVJlbDk4LU1zclBvc2l0aW9uLVJlcS1FeHRlbnNpb24gOjo9IFNFUVVFTkNFIHsKLQlyZWw5OC1FeHQtRXhwT1RECQkJUmVsOTgtRXh0LUV4cE9URAkJT1BUSU9OQUwsCS0tIEV4cGVjdGVkT1REIGV4dGVuc2lvbgotCS4uLiwgCi0gZ3BzVGltZUFzc2lzdGFuY2VNZWFzdXJlbWVudFJlcXVlc3QgTlVMTCBPUFRJT05BTCwgCi0gZ3BzUmVmZXJlbmNlVGltZVVuY2VydGFpbnR5IEdQU1JlZmVyZW5jZVRpbWVVbmNlcnRhaW50eSBPUFRJT05BTAotCi0tLSBGdXJ0aGVyIFI5OCBleHRlbnNpb25zIGhlcmUKLX0KLVJlbDk4LUFzc2lzdGFuY2VEYXRhLUV4dGVuc2lvbiA6Oj0gU0VRVUVOQ0UgewotCXJlbDk4LUV4dC1FeHBPVEQJCQlSZWw5OC1FeHQtRXhwT1RECQlPUFRJT05BTCwJLS0gRXhwZWN0ZWRPVEQgZXh0ZW5zaW9uCi0JLi4uLCAKLSBncHNUaW1lQXNzaXN0YW5jZU1lYXN1cmVtZW50UmVxdWVzdCBOVUxMIE9QVElPTkFMLAotIGdwc1JlZmVyZW5jZVRpbWVVbmNlcnRhaW50eSBHUFNSZWZlcmVuY2VUaW1lVW5jZXJ0YWludHkgT1BUSU9OQUwKLQotLS0gRnVydGhlciBSOTggZXh0ZW5zaW9ucyBoZXJlCi19Ci0KLS0tIFJlbGVhc2UgOTggRXhwT1REIGV4dGVuc2lvbgotUmVsOTgtRXh0LUV4cE9URCA6Oj0gU0VRVUVOQ0UgewotLS0gSWYgTXNyQXNzaXN0QlRTIGlzIGluY2x1ZGVkIGluIG1lc3NhZ2UsIG1zckFzc2lzdERhdGEtUjk4LUV4cE9URCBzaGFsbCBiZSBpbmNsdWRlZC4KLQltc3JBc3Npc3REYXRhLVI5OC1FeHBPVEQJCQlNc3JBc3Npc3REYXRhLVI5OC1FeHBPVEQJCQlPUFRJT05BTCwKLQotLS0gSWYgU3lzdGVtSW5mb0Fzc2lzdGFEYXRhIGlzIGluY2x1ZGVkIGluIG1lc3NhZ2UsIHN5c3RlbUluZm9Bc3Npc3REYXRhLVI5OC1FeHBPVEQgc2hhbGwgYmUKLS0tIGluY2x1ZGVkLgotCXN5c3RlbUluZm9Bc3Npc3REYXRhLVI5OC1FeHBPVEQJU3lzdGVtSW5mb0Fzc2lzdERhdGEtUjk4LUV4cE9URAlPUFRJT05BTAotfQotCi0tLSBNc3JBc3Npc3REYXRhIFI5OCBleHRlbnNpb24KLU1zckFzc2lzdERhdGEtUjk4LUV4cE9URCA6Oj0gU0VRVUVOQ0UgewotCSBtc3JBc3Npc3RMaXN0LVI5OC1FeHBPVEQJCQkgU2VxT2ZNc3JBc3Npc3RCVFMtUjk4LUV4cE9URAotfQotCi0tLSBJbmRleGVzIGluIFNlcU9mTXNyQXNzaXN0QlRTLVI5OC1FeHBPVEQgcmVmZXIgdG8gU2VxT2ZNc3JBc3Npc3RCVFMKLS0tIElmIHRoZSBpbmRleCBleGNlZWRzIHRoZSBTZWdPZk1zckFzc2lzdEJUUyByYW5nZSBvciBpZiB0aGVyZSBpcyBvdGhlcgotLS0gaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gdGhlIEJUUyBpbmRpY2VzLCB0aGUgTVMgc2hhbGwgYXBwbHkgcHJvdG9jb2wKLS0tIGVycm9yIGNhdXNlIGluY29ycmVjdERhdGEKLVNlcU9mTXNyQXNzaXN0QlRTLVI5OC1FeHBPVEQgOjo9IFNFUVVFTkNFIChTSVpFKDEuLjE1KSkgT0YgTXNyQXNzaXN0QlRTLVI5OC1FeHBPVEQKLQotLS0gVGhpcyBlbGVtZW50IGNvbXBsZXRlcyBNc3JBc3Npc3RCVFMgSUUKLU1zckFzc2lzdEJUUy1SOTgtRXhwT1REIDo6PSBTRVFVRU5DRSB7Ci0JZXhwZWN0ZWRPVEQJCQkJRXhwZWN0ZWRPVEQsCi0JZXhwT1REVW5jZXJ0YWludHkJCUV4cE9URFVuY2VydGFpbnR5Ci19Ci0KLS0tIFN5c3RlbUluZm9Bc3Npc3REYXRhIFI5OCBleHRlbnNpb24KLVN5c3RlbUluZm9Bc3Npc3REYXRhLVI5OC1FeHBPVEQgOjo9IFNFUVVFTkNFIHsKLQlzeXN0ZW1JbmZvQXNzaXN0TGlzdFI5OC1FeHBPVEQgCVNlcU9mU3lzdGVtSW5mb0Fzc2lzdEJUUy1SOTgtRXhwT1RECi19Ci0KLS0tIFNlcU9mU3lzdGVtSW5mb0Fzc2lzdEJUUy1SOTgtRXhwT1REIGluZGV4IHJlZmVyIHRvIFNlcU9mU3lzdGVtSW5mb0Fzc2lzdEJUUwotLS0gSWYgdGhlIGluZGV4IGV4Y2VlZHMgdGhlIFNlZ09mU3lzdGVtSW5mb0Fzc2lzdEJUUyByYW5nZSBvciBpZiB0aGVyZSBpcyBvdGhlcgotLS0gaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gdGhlIEJUUyBpbmRpY2VzLCB0aGUgTVMgc2hhbGwgYXBwbHkgcHJvdG9jb2wKLS0tIGVycm9yIGNhdXNlIGluY29ycmVjdERhdGEKLVNlcU9mU3lzdGVtSW5mb0Fzc2lzdEJUUy1SOTgtRXhwT1REIDo6PSBTRVFVRU5DRSAoU0laRSgxLi4zMikpIE9GIFN5c3RlbUluZm9Bc3Npc3RCVFMtUjk4LUV4cE9URAotCi0tLSB3aGV0aGVyIG4udGggaXMgcHJlc2VudCBvciBub3QgPwotU3lzdGVtSW5mb0Fzc2lzdEJUUy1SOTgtRXhwT1REIDo6PSBDSE9JQ0UgewotCW5vdFByZXNlbnQJCU5VTEwsCi0JcHJlc2VudAkJCUFzc2lzdEJUU0RhdGEtUjk4LUV4cE9URAotfQotCi0tLSBUaGlzIGVsZW1lbnQgY29tcGxldGVzIEFzc2lzdEJUU0RhdGEgSUUKLUFzc2lzdEJUU0RhdGEtUjk4LUV4cE9URCA6Oj0gU0VRVUVOQ0UgewotCWV4cGVjdGVkT1RECQkJCUV4cGVjdGVkT1RELAotCWV4cE9URHVuY2VydGFpbnR5CQlFeHBPVERVbmNlcnRhaW50eQktLSBVbmNlcnRhaW50eSBvZiBleHBlY3RlZCBPVEQKLX0KLQotLS0gRXhwZWN0ZWQgT1REIHZhbHVlIGJldHdlZW4gbmJvciBiYXNlIHN0YXRpb24gYW5kIHJlZmVyZW5jZSBCVFMKLS0tIGF0IE1TJ3MgY3VycmVudCBlc3RpbWF0ZWQgbG9jYXRpb24uCi1FeHBlY3RlZE9URCA6Oj0gSU5URUdFUiAoMC4uMTI1MCkKLS0tIFRoZSBFeHBlY3RlZE9URCB2YWx1ZSAxMjUwIHNoYWxsIG5vdCBiZSBlbmNvZGVkIGJ5IHRoZSB0cmFuc21pdHRpbmcgZW50aXR5IGFuZAotLS0gc2hhbGwgYmUgdHJlYXRlZCBieSB0aGUgcmVjZWl2aW5nIGVudGl0eSBhcyAwLgotLS0gVW5jZXJ0YWludHkgb2YgRXhwdGVjdGVkIE9URCBpbiBiaXRzCi1FeHBPVERVbmNlcnRhaW50eSA6Oj0gSU5URUdFUigwLi43KQotCi0tLSBSZWxlYXNlIDk4IGV4dGVuc2lvbnMKLQotR1BTUmVmZXJlbmNlVGltZVVuY2VydGFpbnR5IDo6PSBJTlRFR0VSICgwIC4uIDEyNykgLS0gQ29kaW5nIGFjY29yZGluZyB0byBBbm5leAotCi1HUFNUaW1lQXNzaXN0YW5jZU1lYXN1cmVtZW50cyA6Oj0gU0VRVUVOQ0UgewotIHJlZmVyZW5jZUZyYW1lTVNCIElOVEVHRVIgKDAgLi4gNjMpLCAtLSBNU0Igb2YgZnJhbWUgbnVtYmVyCi0gZ3BzVG93U3VibXMgSU5URUdFUiAoMCAuLiA5OTk5KSBPUFRJT05BTCwgLS0gaW4gdW5pdHMgb2YgMTAwbnMsIGZvciBNUyBiYXNlZCBBR1BTCi0gZGVsdGFUb3cgSU5URUdFUiAoMCAuLiAxMjcpIE9QVElPTkFMLCAtLSBmb3IgTVMgYXNzaXN0ZWQgQUdQUwotIGdwc1JlZmVyZW5jZVRpbWVVbmNlcnRhaW50eSBHUFNSZWZlcmVuY2VUaW1lVW5jZXJ0YWludHkgT1BUSU9OQUwKLX0KLQotUmVsLTk4LU1zclBvc2l0aW9uLVJzcC1FeHRlbnNpb24gOjo9IFNFUVVFTkNFIHsKLQotCS0tIEZpcnN0IGV4dGVuc2lvbiB0byBSZWxlYXNlIDk4Ci0JcmVsLTk4LUV4dC1NZWFzdXJlSW5mbwlTRVFVRU5DRSB7Ci0JCW90ZC1NZWFzdXJlSW5mby1SOTgtRXh0CU9URC1NZWFzdXJlSW5mby1SOTgtRXh0CQlPUFRJT05BTAotCX0sCi0JLi4uLCAKLSB0aW1lQXNzaXN0YW5jZU1lYXN1cmVtZW50cyBHUFNUaW1lQXNzaXN0YW5jZU1lYXN1cmVtZW50cyBPUFRJT05BTCAKLSAtLSBGdXJ0aGVyIFI5OCBleHRlbnNpb25zIGhlcmUKLX0KLQotLS0gVGhpcyBpcyBhbiBhZGRpdGlvbiB0byBPVEQtTWVhc3VyZUluZm8gZWxlbWVudCBkZWZpbmVkIGluIG9yaWdpbmFsIG1lc3NhZ2UsCi0tLSBJZiBPVEQtTWVhc3VyZUluZm8gaXMgYWJzZW50LCBvciBpZiBvbmUgb3IgbW9yZSBPVEQtTXNyRWxlbWVudFJlc3QgYXJlIHByZXNlbnQKLS0tIE9URC1NZWFzdXJlSW5mby1SOTgtRXh0IHNoYWxsIGJlIGFic2VudC4KLS0tIE9URC1NZWFzdXJlSW5mby1SOTgtRXh0Ci1PVEQtTWVhc3VyZUluZm8tUjk4LUV4dCA6Oj0gU0VRVUVOQ0UgewotCS0tIE1lYXN1cmVtZW50IGluZm8gZWxlbWVudHMKLQlvdGRNc3JGaXJzdFNldHMtUjk4LUV4dAkJT1RELU1zckVsZW1lbnRGaXJzdC1SOTgtRXh0Ci19Ci0KLS0tIE9URCBtZWFzdXJlbWVudCBpbmZvcm1hdGlvbiBFeHQgZm9yIHRoZSBmaXJzdCBzZXQgb25seQotT1RELU1zckVsZW1lbnRGaXJzdC1SOTgtRXh0IDo6PSBTRVFVRU5DRSB7Ci0JLS0gYWRkaXRpb25hbCBtZWFzdXJlZCBuZWlnaGJvcnMgaW4gT1REIG1lYXN1cmVtZW50cwotCW90ZC1GaXJzdFNldE1zcnMtUjk4LUV4dCAJU2VxT2ZPVEQtRmlyc3RTZXRNc3JzLVI5OC1FeHQgCU9QVElPTkFMCi19Ci1TZXFPZk9URC1GaXJzdFNldE1zcnMtUjk4LUV4dCA6Oj0gU0VRVUVOQ0UgKFNJWkUoMS4uNSkpIE9GIE9URC1GaXJzdFNldE1zcnMKLQotUmVsLTUtTXNyUG9zaXRpb24tUnNwLUV4dGVuc2lvbiA6Oj0gU0VRVUVOQ0UgewotCi0JZXh0ZW5kZWQtcmVmZXJlbmNlCUV4dGVuZGVkLXJlZmVyZW5jZSAJT1BUSU9OQUwsCi0JLS0gVGhlIGV4dGVuZGVkLXJlZmVyZW5jZSBzaGFsbCBiZSBpbmNsdWRlZCBieSB0aGUgTVMgaWYgYW5kIG9ubHkgaWYgcHJldmlvdXNseQotCS0tIHJlY2VpdmVkIGZyb20gdGhlIFNNTEMgaW4gYSBNZWFzdXJlIFBvc2l0aW9uIFJlcXVlc3QuIFdoZW4gaW5jbHVkZWQsIHRoZSB2YWx1ZSBzZW50Ci0JLS0gYnkgdGhlIE1TIHNoYWxsIGVxdWFsIHRoZSB2YWx1ZSByZWNlaXZlZCBmcm9tIHRoZSBTTUxDLgotCi0JLS0gZXh0ZW5zaW9uIHRvIFJlbGVhc2UgNSwgZm9yIFJSTFAgcHNldWRvLXNlZ21lbnRhdGlvbiBoZXJlCi0Jb3RkLU1lYXN1cmVJbmZvLTUtRXh0CU9URC1NZWFzdXJlSW5mby01LUV4dAlPUFRJT05BTCwKLQl1bFBzZXVkb1NlZ0luZAkJCVVsUHNldWRvU2VnSW5kCQkJT1BUSU9OQUwsCS0tIEluY2x1ZGVkIHdoZW4gdXBsaW5rIFJSTFAKLQktLSBQc2V1ZG8tc2VnbWVudGF0aW9uIGlzIHVzZWQsIG5vdCBpbmNsdWRlZCB3aGVuIG5vIHVwbGluayBwc2V1ZG8tc2VnbWVudGF0aW9uIGlzIHVzZWQKLQkuLi4KLQkJCQkJLS0gUG9zc2libHkgbW9yZSBleHRlbnNpb25zIGZvciBSZWxlYXNlIDUgaGVyZSBsYXRlcgotfQotCi1FeHRlbmRlZC1yZWZlcmVuY2UgOjo9IFNFUVVFTkNFIHsKLQlzbWxjLWNvZGUJCQlJTlRFR0VSICgwLi42MyksCi0JdHJhbnNhY3Rpb24tSUQJCUlOVEVHRVIgKDAuLjI2MjE0MykKLX0KLQotT1RELU1lYXN1cmVJbmZvLTUtRXh0IDo6PSBTZXFPZk9URC1Nc3JFbGVtZW50UmVzdAotCS0tIGlmIG1vcmUgdGhhbiBvbmUgbWVhc3VyZW1lbnQgc2V0cyBhcmUgcHJlc2VudCB0aGlzIGVsZW1lbnQgaXMgcmVwZWF0ZWQKLQktLSBOdW1iZXJPZlNldHMgLSAxICgtMSA9IGZpcnN0IHNldCkgY29tYmluZWQgaW4gT1RELU1lYXN1cmVJbmZvLTUtRXh0IGFuZAotCS0tIE9URC1NZWFzdXJlSW5mbyAoZS5nLiBpZiBOdW1iZXJPZlNldHMgaXMgMywgdGhlbiBvbmUgb3RkTXNyUmVzdFNldHMgbWF5Ci0JLS0gYmUgc2VudCBpbiBPVEQtTWVhc3VyZUluZm8tNS1FeHQgYW5kIG9uZSBpbiBPVEQtTWVhc3VyZUluZm8pCi0KLS0tIEZpcnN0IHBhcnQgb2YgVXBsaW5rIFJSTFAgUHNldWRvLXNlZ21lbnRhdGlvbiBpbmRpY2F0aW9uLCBwb3NzaWJseSBtb3JlIG1heSBiZSBkZWZpbmVkCi0tLSBpbiB0aGUgZnV0dXJlIGZvciBzZWdtZW50YXRpb24gd2l0aCBtb3JlIHRoYW4gdHdvIHNlZ21lbnRzLgotVWxQc2V1ZG9TZWdJbmQgOjo9IEVOVU1FUkFURUQgewotCWZpcnN0T2ZNYW55ICgwKSwKLQlzZWNvbmRPZk1hbnkoMSkKLX0KLQotUmVsNS1Nc3JQb3NpdGlvbi1SZXEtRXh0ZW5zaW9uIDo6PSBTRVFVRU5DRSB7Ci0JZXh0ZW5kZWQtcmVmZXJlbmNlCQkJRXh0ZW5kZWQtcmVmZXJlbmNlLAotCS4uLgotCS0tIFBvc3NpYmx5IG1vcmUgZXh0ZW5zaW9ucyBmb3IgUmVsZWFzZSA1IGhlcmUgbGF0ZXIKLX0KLQotUmVsNS1Bc3Npc3RhbmNlRGF0YS1FeHRlbnNpb24gOjo9IFNFUVVFTkNFIHsKLQlleHRlbmRlZC1yZWZlcmVuY2UJCQlFeHRlbmRlZC1yZWZlcmVuY2UsCi0JLi4uCi0KLS0tIFBvc3NpYmx5IG1vcmUgZXh0ZW5zaW9ucyBmb3IgUmVsZWFzZSA1IGhlcmUgbGF0ZXIKLX0KLQotUmVsLTUtUHJvdG9jb2xFcnJvci1FeHRlbnNpb246Oj0gU0VRVUVOQ0UgewotCWV4dGVuZGVkLXJlZmVyZW5jZQkJCUV4dGVuZGVkLXJlZmVyZW5jZSAJT1BUSU9OQUwsCi0JLS0gVGhlIGV4dGVuZGVkLXJlZmVyZW5jZSBzaGFsbCBiZSBpbmNsdWRlZCBieSB0aGUgTVMgaWYgYW5kIG9ubHkgaWYgcHJldmlvdXNseQotCS0tIHJlY2VpdmVkIGZyb20gdGhlIFNNTEMuCi0JLS0gV2hlbiBpbmNsdWRlZCwgdGhlIHZhbHVlIHNlbnQgYnkgdGhlIE1TIHNoYWxsIGVxdWFsIHRoZSB2YWx1ZSByZWNlaXZlZCBmcm9tIHRoZSBTTUxDLgotCS4uLgotCi0JLS0gUG9zc2libHkgbW9yZSBleHRlbnNpb25zIGZvciBSZWxlYXNlIDUgaGVyZSBsYXRlcgotfQotCi0tLSBSZWxlYXNlIDcgRXh0ZW5zaW9ucyBoZXJlCi0KLVJlbDctTXNyUG9zaXRpb24tUmVxLUV4dGVuc2lvbiA6Oj0gU0VRVUVOQ0UgewotdmVsb2NpdHlSZXF1ZXN0ZWQJCSBOVUxMCQkgT1BUSU9OQUwsCi0gZ2Fuc3NQb3NpdGlvbk1ldGhvZCBHQU5TU1Bvc2l0aW9uaW5nTWV0aG9kIE9QVElPTkFMLAotIGdhbnNzLUFzc2lzdERhdGEgR0FOU1MtQXNzaXN0RGF0YSBPUFRJT05BTCwKLSBnYW5zc0NhcnJpZXJQaGFzZU1lYXN1cmVtZW50UmVxdWVzdCBOVUxMIE9QVElPTkFMLAotIGdhbnNzVE9ER1NNVGltZUFzc29jaWF0aW9uTWVhc3VyZW1lbnRSZXF1ZXN0IE5VTEwgT1BUSU9OQUwsCi1yZXF1aXJlZFJlc3BvbnNlVGltZQlSZXF1aXJlZFJlc3BvbnNlVGltZQlPUFRJT05BTCwKLQkuLi4KLQktLSBGdXJ0aGVyIFJlbGVhc2UgNyBleHRlbnRpb25zIGhlcmUKLX0KLQotLS0gYWRkaXRpb25hbCBzYXRlbGxpdGUgc3lzdGVtcyBtYXkgYmUgYWRkZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBwcm90b2NvbAotR0FOU1NQb3NpdGlvbmluZ01ldGhvZCA6Oj0gQklUIFNUUklORyB7Ci0JZ3BzICgwKSwKLQlnYWxpbGVvICgxKX0gKFNJWkUgKDIuLjE2KSkKLQotR0FOU1MtQXNzaXN0RGF0YSA6Oj0gU0VRVUVOQ0UgewotCWdhbnNzLWNvbnRyb2xIZWFkZXIJR0FOU1MtQ29udHJvbEhlYWRlcgotfQotCi1HQU5TUy1Db250cm9sSGVhZGVyIDo6PSBTRVFVRU5DRSB7Ci0gZ2Fuc3NDb21tb25Bc3Npc3REYXRhIEdBTlNTQ29tbW9uQXNzaXN0RGF0YSBPUFRJT05BTCwKLSBnYW5zc0dlbmVyaWNBc3Npc3REYXRhTGlzdCBTZXFPZkdBTlNTR2VuZXJpY0Fzc2lzdERhdGFFbGVtZW50IE9QVElPTkFMCi19Ci0KLS0tIEdBTlNTIENvbW1vbiBBc3Npc3RhbmNlIERhdGEgRWxlbWVudHMKLUdBTlNTQ29tbW9uQXNzaXN0RGF0YSA6Oj0gU0VRVUVOQ0UgewotCWdhbnNzUmVmZXJlbmNlVGltZQkJIEdBTlNTUmVmZXJlbmNlVGltZQkJIE9QVElPTkFMLAotCWdhbnNzUmVmTG9jYXRpb24JCQlHQU5TU1JlZkxvY2F0aW9uCQkgT1BUSU9OQUwsCi0JZ2Fuc3NJb25vc3BoZXJpY01vZGVsCQlHQU5TU0lvbm9zcGhlcmljTW9kZWwJIE9QVElPTkFMLAotCS4uLgotfQotCi0tLSBMaXN0IG9mIEdBTlNTIEdlbmVyaWMgQXNzaXN0YW5jZSBEYXRhIEVsZW1lbnRzLCB1cCB0byA4IEdBTlNTCi1TZXFPZkdBTlNTR2VuZXJpY0Fzc2lzdERhdGFFbGVtZW50IDo6PSBTRVFVRU5DRSAoU0laRSAoMS4uOCkpIE9GIEdBTlNTR2VuZXJpY0Fzc2lzdERhdGFFbGVtZW50Ci0KLS0tIEdBTlNTIEdlbmVyaWMgQXNzaXN0YW5jZSBEYXRhIEVsZW1lbnRzCi1HQU5TU0dlbmVyaWNBc3Npc3REYXRhRWxlbWVudCA6Oj0gU0VRVUVOQ0UgewotIGdhbnNzSUQgSU5URUdFUiAoMC4uNykgT1BUSU9OQUwsIC0tIENvZGluZyBhY2NvcmRpbmcgdG8gQW5uZXgKLSBnYW5zc1RpbWVNb2RlbCBTZXFPZkdBTlNTVGltZU1vZGVsIE9QVElPTkFMLAotCWdhbnNzRGlmZkNvcnJlY3Rpb25zCQkgR0FOU1NEaWZmQ29ycmVjdGlvbnMJIE9QVElPTkFMLAotCWdhbnNzTmF2aWdhdGlvbk1vZGVsCQkgR0FOU1NOYXZNb2RlbCBPUFRJT05BTCwKLQlnYW5zc1JlYWxUaW1lSW50ZWdyaXR5CSBHQU5TU1JlYWxUaW1lSW50ZWdyaXR5CSBPUFRJT05BTCwKLQlnYW5zc0RhdGFCaXRBc3Npc3QJCQkgR0FOU1NEYXRhQml0QXNzaXN0CQkgT1BUSU9OQUwsCi0JZ2Fuc3NSZWZNZWFzdXJlbWVudEFzc2lzdAkgR0FOU1NSZWZNZWFzdXJlbWVudEFzc2lzdCBPUFRJT05BTCwKLSBnYW5zc0FsbWFuYWNNb2RlbCBHQU5TU0FsbWFuYWNNb2RlbCBPUFRJT05BTCwKLSBnYW5zc1VUQ01vZGVsIEdBTlNTVVRDTW9kZWwgT1BUSU9OQUwsCi0JLi4uCi19Ci0KLS0tIEdBTlNTIENPTU1PTiBBU1NJU1RBTkNFIERBVEEgRUxFTUVOVFMKLQotLS0gR0FOU1MgUmVmZXJlbmNlIFRpbWUgSUUKLUdBTlNTUmVmZXJlbmNlVGltZSA6Oj0gU0VRVUVOQ0UgewotCWdhbnNzUmVmVGltZUluZm8JCQkgR0FOU1NSZWZUaW1lSW5mbywKLQlnYW5zc1RPRC1HU01UaW1lQXNzb2NpYXRpb24gR0FOU1NUT0QtR1NNVGltZUFzc29jaWF0aW9uIE9QVElPTkFMCi19Ci0KLS0tIEdBTlNTIFJlZmVyZW5jZSBUaW1lIGluY2x1ZGVzIEdBTlNTIFRPRCwgR0FOU1MgRGF5LCB1bmNlcnRhaW50eQotR0FOU1NSZWZUaW1lSW5mbyA6Oj0gU0VRVUVOQ0UgewotCWdhbnNzRGF5CQkJIElOVEVHRVIoMCAuLiA4MTkxKSBPUFRJT05BTCwKLSBnYW5zc1RPRCBHQU5TU1RPRCwKLQlnYW5zc1RPRFVuY2VydGFpbnR5CSBHQU5TU1RPRFVuY2VydGFpbnR5IE9QVElPTkFMLAotIGdhbnNzVGltZUlEIElOVEVHRVIgKDAgLi4gNykgT1BUSU9OQUwKLX0KLQotLS0gR0FOU1MgVE9EIGludGVnZXIgc2Vjb25kcwotR0FOU1NUT0QgOjo9IElOVEVHRVIgKDAgLi4gODYzOTkpCi0KLS0tIEdBTlNTIFRPRCB1bmNlcnRhaW50eQotR0FOU1NUT0RVbmNlcnRhaW50eSA6Oj0gSU5URUdFUiAoMCAuLiAxMjcpIC0tIENvZGluZyBhY2NvcmRpbmcgdG8gQW5uZXgKLQotLS0gR0FOU1MgVE9ELUdTTSBUaW1lIGFzc29jaWF0aW9uIAotR0FOU1NUT0QtR1NNVGltZUFzc29jaWF0aW9uIDo6PSBTRVFVRU5DRSB7Ci0JYmNjaENhcnJpZXIJCUJDQ0hDYXJyaWVyLAktLSBCQ0NIIGNhcnJpZXIKLQlic2ljCQkJQlNJQywJCQktLSBCU0lDCi0JZnJhbWVOdW1iZXIJCUZyYW1lTnVtYmVyLAotCXRpbWVTbG90CQlUaW1lU2xvdCwKLQliaXROdW1iZXIJCUJpdE51bWJlciwKLSBmcmFtZURyaWZ0IEZyYW1lRHJpZnQgT1BUSU9OQUwKLX0KLQotLS0gRnJhbWUgZHJpZnQKLUZyYW1lRHJpZnQgOjo9IElOVEVHRVIoLTY0IC4uIDYzKQotCi0tLSBHQU5TUyBSZWZlcmVuY2UgTG9jYXRpb24gSUUKLUdBTlNTUmVmTG9jYXRpb24gOjo9IFNFUVVFTkNFIHsKLQl0aHJlZURMb2NhdGlvbgkJCUV4dC1HZW9ncmFwaGljYWxJbmZvcm1hdGlvbgotfQotCi0tLSBHQU5TUyBJb25vc3BoZXJpYyBNb2RlbCBJRQotLS0gR0FOU1MgSW9ub3NwaGVyaWMgTW9kZWwgY29uc2lzdHMgb2YgTmVRdWljayBtb2RlbCBwYXJhbWV0ZXJzIGFuZCBzdG9ybSBmbGFncwotCi1HQU5TU0lvbm9zcGhlcmljTW9kZWwgOjo9IFNFUVVFTkNFIHsKLSBnYW5zc0lvbm9Nb2RlbCBHQU5TU0lvbm9zcGhlcmVNb2RlbCwKLSBnYW5zc0lvbm9TdG9ybUZsYWdzIEdBTlNTSW9ub1N0b3JtRmxhZ3MgT1BUSU9OQUwsCi0gLi4uCi19Ci0KLS0tIEdBTlNTIGlvbm9zcGhlcmUgbW9kZWwuIENvZGluZyBhY2NvcmRpbmcgdG8gQW5uZXggCi1HQU5TU0lvbm9zcGhlcmVNb2RlbCA6Oj0gU0VRVUVOQ0UgewotIGFpMCBJTlRFR0VSICgwIC4uIDQwOTUpLAotIGFpMSBJTlRFR0VSICgwIC4uIDQwOTUpLAotIGFpMiBJTlRFR0VSICgwIC4uIDQwOTUpCi19Ci0KLS0tIEdBTlNTIGlvbm9zcGhlcmUgc3Rvcm0gZmxhZ3MKLUdBTlNTSW9ub1N0b3JtRmxhZ3MgOjo9IFNFUVVFTkNFIHsKLQlpb25vU3Rvcm1GbGFnMQlJTlRFR0VSICgwIC4uIDEpLAotCWlvbm9TdG9ybUZsYWcyCUlOVEVHRVIgKDAgLi4gMSksCi0JaW9ub1N0b3JtRmxhZzMJSU5URUdFUiAoMCAuLiAxKSwKLQlpb25vU3Rvcm1GbGFnNAlJTlRFR0VSICgwIC4uIDEpLAotCWlvbm9TdG9ybUZsYWc1CUlOVEVHRVIgKDAgLi4gMSkKLX0KLQotLS0gR0FOU1MgR0VORVJJQyBBU1NJU1RBTkNFIERBVEEgRUxFTUVOVFMKLQotLS0gR0FOU1MgVGltZSBNb2RlbCBJRSBjb25zaXN0cyBvZiB0aW1lIG9mZnNldCBhbmQgZmlyc3QgYW5kIHNlY29uZCBvcmRlciBwYXJhbWV0ZXJzIHRvIHJlbGF0ZSBHTlNTCi0tLSBzcGVjaWZpYyBzeXN0ZW0gdGltZSB0byBzZWxlY3RlZCB0aW1lIHJlZmVyZW5jZQotU2VxT2ZHQU5TU1RpbWVNb2RlbCA6Oj0gU0VRVUVOQ0UgKFNJWkUoMS4uNykpIE9GIEdBTlNTVGltZU1vZGVsRWxlbWVudAotCi1HQU5TU1RpbWVNb2RlbEVsZW1lbnQgOjo9IFNFUVVFTkNFIHsKLQlnYW5zc1RpbWVNb2RlbFJlZlRpbWUJCUlOVEVHRVIoMCAuLiA2NTUzNSksCi0JdEEwCQkgVEEwLAotCXRBMQkJIFRBMSBPUFRJT05BTCwKLQl0QTIJCSBUQTIgT1BUSU9OQUwsCi0gZ25zc1RPSUQgSU5URUdFUiAoMCAuLiA3KSwKLSB3ZWVrTnVtYmVyIElOVEVHRVIgKDAgLi4gODE5MSkgT1BUSU9OQUwgCi19Ci0KLS0tIEdBTlNTIHRpbWUgbW9kZWwgcGFyYW1ldGVyIEEwCi1UQTAgOjo9IElOVEVHRVIgKC0yMTQ3NDgzNjQ4IC4uIDIxNDc0ODM2NDcpCi0KLS0tIEdBTlNTIHRpbWUgbW9kZWwgcGFyYW1ldGVyIEExCi1UQTEgOjo9IElOVEVHRVIgKC04Mzg4NjA4IC4uIDgzODg2MDcpCi0KLS0tIEdBTlNTIHRpbWUgbW9kZWwgcGFyYW1ldGVyIEEyCi1UQTIgOjo9IElOVEVHRVIgKC02NCAuLiA2MykKLQotLS0gREdBTlNTIENvcnJlY3Rpb25zIElFCi1HQU5TU0RpZmZDb3JyZWN0aW9ucyA6Oj0gU0VRVUVOQ0UgewotCWRnYW5zc1JlZlRpbWUJCUlOVEVHRVIgKDAgLi4gMTE5KSwJIC0tIERHQU5TUyByZWZlcmVuY2UgdGltZQotCi0JLS0gTl9TR05fVFlQRSBjYW4gYmUgcmVhZCBmcm9tIG51bWJlciBvZiBlbGVtZW50cyBvZiBzZ25UeXBlTGlzdAotCXNnblR5cGVMaXN0CQkgU2VxT2ZTZ25UeXBlRWxlbWVudAotfQotCi1TZXFPZlNnblR5cGVFbGVtZW50IDo6PSBTRVFVRU5DRSAoU0laRSAoMS4uMykpIE9GIFNnblR5cGVFbGVtZW50IC0tIG1heCB0aHJlZSBzaWduYWxzIHBlciBHTlNTCi0KLS0tIERHQU5TUyBzaWduYWwgdHlwZSBlbGVtZW50LCBvbmNlIHBlciBHTlNTIHNpZ25hbCB0eXBlIGluY2x1ZGVkIGluIERHQU5TUwotU2duVHlwZUVsZW1lbnQgOjo9IFNFUVVFTkNFIHsKLQlnYW5zc1NpZ25hbElECQkgR0FOU1NTaWduYWxJRCBPUFRJT05BTCwgLS0gc2lnbmFsIHR5cGUgaWRlbnRpdHkKLSBnYW5zc1N0YXR1c0hlYWx0aCBJTlRFR0VSICgwIC4uIDcpLAotCS0tIE5fU0dOIGNhbiBiZSByZWFkIGZyb20gbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGRnYW5zc1Nnbkxpc3QKLSBkZ2Fuc3NTZ25MaXN0IFNlcU9mREdBTlNTU2duRWxlbWVudAotfQotCi1HQU5TU1NpZ25hbElEIDo6PSBJTlRFR0VSICgwIC4uIDMpCS0tIENvZGluZyBhY2NvcmRpbmcgdG8gQW5uZXgKLVNlcU9mREdBTlNTU2duRWxlbWVudCA6Oj0gU0VRVUVOQ0UgKFNJWkUgKDEuLjE2KSkgT0YgREdBTlNTU2duRWxlbWVudAotCi0tLSBudW1iZXIgb2YgY29ycmVjdGlvbiBmb3Igc2lnbmFscwotREdBTlNTU2duRWxlbWVudCA6Oj0gU0VRVUVOQ0UgewotCXN2SUQJCSBTVklELCAtLSBTYXRlbGxpdGUgaWRlbnRpdHkKLQotLS0tIFNlcXVlbmNlIG51bWJlciBmb3IgR0FOU1MgTmF2aWdhdGlvbiBNb2RlbCB0aGF0IG1hdGNoZXMgdGhlIERHQU5TUyBjb3JyZWN0aW9uIHNldAotCWlvZCAJCQlJTlRFR0VSICgwIC4uIDEwMjMpLAotCi0JLS0gVXNlciBEaWZmZXJlbnRpYWwgUmFuZ2UgRXJyb3IKLQl1ZHJlCQkJSU5URUdFUiAoMC4uMyksCQkKLQotCS0tIFBzZXVkbyBSYW5nZSBDb3JyZWN0aW9uLCByYW5nZSBpcwotCS0tIC02NTUuMDQgLSArNjU1LjA0LAotCXBzZXVkb1JhbmdlQ29yCUlOVEVHRVIgKC0yMDQ3Li4yMDQ3KSwgCQotCi0JLS0gUHNldWRvIFJhbmdlIFJhdGUgQ29ycmVjdGlvbiwgcmFuZ2UgaXMKLQktLSAtNC4wNjQgLSArNC4wNjQsCi0JcmFuZ2VSYXRlQ29yCUlOVEVHRVIgKC0xMjcuLjEyNykKLX0KLQotU1ZJRCA6Oj0gSU5URUdFUiAoMCAuLiA2MykJLS0gQ29kaW5nIGFjY29yZGluZyB0byBBbm5leAotCi0tLSBHQU5TUyBOYXZpZ2F0aW9uIE1vZGVsIElFCi1HQU5TU05hdk1vZGVsIDo6PSBTRVFVRU5DRSB7Ci0gbm9uQnJvYWRjYXN0SW5kRmxhZyBJTlRFR0VSICgwIC4uIDEpLAotIHRvZU1TQiBJTlRFR0VSICgwIC4uIDMxKSBPUFRJT05BTCwgLS0gNSBNU0Igb2YgdG9lIGFuZCB0b2MgCi0gZU1TQiBJTlRFR0VSICgwIC4uIDEyNykgT1BUSU9OQUwsCi0gc3FydEFNQlMgSU5URUdFUiAoMCAuLiA2MykgT1BUSU9OQUwsCi0JZ2Fuc3NTYXRlbGxpdGVMaXN0IFNlcU9mR0FOU1NTYXRlbGxpdGVFbGVtZW50Ci19Ci0KLVNlcU9mR0FOU1NTYXRlbGxpdGVFbGVtZW50IDo6PSBTRVFVRU5DRSAoU0laRSgxLi4zMikpIE9GIEdBTlNTU2F0ZWxsaXRlRWxlbWVudAotCi1HQU5TU1NhdGVsbGl0ZUVsZW1lbnQgOjo9IFNFUVVFTkNFIHsKLQlzdklEIFNWSUQsCi0gc3ZIZWFsdGggSU5URUdFUiAoLTcgLi4gMTMpLCAtLSBDb2RpbmcgYWNjb3JkaW5nIHRvIEFubmV4Ci0gaW9kIElOVEVHRVIgKDAgLi4gMTAyMyksIC0tIENvZGluZyBhY2NvcmRpbmcgdG8gQW5uZXgKLSBnYW5zc0Nsb2NrTW9kZWwgR0FOU1NDbG9ja01vZGVsLCAKLSBnYW5zc09yYml0TW9kZWwgR0FOU1NPcmJpdE1vZGVsLCAKLSAuLi4KLX0KLQotLS0gR0FOU1Mgb3JiaXQgbW9kZWwgZm9yIHRoZSBHTlNTIHNhdGVsbGl0ZSBhY2NvcmRpbmcgdG8gdGhlIGNob2ljZQotR0FOU1NPcmJpdE1vZGVsIDo6PSBDSE9JQ0UgewotCWtlcGxlcmlhblNldAkgTmF2TW9kZWwtS2VwbGVyaWFuU2V0LAkKLSAuLi4KLX0KLQotLS0gTmF2aWdhdGlvbiBtb2RlbCBpbiBLZXBsZXJpYW4gcGFyYW1ldGVycwotTmF2TW9kZWwtS2VwbGVyaWFuU2V0IDo6PSBTRVFVRU5DRSB7Ci0ga2VwbGVyVG9lTFNCIElOVEVHRVIgKDAgLi4gNTExKSwgLS0gOUxTQiBhcmUgZ2l2ZW4gaW4gR0FOU1NOYXZpZ2F0aW9uTW9kZWwKLQlrZXBsZXJXCQkJIElOVEVHRVIgKC0yMTQ3NDgzNjQ4Li4yMTQ3NDgzNjQ3KSwKLQlrZXBsZXJEZWx0YU4JIElOVEVHRVIgKC0zMjc2OC4uMzI3NjcpLAotCWtlcGxlck0wCQkgSU5URUdFUiAoLTIxNDc0ODM2NDguLjIxNDc0ODM2NDcpLAotCWtlcGxlck9tZWdhRG90CSBJTlRFR0VSICgtODM4ODYwOC4uODM4ODYwNyksCi0Ja2VwbGVyRUxTQiAJIElOVEVHRVIgKDAuLjMzNTU0NDMxKSwKLQlrZXBsZXJJRG90CQkgSU5URUdFUiAoLTgxOTIuLjgxOTEpLAotCWtlcGxlckFQb3dlckhhbGZMU0IgSU5URUdFUiAoMC4uIDY3MTA4ODYzKSwKLQlrZXBsZXJJMAkJIElOVEVHRVIgKC0yMTQ3NDgzNjQ4Li4yMTQ3NDgzNjQ3KSwKLQlrZXBsZXJPbWVnYTAgSU5URUdFUiAoLTIxNDc0ODM2NDguLjIxNDc0ODM2NDcpLAotCWtlcGxlckNycwkJIElOVEVHRVIgKC0zMjc2OC4uMzI3NjcpLAotCWtlcGxlckNpcwkJIElOVEVHRVIgKC0zMjc2OC4uMzI3NjcpLAotCWtlcGxlckN1cwkJIElOVEVHRVIgKC0zMjc2OC4uMzI3NjcpLAotCWtlcGxlckNyYwkJIElOVEVHRVIgKC0zMjc2OC4uMzI3NjcpLAotCWtlcGxlckNpYwkJIElOVEVHRVIgKC0zMjc2OC4uMzI3NjcpLAotCWtlcGxlckN1YwkJIElOVEVHRVIgKC0zMjc2OC4uMzI3NjcpCi19Ci0KLS0tIEdBTlNTIGNsb2NrIG1vZGVsIGZvciB0aGUgR05TUyBzYXRlbGxpdGUgYWNjb3JkaW5nIHRvIHRoZSBjaG9pY2UKLUdBTlNTQ2xvY2tNb2RlbCA6Oj0gQ0hPSUNFIHsKLQlzdGFuZGFyZENsb2NrTW9kZWxMaXN0CSBTZXFPZlN0YW5kYXJkQ2xvY2tNb2RlbEVsZW1lbnQsCQotIC4uLgotfQotCi1TZXFPZlN0YW5kYXJkQ2xvY2tNb2RlbEVsZW1lbnQgOjo9IFNFUVVFTkNFIChTSVpFKDEuLjIpKSBPRiBTdGFuZGFyZENsb2NrTW9kZWxFbGVtZW50Ci0KLVN0YW5kYXJkQ2xvY2tNb2RlbEVsZW1lbnQgOjo9IFNFUVVFTkNFIHsKLSBzdGFuQ2xvY2tUb2NMU0IgSU5URUdFUiAoMCAuLiA1MTEpLCAtLSA5TFNCIG9mIHRpbWUgb2YgY2xvY2sKLSBzdGFuQ2xvY2tBRjIgSU5URUdFUiAoLTIwNDggLi4gMjA0NyksIAotIHN0YW5DbG9ja0FGMSBJTlRFR0VSICgtMTMxMDcyIC4uIDEzMTA3MSksIAotIHN0YW5DbG9ja0FGMCBJTlRFR0VSICgtMTM0MjE3NzI4IC4uIDEzNDIxNzcyNyksCi0gc3RhbkNsb2NrVGdkIElOVEVHRVIgKC01MTIgLi4gNTExKSBPUFRJT05BTCwKLSBzdGFuTW9kZWxJRCBJTlRFR0VSICgwIC4uIDEpIE9QVElPTkFMLAotIC4uLgotfSAKLQotLS0gR0FOU1MgUmVhbC1UaW1lIEludGVncml0eSBJRQotR0FOU1NSZWFsVGltZUludGVncml0eSA6Oj0gU0VRVUVOQ0UgewotIC0tIGxpc3Qgb2YgYmFkIHNpZ25hbHMKLSAtLSBOQlMgY2FuIGJlIHJlYWQgZnJvbSBudW1iZXIgb2YgZWxlbWVudHMgaW4gU2VxT2YtQmFkU2lnbmFsU2V0Ci0gZ2Fuc3NCYWRTaWduYWxMaXN0IFNlcU9mQmFkU2lnbmFsRWxlbWVudAotfQotCi1TZXFPZkJhZFNpZ25hbEVsZW1lbnQgOjo9IFNFUVVFTkNFIChTSVpFKDEuLjE2KSkgT0YgQmFkU2lnbmFsRWxlbWVudAotCi1CYWRTaWduYWxFbGVtZW50IDo6PSBTRVFVRU5DRSB7Ci0gYmFkU1ZJRCBTVklELCAtLSBDb2RpbmcgYWNjb3JkaW5nIHRvIEFubmV4Ci0gYmFkU2lnbmFsSUQgSU5URUdFUiAoMCAuLiAzKSBPUFRJT05BTCAtLSBDb2RpbmcgYWNjb3JkaW5nIHRvIEFubmV4Ci19Ci0KLQotLS0gR0FOU1MgRGF0YSBCaXQgQXNzaXN0YW5jZSBJRQotR0FOU1NEYXRhQml0QXNzaXN0IDo6PSBTRVFVRU5DRSB7Ci0gZ2Fuc3NUT0QgSU5URUdFUiAoMCAuLiA1OSksCi0gc3ZJRCBTVklELAotIGdhbnNzRGF0YVR5cGVJRCBJTlRFR0VSICgwIC4uIDIpLCAtLSBDb2RpbmcgYWNjb3JkaW5nIHRvIEFubmV4Ci0gLS0gbGlzdCBvZiBuYXZpZ2F0aW9uIGRhdGEgYml0cwotIC0tIE5fQklUIGNhbiBiZSByZWFkIGZyb20gbnVtYmVyIG9mIGVsZW1lbnRzIGluIFNlcU9mLURhdGFCaXRzCi0gZ2Fuc3NEYXRhQml0cyBTZXFPZi1HQU5TU0RhdGFCaXRzCi19Ci0KLVNlcU9mLUdBTlNTRGF0YUJpdHMgOjo9IFNFUVVFTkNFIChTSVpFKDEgLi4gMTAyNCkpIE9GIEdBTlNTRGF0YUJpdAotR0FOU1NEYXRhQml0IDo6PSBJTlRFR0VSKDAgLi4gMSkKLQotLS0gR0FOU1MgUmVmZXJlbmNlIE1lYXN1cmVtZW50IEFzc2lzdGFuY2UgSUUKLS0tIENvZGUgYW5kIERvcHBsZXIgYXNzaXN0YW5jZSBmcm9tIHRoZSBuZXR3b3JrLiAKLUdBTlNTUmVmTWVhc3VyZW1lbnRBc3Npc3QgOjo9IFNFUVVFTkNFIHsKLSBnYW5zc1NpZ25hbElEIElOVEVHRVIgKDAgLi4gMykgT1BUSU9OQUwsIC0tIENvZGluZyBhY2NvcmRpbmcgdG8gQW5uZXgKLSBnYW5zc1JlZk1lYXNBc3NpdExpc3QgU2VxT2ZHQU5TU1JlZk1lYXN1cmVtZW50RWxlbWVudAotfQotCi1TZXFPZkdBTlNTUmVmTWVhc3VyZW1lbnRFbGVtZW50IDo6PSBTRVFVRU5DRSAoU0laRSgxIC4uIDE2KSkgT0YgR0FOU1NSZWZNZWFzdXJlbWVudEVsZW1lbnQKLQotR0FOU1NSZWZNZWFzdXJlbWVudEVsZW1lbnQgOjo9IFNFUVVFTkNFIHsKLSBzdklEIFNWSUQsCi0JLS0gRG9wcGxlciAwdGggb3JkZXIgdGVybSwKLQktLSAtMTAyNCBtL3MgdG8gMTAyMy41IG0vcyB3aXRoIDAuNSBtL3MgcmVzb2x1dGlvbikKLQlkb3BwbGVyMAkJCQlJTlRFR0VSICgtMjA0OCAuLiAyMDQ3KSwJLS0gQ29kaW5nIGFjY29yZGluZyB0byBBbm5leAotCWFkZGl0aW9uYWxEb3BwbGVyCQlBZGRpdGlvbmFsRG9wcGxlckZpZWxkcwkgT1BUSU9OQUwsCi0JY29kZVBoYXNlCQkJCUlOVEVHRVIgKDAgLi4gMTAyMiksCSAtLSBDb2RlIFBoYXNlIGluIG1zCi0JaW50Q29kZVBoYXNlCQkJSU5URUdFUiAoMCAuLiAxMjcpLAkgLS0gSW50ZWdlciBDb2RlIFBoYXNlIGluIG1zCi0JY29kZVBoYXNlU2VhcmNoV2luZG93CUlOVEVHRVIgKDAgLi4gMzEpLAkgLS0gQ29kZSBQaGFzZSBTZWFyY2ggV2luZG93LCBzZWUgQW5uZXgKLQlhZGRpdGlvbmFsQW5nbGUJCQlBZGRpb25hbEFuZ2xlRmllbGRzCQkgT1BUSU9OQUwsCi0gLi4uCi19Ci0KLUFkZGl0aW9uYWxEb3BwbGVyRmllbGRzIDo6PSBTRVFVRU5DRSB7Ci0JLS0gRG9wcGxlciAxc3Qgb3JkZXIgdGVybSwgLTAuMiAtICswLjEgbS9zMgotCWRvcHBsZXIxCQkJCUlOVEVHRVIgKDAuLjYzKSwKLQlkb3BwbGVyVW5jZXJ0YWludHkJCUlOVEVHRVIgKDAuLjQpCi19Ci0KLS0tIEdBTlNTIEFsbWFuYWMgTW9kZWwgSUUKLUdBTlNTQWxtYW5hY01vZGVsIDo6PSBTRVFVRU5DRSB7Ci0gd2Vla051bWJlciBJTlRFR0VSICgwIC4uIDI1NSksCi0gc3ZJRE1hc2sgU1ZJRE1BU0ssCi0gdG9hIElOVEVHRVIgKDAgLi4gMjU1KSBPUFRJT05BTCwKLSBpb2RhIElOVEVHRVIgKDAgLi4gMykgT1BUSU9OQUwsCi0gZ2Fuc3NBbG1hbmFjTGlzdCBTZXFPZkdBTlNTQWxtYW5hY0VsZW1lbnQKLX0KLQotLS0gU1YgSUQgTWFzaywgTFNCIGZvciBJRCAxIGFuZCBNU0IgZm9yIElEIDM2Ci1TVklETUFTSyA6Oj0gQklUIFNUUklORyAoU0laRSAoMS4uMzYpKQotCi1TZXFPZkdBTlNTQWxtYW5hY0VsZW1lbnQgOjo9IFNFUVVFTkNFIChTSVpFKDEgLi4gMzYpKSBPRiBHQU5TU0FsbWFuYWNFbGVtZW50Ci0KLS0tIEdBTlNTIEFsbWFuYWMgTW9kZWwgCi1HQU5TU0FsbWFuYWNFbGVtZW50IDo6PSBDSE9JQ0UgewotCWtlcGxlcmlhbkFsbWFuYWNTZXQJIEFsbWFuYWMtS2VwbGVyaWFuU2V0LAkKLSAuLi4KLX0KLQotLS0gQWxtYW5hYyBwYXJhbWV0ZXJzIGFjY29yZGluZyB0byBLZXBsZXJpYW4gcGFyYW1ldGVycwotQWxtYW5hYy1LZXBsZXJpYW5TZXQgOjo9IFNFUVVFTkNFIHsKLSAJa2VwQWxtYW5hY0UJCQkgSU5URUdFUiAoMCAuLiAyMDQ3KSwKLQlrZXBBbG1hbmFjRGVsdGFJCQlJTlRFR0VSICgtMTAyNCAuLiAxMDIzKSwKLQlrZXBBbG1hbmFjT21lZ2FEb3QJCUlOVEVHRVIgKC0xMDI0IC4uIDEwMjMpLAotIGtlcFNWSGVhbHRoIElOVEVHRVIgKDAgLi4gMTUpLCAtLSBDb2RpbmcgYWNjb3JkaW5nIHRvIEFubmV4Ci0Ja2VwQWxtYW5hY0FQb3dlckhhbGYJSU5URUdFUiAoLTY1NTM2IC4uIDY1NTM1KSwKLQlrZXBBbG1hbmFjT21lZ2EwCQlJTlRFR0VSICgtMzI3NjggLi4gMzI3NjcpLAotCWtlcEFsbWFuYWNXCQkJIElOVEVHRVIgKC0zMjc2OCAuLiAzMjc2NyksCi0Ja2VwQWxtYW5hY00wCQkJSU5URUdFUiAoLTMyNzY4IC4uIDMyNzY3KSwKLQlrZXBBbG1hbmFjQUYwCQkJSU5URUdFUiAoLTgxOTIgLi4gODE5MSksCi0Ja2VwQWxtYW5hY0FGMQkJCUlOVEVHRVIgKC0xMDI0Li4xMDIzKQotfQotCi0tLSBHQU5TUyBVbml2ZXJzYWwgVGltZSBDb29yZGluYXRlIE1vZGVsCi1HQU5TU1VUQ01vZGVsIDo6PSBTRVFVRU5DRSB7Ci0JZ2Fuc3NVdGNBMQkJCUlOVEVHRVIgKC04Mzg4NjA4Li44Mzg4NjA3KSwKLQlnYW5zc1V0Y0EwCQkJSU5URUdFUiAoLTIxNDc0ODM2NDguLjIxNDc0ODM2NDcpLAotCWdhbnNzVXRjVG90CQkJSU5URUdFUiAoMC4uMjU1KSwKLQlnYW5zc1V0Y1dOdAkJCUlOVEVHRVIgKDAuLjI1NSksCi0JZ2Fuc3NVdGNEZWx0YVRscwlJTlRFR0VSICgtMTI4Li4xMjcpLAotCWdhbnNzVXRjV05sc2YJCUlOVEVHRVIgKDAuLjI1NSksCi0JZ2Fuc3NVdGNETgkJCUlOVEVHRVIgKC0xMjguLjEyNyksCi0JZ2Fuc3NVdGNEZWx0YVRsc2YJSU5URUdFUiAoLTEyOC4uMTI3KQotfQotCi0tLVJlcXVpcmVkIE1lYXN1cmVtZW50IFJlcXVlc3QgUmVzcG9uc2UgVGltZSwgcmFuZ2UgaXMgMSB0byAxMjggc2Vjb25kcy4gCi1SZXF1aXJlZFJlc3BvbnNlVGltZSA6Oj0gSU5URUdFUiAgKDEuLjEyOCkKLQotUmVsLTctTXNyUG9zaXRpb24tUnNwLUV4dGVuc2lvbiA6Oj0gU0VRVUVOQ0UgewotCi0JdmVsRXN0aW1hdGUgCVZlbG9jaXR5RXN0aW1hdGUgT1BUSU9OQUwsCi0gLS0gSG9yaXpvbnRhbCBWZWxvY2l0eQotIC0tIEhvcml6b250YWwgd2l0aCBWZXJ0aWNhbCBWZWxvY2l0eQotIC0tIEhvcml6b250YWwgVmVsb2NpdHkgd2l0aCBVbmNlcnRhaW50eQotIC0tIEhvcml6b250YWwgd2l0aCBWZXJ0aWNhbCBWZWxvY2l0eSBhbmQgVW5jZXJ0YWludHkKLSBnYW5zc0xvY2F0aW9uSW5mbyBHQU5TU0xvY2F0aW9uSW5mbyBPUFRJT05BTCwKLSBnYW5zc01lYXN1cmVJbmZvIEdBTlNTTWVhc3VyZUluZm8gT1BUSU9OQUwsCi0JLi4uCi0tLSBGdXJ0aGVyIFJlbGVhc2UgNyBleHRlbnNpb25zIGhlcmUKLX0KLQotLS0gR0FOU1MgTG9jYXRpb24gSW5mb3JtYXRpb24gY29udGFpbnMgbG9jYXRpb24gZXN0aW1hdGUsIHRpbWUgc3RhbXAgd2l0aCB1bmNlcnRhaW50eSAKLS0tIGFuZCBvcHRpb25hbGx5IFJlZmVyZW5jZSBGcmFtZSBmaWVsZAotR0FOU1NMb2NhdGlvbkluZm8gOjo9IFNFUVVFTkNFIHsKLSByZWZlcmVuY2VGcmFtZSBSZWZlcmVuY2VGcmFtZSBPUFRJT05BTCwgLS0gUmVmZXJlbmNlIEZyYW1lIE51bWJlcgotIGdhbnNzVE9EbSBHQU5TU1RPRG0gT1BUSU9OQUwsIC0tIEdOU1MgVE9EIG1vZHVsbwotIGdhbnNzVE9ERnJhYyBJTlRFR0VSICgwIC4uIDE2Mzg0KSBPUFRJT05BTCwgLS0gQ29kaW5nIGFjY29yZGluZyB0byBBbm5leAotCWdhbnNzVE9EVW5jZXJ0YWludHkgR0FOU1NUT0RVbmNlcnRhaW50eSBPUFRJT05BTCwgLS0gQ29kaW5nIGFjY29yZGluZyB0byBBbm5leAotIGdhbnNzVGltZUlEIElOVEVHRVIgKDAgLi4gMykgT1BUSU9OQUwsIC0tIENvZGluZyBhY2NvcmRpbmcgdG8gQW5uZXgKLQlmaXhUeXBlCQkJIEZpeFR5cGUsCi0gcG9zRGF0YSBQb3NpdGlvbkRhdGEsCi0gc3RhdGlvbmFyeUluZGljYXRpb24gSU5URUdFUigwIC4uIDEpIE9QVElPTkFMLCAtLSAnMCcgaWYgbW92aW5nIG9yIG1vdGlvbiBub3Qga25vd24gCi0JLS0gUG9zc2libGUgc2hhcGVzIGNhcnJpZWQgaW4gcG9zRXN0aW1hdGUgYXJlCi0JLS0gZWxsaXBzb2lkIHBvaW50LAotCS0tIGVsbGlwc29pZCBwb2ludCB3aXRoIHVuY2VydGFpbnR5IGNpcmNsZQotCS0tIGVsbGlwc29pZCBwb2ludCB3aXRoIHVuY2VydGFpbnR5IGVsbGlwc2UKLQktLSBlbGxpcHNvaWQgcG9pbnQgd2l0aCBhbHRpdHVkZSBhbmQgdW5jZXJ0YWludHkgZWxsaXBzb2lkCi0JcG9zRXN0aW1hdGUJCSBFeHQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24sCi0gLi4uCi19Ci0KLVBvc2l0aW9uRGF0YSA6Oj0gQklUIFNUUklORyB7Ci0gZS1vdGQoMCksCi0JZ3BzICgxKSwKLQlnYWxpbGVvICgyKSB9IChTSVpFICgzLi4xNikpCi0KLQotLS0gR0FOU1MgVE9EIG1vZHVsbyAxIGhvdXIKLUdBTlNTVE9EbSA6Oj0gSU5URUdFUiAoMCAuLiAzNTk5OTk5KQotCi1SZWZlcmVuY2VGcmFtZSA6Oj0gU0VRVUVOQ0UgewotIHJlZmVyZW5jZUZOIElOVEVHRVIgKDAgLi4gNjU1MzUpLAotCS0tIE5vdGUgdGhhdCBhcHBsaWNhYmxlIHJhbmdlIGZvciByZWZlcmVuY2VGTiBpcyAwIC0gNDI0MzEKLSByZWZlcmVuY2VGTk1TQiBJTlRFR0VSICgwIC4uIDYzKSBPUFRJT05BTCAtLSBNU0Igb2YgUmVmZXJlbmNlIEZyYW1lIE51bWJlcgotfQotCi0KLQotLS0gR0FOU1MgTWVhc3VyZW1lbnQgSW5mb3JtYXRpb24gCi1HQU5TU01lYXN1cmVJbmZvIDo6PSBTRVFVRU5DRSB7Ci0JLS0gTWVhc3VyZW1lbnQgaW5mbyBlbGVtZW50cwotCS0tIHVzZXIgaGFzIHRvIG1ha2Ugc3VyZSB0aGF0IGluIHRoaXMgZWxlbWVudCBpcyBudW1iZXIgb2YgZWxlbWVudHMKLQktLSBkZWZpbmVkIGluIHJlZmVyZW5jZSBCVFMgaWRlbnRpdHkKLSBnYW5zc01zclNldExpc3QgU2VxT2ZHQU5TUy1Nc3JTZXRFbGVtZW50Ci19Ci1TZXFPZkdBTlNTLU1zclNldEVsZW1lbnQgOjo9IFNFUVVFTkNFIChTSVpFKDEuLjMpKSBPRiBHQU5TUy1Nc3JTZXRFbGVtZW50Ci0KLS0tIEdBTlNTIG1lYXN1cmVtZW50IGluZm9ybWF0aW9uIDEtMyB0aW1lcyBpbiBhIG1lc3NhZ2UKLUdBTlNTLU1zclNldEVsZW1lbnQgOjo9IFNFUVVFTkNFIHsKLSByZWZlcmVuY2VGcmFtZSBSZWZlcmVuY2VGcmFtZSBPUFRJT05BTCwgLS0gUmVmZXJlbmNlIEZyYW1lIE51bWJlcgotIGdhbnNzVE9EbSBHQU5TU1RPRG0gT1BUSU9OQUwsIC0tIEdBTlNTIFRPRCBtb2R1bG8KLSBkZWx0YUdOQVNTVE9EIElOVEVHRVIgKDAgLi4gMTI3KSBPUFRJT05BTCwKLQlnYW5zc1RPRFVuY2VydGFpbnR5IEdBTlNTVE9EVW5jZXJ0YWludHkgT1BUSU9OQUwsIC0tIENvZGluZyBhY2NvcmluZyB0byBBbm5leAotCi0gLS1OX1NHTl9UWVBFIGNhbiBiZSByZWFkIGZyb20gbnVtYmVyIG9mIGVsZW1lbnRzIG9mIFNlcU9mR0FOU1MtU2duVHlwZUVsZW1lbnQKLSBnYW5zcy1TZ25UeXBlTGlzdCBTZXFPZkdBTlNTLVNnblR5cGVFbGVtZW50Ci19Ci0KLS0tIE1lYXN1cmVtZW50cyBjYW4gYmUgcmV0dXJuZWQgdXAgdG8gNiBkaWZmZXJlbnQgc2lnbmFsIHR5cGVzIAotU2VxT2ZHQU5TUy1TZ25UeXBlRWxlbWVudCA6Oj0gU0VRVUVOQ0UgKFNJWkUoMS4uNikpIE9GIEdBTlNTLVNnblR5cGVFbGVtZW50Ci0KLUdBTlNTLVNnblR5cGVFbGVtZW50IDo6PSBTRVFVRU5DRSB7Ci0JZ2Fuc3NTaWduYWxJRAkJSU5URUdFUiAoMCAuLiAxNSksIC0tIENvZGluZyBhY2Nyb2RpbmcgdG8gQW5uZXgKLSAtLU5fU0dOIGNhbiBiZSByZWFkIGZyb20gbnVtYmVyIG9mIGVsZW1lbnRzIG9mIFNlcU9mR0FOU1MtU2duRWxlbWVudAotIGdhbnNzLVNnbkxpc3QgU2VxT2ZHQU5TUy1TZ25FbGVtZW50Ci19Ci0KLS0tIE1lYXN1cmVtZW50cyBjYW4gYmUgcmV0dXJuZWQgdXAgdG8gMTYgcGVyIHNpZ25hbCB0eXBlcyAKLVNlcU9mR0FOU1MtU2duRWxlbWVudCA6Oj0gU0VRVUVOQ0UgKFNJWkUoMS4uMTYpKSBPRiBHQU5TUy1TZ25FbGVtZW50Ci0KLQotR0FOU1MtU2duRWxlbWVudCA6Oj0gU0VRVUVOQ0UgewotIHN2SUQgU1ZJRCwKLSBjTm8gSU5URUdFUiAoMCAuLiA2MyksCi0gbXBhdGhEZXQgTXBhdGhJbmRpYywgLS0gQ29kaW5nIGFjY29yZGluZyB0byBBbm5leAotIGNhcnJpZXJRdWFsaXR5SW5kIElOVEVHRVIgKDAgLi4gMykgT1BUSU9OQUwsIC0tIENvZGluZyBhY2NvcmRpbmcgdG8gQW5uZXgKLSBjb2RlUGhhc2UgSU5URUdFUiAoMCAuLiAyMDk3MTUxKSwKLSBpbnRlZ2VyQ29kZVBoYXNlIElOVEVHRVIgKDAgLi4gNjMpIE9QVElPTkFMLAotIGNvZGVQaGFzZVJNU0Vycm9yIElOVEVHRVIgKDAuLjYzKSwgLS0gQ29kaW5nIGFjY29yaW5nIHRvIEFubmV4Ci0gZG9wcGxlciBJTlRFR0VSICgtMzI3NjggLi4gMzI3NjcpIE9QVElPTkFMLAotIGFkciBJTlRFR0VSICgwIC4uIDMzNTU0NDMxKSBPUFRJT05BTAotfQotCi1SZWw3LUFzc2lzdGFuY2VEYXRhLUV4dGVuc2lvbiA6Oj0gU0VRVUVOQ0UgewotIGdhbnNzLUFzc2lzdERhdGEgR0FOU1MtQXNzaXN0RGF0YSBPUFRJT05BTCwKLSBnYW5zc0NhcnJpZXJQaGFzZU1lYXN1cmVtZW50UmVxdWVzdCBOVUxMIE9QVElPTkFMLAotIGdhbnNzVE9ER1NNVGltZUFzc29jaWF0aW9uTWVhc3VyZW1lbnRSZXF1ZXN0IE5VTEwgT1BUSU9OQUwsCi0JLi4uCi0tLSBQb3NzaWJseSBtb3JlIGV4dGVuc2lvbnMgZm9yIFJlbGVhc2UgNyBoZXJlCi19Ci0KLUVORApkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvYXNuMS9SUkxQLU1lc3NhZ2VzLmFzbiBiL3JybHAtZXBoZW1lcmlzL2FzbjEvUlJMUC1NZXNzYWdlcy5hc24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MTQwZTIuLjAwMDAwMDAKLS0tIGEvcnJscC1lcGhlbWVyaXMvYXNuMS9SUkxQLU1lc3NhZ2VzLmFzbgorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS0tIFJSTFAtTWVzc2FnZXMuYXNuCi0tLSAkSWQkCi0tLSBUYWtlbiBmcm9tIDNHUFAgVFMgNDQuMDMxIFY3LjQuMCAoMjAwNy0wMykKLS0tIGh0dHA6Ly93d3cuM2dwcC5vcmcvZnRwL1NwZWNzL2FyY2hpdmUvNDRfc2VyaWVzLzQ0LjAzMS80NDAzMS03NDAuemlwLzQ0MDMxLTc0MC5kb2MKLS0tCi0tLSAzLjEgR2VuZXJhbCBGb3JtYXQgb2YgUlJMUCBNZXNzYWdlCi0tLQotCi1SUkxQLU1lc3NhZ2VzCi0tLSB7IFJSTFAtbWVzc2FnZXMgfQotCi1ERUZJTklUSU9OUyBBVVRPTUFUSUMgVEFHUyA6Oj0KLQotQkVHSU4KLQotSU1QT1JUUwotCU1zclBvc2l0aW9uLVJlcSwgTXNyUG9zaXRpb24tUnNwLCBBc3Npc3RhbmNlRGF0YSwKLQlQcm90b2NvbEVycm9yCi1GUk9NCi0JUlJMUC1Db21wb25lbnRzIAktLSB7IFJSTFAtQ29tcG9uZW50cyB9Ci07Ci0KLVBEVSA6Oj0gU0VRVUVOQ0UgewotCXJlZmVyZW5jZU51bWJlcgkJCUlOVEVHRVIgKDAuLjcpLAotCWNvbXBvbmVudAkJCQlSUkxQLUNvbXBvbmVudAotfQotCi1SUkxQLUNvbXBvbmVudCA6Oj0gQ0hPSUNFIHsKLQltc3JQb3NpdGlvblJlcQkJCU1zclBvc2l0aW9uLVJlcSwKLQltc3JQb3NpdGlvblJzcAkJCU1zclBvc2l0aW9uLVJzcCwKLQlhc3Npc3RhbmNlRGF0YQkJCUFzc2lzdGFuY2VEYXRhLAotCWFzc2lzdGFuY2VEYXRhQWNrCQlOVUxMLAotCXByb3RvY29sRXJyb3IJCQlQcm90b2NvbEVycm9yLAotCS4uLgotCi19Ci0KLUVORApkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvYXNuMS9wYXRjaC1ycmxwLWNvbXBvbmVudHMuZGlmZiBiL3JybHAtZXBoZW1lcmlzL2FzbjEvcGF0Y2gtcnJscC1jb21wb25lbnRzLmRpZmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1ZTU1YWUuLjAwMDAwMDAKLS0tIGEvcnJscC1lcGhlbWVyaXMvYXNuMS9wYXRjaC1ycmxwLWNvbXBvbmVudHMuZGlmZgorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS0tLSBSUkxQLUNvbXBvbmVudHMuYXNuCTIwMDktMTAtMjYgMjI6MTA6NDQuMDAwMDAwMDAwICswMTAwCi0rKysgUlJMUC1Db21wb25lbnRzLmFzbgkyMDA5LTEwLTI2IDIyOjEwOjQ0LjAwMDAwMDAwMCArMDEwMAotQEAgLTE4LDE2ICsxOCwxNiBAQAotIAlFeHQtR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24sIFZlbG9jaXR5RXN0aW1hdGUKLSBGUk9NCi0gCU1BUC1MQ1MtRGF0YVR5cGVzIHsKLS0JY2NpdHQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKLS0JZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1MQ1MtRGF0YVR5cGVzICgyNSkgdmVyc2lvbjUgKDUpfQotKwlpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQotKwlnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUxDUy1EYXRhVHlwZXMgKDI1KSB2ZXJzaW9uMTEgKDExKX0KLSAKLSAJRXh0ZW5zaW9uQ29udGFpbmVyCi0gRlJPTSBNQVAtRXh0ZW5zaW9uRGF0YVR5cGVzIHsKLS0JY2NpdHQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKLS0JZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1FeHRlbnNpb25EYXRhVHlwZXMgKDIxKSB2ZXJzaW9uNCAoNCl9Ci0rCWl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCi0rCWdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtRXh0ZW5zaW9uRGF0YVR5cGVzICgyMSkgdmVyc2lvbjExICgxMSl9Ci0gOwotIAotIC0tIEFkZCBoZXJlIG90aGVyIEFTTi4xIGRlZmluaXRpb25zIHByZXNlbnRlZCBiZWxvdwotIC0tIGluIGNoYXB0ZXJzIDQgYW5kIDUuCi0gCi1AQCAtMzA1LDExICszMDUsMTEgQEAKLSBTeXN0ZW1JbmZvSW5kZXggOjo9IElOVEVHRVIgKDEuLjMyKQotIAotIENlbGxJREFuZExBQyA6Oj0gU0VRVUVOQ0UgewotLQlyZWZlcmVuY2VMQUMJTEFDLAkJCQktLSBMb2NhdGlvbiBhcmVhIGNvZGUKLSsJcmVmZXJlbmNlTEFDCUxBQ0lELAkJCQktLSBMb2NhdGlvbiBhcmVhIGNvZGUKLSAJcmVmZXJlbmNlQ0kJCUNlbGxJRAkJCQktLSBDZWxsIGlkZW50aXR5Ci0gfQotIENlbGxJRCA6Oj0gSU5URUdFUiAoMC4uNjU1MzUpCi0tTEFDIDo6PSBJTlRFR0VSICgwLi42NTUzNSkKLStMQUNJRCA6Oj0gSU5URUdFUiAoMC4uNjU1MzUpCi0gCi0gLS0gT1RELU1lYXN1cmVJbmZvCi0gT1RELU1lYXN1cmVJbmZvIDo6PSBTRVFVRU5DRSB7CmRpZmYgLS1naXQgYS9ycmxwLWVwaGVtZXJpcy9hc24xY19wYXRjaGVzLzAwX2FkZF9lbnVtZXJhdGVkX3ZlcmJvc2UuZGlmZiBiL3JybHAtZXBoZW1lcmlzL2FzbjFjX3BhdGNoZXMvMDBfYWRkX2VudW1lcmF0ZWRfdmVyYm9zZS5kaWZmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGMyMmEzLi4wMDAwMDAwCi0tLSBhL3JybHAtZXBoZW1lcmlzL2FzbjFjX3BhdGNoZXMvMDBfYWRkX2VudW1lcmF0ZWRfdmVyYm9zZS5kaWZmCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotSW5kZXg6IHNrZWxldG9ucy9OYXRpdmVFbnVtZXJhdGVkLmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBza2VsZXRvbnMvTmF0aXZlRW51bWVyYXRlZC5jCShyZXZpc2lvbiAxNDA3KQotKysrIHNrZWxldG9ucy9OYXRpdmVFbnVtZXJhdGVkLmMJKHdvcmtpbmcgY29weSkKLUBAIC0yMiw3ICsyMiw3IEBACi0gCSJFTlVNRVJBVEVEIiwJCQkvKiBUaGUgQVNOLjEgdHlwZSBpcyBzdGlsbCBFTlVNRVJBVEVEICovCi0gCSJFTlVNRVJBVEVEIiwKLSAJTmF0aXZlSW50ZWdlcl9mcmVlLAotLQlOYXRpdmVJbnRlZ2VyX3ByaW50LAotKwlOYXRpdmVFbnVtZXJhdGVkX3ByaW50LAotIAlhc25fZ2VuZXJpY19ub19jb25zdHJhaW50LAotIAlOYXRpdmVJbnRlZ2VyX2RlY29kZV9iZXIsCi0gCU5hdGl2ZUludGVnZXJfZW5jb2RlX2RlciwKLUBAIC0yMDUsMyArMjA1LDMwIEBACi0gCV9BU05fRU5DT0RFRF9PSyhlcik7Ci0gfQotIAotK2ludAotK05hdGl2ZUVudW1lcmF0ZWRfcHJpbnQoYXNuX1RZUEVfZGVzY3JpcHRvcl90ICp0ZCwgY29uc3Qgdm9pZCAqc3B0ciwgaW50IGlsZXZlbCwKLSsJYXNuX2FwcF9jb25zdW1lX2J5dGVzX2YgKmNiLCB2b2lkICphcHBfa2V5KSB7Ci0rCWFzbl9JTlRFR0VSX3NwZWNpZmljc190ICpzcGVjcz0oYXNuX0lOVEVHRVJfc3BlY2lmaWNzX3QgKil0ZC0+c3BlY2lmaWNzOwotKwljb25zdCBsb25nICpuYXRpdmUgPSAoY29uc3QgbG9uZyAqKXNwdHI7Ci0rCWNoYXIgc2NyYXRjaFsyNTZdOwotKwlpbnQgcmV0OwotKwotKwkodm9pZCl0ZDsJLyogVW51c2VkIGFyZ3VtZW50ICovCi0rCSh2b2lkKWlsZXZlbDsJLyogVW51c2VkIGFyZ3VtZW50ICovCi0rCi0rCWlmKG5hdGl2ZSkgewotKwkJY29uc3QgYXNuX0lOVEVHRVJfZW51bV9tYXBfdCAqbWFwID0gSU5URUdFUl9tYXBfdmFsdWUyZW51bShzcGVjcywgKm5hdGl2ZSk7Ci0rCQlpZiAobWFwICYmIG1hcC0+ZW51bV9sZW4gJiYgbWFwLT5lbnVtX25hbWUpIHsKLSsJCQlyZXQgPSBzbnByaW50ZihzY3JhdGNoLCBzaXplb2Yoc2NyYXRjaCksCi0rCQkJCSIlcyIsIG1hcC0+ZW51bV9uYW1lKTsKLSsJCX0gZWxzZSB7Ci0rCQkJcmV0ID0gc25wcmludGYoc2NyYXRjaCwgc2l6ZW9mKHNjcmF0Y2gpLAotKwkJCQkoc3BlY3MgJiYgc3BlY3MtPmZpZWxkX3Vuc2lnbmVkKQotKwkJCQk/ICIlbHUiIDogIiVsZCIsICpuYXRpdmUpOwotKwkJfQotKwkJYXNzZXJ0KHJldCA+IDAgJiYgKHNpemVfdClyZXQgPCBzaXplb2Yoc2NyYXRjaCkpOwotKwkJcmV0dXJuIChjYihzY3JhdGNoLCByZXQsIGFwcF9rZXkpIDwgMCkgPyAtMSA6IDA7Ci0rCX0gZWxzZSB7Ci0rCQlyZXR1cm4gKGNiKCI8YWJzZW50PiIsIDgsIGFwcF9rZXkpIDwgMCkgPyAtMSA6IDA7Ci0rCX0KLSt9Ci1JbmRleDogc2tlbGV0b25zL05hdGl2ZUVudW1lcmF0ZWQuaAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIHNrZWxldG9ucy9OYXRpdmVFbnVtZXJhdGVkLmgJKHJldmlzaW9uIDE0MDcpCi0rKysgc2tlbGV0b25zL05hdGl2ZUVudW1lcmF0ZWQuaAkod29ya2luZyBjb3B5KQotQEAgLTI0LDYgKzI0LDcgQEAKLSB4ZXJfdHlwZV9lbmNvZGVyX2YgTmF0aXZlRW51bWVyYXRlZF9lbmNvZGVfeGVyOwotIHBlcl90eXBlX2RlY29kZXJfZiBOYXRpdmVFbnVtZXJhdGVkX2RlY29kZV91cGVyOwotIHBlcl90eXBlX2VuY29kZXJfZiBOYXRpdmVFbnVtZXJhdGVkX2VuY29kZV91cGVyOwotK2Fzbl9zdHJ1Y3RfcHJpbnRfZiBOYXRpdmVFbnVtZXJhdGVkX3ByaW50OwotIAotICNpZmRlZiBfX2NwbHVzcGx1cwotIH0KZGlmZiAtLWdpdCBhL3JybHAtZXBoZW1lcmlzL2FzbjFjX3BhdGNoZXMvMDFfZml4X3Blcl9lbmNvZGluZ19kaWV0ZXIuZGlmZiBiL3JybHAtZXBoZW1lcmlzL2FzbjFjX3BhdGNoZXMvMDFfZml4X3Blcl9lbmNvZGluZ19kaWV0ZXIuZGlmZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA5YzIwMS4uMDAwMDAwMAotLS0gYS9ycmxwLWVwaGVtZXJpcy9hc24xY19wYXRjaGVzLzAxX2ZpeF9wZXJfZW5jb2RpbmdfZGlldGVyLmRpZmYKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1JbmRleDogc2tlbGV0b25zL3Blcl9zdXBwb3J0LmMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBza2VsZXRvbnMvcGVyX3N1cHBvcnQuYwkocmV2aXNpb24gMTQwNykKLSsrKyBza2VsZXRvbnMvcGVyX3N1cHBvcnQuYwkod29ya2luZyBjb3B5KQotQEAgLTMzNiw3ICszMzYsMTIgQEAKLSAJCWJ1ZlszXSA9IGJpdHM7Ci0gCWVsc2UgewotIAkJQVNOX0RFQlVHKCItPltQRVIgb3V0IHNwbGl0ICVkXSIsIG9iaXRzKTsKLSsjaWYgMSAvLyBEaWV0ZXIKLSsJCXBvLT5uYm9mZiAtPSBvYml0czsgLy8gdW5kbyBpbmNyZW1lbnRhdGlvbiBmcm9tIGEgZmV3IGxpbmVzIGFib3ZlCi0rCQlwZXJfcHV0X2Zld19iaXRzKHBvLCBiaXRzID4+IChvYml0cyAtIDI0KSwgMjQpOyAvLyBzaGlmdCBhY2NvcmRpbmcgdG8gdGhlIHJlc3Qgb2YgdGhlIGJpdHMgCi0rI2Vsc2UJCQotIAkJcGVyX3B1dF9mZXdfYml0cyhwbywgYml0cyA+PiA4LCAyNCk7Ci0rI2VuZGlmCi0gCQlwZXJfcHV0X2Zld19iaXRzKHBvLCBiaXRzLCBvYml0cyAtIDI0KTsKLSAJCUFTTl9ERUJVRygiPC1bUEVSIG91dCBzcGxpdCAlZF0iLCBvYml0cyk7Ci0gCX0KZGlmZiAtLWdpdCBhL3JybHAtZXBoZW1lcmlzL2RhdGEudWJ4IGIvcnJscC1lcGhlbWVyaXMvZGF0YS51YngKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3Y2RkZGMuLjAwMDAwMDAKLS0tIGEvcnJscC1lcGhlbWVyaXMvZGF0YS51YngKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ycmxwLWVwaGVtZXJpcy9nZXQtdGVzdC1kYXRhLnNoIGIvcnJscC1lcGhlbWVyaXMvZ2V0LXRlc3QtZGF0YS5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMTY5ZjQzYy4uMDAwMDAwMAotLS0gYS9ycmxwLWVwaGVtZXJpcy9nZXQtdGVzdC1kYXRhLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyEvYmluL3NoCi0KLURFVj0kMQotT1VURj0kMgotCi0jIENoYW5nZSBtb2RlCi1lY2hvIC1lbiAiXCRQVUJYLDQxLDEsMDAwMSwwMDAxLDk2MDAsMCoxNFxyXG4iID4gJHtERVZ9Ci0KLSMgV2FpdCBhIGxpdHRsZQotc2xlZXAgMgotCi0jIFN0YXJ0IGR1bXAKLWVjaG8gLWVuICJceGI1XHg2Mlx4MDFceDAyXHgwMFx4MDBceDAzXHgwYSIgfCBcCi0Jc29jYXQgLXQ1ICR7REVWfSxiOTYwMCxyYXcsY2xvY2FsPTEsZWNobz0wIC0gPiAke09VVEZ9Ci1lY2hvIC1lbiAiXHhiNVx4NjJceDBiXHgxMFx4MDBceDAwXHgxYlx4NWMiIHwgXAotCXNvY2F0IC10MTAgJHtERVZ9LGI5NjAwLHJhdyxjbG9jYWw9MSxlY2hvPTAgLSA+PiAke09VVEZ9Ci0KZGlmZiAtLWdpdCBhL3JybHAtZXBoZW1lcmlzL2dwbC0yLjAudHh0IGIvcnJscC1lcGhlbWVyaXMvZ3BsLTIuMC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MTE5MDUuLjAwMDAwMDAKLS0tIGEvcnJscC1lcGhlbWVyaXMvZ3BsLTIuMC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMzkgKzAsMCBAQAotCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKLQkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCi0KLSBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKLSBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KLQotCQkJICAgIFByZWFtYmxlCi0KLSAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgotZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLUxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKLXNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCi1HZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQotRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwotdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQotdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KLXlvdXIgcHJvZ3JhbXMsIHRvby4KLQotICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90Ci1wcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91Ci1oYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCi10aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKLWlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0Ci1pbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCi0KLSAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAotYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgotVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKLWRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KLQotICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCi1ncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKLXlvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCi1zb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCi1yaWdodHMuCi0KLSAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAotKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKLWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCi0KLSAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KLXRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCi1zb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKLXdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCi10aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAotYXV0aG9ycycgcmVwdXRhdGlvbnMuCi0KLSAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKLXBhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKLXByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKLXByb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQotcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KLQotICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAotbW9kaWZpY2F0aW9uIGZvbGxvdy4KLQotCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKLSAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgotCi0gIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKLWEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCi11bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCi1yZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKLW1lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Ci10aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAotZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKLWxhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KLXRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgotCi1BY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAotY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgotcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQotaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKLVByb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCi1XaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KLQotICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKLXNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQotY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQotY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQotbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OwotYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQotYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KLQotWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCi15b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgotCi0gIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KLW9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKLWRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQotYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKLQotICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCi0KLSAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KLSAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKLSAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAotICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KLQotICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKLSAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCi0gICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgotICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQotICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQotICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKLSAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcwotICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0Ci0gICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgotICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQotCi1UaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCi1pZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAotYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCi10aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCi1zZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKLWRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAotb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCi10aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQotZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgotCi1UaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKLXlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bwotZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCi1jb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgotCi1JbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCi13aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKLWEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCi10aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgotCi0gIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAotdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCi1TZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCi0gICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCi0gICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCi0KLSAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQotICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCi0gICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQotICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKLSAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQotICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKLQotICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCi0gICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKLSAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQotICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKLSAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKLQotVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgotbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKLWNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Ci1hc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KLWNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKLXNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQotYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKLWZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCi1vcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAotaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgotCi1JZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCi1hY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50Ci1hY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKLWRpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAotY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KLQotICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLWV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKLW90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwotdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgotSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKLXRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCi1wYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCi0KLSAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Ci1zaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgotZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCi1wcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Ci1tb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKLVByb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCi1hbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCi10aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KLQotICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCi1Qcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQotb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwotdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKLXJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KLVlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCi10aGlzIExpY2Vuc2UuCi0KLSAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAotaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKLWNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKLW90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKLWV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90Ci1kaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCi1MaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91Ci1tYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50Ci1saWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5Ci1hbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KLXRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KLXJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCi0KLUlmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgotYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bwotYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKLWNpcmN1bXN0YW5jZXMuCi0KLUl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKLXBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Ci1zdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCi1pbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKLWltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQotZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAotdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKLXN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKLXRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAotaW1wb3NlIHRoYXQgY2hvaWNlLgotCi1UaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KLWJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgotCi0gIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCi1jZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKLW9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKLW1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwotdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZwotY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCi10aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KLQotICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucwotb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCi1iZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KLWFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgotCi1FYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCi1zcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQotbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLVNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKLXRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKLUZvdW5kYXRpb24uCi0KLSAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQotcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgotdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCi1Tb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKLW1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCi1vZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCi1vZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KLQotCQkJICAgIE5PIFdBUlJBTlRZCi0KLSAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCi1GT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KLU9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKLVBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECi1PUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUwotVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQotUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCi1SRVBBSVIgT1IgQ09SUkVDVElPTi4KLQotICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCi1XSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCi1SRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAotSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCi1PVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECi1UTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKLVlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCi1QUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKLVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KLQotCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwotCi0JICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwotCi0gIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKLXBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKLWZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgotCi0gIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Ci10byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Ci1jb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAotdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCi0KLSAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgotICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+Ci0KLSAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotCi1BbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KLQotSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcwotd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKLQotICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgotICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KLSAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0Ci0gICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgotCi1UaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKLXBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKLWJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQotbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KLQotWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKLXNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCi1uZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6Ci0KLSAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQotICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KLQotICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKLSAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKLQotVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCi1wcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQotY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCi1saWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAotUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9ycmxwLWVwaGVtZXJpcy9ncGwtMy4wLnR4dCBiL3JybHAtZXBoZW1lcmlzL2dwbC0zLjAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGE5ZWQwLi4wMDAwMDAwCi0tLSBhL3JybHAtZXBoZW1lcmlzL2dwbC0zLjAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNjc0ICswLDAgQEAKLSAgICAgICAgICAgICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKLSAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKLQotIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KLSBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKLSBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCi0KLSAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5zZSBmb3IKLXNvZnR3YXJlIGFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcy4KLQotICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQKLXRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuICBCeSBjb250cmFzdCwKLXRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCi1zaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9ucyBvZiBhIHByb2dyYW0tLXRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIGZyZWUKLXNvZnR3YXJlIGZvciBhbGwgaXRzIHVzZXJzLiAgV2UsIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHVzZSB0aGUKLUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCi1hbnkgb3RoZXIgd29yayByZWxlYXNlZCB0aGlzIHdheSBieSBpdHMgYXV0aG9ycy4gIFlvdSBjYW4gYXBwbHkgaXQgdG8KLXlvdXIgcHJvZ3JhbXMsIHRvby4KLQotICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90Ci1wcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91Ci1oYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCi10aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdQotd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKLWZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgotCi0gIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gcHJldmVudCBvdGhlcnMgZnJvbSBkZW55aW5nIHlvdQotdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCi1jZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYKLXlvdSBtb2RpZnkgaXQ6IHJlc3BvbnNpYmlsaXRpZXMgdG8gcmVzcGVjdCB0aGUgZnJlZWRvbSBvZiBvdGhlcnMuCi0KLSAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgotZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgcGFzcyBvbiB0byB0aGUgcmVjaXBpZW50cyB0aGUgc2FtZQotZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKLW9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5Ci1rbm93IHRoZWlyIHJpZ2h0cy4KLQotICBEZXZlbG9wZXJzIHRoYXQgdXNlIHRoZSBHTlUgR1BMIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6Ci0oMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgTGljZW5zZQotZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KLQotICBGb3IgdGhlIGRldmVsb3BlcnMnIGFuZCBhdXRob3JzJyBwcm90ZWN0aW9uLCB0aGUgR1BMIGNsZWFybHkgZXhwbGFpbnMKLXRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKLWF1dGhvcnMnIHNha2UsIHRoZSBHUEwgcmVxdWlyZXMgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBiZSBtYXJrZWQgYXMKLWNoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2lsbCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0bwotYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KLQotICBTb21lIGRldmljZXMgYXJlIGRlc2lnbmVkIHRvIGRlbnkgdXNlcnMgYWNjZXNzIHRvIGluc3RhbGwgb3IgcnVuCi1tb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKLWNhbiBkbyBzby4gIFRoaXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgYWltIG9mCi1wcm90ZWN0aW5nIHVzZXJzJyBmcmVlZG9tIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUuICBUaGUgc3lzdGVtYXRpYwotcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KLXVzZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIGl0IGlzIG1vc3QgdW5hY2NlcHRhYmxlLiAgVGhlcmVmb3JlLCB3ZQotaGF2ZSBkZXNpZ25lZCB0aGlzIHZlcnNpb24gb2YgdGhlIEdQTCB0byBwcm9oaWJpdCB0aGUgcHJhY3RpY2UgZm9yIHRob3NlCi1wcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQotc3RhbmQgcmVhZHkgdG8gZXh0ZW5kIHRoaXMgcHJvdmlzaW9uIHRvIHRob3NlIGRvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zCi1vZiB0aGUgR1BMLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB1c2Vycy4KLQotICBGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLgotU3RhdGVzIHNob3VsZCBub3QgYWxsb3cgcGF0ZW50cyB0byByZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mCi1zb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwotYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtIGNvdWxkCi1tYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB0aGUgR1BMIGFzc3VyZXMgdGhhdAotcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCi0KLSAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKLW1vZGlmaWNhdGlvbiBmb2xsb3cuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgVEVSTVMgQU5EIENPTkRJVElPTlMKLQotICAwLiBEZWZpbml0aW9ucy4KLQotICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLQotICAiQ29weXJpZ2h0IiBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3MgdGhhdCBhcHBseSB0byBvdGhlciBraW5kcyBvZgotd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KLQotICAiVGhlIFByb2dyYW0iIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMKLUxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAotInJlY2lwaWVudHMiIG1heSBiZSBpbmRpdmlkdWFscyBvciBvcmdhbml6YXRpb25zLgotCi0gIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKLWluIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZiBhbgotZXhhY3QgY29weS4gIFRoZSByZXN1bHRpbmcgd29yayBpcyBjYWxsZWQgYSAibW9kaWZpZWQgdmVyc2lvbiIgb2YgdGhlCi1lYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KLQotICBBICJjb3ZlcmVkIHdvcmsiIG1lYW5zIGVpdGhlciB0aGUgdW5tb2RpZmllZCBQcm9ncmFtIG9yIGEgd29yayBiYXNlZAotb24gdGhlIFByb2dyYW0uCi0KLSAgVG8gInByb3BhZ2F0ZSIgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dAotcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgotaW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhCi1jb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuICBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLAotZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKLXB1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KLQotICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCi1wYXJ0aWVzIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMuICBNZXJlIGludGVyYWN0aW9uIHdpdGggYSB1c2VyIHRocm91Z2gKLWEgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5vdCBjb252ZXlpbmcuCi0KLSAgQW4gaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2UgZGlzcGxheXMgIkFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMiCi10byB0aGUgZXh0ZW50IHRoYXQgaXQgaW5jbHVkZXMgYSBjb252ZW5pZW50IGFuZCBwcm9taW5lbnRseSB2aXNpYmxlCi1mZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKLXRlbGxzIHRoZSB1c2VyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSB3b3JrIChleGNlcHQgdG8gdGhlCi1leHRlbnQgdGhhdCB3YXJyYW50aWVzIGFyZSBwcm92aWRlZCksIHRoYXQgbGljZW5zZWVzIG1heSBjb252ZXkgdGhlCi13b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgotdGhlIGludGVyZmFjZSBwcmVzZW50cyBhIGxpc3Qgb2YgdXNlciBjb21tYW5kcyBvciBvcHRpb25zLCBzdWNoIGFzIGEKLW1lbnUsIGEgcHJvbWluZW50IGl0ZW0gaW4gdGhlIGxpc3QgbWVldHMgdGhpcyBjcml0ZXJpb24uCi0KLSAgMS4gU291cmNlIENvZGUuCi0KLSAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKLWZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gICJPYmplY3QgY29kZSIgbWVhbnMgYW55IG5vbi1zb3VyY2UKLWZvcm0gb2YgYSB3b3JrLgotCi0gIEEgIlN0YW5kYXJkIEludGVyZmFjZSIgbWVhbnMgYW4gaW50ZXJmYWNlIHRoYXQgZWl0aGVyIGlzIGFuIG9mZmljaWFsCi1zdGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBjYXNlIG9mCi1pbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAotaXMgd2lkZWx5IHVzZWQgYW1vbmcgZGV2ZWxvcGVycyB3b3JraW5nIGluIHRoYXQgbGFuZ3VhZ2UuCi0KLSAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKLXRoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mCi1wYWNrYWdpbmcgYSBNYWpvciBDb21wb25lbnQsIGJ1dCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGF0IE1ham9yCi1Db21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKLU1ham9yIENvbXBvbmVudCwgb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbgotaW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4gc291cmNlIGNvZGUgZm9ybS4gIEEKLSJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAotKGtlcm5lbCwgd2luZG93IHN5c3RlbSwgYW5kIHNvIG9uKSBvZiB0aGUgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbQotKGlmIGFueSkgb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgd29yayBydW5zLCBvciBhIGNvbXBpbGVyIHVzZWQgdG8KLXByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgotCi0gIFRoZSAiQ29ycmVzcG9uZGluZyBTb3VyY2UiIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwKLXRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKLXdvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8KLWNvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHdvcmsncwotU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQotcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0Ci13aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHdvcmsuICBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UKLWluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCi10aGUgd29yaywgYW5kIHRoZSBzb3VyY2UgY29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZHluYW1pY2FsbHkKLWxpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLAotc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKLXN1YnByb2dyYW1zIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgd29yay4KLQotICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCi1jYW4gcmVnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIENvcnJlc3BvbmRpbmcKLVNvdXJjZS4KLQotICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGEgd29yayBpbiBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQKLXNhbWUgd29yay4KLQotICAyLiBCYXNpYyBQZXJtaXNzaW9ucy4KLQotICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgotY29weXJpZ2h0IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2NhYmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQKLWNvbmRpdGlvbnMgYXJlIG1ldC4gIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMgeW91ciB1bmxpbWl0ZWQKLXBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCi1jb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbiBpdHMKLWNvbnRlbnQsIGNvbnN0aXR1dGVzIGEgY292ZXJlZCB3b3JrLiAgVGhpcyBMaWNlbnNlIGFja25vd2xlZGdlcyB5b3VyCi1yaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KLQotICBZb3UgbWF5IG1ha2UsIHJ1biBhbmQgcHJvcGFnYXRlIGNvdmVyZWQgd29ya3MgdGhhdCB5b3UgZG8gbm90Ci1jb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwotaW4gZm9yY2UuICBZb3UgbWF5IGNvbnZleSBjb3ZlcmVkIHdvcmtzIHRvIG90aGVycyBmb3IgdGhlIHNvbGUgcHVycG9zZQotb2YgaGF2aW5nIHRoZW0gbWFrZSBtb2RpZmljYXRpb25zIGV4Y2x1c2l2ZWx5IGZvciB5b3UsIG9yIHByb3ZpZGUgeW91Ci13aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCi10aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluIGNvbnZleWluZyBhbGwgbWF0ZXJpYWwgZm9yIHdoaWNoIHlvdSBkbwotbm90IGNvbnRyb2wgY29weXJpZ2h0LiAgVGhvc2UgdGh1cyBtYWtpbmcgb3IgcnVubmluZyB0aGUgY292ZXJlZCB3b3JrcwotZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgotYW5kIGNvbnRyb2wsIG9uIHRlcm1zIHRoYXQgcHJvaGliaXQgdGhlbSBmcm9tIG1ha2luZyBhbnkgY29waWVzIG9mCi15b3VyIGNvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91LgotCi0gIENvbnZleWluZyB1bmRlciBhbnkgb3RoZXIgY2lyY3Vtc3RhbmNlcyBpcyBwZXJtaXR0ZWQgc29sZWx5IHVuZGVyCi10aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuICBTdWJsaWNlbnNpbmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24gMTAKLW1ha2VzIGl0IHVubmVjZXNzYXJ5LgotCi0gIDMuIFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuCi0KLSAgTm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsCi1tZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUKLTExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgotc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaAotbWVhc3VyZXMuCi0KLSAgV2hlbiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2VyIHRvIGZvcmJpZAotY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaCBjaXJjdW12ZW50aW9uCi1pcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCi10aGUgY292ZXJlZCB3b3JrLCBhbmQgeW91IGRpc2NsYWltIGFueSBpbnRlbnRpb24gdG8gbGltaXQgb3BlcmF0aW9uIG9yCi1tb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncwotdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCi10ZWNobm9sb2dpY2FsIG1lYXN1cmVzLgotCi0gIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCi0KLSAgWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91Ci1yZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAotYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOwota2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55Ci1ub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7Ci1rZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbAotcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCi0KLSAgWW91IG1heSBjaGFyZ2UgYW55IHByaWNlIG9yIG5vIHByaWNlIGZvciBlYWNoIGNvcHkgdGhhdCB5b3UgY29udmV5LAotYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4KLQotICA1LiBDb252ZXlpbmcgTW9kaWZpZWQgU291cmNlIFZlcnNpb25zLgotCi0gIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KLXByb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlCi10ZXJtcyBvZiBzZWN0aW9uIDQsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKLQotICAgIGEpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBtb2RpZmllZAotICAgIGl0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4KLQotICAgIGIpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IGl0IGlzCi0gICAgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlciBzZWN0aW9uCi0gICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwotICAgICJrZWVwIGludGFjdCBhbGwgbm90aWNlcyIuCi0KLSAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwotICAgIExpY2Vuc2UgdG8gYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiAgVGhpcwotICAgIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3Ci0gICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKLSAgICByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBwYWNrYWdlZC4gIFRoaXMgTGljZW5zZSBnaXZlcyBubwotICAgIHBlcm1pc3Npb24gdG8gbGljZW5zZSB0aGUgd29yayBpbiBhbnkgb3RoZXIgd2F5LCBidXQgaXQgZG9lcyBub3QKLSAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgotCi0gICAgZCkgSWYgdGhlIHdvcmsgaGFzIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlcywgZWFjaCBtdXN0IGRpc3BsYXkKLSAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKLSAgICBpbnRlcmZhY2VzIHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcywgeW91cgotICAgIHdvcmsgbmVlZCBub3QgbWFrZSB0aGVtIGRvIHNvLgotCi0gIEEgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQKLXdvcmtzLCB3aGljaCBhcmUgbm90IGJ5IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmssCi1hbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAotaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbgotImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvbXBpbGF0aW9uIGFuZCBpdHMgcmVzdWx0aW5nIGNvcHlyaWdodCBhcmUgbm90Ci11c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCi1iZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuICBJbmNsdXNpb24gb2YgYSBjb3ZlcmVkIHdvcmsKLWluIGFuIGFnZ3JlZ2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyCi1wYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgotCi0gIDYuIENvbnZleWluZyBOb24tU291cmNlIEZvcm1zLgotCi0gIFlvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zCi1vZiBzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUKLW1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKLWluIG9uZSBvZiB0aGVzZSB3YXlzOgotCi0gICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAotICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgdGhlCi0gICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bQotICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgotCi0gICAgYikgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAotICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQotICAgIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzCi0gICAgbG9uZyBhcyB5b3Ugb2ZmZXIgc3BhcmUgcGFydHMgb3IgY3VzdG9tZXIgc3VwcG9ydCBmb3IgdGhhdCBwcm9kdWN0Ci0gICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQotICAgIGNvcHkgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZQotICAgIHByb2R1Y3QgdGhhdCBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgb24gYSBkdXJhYmxlIHBoeXNpY2FsCi0gICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwotICAgIG1vcmUgdGhhbiB5b3VyIHJlYXNvbmFibGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcwotICAgIGNvbnZleWluZyBvZiBzb3VyY2UsIG9yICgyKSBhY2Nlc3MgdG8gY29weSB0aGUKLSAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgotCi0gICAgYykgQ29udmV5IGluZGl2aWR1YWwgY29waWVzIG9mIHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUKLSAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwotICAgIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwgYW5kCi0gICAgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIG9iamVjdCBjb2RlIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkCi0gICAgd2l0aCBzdWJzZWN0aW9uIDZiLgotCi0gICAgZCkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBieSBvZmZlcmluZyBhY2Nlc3MgZnJvbSBhIGRlc2lnbmF0ZWQKLSAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKLSAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubwotICAgIGZ1cnRoZXIgY2hhcmdlLiAgWW91IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZQotICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCi0gICAgY29weSB0aGUgb2JqZWN0IGNvZGUgaXMgYSBuZXR3b3JrIHNlcnZlciwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlCi0gICAgbWF5IGJlIG9uIGEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkgeW91IG9yIGEgdGhpcmQgcGFydHkpCi0gICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCi0gICAgY2xlYXIgZGlyZWN0aW9ucyBuZXh0IHRvIHRoZSBvYmplY3QgY29kZSBzYXlpbmcgd2hlcmUgdG8gZmluZCB0aGUKLSAgICBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFJlZ2FyZGxlc3Mgb2Ygd2hhdCBzZXJ2ZXIgaG9zdHMgdGhlCi0gICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCi0gICAgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0byBzYXRpc2Z5IHRoZXNlIHJlcXVpcmVtZW50cy4KLQotICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKLSAgICB5b3UgaW5mb3JtIG90aGVyIHBlZXJzIHdoZXJlIHRoZSBvYmplY3QgY29kZSBhbmQgQ29ycmVzcG9uZGluZwotICAgIFNvdXJjZSBvZiB0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8KLSAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KLQotICBBIHNlcGFyYWJsZSBwb3J0aW9uIG9mIHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQKLWZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCi1pbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuCi0KLSAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKLXRhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQgZm9yIHBlcnNvbmFsLCBmYW1pbHksCi1vciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNpZ25lZCBvciBzb2xkIGZvciBpbmNvcnBvcmF0aW9uCi1pbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCi1kb3VidGZ1bCBjYXNlcyBzaGFsbCBiZSByZXNvbHZlZCBpbiBmYXZvciBvZiBjb3ZlcmFnZS4gIEZvciBhIHBhcnRpY3VsYXIKLXByb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsICJub3JtYWxseSB1c2VkIiByZWZlcnMgdG8gYQotdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCi1vZiB0aGUgcGFydGljdWxhciB1c2VyIG9yIG9mIHRoZSB3YXkgaW4gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdXNlcgotYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiAgQSBwcm9kdWN0Ci1pcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbAotY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywgdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQKLXRoZSBvbmx5IHNpZ25pZmljYW50IG1vZGUgb2YgdXNlIG9mIHRoZSBwcm9kdWN0LgotCi0gICJJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24iIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywKLXByb2NlZHVyZXMsIGF1dGhvcml6YXRpb24ga2V5cywgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW5zdGFsbAotYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQotYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoZSBpbmZvcm1hdGlvbiBtdXN0Ci1zdWZmaWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250aW51ZWQgZnVuY3Rpb25pbmcgb2YgdGhlIG1vZGlmaWVkIG9iamVjdAotY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKLW1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLgotCi0gIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCi1zcGVjaWZpY2FsbHkgZm9yIHVzZSBpbiwgYSBVc2VyIFByb2R1Y3QsIGFuZCB0aGUgY29udmV5aW5nIG9jY3VycyBhcwotcGFydCBvZiBhIHRyYW5zYWN0aW9uIGluIHdoaWNoIHRoZSByaWdodCBvZiBwb3NzZXNzaW9uIGFuZCB1c2Ugb2YgdGhlCi1Vc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCi1maXhlZCB0ZXJtIChyZWdhcmRsZXNzIG9mIGhvdyB0aGUgdHJhbnNhY3Rpb24gaXMgY2hhcmFjdGVyaXplZCksIHRoZQotQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQgdW5kZXIgdGhpcyBzZWN0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQKLWJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQotaWYgbmVpdGhlciB5b3Ugbm9yIGFueSB0aGlyZCBwYXJ0eSByZXRhaW5zIHRoZSBhYmlsaXR5IHRvIGluc3RhbGwKLW1vZGlmaWVkIG9iamVjdCBjb2RlIG9uIHRoZSBVc2VyIFByb2R1Y3QgKGZvciBleGFtcGxlLCB0aGUgd29yayBoYXMKLWJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCi0KLSAgVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYQotcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCi1mb3IgYSB3b3JrIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkIGJ5IHRoZSByZWNpcGllbnQsIG9yIGZvcgotdGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuICBBY2Nlc3MgdG8gYQotbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKLWFkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IgdmlvbGF0ZXMgdGhlIHJ1bGVzIGFuZAotcHJvdG9jb2xzIGZvciBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUgbmV0d29yay4KLQotICBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCwgYW5kIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBwcm92aWRlZCwKLWluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkKLWRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCi1zb3VyY2UgY29kZSBmb3JtKSwgYW5kIG11c3QgcmVxdWlyZSBubyBzcGVjaWFsIHBhc3N3b3JkIG9yIGtleSBmb3IKLXVucGFja2luZywgcmVhZGluZyBvciBjb3B5aW5nLgotCi0gIDcuIEFkZGl0aW9uYWwgVGVybXMuCi0KLSAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKLUxpY2Vuc2UgYnkgbWFraW5nIGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4KLUFkZGl0aW9uYWwgcGVybWlzc2lvbnMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgZW50aXJlIFByb2dyYW0gc2hhbGwKLWJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKLXRoYXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZSBsYXcuICBJZiBhZGRpdGlvbmFsIHBlcm1pc3Npb25zCi1hcHBseSBvbmx5IHRvIHBhcnQgb2YgdGhlIFByb2dyYW0sIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5Ci11bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5Ci10aGlzIExpY2Vuc2Ugd2l0aG91dCByZWdhcmQgdG8gdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMuCi0KLSAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgotcmVtb3ZlIGFueSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5LCBvciBmcm9tIGFueSBwYXJ0IG9mCi1pdC4gIChBZGRpdGlvbmFsIHBlcm1pc3Npb25zIG1heSBiZSB3cml0dGVuIHRvIHJlcXVpcmUgdGhlaXIgb3duCi1yZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKLWFkZGl0aW9uYWwgcGVybWlzc2lvbnMgb24gbWF0ZXJpYWwsIGFkZGVkIGJ5IHlvdSB0byBhIGNvdmVyZWQgd29yaywKLWZvciB3aGljaCB5b3UgaGF2ZSBvciBjYW4gZ2l2ZSBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgcGVybWlzc2lvbi4KLQotICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGZvciBtYXRlcmlhbCB5b3UKLWFkZCB0byBhIGNvdmVyZWQgd29yaywgeW91IG1heSAoaWYgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YKLXRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgotCi0gICAgYSkgRGlzY2xhaW1pbmcgd2FycmFudHkgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGRpZmZlcmVudGx5IGZyb20gdGhlCi0gICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKLQotICAgIGIpIFJlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lmaWVkIHJlYXNvbmFibGUgbGVnYWwgbm90aWNlcyBvcgotICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKLSAgICBOb3RpY2VzIGRpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvcgotCi0gICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgotICAgIHJlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluCi0gICAgcmVhc29uYWJsZSB3YXlzIGFzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9uOyBvcgotCi0gICAgZCkgTGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvcgotICAgIGF1dGhvcnMgb2YgdGhlIG1hdGVyaWFsOyBvcgotCi0gICAgZSkgRGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZQotICAgIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBvcgotCi0gICAgZikgUmVxdWlyaW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdAotICAgIG1hdGVyaWFsIGJ5IGFueW9uZSB3aG8gY29udmV5cyB0aGUgbWF0ZXJpYWwgKG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mCi0gICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgotICAgIGFueSBsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24KLSAgICB0aG9zZSBsaWNlbnNvcnMgYW5kIGF1dGhvcnMuCi0KLSAgQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQgImZ1cnRoZXIKLXJlc3RyaWN0aW9ucyIgd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuICBJZiB0aGUgUHJvZ3JhbSBhcyB5b3UKLXJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCi1nb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIKLXJlc3RyaWN0aW9uLCB5b3UgbWF5IHJlbW92ZSB0aGF0IHRlcm0uICBJZiBhIGxpY2Vuc2UgZG9jdW1lbnQgY29udGFpbnMKLWEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwotTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJuZWQgYnkgdGhlIHRlcm1zCi1vZiB0aGF0IGxpY2Vuc2UgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgdGhlIGZ1cnRoZXIgcmVzdHJpY3Rpb24gZG9lcwotbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCi0KLSAgSWYgeW91IGFkZCB0ZXJtcyB0byBhIGNvdmVyZWQgd29yayBpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24sIHlvdQotbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCi1hZGRpdGlvbmFsIHRlcm1zIHRoYXQgYXBwbHkgdG8gdGhvc2UgZmlsZXMsIG9yIGEgbm90aWNlIGluZGljYXRpbmcKLXdoZXJlIHRvIGZpbmQgdGhlIGFwcGxpY2FibGUgdGVybXMuCi0KLSAgQWRkaXRpb25hbCB0ZXJtcywgcGVybWlzc2l2ZSBvciBub24tcGVybWlzc2l2ZSwgbWF5IGJlIHN0YXRlZCBpbiB0aGUKLWZvcm0gb2YgYSBzZXBhcmF0ZWx5IHdyaXR0ZW4gbGljZW5zZSwgb3Igc3RhdGVkIGFzIGV4Y2VwdGlvbnM7Ci10aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCi0KLSAgOC4gVGVybWluYXRpb24uCi0KLSAgWW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5Ci1wcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yCi1tb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKLXRoaXMgTGljZW5zZSAoaW5jbHVkaW5nIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGUgdGhpcmQKLXBhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4KLQotICBIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91cgotbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpCi1wcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCi1maW5hbGx5IHRlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0Ci1ob2xkZXIgZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucwotcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgotCi0gIE1vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcwotcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCi12aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCi1yZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQKLWNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKLXlvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgotCi0gIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCi1saWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIKLXRoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkKLXJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKLW1hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuCi0KLSAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCi0KLSAgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yCi1ydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCi1vY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbgotdG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiAgSG93ZXZlciwKLW5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgotbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuICBUaGVzZSBhY3Rpb25zIGluZnJpbmdlIGNvcHlyaWdodCBpZiB5b3UgZG8KLW5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYQotY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KLQotICAxMC4gQXV0b21hdGljIExpY2Vuc2luZyBvZiBEb3duc3RyZWFtIFJlY2lwaWVudHMuCi0KLSAgRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseQotcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29ycywgdG8gcnVuLCBtb2RpZnkgYW5kCi1wcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCi1mb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4KLQotICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCi1vcmdhbml6YXRpb24sIG9yIHN1YnN0YW50aWFsbHkgYWxsIGFzc2V0cyBvZiBvbmUsIG9yIHN1YmRpdmlkaW5nIGFuCi1vcmdhbml6YXRpb24sIG9yIG1lcmdpbmcgb3JnYW5pemF0aW9ucy4gIElmIHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZAotd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKLXRyYW5zYWN0aW9uIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIHdvcmsgYWxzbyByZWNlaXZlcyB3aGF0ZXZlcgotbGljZW5zZXMgdG8gdGhlIHdvcmsgdGhlIHBhcnR5J3MgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QgaGFkIG9yIGNvdWxkCi1naXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQotQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgZnJvbSB0aGUgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QsIGlmCi10aGUgcHJlZGVjZXNzb3IgaGFzIGl0IG9yIGNhbiBnZXQgaXQgd2l0aCByZWFzb25hYmxlIGVmZm9ydHMuCi0KLSAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlCi1yaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgZXhhbXBsZSwgeW91IG1heQotbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCi1yaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0aWF0ZSBsaXRpZ2F0aW9uCi0oaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAotYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCi1zYWxlLCBvciBpbXBvcnRpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQuCi0KLSAgMTEuIFBhdGVudHMuCi0KLSAgQSAiY29udHJpYnV0b3IiIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcwotTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKLXdvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3MgImNvbnRyaWJ1dG9yIHZlcnNpb24iLgotCi0gIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwotb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJpYnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvcgotaGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkCi1ieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCi1idXQgZG8gbm90IGluY2x1ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYQotY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uICBGb3IKLXB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudAotcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mCi10aGlzIExpY2Vuc2UuCi0KLSAgRWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUKLXBhdGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRlbnQgY2xhaW1zLCB0bwotbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCi1wcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLgotCi0gIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCi1hZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZlciBkZW5vbWluYXRlZCwgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQKLShzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8KLXN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCi1wYXJ0eSBtZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9yY2UgYQotcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgotCi0gIElmIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIGtub3dpbmdseSByZWx5aW5nIG9uIGEgcGF0ZW50IGxpY2Vuc2UsCi1hbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZQotdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQotcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVyIHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywKLXRoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28KLWF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKLXBhdGVudCBsaWNlbnNlIGZvciB0aGlzIHBhcnRpY3VsYXIgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyCi1jb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50Ci1saWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKLWFjdHVhbCBrbm93bGVkZ2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZQotY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yawotaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0Ci1jb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLgotCi0gIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKLWFycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGEKLWNvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcwotcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Ci1vciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlCi15b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZAotd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCi0KLSAgQSBwYXRlbnQgbGljZW5zZSBpcyAiZGlzY3JpbWluYXRvcnkiIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluCi10aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwotY29uZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlCi1zcGVjaWZpY2FsbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkCi13b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwotaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudAotdG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcKLXRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQotcGFydGllcyB3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5Ci1wYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrCi1jb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQotZm9yIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQKLWNvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwKLW9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCi0KLSAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZwotYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKLW90aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KLQotICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KLQotICBJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCi1vdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90Ci1leGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdCBjb252ZXkgYQotY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCi1MaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQotbm90IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91Ci10byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkKLXRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwotTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLgotCi0gIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotCi0gIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUKLXBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKLXVuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGludG8gYSBzaW5nbGUKLWNvbWJpbmVkIHdvcmssIGFuZCB0byBjb252ZXkgdGhlIHJlc3VsdGluZyB3b3JrLiAgVGhlIHRlcm1zIG9mIHRoaXMKLUxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLAotYnV0IHRoZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotc2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0aHJvdWdoIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZQotY29tYmluYXRpb24gYXMgc3VjaC4KLQotICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YKLXRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKLWJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwotYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCi0KLSAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKLVByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBHZW5lcmFsCi1QdWJsaWMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZQotb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKLXZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi1Gb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZQotR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCi1ieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotCi0gIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKLXZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzCi1wdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91Ci10byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KLQotICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudAotcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQotYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQotbGF0ZXIgdmVyc2lvbi4KLQotICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KLQotICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCi1BUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUCi1IT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZCi1PRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLVRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLVBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNCi1JUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKLUFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KLQotICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCi0KLSAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCi1XSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTCi1USEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKLUdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRQotVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgotREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQKLVBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLAotRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotU1VDSCBEQU1BR0VTLgotCi0gIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCi0KLSAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCi1hYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKLXJldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcwotYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQotUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQotY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLgotCi0gICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQotICAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCi0KLSAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAotcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAotZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCi0KLSAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKLXRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKLXN0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKLXRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgotCi0gICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KLSAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi1BbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KLQotICBJZiB0aGUgcHJvZ3JhbSBkb2VzIHRlcm1pbmFsIGludGVyYWN0aW9uLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0Ci1ub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6Ci0KLSAgICA8cHJvZ3JhbT4gIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+Ci0gICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KLSAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0Ci0gICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgotCi1UaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKLXBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB5b3VyIHByb2dyYW0ncyBjb21tYW5kcwotbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuICJhYm91dCBib3giLgotCi0gIFlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2wsCi1pZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LgotRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKLTxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLQotICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCi1pbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UKLW1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aAotdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCi1QdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4gIEJ1dCBmaXJzdCwgcGxlYXNlIHJlYWQKLTxodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS93aHktbm90LWxncGwuaHRtbD4uCmRpZmYgLS1naXQgYS9ycmxwLWVwaGVtZXJpcy9ncHMuYyBiL3JybHAtZXBoZW1lcmlzL2dwcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjM1NzQ4Li4wMDAwMDAwCi0tLSBhL3JybHAtZXBoZW1lcmlzL2dwcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBncHMuYwotICoKLSAqIEEgZmV3IHV0aWxpdHkgZnVuY3Rpb25zIHRvIGRlYWwgd2l0aCBsb3cgbGV2ZWwgR1BTIGRhdGEKLSAqCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5ICBTeWx2YWluIE11bmF1dCA8dG50QDI0NnROdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqLwotCi0jaW5jbHVkZSAiZ3BzLmgiCi0KLQotI2RlZmluZSBHRVRfRklFTERfVSh3LCBuYiwgcG9zKSAoKCh3KSA+PiAocG9zKSkgJiAoKDE8PChuYikpLTEpKQotI2RlZmluZSBHRVRfRklFTERfUyh3LCBuYiwgcG9zKSAoKChpbnQpKCh3KSA8PCAoMzItKG5iKS0ocG9zKSkpKSA+PiAoMzItKG5iKSkpCi0KLS8qCi0gKiBVbnBhY2tzIEdQUyBTdWJmcmFtZSAxLDIsMyBwYXlsb2FkcyAoMyAqIDggd29yZHMpCi0gKgotICogTm90ZTogZXBoLT5zdl9pZCBpcyBub3QgZmlsbGVkIGhlcmUgc2luY2Ugbm90IHByZXNlbnQgaW4gdGhvc2Ugc3ViZnJhbWVzCi0gKgotICogKG5vIHBhcml0eSBiaXQgY2hlY2tpbmcgaXMgZG9uZSwgb25seSB0aGUgbG93ZXIgMjQgYml0cyBvZiBlYWNoIHdvcmQKLSAqICBhcmUgdXNlZCkKLSAqLwotaW50Ci1ncHNfdW5wYWNrX3NmMTIzKHVpbnQzMl90ICpzZiwgc3RydWN0IGdwc19lcGhlbWVyaXNfc3YgKmVwaCkKLXsKLQl1aW50MzJfdCAqc2YxID0gJnNmWzBdOwotCXVpbnQzMl90ICpzZjIgPSAmc2ZbOF07Ci0JdWludDMyX3QgKnNmMyA9ICZzZlsxNl07Ci0KLQlpbnQgaW9kZTEsIGlvZGUyOwotCi0JZXBoLT53ZWVrX25vCT0gR0VUX0ZJRUxEX1Uoc2YxWzBdLCAxMCwgMTQpOwotCWVwaC0+Y29kZV9vbl9sMgk9IEdFVF9GSUVMRF9VKHNmMVswXSwgIDIsIDEyKTsKLQllcGgtPnN2X3VyYQk9IEdFVF9GSUVMRF9VKHNmMVswXSwgIDQsICA4KTsKLQllcGgtPnN2X2hlYWx0aAk9IEdFVF9GSUVMRF9VKHNmMVswXSwgIDYsICAyKTsKLQllcGgtPmwyX3BfZmxhZwk9IEdFVF9GSUVMRF9VKHNmMVsxXSwgIDEsIDIzKTsKLQllcGgtPnRfZ2QJPSBHRVRfRklFTERfUyhzZjFbNF0sICA4LCAgMCk7Ci0JZXBoLT5pb2RjCT0gKEdFVF9GSUVMRF9VKHNmMVswXSwgIDIsICAwKSA8PCA4KSB8IFwKLQkgICAgICAgICAgICAgICAgICAgR0VUX0ZJRUxEX1Uoc2YxWzVdLCAgOCwgMTYpOwotCWVwaC0+dF9vYwk9IEdFVF9GSUVMRF9VKHNmMVs1XSwgMTYsICAwKTsKLQllcGgtPmFfZjIJPSBHRVRfRklFTERfUyhzZjFbNl0sICA4LCAxNik7Ci0JZXBoLT5hX2YxCT0gR0VUX0ZJRUxEX1Moc2YxWzZdLCAxNiwgIDApOwotCWVwaC0+YV9mMAk9IEdFVF9GSUVMRF9TKHNmMVs3XSwgMjIsICAyKTsKLQotCWlvZGUxCQk9IEdFVF9GSUVMRF9VKHNmMlswXSwgIDgsIDE2KTsKLQllcGgtPmNfcnMJPSBHRVRfRklFTERfUyhzZjJbMF0sIDE2LCAgMCk7Ci0JZXBoLT5kZWx0YV9uCT0gR0VUX0ZJRUxEX1Moc2YyWzFdLCAxNiwgIDgpOwotCWVwaC0+bV8wCT0gKEdFVF9GSUVMRF9TKHNmMlsxXSwgIDgsICAwKSA8PCAyNCkgfCBcCi0JICAgICAgICAgICAgICAgICAgIEdFVF9GSUVMRF9VKHNmMlsyXSwgMjQsICAwKTsKLQllcGgtPmNfdWMJPSBHRVRfRklFTERfUyhzZjJbM10sIDE2LCAgOCk7Ci0JZXBoLT5lCQk9IChHRVRfRklFTERfVShzZjJbM10sICA4LCAgMCkgPDwgMjQpIHwgXAotCSAgICAgICAgICAgICAgICAgICBHRVRfRklFTERfVShzZjJbNF0sIDI0LCAgMCk7Ci0JZXBoLT5jX3VzCT0gR0VUX0ZJRUxEX1Moc2YyWzVdLCAxNiwgIDgpOwotCWVwaC0+YV9wb3doYWxmCT0gKEdFVF9GSUVMRF9VKHNmMls1XSwgIDgsICAwKSA8PCAyNCkgfCBcCi0JICAgICAgICAgICAgICAgICAgIEdFVF9GSUVMRF9VKHNmMls2XSwgMjQsICAwKTsKLQllcGgtPnRfb2UJPSBHRVRfRklFTERfVShzZjJbN10sIDE2LCAgOCk7Ci0JZXBoLT5maXRfZmxhZwk9IEdFVF9GSUVMRF9VKHNmMls3XSwgIDEsICA3KTsKLQotCWVwaC0+Y19pYwk9IEdFVF9GSUVMRF9TKHNmM1swXSwgMTYsICA4KTsKLQllcGgtPm9tZWdhXzAJPSAoR0VUX0ZJRUxEX1Moc2YzWzBdLCAgOCwgIDApIDw8IDI0KSB8IFwKLQkgICAgICAgICAgICAgICAgICAgR0VUX0ZJRUxEX1Uoc2YzWzFdLCAyNCwgIDApOwotCWVwaC0+Y19pcwk9IEdFVF9GSUVMRF9TKHNmM1syXSwgMTYsICA4KTsKLQllcGgtPmlfMAk9IChHRVRfRklFTERfUyhzZjNbMl0sICA4LCAgMCkgPDwgMjQpIHwgXAotCSAgICAgICAgICAgICAgICAgICBHRVRfRklFTERfVShzZjNbM10sIDI0LCAgMCk7Ci0JZXBoLT5jX3JjCT0gR0VUX0ZJRUxEX1Moc2YzWzRdLCAxNiwgIDgpOwotCWVwaC0+dwkJPSAoR0VUX0ZJRUxEX1Moc2YzWzRdLCAgOCwgIDApIDw8IDI0KSB8IFwKLQkgICAgICAgICAgICAgICAgICAgR0VUX0ZJRUxEX1Uoc2YzWzVdLCAyNCwgIDApOwotCWVwaC0+b21lZ2FfZG90CT0gR0VUX0ZJRUxEX1Moc2YzWzZdLCAyNCwgIDApOwotCWlvZGUyCQk9IEdFVF9GSUVMRF9VKHNmM1s3XSwgIDgsIDE2KTsKLQllcGgtPmlkb3QJPSBHRVRfRklFTERfUyhzZjNbN10sIDE0LCAgMik7Ci0KLQllcGgtPl9yc3ZkMQk9IEdFVF9GSUVMRF9VKHNmMVsxXSwgMjMsICAwKTsKLQllcGgtPl9yc3ZkMgk9IEdFVF9GSUVMRF9VKHNmMVsyXSwgMjQsICAwKTsKLQllcGgtPl9yc3ZkMwk9IEdFVF9GSUVMRF9VKHNmMVszXSwgMjQsICAwKTsKLQllcGgtPl9yc3ZkNAk9IEdFVF9GSUVMRF9VKHNmMVs0XSwgMTYsICA4KTsKLQllcGgtPmFvZG8JPSBHRVRfRklFTERfVShzZjJbN10sICA1LCAgMik7Ci0KLQkvKiBDaGVjayAmIGNyb3NzLXZhbGlkYXRlIGlvZGNbNzowXSwgaW9kZTEsIGlvZGUyICovCi0JaWYgKChpb2RlMSAhPSBpb2RlMikgfHwgKGlvZGUxICE9IChlcGgtPmlvZGMgJiAweGZmKSkpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBVbnBhY2tzIEdQUyBTdWJmcmFtZSA0IG9yIDUgQWxtYW5hYyBwYWdlcyBwYXlsb2FkICg4IHdvcmRzKQotICoKLSAqIChubyBwYXJpdHkgYml0IGNoZWNraW5nIGlzIGRvbmUsIG9ubHkgdGhlIGxvd2VyIDI0IGJpdHMgb2YgZWFjaCB3b3JkCi0gKiAgYXJlIHVzZWQpCi0gKi8KLWludAotZ3BzX3VucGFja19zZjQ1X2FsbWFuYWModWludDMyX3QgKnNmLCBzdHJ1Y3QgZ3BzX2FsbWFuYWNfc3YgKmFsbSkKLXsKLQlhbG0tPnN2X2lkICAgICAgPSBHRVRfRklFTERfVShzZlswXSwgIDYsIDE2KTsKLQotCWFsbS0+ZQkJPSBHRVRfRklFTERfVShzZlswXSwgMTYsICAwKTsKLQlhbG0tPnRfb2EJPSBHRVRfRklFTERfVShzZlsxXSwgIDgsIDE2KTsKLQlhbG0tPmtzaWkJPSBHRVRfRklFTERfUyhzZlsxXSwgMTYsICAwKTsKLQlhbG0tPm9tZWdhX2RvdAk9IEdFVF9GSUVMRF9TKHNmWzJdLCAxNiwgIDgpOwotCWFsbS0+c3ZfaGVhbHRoCT0gR0VUX0ZJRUxEX1Uoc2ZbMl0sICA4LCAgMCk7Ci0JYWxtLT5hX3Bvd2hhbGYJPSBHRVRfRklFTERfVShzZlszXSwgMjQsICAwKTsKLQlhbG0tPm9tZWdhXzAJPSBHRVRfRklFTERfUyhzZls0XSwgMjQsICAwKTsKLQlhbG0tPncJCT0gR0VUX0ZJRUxEX1Moc2ZbNV0sIDI0LCAgMCk7Ci0JYWxtLT5tXzAJPSBHRVRfRklFTERfUyhzZls2XSwgMjQsICAwKTsKLQlhbG0tPmFfZjAJPSAoR0VUX0ZJRUxEX1Moc2ZbN10sIDgsIDE2KSA8PCAzKSB8IFwKLQkgICAgICAgICAgICAgICAgICAgR0VUX0ZJRUxEX1Uoc2ZbN10sIDMsICAyKTsKLQlhbG0tPmFfZjEJPSBHRVRfRklFTERfUyhzZls3XSwgMTEsICA1KTsKLQotCXJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9ycmxwLWVwaGVtZXJpcy9ncHMuaCBiL3JybHAtZXBoZW1lcmlzL2dwcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDFiOWQ3Li4wMDAwMDAwCi0tLSBhL3JybHAtZXBoZW1lcmlzL2dwcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qCi0gKiBncHMuaAotICoKLSAqIEhlYWRlciB0byBkZWFsIHdpdGggbG93IGxldmVsIEdQUyBkYXRhCi0gKgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSAgU3lsdmFpbiBNdW5hdXQgPHRudEAyNDZ0TnQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKi8KLQotI2lmbmRlZiBfX0dQU19IX18KLSNkZWZpbmUgX19HUFNfSF9fCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0KLSNkZWZpbmUgTUFYX1NWCTY0Ci0KLQotLyogSW9ub3NwZXJpYyBtb2RlbCBkYXRhICovCi1zdHJ1Y3QgZ3BzX2lvbm9zcGhlcmVfbW9kZWwgewotCQkJLyogI2JpdHMgIFNjYWxlIGZhY3RvciAgRWZmZWN0aXZlICBVbml0cyAgICAgICAgICAgICovCi0JCQkvKiAgICAgICAgICAgKExTQikgICAgICAgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgKi8KLQotCWludCBhbHBoYV8wOwkvKiBzIDggICAgICAgMl4tMzAgICAgICAgICAgICAgICAgIHNlY29uZHMgICAgICAgICAgKi8KLQlpbnQgYWxwaGFfMTsJLyogcyA4ICAgICAgIDJeLTI3ICAgICAgICAgICAgICAgICBzIC8gc2VtaS1jaXJjbGVzICovCi0JaW50IGFscGhhXzI7CS8qIHMgOCAgICAgICAyXi0yNCAgICAgICAgICAgICAgICAgcyAvIChzZW1pLWNpcmNsZXMpXjIgKi8KLQlpbnQgYWxwaGFfMzsJLyogcyA4ICAgICAgIDJeLTI0ICAgICAgICAgICAgICAgICBzIC8gKHNlbWktY2lyY2xlcyleMyAqLwotCWludCBiZXRhXzA7CS8qIHMgOCAgICAgICAyXjExICAgICAgICAgICAgICAgICAgc2Vjb25kcyAgICAgICAgICAqLwotCWludCBiZXRhXzE7CS8qIHMgOCAgICAgICAyXjE0ICAgICAgICAgICAgICAgICAgcyAvIHNlbWktY2lyY2xlcyAqLwotCWludCBiZXRhXzI7CS8qIHMgOCAgICAgICAyXjE2ICAgICAgICAgICAgICAgICAgcyAvIChzZW1pLWNpcmNsZXMpXjIgKi8KLQlpbnQgYmV0YV8zOwkvKiBzIDggICAgICAgMl4xNiAgICAgICAgICAgICAgICAgIHMgLyAoc2VtaS1jaXJjbGVzKV4zICovCi19OwotCi0KLS8qIFVUQyBtb2RlbCBkYXRhICovCi1zdHJ1Y3QgZ3BzX3V0Y19tb2RlbCB7Ci0JCQkvKiAjYml0cyAgU2NhbGUgZmFjdG9yICBFZmZlY3RpdmUgIFVuaXRzICAgICAgICAgICAgKi8KLQkJCS8qICAgICAgICAgICAoTFNCKSAgICAgICByYW5nZSAgICAgICAgICAgICAgICAgICAgICAqLwotCi0JaW50IGEwOwkJLyogcyAzMiAgICAgIDJeLTMwICAgICAgICAgICAgICAgICBzZWNvbmRzICAgICAgICAgICovCi0JaW50IGExOwkJLyogcyAyNCAgICAgIDJeLTUwICAgICAgICAgICAgICAgICBzZWNvbmRzIC8gc2Vjb25kcyAqLwotCWludCBkZWx0YV90X2xzOwkvKiBzICA4ICAgICAgMSAgICAgICAgICAgICAgICAgICAgIHNlY29uZHMgICAgICAgICAgKi8KLQlpbnQgdF9vdDsJLyogdSAgOCAgICAgIDJeMTIgICAgICAgNjAyLDExMiAgICBzZWNvbmRzICAgICAgICAgICovCi0JaW50IHduX3Q7CS8qIHUgIDggICAgICAxICAgICAgICAgICAgICAgICAgICAgd2Vla3MgICAgICAgICAgICAqLwotCWludCB3bl9sc2Y7CS8qIHUgIDggICAgICAxICAgICAgICAgICAgICAgICAgICAgd2Vla3MgICAgICAgICAgICAqLwotCWludCBkbjsJCS8qIHUgIDggICAgICAxICAgICAgICAgICAgICAgIDcgICAgZGF5cyAgICAgICAgICAgICAqLwotCWludCBkZWx0YV90X2xzZjsvKiBzICA4ICAgICAgMSAgICAgICAgICAgICAgICAgICAgIHNlY29uZHMgICAgICAgICAgKi8KLX07Ci0KLQotLyogQWxtYW5hY2ggZGF0YSAqLwotc3RydWN0IGdwc19hbG1hbmFjX3N2IHsKLQlpbnQgc3ZfaWQ7Ci0JaW50IHN2X2hlYWx0aDsKLQotCQkJLyogI2JpdHMgIFNjYWxlIGZhY3RvciAgRWZmZWN0aXZlICBVbml0cyAgICAgICAgICAgICovCi0JCQkvKiAgICAgICAgICAgKExTQikgICAgICAgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgKi8KLQotCWludCBlOwkJLyogdSAxNiAgICAgIDJeLTIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JaW50IHRfb2E7CS8qIHUgIDggICAgICAyXjEyICAgICAgIDYwMiwxMTIgICAgc2Vjb25kcyAgICAgICAgICAqLwotCWludCBrc2lpOwkvKiBzIDE2ICAgICAgMl4tMTkgICAgICAgICAgICAgICAgIHNlbWktY2lyY2xlcyAgICAgKi8KLQlpbnQgb21lZ2FfZG90OwkvKiBzIDE2ICAgICAgMl4tMzggICAgICAgICAgICAgICAgIHNlbWktY2lyY2xlcyAvIHMgKi8KLQlpbnQgYV9wb3doYWxmOwkvKiB1IDI0ICAgICAgMl4tMTEgICAgICAgICAgICAgICAgIG1ldGVycyAgICAgICAgICAgKi8KLQlpbnQgb21lZ2FfMDsJLyogcyAyNCAgICAgIDJeLTIzICAgICAgICAgICAgICAgICBzZW1pLWNpcmNsZXMgICAgICovCi0JaW50IHc7CQkvKiBzIDI0ICAgICAgMl4tMjMgICAgICAgICAgICAgICAgIHNlbWktY2lyY2xlcyAgICAgKi8KLQlpbnQgbV8wOwkvKiBzIDI0ICAgICAgMl4tMjMgICAgICAgICAgICAgICAgIHNlbWktY2lyY2xlcyAgICAgKi8KLQlpbnQgYV9mMDsJLyogcyAxMSAgICAgIDJeLTIwICAgICAgICAgICAgICAgICBzZWNvbmRzICAgICAgICAgICovCi0JaW50IGFfZjE7CS8qIHMgMTEgICAgICAyXi0zOCAgICAgICAgICAgICAgICAgc2Vjb25kcyAvIHNlY29uZHMgKi8KLX07Ci0KLXN0cnVjdCBncHNfYWxtYW5hYyB7Ci0JaW50IHduYTsKLQlpbnQgbl9zdjsKLQlzdHJ1Y3QgZ3BzX2FsbWFuYWNfc3Ygc3ZzW01BWF9TVl07Ci19OwotCi0KLS8qIEVwaGVtZXJpcyBkYXRhICovCi1zdHJ1Y3QgZ3BzX2VwaGVtZXJpc19zdiB7Ci0JaW50IHN2X2lkOwotCi0JCQkvKiAjYml0cyAgU2NhbGUgZmFjdG9yICBFZmZlY3RpdmUgIFVuaXRzICAgICAgICAgICAgKi8KLQkJCS8qICAgICAgICAgICAoTFNCKSAgICAgICByYW5nZSAgICAgICAgICAgICAgICAgICAgICAqLwotCi0JaW50IGNvZGVfb25fbDI7CS8qIHUgIDIgICAgICAxICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAqLwotCWludCB3ZWVrX25vOwkvKiB1IDEwICAgICAgMSAgICAgICAgICAgICAgICAgICAgIHdlZWsgICAgICAgICAgICAgKi8KLQlpbnQgbDJfcF9mbGFnOwkvKiB1ICAxICAgICAgMSAgICAgICAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgKi8KLQlpbnQgc3ZfdXJhOwkvKiB1ICA0ICAgICAgLyAgICAgICAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgKi8KLQlpbnQgc3ZfaGVhbHRoOwkvKiB1ICA2ICAgICAgLyAgICAgICAgICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgKi8KLQlpbnQgdF9nZDsJLyogcyAgOCAgICAgIDJeLTMxICAgICAgICAgICAgICAgICBzZWNvbmRzICAgICAgICAgICovCi0JaW50IGlvZGM7CS8qIHUgMTAgICAgICAvICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAqLwotCWludCB0X29jOwkvKiB1IDE2ICAgICAgMl40ICAgICAgICA2MDQsNzg0ICAgIHNlY29uZHMgICAgICAgICAgKi8KLQlpbnQgYV9mMjsJLyogcyAgOCAgICAgIDJeLTU1ICAgICAgICAgICAgICAgICBzZWMgLyBzZWNeMiAgICAgICovCi0JaW50IGFfZjE7CS8qIHMgMTYgICAgICAyXi00MyAgICAgICAgICAgICAgICAgc2VjIC8gc2VjICAgICAgICAqLwotCWludCBhX2YwOwkvKiBzIDIyICAgICAgMl4tMzEgICAgICAgICAgICAgICAgIHNlY29uZHMgICAgICAgICAgKi8KLQotCWludCBjX3JzOwkvKiBzIDE2ICAgICAgMl4tNSAgICAgICAgICAgICAgICAgIG1ldGVycyAgICAgICAgICAgKi8KLQlpbnQgZGVsdGFfbjsJLyogcyAxNiAgICAgIDJeLTQzICAgICAgICAgICAgICAgICBzZW1pLWNpcmNsZXMgLyBzICovCi0JaW50IG1fMDsJLyogcyAzMiAgICAgIDJeLTMxICAgICAgICAgICAgICAgICBzZW1pLWNpcmNsZXMgICAgICovCi0JaW50IGNfdWM7CS8qIHMgMTYgICAgICAyXi0yOSAgICAgICAgICAgICAgICAgcmFkaWFucyAgICAgICAgICAqLwotCXVuc2lnbmVkIGludCBlOwkvKiB1IDMyICAgICAgMl4tMzMgICAgICAwLjAzICAgICAgIC8gICAgICAgICAgICAgICAgKi8KLQlpbnQgY191czsJLyogcyAxNiAgICAgIDJeLTI5ICAgICAgICAgICAgICAgICByYWRpYW5zICAgICAgICAgICovCi0JdW5zaWduZWQgaW50IGFfcG93aGFsZjsgLyogdSAzMiAgMl4tMTkgICAgICAgICAgICAgbWV0ZXJzXigxLzIpICAgICAqLwotCWludCB0X29lOwkvKiB1IDE2ICAgICAgMl40ICAgICAgICA2MDQsNzg0ICAgIHNlY29uZHMgICAgICAgICAgKi8KLQlpbnQgZml0X2ZsYWc7CS8qIHUgIDEgICAgICAvICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAqLwotCi0JaW50IGNfaWM7CS8qIHMgMTYgICAgICAyXi0yOSAgICAgICAgICAgICAgICAgcmFkaWFucyAgICAgICAgICAqLwotCWludCBvbWVnYV8wOwkvKiBzIDMyICAgICAgMl4tMzEgICAgICAgICAgICAgICAgIHNlbWktY2lyY2xlcyAgICAgKi8KLQlpbnQgY19pczsJLyogcyAxNiAgICAgIDJeLTI5ICAgICAgICAgICAgICAgICByYWRpYW5zICAgICAgICAgICovCi0JaW50IGlfMDsJLyogcyAzMiAgICAgIDJeLTMxICAgICAgICAgICAgICAgICBzZW1pLWNpcmNsZXMgICAgICovCi0JaW50IGNfcmM7CS8qIHMgMTYgICAgICAyXi01ICAgICAgICAgICAgICAgICAgbWV0ZXJzICAgICAgICAgICAqLwotCWludCB3OwkJLyogcyAzMiAgICAgIDJeLTMxICAgICAgICAgICAgICAgICBzZW1pLWNpcmNsZXMgICAgICovCi0JaW50IG9tZWdhX2RvdDsJLyogcyAyNCAgICAgIDJeLTQzICAgICAgICAgICAgICAgICBzZW1pLWNpcmNsZXMgLyBzICovCi0JaW50IGlkb3Q7CS8qIHMgMTQgICAgICAyXi00MyAgICAgICAgICAgICAgICAgc2VtaS1jaXJjbGVzIC8gcyAqLwotCi0JaW50IF9yc3ZkMTsJLyogMjMgYml0cyAqLwotCWludCBfcnN2ZDI7CS8qIDI0IGJpdHMgKi8KLQlpbnQgX3JzdmQzOwkvKiAyNCBiaXRzICovCi0JaW50IF9yc3ZkNDsJLyogMTYgYml0cyAqLwotCWludCBhb2RvOwkvKiA4IGJpdHMgIE5vdCBzdXJlIGl0IG5lZWRzIHRvIGJlIGhlcmUgLi4uICovCi19OwotCi1zdHJ1Y3QgZ3BzX2VwaGVtZXJpcyB7Ci0JaW50IG5fc3Y7Ci0Jc3RydWN0IGdwc19lcGhlbWVyaXNfc3Ygc3ZzW01BWF9TVl07Ci19OwotCi0KLS8qIFJlZmVyZW5jZSBwb3NpdGlvbiAqLwotc3RydWN0IGdwc19yZWZfcG9zIHsJLyogV1NHODQgZWxsaXBzb2lkICovCi0JZG91YmxlIGxhdGl0dWRlOwkvKiBkZWcgKi8KLQlkb3VibGUgbG9uZ2l0dWRlOwkvKiBkZWcgKi8KLQlkb3VibGUgYWx0aXR1ZGU7CS8qIG0gYWJvdmUgZWxsaXBzb2lkICovCi19OwotCi0KLS8qIFJlZmVyZW5jZSB0aW1lICovCi1zdHJ1Y3QgZ3BzX3JlZl90aW1lIHsKLQlpbnQgd247CQkJLyogR1BTIHdlZWsgbnVtYmVyICovCi0JZG91YmxlIHRvdzsJCS8qIGluIHNlY29uZHMgKi8KLX07Ci0KLQotLyogQWxsIGFzc2lzdCBkYXRhICovCi0jZGVmaW5lIEdQU19GSUVMRF9JT05PU1BIRVJFCSgxPDwwKQotI2RlZmluZSBHUFNfRklFTERfVVRDCQkoMTw8MSkKLSNkZWZpbmUgR1BTX0ZJRUxEX0FMTUFOQUMJKDE8PDIpCi0jZGVmaW5lIEdQU19GSUVMRF9FUEhFTUVSSVMJKDE8PDMpCi0jZGVmaW5lIEdQU19GSUVMRF9SRUZQT1MJKDE8PDQpCi0jZGVmaW5lIEdQU19GSUVMRF9SRUZUSU1FCSgxPDw1KQotCi1zdHJ1Y3QgZ3BzX2Fzc2lzdF9kYXRhIHsKLQlpbnQgZmllbGRzOwotCXN0cnVjdCBncHNfaW9ub3NwaGVyZV9tb2RlbAlpb25vc3BoZXJlOwotCXN0cnVjdCBncHNfdXRjX21vZGVsCQl1dGM7Ci0Jc3RydWN0IGdwc19hbG1hbmFjCQlhbG1hbmFjOwotCXN0cnVjdCBncHNfZXBoZW1lcmlzCQllcGhlbWVyaXM7Ci0Jc3RydWN0IGdwc19yZWZfcG9zCQlyZWZfcG9zOwotCXN0cnVjdCBncHNfcmVmX3RpbWUJCXJlZl90aW1lOwotfTsKLQotCi0vKiBHUFMgU3ViZnJhbWUgdXRpbGl0eSBtZXRob2RzIChzZWUgZ3BzLmMgZm9yIGRldGFpbHMpICovCi1pbnQgZ3BzX3VucGFja19zZjEyMyh1aW50MzJfdCAqc2YsIHN0cnVjdCBncHNfZXBoZW1lcmlzX3N2ICplcGgpOwotaW50IGdwc191bnBhY2tfc2Y0NV9hbG1hbmFjKHVpbnQzMl90ICpzZiwgc3RydWN0IGdwc19hbG1hbmFjX3N2ICphbG0pOwotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0dQU19IX18gKi8KLQpkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvbWFpbi5jIGIvcnJscC1lcGhlbWVyaXMvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjAyNWEyLi4wMDAwMDAwCi0tLSBhL3JybHAtZXBoZW1lcmlzL21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotCi0jaW5jbHVkZSAiZ3BzLmgiCi0jaW5jbHVkZSAidWJ4LmgiCi0jaW5jbHVkZSAidWJ4LXBhcnNlLmgiCi0jaW5jbHVkZSAicnJscC5oIgotCi1zdGF0aWMgaW50Ci1kb191YnhfcmVhZChzdHJ1Y3QgZ3BzX2Fzc2lzdF9kYXRhICpncHMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQotewotCWludCBydiwgZmQsIGk7Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0Jdm9pZCAqYnVmOwotCi0JLyogTG9hZCBmaWxlICovCi0JZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7Ci0JaWYgKGZkIDwgMCkKLQkJcmV0dXJuIC0xOwotCi0JcnYgPSBmc3RhdChmZCwgJnN0KTsKLQlpZiAocnYgPCAwKSB7Ci0JCWNsb3NlKGZkKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWJ1ZiA9IG1hbGxvYyhzdC5zdF9zaXplKTsKLQlpZiAoIWJ1ZikgewotCQljbG9zZShmZCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlydiA9IHJlYWQoZmQsIGJ1Ziwgc3Quc3Rfc2l6ZSk7Ci0JaWYgKHJ2ICE9IHN0LnN0X3NpemUpIHsKLQkJZnJlZShidWYpOwotCQljbG9zZShmZCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKiBQYXJzZSBlYWNoIG1lc3NhZ2UgKi8KLQlmb3IgKGk9MDsgaTxzdC5zdF9zaXplOykgewotCQlpbnQgcnY7Ci0JCXJ2ID0gdWJ4X21zZ19kaXNwYXRjaCh1YnhfcGFyc2VfZHQsIGJ1ZiArIGksIHN0LnN0X3NpemUgLSBpLCBncHMpOwotCQlpZiAocnYgPCAwKQotCQkJaSsrOwkvKiBJbnZhbGlkIG1lc3NhZ2U6IHRyeSBvbmUgYnl0ZSBsYXRlciAqLwotCQllbHNlCi0JCQlpICs9IHJ2OwotCX0KLQotCS8qIERvbmUgKi8KLQlmcmVlKGJ1Zik7Ci0JY2xvc2UoZmQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWRvX3JybHAoc3RydWN0IGdwc19hc3Npc3RfZGF0YSAqZ3BzKQotewotCXN0cnVjdCBycmxwX2Fzc2lzdF9yZXEgYXI7Ci0Jdm9pZCAqcGR1c1s2NF07Ci0JaW50IGxlbls2NF07Ci0JaW50IGksIHJ2OwotCi0JY2hhciAqdGVzdCA9ICJceDI4XHgwMFx4ODBceDEwXHgwMVx4MzJceDAwXHgxOVx4NEZceDA3XHgxNVx4MDQiOwotCi0JcnJscF9kZWNvZGVfYXNzaXN0YW5jZV9yZXF1ZXN0KCZhciwgdGVzdCwgMTIpOwotCXByaW50ZigiJTA4eCAlMDE2bGx4XG4iLCBhci5yZXFfZWxlbXMsIChsb25nIGxvbmcgdW5zaWduZWQpIGFyLmVwaF9zdnMpOwotCi0JYXIucmVxX2VsZW1zID0gLTE7Ci0JYXIuZXBoX3N2cyA9IC0xTEw7Ci0JcnYgPSBycmxwX2dwc19hc3Npc3RfcGR1cyhncHMsICZhciwgcGR1cywgbGVuLCA2NCk7Ci0JcHJpbnRmKCIlZFxuIiwgcnYpOwotCWZvciAoaT0wOyBpPHJ2OyBpKyspIHsKLQkJcHJpbnRmKCIlcCAlZFxuIiwgcGR1c1tpXSwgbGVuW2ldKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0Jc3RydWN0IGdwc19hc3Npc3RfZGF0YSBncHM7Ci0JaW50IHJ2OwotCi0JbWVtc2V0KCZncHMsIDB4MDAsIHNpemVvZihncHMpKTsKLQotCXJ2ID0gZG9fdWJ4X3JlYWQoJmdwcywgImRhdGEudWJ4Iik7Ci0JCi0JcnYgPSBkb19ycmxwKCZncHMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL3JybHAtZXBoZW1lcmlzL3JybHAuYyBiL3JybHAtZXBoZW1lcmlzL3JybHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYwYzNhYi4uMDAwMDAwMAotLS0gYS9ycmxwLWVwaGVtZXJpcy9ycmxwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NDggKzAsMCBAQAotLyoKLSAqIHJybHAuYwotICoKLSAqIFJSTFAgaW1wbGVtZW50YXRpb24KLSAqCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5ICBTeWx2YWluIE11bmF1dCA8dG50QDI0NnROdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqLwotCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgImdwcy5oIgotI2luY2x1ZGUgInJybHAuaCIKLQotI2luY2x1ZGUgPFBEVS5oPgotI2luY2x1ZGUgPEdQUy1Bc3Npc3REYXRhLmg+Ci0jaW5jbHVkZSA8TmF2aWdhdGlvbk1vZGVsLmg+Ci0jaW5jbHVkZSA8SW9ub3NwaGVyaWNNb2RlbC5oPgotI2luY2x1ZGUgPFVUQ01vZGVsLmg+Ci0jaW5jbHVkZSA8QWxtYW5hYy5oPgotI2luY2x1ZGUgPFJlZkxvY2F0aW9uLmg+Ci0jaW5jbHVkZSA8UmVmZXJlbmNlVGltZS5oPgotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogUlJMUCBBc3Npc3RhbmNlIHJlcXVlc3QgZGVjb2RpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS17e3sgKi8KLS8qIERlY29kZSBhbmQgdmFsaWRhdGUgdGhlIGFzc2lzdGFuY2UgZGF0YSByZXF1ZXN0IG1lc3NhZ2VzLgotICogU2VlIHNlY3Rpb24gMTAuMTAgb2YKLSAqICAuIEVUU0kgVFMgMTQ5IDAzMSBWOC4xLjAgKDIwMDktMDEpCi0gKiAgLiAzR1BQIFRTIDQ5LjAzMSB2ZXJzaW9uIDguMS4wIFJlbGVhc2UgOAotICovCi0KLS8qIFBhY2tlZCBzdHJ1Y3R1cmUgZnJvbSA0OS4wMzEgc3BlYyAoUkdBID0gUmVxdWVzdCBHUFMgQXNzaXN0YW5jZSkgKi8KLQotI2RlZmluZSBSUkxQX1JHQTBfQUxNQU5BQwkoMTw8MCkKLSNkZWZpbmUgUlJMUF9SR0EwX1VUQ19NT0RFTAkoMTw8MSkKLSNkZWZpbmUgUlJMUF9SR0EwX0lPTk9fTU9ERUwJKDE8PDIpCi0jZGVmaW5lIFJSTFBfUkdBMF9OQVZfTU9ERUwJKDE8PDMpCi0jZGVmaW5lIFJSTFBfUkdBMF9ER1BTCQkoMTw8NCkKLSNkZWZpbmUgUlJMUF9SR0EwX1JFRl9MT0MJKDE8PDUpCi0jZGVmaW5lIFJSTFBfUkdBMF9SRUZfVElNRQkoMTw8NikKLSNkZWZpbmUgUlJMUF9SR0EwX0FDUV9BU1NJU1QJKDE8PDcpCi0KLSNkZWZpbmUgUlJMUF9SR0ExX1JFQUxUSU1FX0lOVAkoMTw8MCkKLSNkZWZpbmUgUlJMUF9SR0ExX0VQSF9FWFQJKDE8PDEpCi0jZGVmaW5lIFJSTFBfUkdBMV9FUEhfRVhUX0NIRUNLCSgxPDwyKQotCi1zdHJ1Y3QgcnJscF9yZ2FfaGRyIHsKLQl1aW50OF90IGl0ZW1zMDsKLQl1aW50OF90IGl0ZW1zMTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCBycmxwX3JnYV9lcGhfc3YgewotCXVpbnQ4X3Qgc3ZfaWQ7CQkvKiBbNzo2XSByZXNlcnZlZCwgWzU6MF0gc3ZfaWQgKi8KLQl1aW50OF90IGlvZGU7CQkvKiBsYXRlc3QgZXBoIGluIHRoZSBNUyBtZW1vcnkgaW4gaG91cnMgKi8KLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCBycmxwX3JnYV9lcGggewotCXVpbnQ4X3Qgd25faGk7CQkvKiBbNzo2XSA9IHduWzk6OF0gKi8KLQl1aW50OF90IHduX2xvOwkJLyogd25bNzowXSAqLwotCXVpbnQ4X3QgdG9lOwkJLyogbGF0ZXN0IGVwaCBpbiB0aGUgTVMgbWVtb3J5IGluIGhvdXJzICovCi0JdWludDhfdCBuc2F0X3RtdG9lOwkvKiBbNzo0XSBuc3RhdCwgWzM6MF0gVC1Ub2UgbGltaXQgKi8KLQlzdHJ1Y3QgcnJscF9yZ2FfZXBoX3N2IHN2c1swXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCBycmxwX3JnYV9lcGhfZXh0IHsKLQl1aW50OF90IHZhbGlkaXR5OwkvKiBpbiA0IGhvdXJzIHVuaXRzICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3QgcnJscF9yZ2FfZXBoX2V4dF9jaGVjayB7Ci0JCS8qIHdlZWtzIGFyZSBpbiBncHMgd2VlayBtb2R1bG8gNCAqLwotCXVpbnQ4X3Qgd25fYmVnaW5fZW5kOwkvKiBbNzo0XSBiZWdpbiwgWzM6MF0gZW5kICovCi0JdWludDhfdCB0b3dfYmVnaW47Ci0JdWludDhfdCB0b3dfZW5kOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotCi0vKiBQYXJzaW5nIGZ1bmN0aW9uICovCi0KLWludAotcnJscF9kZWNvZGVfYXNzaXN0YW5jZV9yZXF1ZXN0KAotCXN0cnVjdCBycmxwX2Fzc2lzdF9yZXEgKmFyLAotCXZvaWQgKnJlcSwgaW50IHJlcV9sZW4pCi17Ci0Jc3RydWN0IHJybHBfcmdhX2hkciAqaGRyID0gTlVMTDsKLQlzdHJ1Y3QgcnJscF9yZ2FfZXBoICplcGggPSBOVUxMOwotCXN0cnVjdCBycmxwX3JnYV9lcGhfZXh0ICplcGhfZXh0ID0gTlVMTDsKLQlzdHJ1Y3QgcnJscF9yZ2FfZXBoX2V4dF9jaGVjayAqZXBoX2V4dF9jaGVjayA9IE5VTEw7Ci0JaW50IHAgPSAwOwotCi0JLyogUmVzZXQgKi8KLQlhci0+cmVxX2VsZW1zID0gMDsKLQlhci0+ZXBoX3N2cyA9IDA7Ci0KLQkvKiBQYXJzZSBtZXNzYWdlICovCi0JaGRyID0gcmVxOwotCXAgKz0gc2l6ZW9mKHN0cnVjdCBycmxwX3JnYV9oZHIpOwotCWlmIChwID4gcmVxX2xlbikKLQkJcmV0dXJuIC0xOwotCi0JaWYgKGhkci0+aXRlbXMwICYgUlJMUF9SR0EwX05BVl9NT0RFTCkgewotCQllcGggPSByZXEgKyBwOwotCQlwICs9IHNpemVvZihzdHJ1Y3QgcnJscF9yZ2FfZXBoKTsKLQkJaWYgKHAgPiByZXFfbGVuKQotCQkJcmV0dXJuIC0xOwotCQlwICs9IChlcGgtPm5zYXRfdG10b2UgPj4gNCkgKiBzaXplb2Yoc3RydWN0IHJybHBfcmdhX2VwaF9zdik7Ci0JCWlmIChwID4gcmVxX2xlbikKLQkJCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAoaGRyLT5pdGVtczEgJiBSUkxQX1JHQTFfRVBIX0VYVCkgewotCQllcGhfZXh0ID0gcmVxICsgcDsKLQkJcCArPSBzaXplb2Yoc3RydWN0IHJybHBfcmdhX2VwaF9leHQpOwotCQlpZiAocCA+IHJlcV9sZW4pCi0JCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKGhkci0+aXRlbXMxICYgUlJMUF9SR0ExX0VQSF9FWFRfQ0hFQ0spIHsKLQkJZXBoX2V4dF9jaGVjayA9IHJlcSArIHA7Ci0JCXAgKz0gc2l6ZW9mKHN0cnVjdCBycmxwX3JnYV9lcGhfZXh0X2NoZWNrKTsKLQkJaWYgKHAgPiByZXFfbGVuKQotCQkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChwICE9IHJlcV9sZW4pCi0JCXJldHVybiAtMjsgLyogbm90IGFsbCBieXRlcyBjb25zdW1lZCA/Pz8gKi8KLQotCS8qIFByaW50IGEgd2FybmluZyBmb3IgdW5zdXBwb3J0ZWQgcmVxdWVzdHMgKi8KLQlpZiAoKGVwaF9leHQgIT0gTlVMTCkgfHwKLQkgICAgKGVwaF9leHRfY2hlY2sgIT0gTlVMTCkgfHwKLQkgICAgKGhkci0+aXRlbXMwICYgKFJSTFBfUkdBMF9ER1BTIHwgUlJMUF9SR0EwX0FDUV9BU1NJU1QpKSB8fAotCSAgICAoaGRyLT5pdGVtczEgJiBSUkxQX1JHQTFfUkVBTFRJTUVfSU5UKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIlt3XSBVbnN1cHBvcnRlZCBhc3Npc3RhbmNlIGRhdGEgcmVxdWVzdGVkLCBpZ25vcmVkIC4uLlxuIik7Ci0JfQotCi0JLyogQ29weSB0aGUgcmVxdWVzdCAqLwotCWlmIChoZHItPml0ZW1zMCAmIFJSTFBfUkdBMF9BTE1BTkFDKQotCQlhci0+cmVxX2VsZW1zIHw9IFJSTFBfQVJfQUxNQU5BQzsKLQotCWlmIChoZHItPml0ZW1zMCAmIFJSTFBfUkdBMF9VVENfTU9ERUwpCi0JCWFyLT5yZXFfZWxlbXMgfD0gUlJMUF9BUl9VVENfTU9ERUw7Ci0KLQlpZiAoaGRyLT5pdGVtczAgJiBSUkxQX1JHQTBfSU9OT19NT0RFTCkKLQkJYXItPnJlcV9lbGVtcyB8PSBSUkxQX0FSX0lPTk9fTU9ERUw7Ci0KLQlpZiAoaGRyLT5pdGVtczAgJiBSUkxQX1JHQTBfUkVGX0xPQykKLQkJYXItPnJlcV9lbGVtcyB8PSBSUkxQX0FSX1JFRl9MT0M7Ci0KLQlpZiAoaGRyLT5pdGVtczAgJiBSUkxQX1JHQTBfUkVGX1RJTUUpCi0JCWFyLT5yZXFfZWxlbXMgfD0gUlJMUF9BUl9SRUZfVElNRTsKLQotCWlmIChoZHItPml0ZW1zMCAmIFJSTFBfUkdBMF9OQVZfTU9ERUwpIHsKLQkJaW50IGksIG5fc3ZzID0gZXBoLT5uc2F0X3RtdG9lID4+IDQ7Ci0JCWFyLT5yZXFfZWxlbXMgfD0gUlJMUF9BUl9FUEhFTUVSSVM7Ci0JCWZvciAoaT0wOyBpPG5fc3ZzOyBpKyspCi0JCQlhci0+ZXBoX3N2cyB8PSAoMVVMTCA8PCAoZXBoLT5zdnNbaV0uc3ZfaWQgLSAxKSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIH19fSAqLwotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogUlJMUCBlbGVtZW50cyBmaWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS17e3sgKi8KLQotCS8qIEhlbHBlcnMgKi8KLQotc3RhdGljIHZvaWQKLV90c18yM18wMzJfc3RvcmVfbGF0aXR1ZGUoZG91YmxlIGxhdCwgdWludDhfdCAqYikKLXsKLQl1aW50MzJfdCB4OwotCXggPSAodWludDMyX3QpIGZsb29yKGZhYnMobGF0LzkwLjApICogKChkb3VibGUpKDE8PDIzKSkpOwotCWlmICh4ID49ICgxPDwyMykpCi0JCXggPSAoMTw8MjMpIC0gMTsKLQlpZiAobGF0IDwgMC4wKQotCQl4IHw9ICgxPDwyMyk7Ci0JYlswXSA9ICh4ID4+IDE2KSAmIDB4ZmY7Ci0JYlsxXSA9ICh4ID4+ICA4KSAmIDB4ZmY7Ci0JYlsyXSA9ICB4ICAgICAgICAmIDB4ZmY7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fdHNfMjNfMDMyX3N0b3JlX2xvbmdpdHVkZShkb3VibGUgbG9uLCB1aW50OF90ICpiKQotewotCWludDMyX3QgeDsKLQl4ID0gZmxvb3IoKGxvbi8zNjAuMCkgKiAoKGRvdWJsZSkoMTw8MjQpKSk7Ci0JaWYgKHggPj0gKDE8PDIzKSkKLQkJeCA9IDB4MDA3ZmZmZmY7Ci0JZWxzZSBpZiAoeCA8IC0oMTw8MjMpKQotCQl4ID0gMHgwMDgwMDAwMDsKLQliWzBdID0gKHggPj4gMTYpICYgMHhmZjsKLQliWzFdID0gKHggPj4gIDgpICYgMHhmZjsKLQliWzJdID0gIHggICAgICAgICYgMHhmZjsKLX0KLQotc3RhdGljIHZvaWQKLV90c18yM18wMzJfc3RvcmVfYWx0aXR1ZGUoZG91YmxlIGFsdCwgdWludDhfdCAqYikKLXsKLQlpbnQgYWx0X2kgPSAoaW50KWZhYnMoYWx0KTsKLQliWzBdID0gKChhbHRfaSA+PiA4KSAmIDB4N2YpIHwgKGFsdDwwLjAgPyAweDgwIDogMHgwMCk7Ci0JYlsxXSA9IGFsdF9pICYgMHhmZjsKLX0KLQotCi0JLyogRmlsbCBtZXRob2RzICovCi0KLXN0YXRpYyB2b2lkCi1fcnJscF9maWxsX25hdmlnYXRpb25fbW9kZWxfZWxlbWVudCgKLQlzdHJ1Y3QgTmF2TW9kZWxFbGVtZW50ICpycmxwX25tZSwKLQlzdHJ1Y3QgZ3BzX2VwaGVtZXJpc19zdiAqZ3BzX2VwaF9zdikKLXsKLQlzdHJ1Y3QgVW5jb21wcmVzc2VkRXBoZW1lcmlzICpycmxwX2VwaDsKLQotCXJybHBfbm1lLT5zYXRTdGF0dXMucHJlc2VudCA9IFNhdFN0YXR1c19QUl9uZXdTYXRlbGxpdGVBbmRNb2RlbFVDOwotCXJybHBfbm1lLT5zYXRlbGxpdGVJRCA9IGdwc19lcGhfc3YtPnN2X2lkOwotCi0JcnJscF9lcGggPSAmcnJscF9ubWUtPnNhdFN0YXR1cy5jaG9pY2UubmV3U2F0ZWxsaXRlQW5kTW9kZWxVQzsKLQotCXJybHBfZXBoLT5lcGhlbUNvZGVPbkwyICAgPSBncHNfZXBoX3N2LT5jb2RlX29uX2wyOwotCXJybHBfZXBoLT5lcGhlbVVSQSAgICAgICAgPSBncHNfZXBoX3N2LT5zdl91cmE7Ci0JcnJscF9lcGgtPmVwaGVtU1ZoZWFsdGggICA9IGdwc19lcGhfc3YtPnN2X2hlYWx0aDsKLQlycmxwX2VwaC0+ZXBoZW1JT0RDICAgICAgID0gZ3BzX2VwaF9zdi0+aW9kYzsKLQlycmxwX2VwaC0+ZXBoZW1MMlBmbGFnICAgID0gZ3BzX2VwaF9zdi0+bDJfcF9mbGFnOwotCXJybHBfZXBoLT5lcGhlbVRnZCAgICAgICAgPSBncHNfZXBoX3N2LT50X2dkOwotCXJybHBfZXBoLT5lcGhlbVRvYyAgICAgICAgPSBncHNfZXBoX3N2LT50X29jOwotCXJybHBfZXBoLT5lcGhlbUFGMiAgICAgICAgPSBncHNfZXBoX3N2LT5hX2YyOwotCXJybHBfZXBoLT5lcGhlbUFGMSAgICAgICAgPSBncHNfZXBoX3N2LT5hX2YxOwotCXJybHBfZXBoLT5lcGhlbUFGMCAgICAgICAgPSBncHNfZXBoX3N2LT5hX2YwOwotCXJybHBfZXBoLT5lcGhlbUNycyAgICAgICAgPSBncHNfZXBoX3N2LT5jX3JzOwotCXJybHBfZXBoLT5lcGhlbURlbHRhTiAgICAgPSBncHNfZXBoX3N2LT5kZWx0YV9uOwotCXJybHBfZXBoLT5lcGhlbU0wICAgICAgICAgPSBncHNfZXBoX3N2LT5tXzA7Ci0JcnJscF9lcGgtPmVwaGVtQ3VjICAgICAgICA9IGdwc19lcGhfc3YtPmNfdWM7Ci0JcnJscF9lcGgtPmVwaGVtRSAgICAgICAgICA9IGdwc19lcGhfc3YtPmU7Ci0JcnJscF9lcGgtPmVwaGVtQ3VzICAgICAgICA9IGdwc19lcGhfc3YtPmNfdXM7Ci0JcnJscF9lcGgtPmVwaGVtQVBvd2VySGFsZiA9IGdwc19lcGhfc3YtPmFfcG93aGFsZjsKLQlycmxwX2VwaC0+ZXBoZW1Ub2UgICAgICAgID0gZ3BzX2VwaF9zdi0+dF9vZTsKLQlycmxwX2VwaC0+ZXBoZW1GaXRGbGFnICAgID0gZ3BzX2VwaF9zdi0+Zml0X2ZsYWc7Ci0JcnJscF9lcGgtPmVwaGVtQU9EQSAgICAgICA9IGdwc19lcGhfc3YtPmFvZG87Ci0JcnJscF9lcGgtPmVwaGVtQ2ljICAgICAgICA9IGdwc19lcGhfc3YtPmNfaWM7Ci0JcnJscF9lcGgtPmVwaGVtT21lZ2FBMCAgICA9IGdwc19lcGhfc3YtPm9tZWdhXzA7Ci0JcnJscF9lcGgtPmVwaGVtQ2lzICAgICAgICA9IGdwc19lcGhfc3YtPmNfaXM7Ci0JcnJscF9lcGgtPmVwaGVtSTAgICAgICAgICA9IGdwc19lcGhfc3YtPmlfMDsKLQlycmxwX2VwaC0+ZXBoZW1DcmMgICAgICAgID0gZ3BzX2VwaF9zdi0+Y19yYzsKLQlycmxwX2VwaC0+ZXBoZW1XICAgICAgICAgID0gZ3BzX2VwaF9zdi0+dzsKLQlycmxwX2VwaC0+ZXBoZW1PbWVnYUFEb3QgID0gZ3BzX2VwaF9zdi0+b21lZ2FfZG90OwotCXJybHBfZXBoLT5lcGhlbUlEb3QgICAgICAgPSBncHNfZXBoX3N2LT5pZG90OwotCi0JcnJscF9lcGgtPmVwaGVtU0YxUnN2ZC5yZXNlcnZlZDEgPSBncHNfZXBoX3N2LT5fcnN2ZDE7Ci0JcnJscF9lcGgtPmVwaGVtU0YxUnN2ZC5yZXNlcnZlZDIgPSBncHNfZXBoX3N2LT5fcnN2ZDI7Ci0JcnJscF9lcGgtPmVwaGVtU0YxUnN2ZC5yZXNlcnZlZDMgPSBncHNfZXBoX3N2LT5fcnN2ZDM7Ci0JcnJscF9lcGgtPmVwaGVtU0YxUnN2ZC5yZXNlcnZlZDQgPSBncHNfZXBoX3N2LT5fcnN2ZDQ7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fcnJscF9maWxsX2FsbWFuYWNfZWxlbWVudCgKLQlzdHJ1Y3QgQWxtYW5hY0VsZW1lbnQgKnJybHBfYWUsCi0Jc3RydWN0IGdwc19hbG1hbmFjX3N2ICpncHNfYWxtX3N2KQotewotCXJybHBfYWUtPnNhdGVsbGl0ZUlEID0gZ3BzX2FsbV9zdi0+c3ZfaWQ7Ci0KLQlycmxwX2FlLT5hbG1hbmFjRSAgICAgICAgICA9IGdwc19hbG1fc3YtPmU7Ci0JcnJscF9hZS0+YWxhbWFuYWNUb2EgICAgICAgPSBncHNfYWxtX3N2LT50X29hOwotCXJybHBfYWUtPmFsbWFuYWNLc2lpICAgICAgID0gZ3BzX2FsbV9zdi0+a3NpaTsKLQlycmxwX2FlLT5hbG1hbmFjT21lZ2FEb3QgICA9IGdwc19hbG1fc3YtPm9tZWdhX2RvdDsKLQlycmxwX2FlLT5hbG1hbmFjU1ZoZWFsdGggICA9IGdwc19hbG1fc3YtPnN2X2hlYWx0aDsKLQlycmxwX2FlLT5hbG1hbmFjQVBvd2VySGFsZiA9IGdwc19hbG1fc3YtPmFfcG93aGFsZjsKLQlycmxwX2FlLT5hbG1hbmFjT21lZ2EwICAgICA9IGdwc19hbG1fc3YtPm9tZWdhXzA7Ci0JcnJscF9hZS0+YWxtYW5hY1cgICAgICAgICAgPSBncHNfYWxtX3N2LT53OwotCXJybHBfYWUtPmFsbWFuYWNNMCAgICAgICAgID0gZ3BzX2FsbV9zdi0+bV8wOwotCXJybHBfYWUtPmFsbWFuYWNBRjAgICAgICAgID0gZ3BzX2FsbV9zdi0+YV9mMDsKLQlycmxwX2FlLT5hbG1hbmFjQUYxICAgICAgICA9IGdwc19hbG1fc3YtPmFfZjE7Ci0KLX0KLQotc3RhdGljIHZvaWQKLV9ycmxwX2ZpbGxfaW9ub3NwaGVyaWNfbW9kZWwoCi0Jc3RydWN0IElvbm9zcGhlcmljTW9kZWwgKnJybHBfaW9ubywKLQlzdHJ1Y3QgZ3BzX2lvbm9zcGhlcmVfbW9kZWwgKmdwc19pb25vKQotewotCXJybHBfaW9uby0+YWxmYTAgPSBncHNfaW9uby0+YWxwaGFfMDsKLQlycmxwX2lvbm8tPmFsZmExID0gZ3BzX2lvbm8tPmFscGhhXzE7Ci0JcnJscF9pb25vLT5hbGZhMiA9IGdwc19pb25vLT5hbHBoYV8yOwotCXJybHBfaW9uby0+YWxmYTMgPSBncHNfaW9uby0+YWxwaGFfMzsKLQlycmxwX2lvbm8tPmJldGEwID0gZ3BzX2lvbm8tPmJldGFfMDsKLQlycmxwX2lvbm8tPmJldGExID0gZ3BzX2lvbm8tPmJldGFfMTsKLQlycmxwX2lvbm8tPmJldGEyID0gZ3BzX2lvbm8tPmJldGFfMjsKLQlycmxwX2lvbm8tPmJldGEzID0gZ3BzX2lvbm8tPmJldGFfMzsKLX0KLQotc3RhdGljIHZvaWQKLV9ycmxwX2ZpbGxfdXRjX21vZGVsKAotCXN0cnVjdCBVVENNb2RlbCAqcnJscF91dGMsCi0Jc3RydWN0IGdwc191dGNfbW9kZWwgKmdwc191dGMpCi17Ci0JcnJscF91dGMtPnV0Y0ExICAgICAgICA9IGdwc191dGMtPmExOwotCXJybHBfdXRjLT51dGNBMCAgICAgICAgPSBncHNfdXRjLT5hMDsKLQlycmxwX3V0Yy0+dXRjVG90ICAgICAgID0gZ3BzX3V0Yy0+dF9vdDsKLQlycmxwX3V0Yy0+dXRjV050ICAgICAgID0gZ3BzX3V0Yy0+d25fdCAmIDB4ZmY7Ci0JcnJscF91dGMtPnV0Y0RlbHRhVGxzICA9IGdwc191dGMtPmRlbHRhX3RfbHM7Ci0JcnJscF91dGMtPnV0Y1dObHNmICAgICA9IGdwc191dGMtPnduX2xzZiAmIDB4ZmY7Ci0JcnJscF91dGMtPnV0Y0ROICAgICAgICA9IGdwc191dGMtPmRuOwotCXJybHBfdXRjLT51dGNEZWx0YVRsc2YgPSBncHNfdXRjLT5kZWx0YV90X2xzZjsKLX0KLQotLyogfX19ICovCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBSUkxQIEFzc2lzdGFuY2UgUERVIEdlbmVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXt7eyAqLwotCi1zdHJ1Y3QgUERVICoKLV9ycmxwX2NyZWF0ZV9ncHNfYXNzaXN0X3BkdShpbnQgcmVmbnVtLCBzdHJ1Y3QgR1BTX0Fzc2lzdERhdGEgKipvX2dwc19hZCkKLXsKLQlzdHJ1Y3QgUERVICpwZHU7Ci0Jc3RydWN0IEdQU19Bc3Npc3REYXRhICpncHNfYWQ7Ci0KLQlwZHUgPSBjYWxsb2MoMSwgc2l6ZW9mKCpwZHUpKTsKLQlpZiAoIXBkdSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlncHNfYWQgPSBjYWxsb2MoMSwgc2l6ZW9mKCpncHNfYWQpKTsKLQlpZiAoIWdwc19hZCkgewotCQlmcmVlKHBkdSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChvX2dwc19hZCkKLQkJKm9fZ3BzX2FkID0gZ3BzX2FkOwotCi0JcGR1LT5yZWZlcmVuY2VOdW1iZXIgPSByZWZudW07Ci0JcGR1LT5jb21wb25lbnQucHJlc2VudCA9IFJSTFBfQ29tcG9uZW50X1BSX2Fzc2lzdGFuY2VEYXRhOwotCXBkdS0+Y29tcG9uZW50LmNob2ljZS5hc3Npc3RhbmNlRGF0YS5ncHNfQXNzaXN0RGF0YSA9IGdwc19hZDsKLQotCXJldHVybiBwZHU7Ci19Ci0KLXN0YXRpYyBpbnQKLV9ycmxwX2FkZF9pb25vc3BoZXJpY19tb2RlbCgKLQlzdHJ1Y3QgR1BTX0Fzc2lzdERhdGEgKnJybHBfZ3BzX2FkLAotCXN0cnVjdCBncHNfYXNzaXN0X2RhdGEgKmdwc19hZCkKLXsKLQlzdHJ1Y3QgSW9ub3NwaGVyaWNNb2RlbCAqcnJscF9pb25vOwotCi0JaWYgKCEoZ3BzX2FkLT5maWVsZHMgJiBHUFNfRklFTERfSU9OT1NQSEVSRSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcnJscF9pb25vID0gY2FsbG9jKDEsIHNpemVvZigqcnJscF9pb25vKSk7Ci0JaWYgKCFycmxwX2lvbm8pCi0JCXJldHVybiAtRU5PTUVNOwotCXJybHBfZ3BzX2FkLT5jb250cm9sSGVhZGVyLmlvbm9zcGhlcmljTW9kZWwgPSBycmxwX2lvbm87Ci0KLQlfcnJscF9maWxsX2lvbm9zcGhlcmljX21vZGVsKHJybHBfaW9ubywgJmdwc19hZC0+aW9ub3NwaGVyZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotX3JybHBfYWRkX3V0Y19tb2RlbCgKLQlzdHJ1Y3QgR1BTX0Fzc2lzdERhdGEgKnJybHBfZ3BzX2FkLAotCXN0cnVjdCBncHNfYXNzaXN0X2RhdGEgKmdwc19hZCkKLXsKLQlzdHJ1Y3QgVVRDTW9kZWwgKnJybHBfdXRjOwotCi0JaWYgKCEoZ3BzX2FkLT5maWVsZHMgJiBHUFNfRklFTERfVVRDKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlycmxwX3V0YyA9IGNhbGxvYygxLCBzaXplb2YoKnJybHBfdXRjKSk7Ci0JaWYgKCFycmxwX3V0YykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcnJscF9ncHNfYWQtPmNvbnRyb2xIZWFkZXIudXRjTW9kZWwgPSBycmxwX3V0YzsKLQotCV9ycmxwX2ZpbGxfdXRjX21vZGVsKHJybHBfdXRjLCAmZ3BzX2FkLT51dGMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLV9ycmxwX2FkZF9yZWZlcmVuY2VfbG9jYXRpb24oCi0Jc3RydWN0IEdQU19Bc3Npc3REYXRhICpycmxwX2dwc19hZCwKLQlzdHJ1Y3QgZ3BzX2Fzc2lzdF9kYXRhICpncHNfYWQpCi17Ci0Jc3RydWN0IFJlZkxvY2F0aW9uICpycmxwX3JlZmxvYzsKLQl1aW50OF90ICpiOwotCi0JaWYgKCEoZ3BzX2FkLT5maWVsZHMgJiBHUFNfRklFTERfUkVGUE9TKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlycmxwX3JlZmxvYyA9IGNhbGxvYygxLCBzaXplb2YoKnJybHBfcmVmbG9jKSk7Ci0JaWYgKCFycmxwX3JlZmxvYykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcnJscF9ncHNfYWQtPmNvbnRyb2xIZWFkZXIucmVmTG9jYXRpb24gPSBycmxwX3JlZmxvYzsKLQotCWIgPSBtYWxsb2MoOSk7Ci0KLQliWzBdID0gMHg4MDsgLyogRWxsaXBzb2lkIFBvaW50IHdpdGggYWx0aXR1ZGUgKi8KLQlfdHNfMjNfMDMyX3N0b3JlX2xhdGl0dWRlKGdwc19hZC0+cmVmX3Bvcy5sYXRpdHVkZSwgJmJbMV0pOwotCV90c18yM18wMzJfc3RvcmVfbG9uZ2l0dWRlKGdwc19hZC0+cmVmX3Bvcy5sb25naXR1ZGUsICZiWzRdKTsKLQlfdHNfMjNfMDMyX3N0b3JlX2FsdGl0dWRlKGdwc19hZC0+cmVmX3Bvcy5hbHRpdHVkZSwgJmJbN10pOwotCi0JcnJscF9yZWZsb2MtPnRocmVlRExvY2F0aW9uLmJ1ZiA9IGI7Ci0JcnJscF9yZWZsb2MtPnRocmVlRExvY2F0aW9uLnNpemUgPSA5OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLV9ycmxwX2FkZF9yZWZlcmVuY2VfdGltZSgKLQlzdHJ1Y3QgR1BTX0Fzc2lzdERhdGEgKnJybHBfZ3BzX2FkLAotCXN0cnVjdCBncHNfYXNzaXN0X2RhdGEgKmdwc19hZCkKLXsKLQlzdHJ1Y3QgUmVmZXJlbmNlVGltZSAqcnJscF9yZWZ0aW1lOwotCi0JaWYgKCEoZ3BzX2FkLT5maWVsZHMgJiBHUFNfRklFTERfUkVGVElNRSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcnJscF9yZWZ0aW1lID0gY2FsbG9jKDEsIHNpemVvZigqcnJscF9yZWZ0aW1lKSk7Ci0JaWYgKCFycmxwX3JlZnRpbWUpCi0JCXJldHVybiAtRU5PTUVNOwotCXJybHBfZ3BzX2FkLT5jb250cm9sSGVhZGVyLnJlZmVyZW5jZVRpbWUgPSBycmxwX3JlZnRpbWU7Ci0KLQlycmxwX3JlZnRpbWUtPmdwc1RpbWUuZ3BzV2VlayAgID0gZ3BzX2FkLT5yZWZfdGltZS53biAmIDB4M2ZmOyAvKiAxMGIgKi8KLQlycmxwX3JlZnRpbWUtPmdwc1RpbWUuZ3BzVE9XMjNiID0KLQkJKChpbnQpZmxvb3IoZ3BzX2FkLT5yZWZfdGltZS50b3cgLyAwLjA4KSkgJiAweDdmZmZmZjsgIC8qIDIzYiAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLV9ycmxwX2FkZF9hbG1hbmFjKAotCXN0cnVjdCBHUFNfQXNzaXN0RGF0YSAqcnJscF9ncHNfYWQsCi0Jc3RydWN0IGdwc19hc3Npc3RfZGF0YSAqZ3BzX2FkLCBpbnQgKnN0YXJ0LCBpbnQgY291bnQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IEFsbWFuYWMgKnJybHBfYWxtOwotCXN0cnVjdCBncHNfYWxtYW5hYyAqZ3BzX2FsbSA9ICZncHNfYWQtPmFsbWFuYWM7Ci0KLQlpZiAoIShncHNfYWQtPmZpZWxkcyAmIEdQU19GSUVMRF9BTE1BTkFDKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlycmxwX2FsbSA9IGNhbGxvYygxLCBzaXplb2YoKnJybHBfYWxtKSk7Ci0JaWYgKCFycmxwX2FsbSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcnJscF9ncHNfYWQtPmNvbnRyb2xIZWFkZXIuYWxtYW5hYyA9IHJybHBfYWxtOwotCi0JcnJscF9hbG0tPmFsYW1hbmFjV05hID0gZ3BzX2FsbS0+d25hOwotCWlmIChjb3VudCA9PSAtMSkKLQkJY291bnQgPSBncHNfYWxtLT5uX3N2IC0gKnN0YXJ0OwotCWZvciAoaT0qc3RhcnQ7IChpPCpzdGFydCtjb3VudCkgJiYgKGk8Z3BzX2FsbS0+bl9zdik7IGkrKykgewotCQlzdHJ1Y3QgQWxtYW5hY0VsZW1lbnQgKmFlOwotCQlhZSA9IGNhbGxvYygxLCBzaXplb2YoKmFlKSk7Ci0JCWlmICghYWUpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJX3JybHBfZmlsbF9hbG1hbmFjX2VsZW1lbnQoYWUsICZncHNfYWxtLT5zdnNbaV0pOwotCQlBU05fU0VRVUVOQ0VfQUREKCZycmxwX2FsbS0+YWxtYW5hY0xpc3QubGlzdCwgYWUpOwotCX0KLQotCSpzdGFydCA9IGk7Ci0KLQlyZXR1cm4gaSA8IGdwc19hbG0tPm5fc3Y7Ci19Ci0KLXN0YXRpYyBpbnQKLV9ycmxwX2FkZF9lcGhlbWVyaXMoCi0Jc3RydWN0IEdQU19Bc3Npc3REYXRhICpycmxwX2dwc19hZCwKLQlzdHJ1Y3QgZ3BzX2Fzc2lzdF9kYXRhICpncHNfYWQsIGludCAqc3RhcnQsIGludCBjb3VudCwgdWludDY0X3QgbWFzaykKLXsKLQlpbnQgaSwgajsKLQlzdHJ1Y3QgTmF2aWdhdGlvbk1vZGVsICpycmxwX25hdjsKLQlzdHJ1Y3QgZ3BzX2VwaGVtZXJpcyAqZ3BzX2VwaCA9ICZncHNfYWQtPmVwaGVtZXJpczsKLQotCWlmICghKGdwc19hZC0+ZmllbGRzICYgR1BTX0ZJRUxEX0VQSEVNRVJJUykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcnJscF9uYXYgPSBjYWxsb2MoMSwgc2l6ZW9mKCpycmxwX25hdikpOwotCWlmICghcnJscF9uYXYpCi0JCXJldHVybiAtRU5PTUVNOwotCXJybHBfZ3BzX2FkLT5jb250cm9sSGVhZGVyLm5hdmlnYXRpb25Nb2RlbCA9IHJybHBfbmF2OwotCi0JaWYgKGNvdW50ID09IC0xKQotCQljb3VudCA9IGdwc19lcGgtPm5fc3YgLSAqc3RhcnQ7Ci0JZm9yIChpPSpzdGFydCxqPTA7IChqPGNvdW50KSAmJiAoaTxncHNfZXBoLT5uX3N2KTsgaSsrKSB7Ci0JCWlmICghKG1hc2sgJiAoMVVMTDw8KGdwc19lcGgtPnN2c1tpXS5zdl9pZC0xKSkpKQotCQkJY29udGludWU7Ci0JCXN0cnVjdCBOYXZNb2RlbEVsZW1lbnQgKm5tZTsKLQkJbm1lID0gY2FsbG9jKDEsIHNpemVvZigqbm1lKSk7Ci0JCWlmICghbm1lKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCV9ycmxwX2ZpbGxfbmF2aWdhdGlvbl9tb2RlbF9lbGVtZW50KG5tZSwgJmdwc19lcGgtPnN2c1tpXSk7Ci0JCUFTTl9TRVFVRU5DRV9BREQoJnJybHBfbmF2LT5uYXZNb2RlbExpc3QubGlzdCwgbm1lKTsKLQkJaisrOwotCX0KLQotCSpzdGFydCA9IGk7Ci0KLQlyZXR1cm4gaSA8IGdwc19lcGgtPm5fc3Y7Ci19Ci0KLQotI2RlZmluZSBNQVhfUERVUyA2NAotCi1pbnQKLXJybHBfZ3BzX2Fzc2lzdF9wZHVzKAotCXN0cnVjdCBncHNfYXNzaXN0X2RhdGEgKmdwc19hZCwgc3RydWN0IHJybHBfYXNzaXN0X3JlcSAqcmVxLAotCXZvaWQgKipvX3BkdSwgaW50ICpvX2xlbiwgaW50IG9fbWF4X3BkdXMpCi17Ci0Jc3RydWN0IFBEVSAqbHN0X3BkdVtNQVhfUERVU107Ci0JaW50IGxzdF9jbnQgPSAwOwotCi0Jc3RydWN0IFBEVSAqcnJscF9wZHUgPSBOVUxMOwotCXN0cnVjdCBHUFNfQXNzaXN0RGF0YSAqcnJscF9ncHNfYWQgPSBOVUxMOwotCXVpbnQzMl90IHJlID0gcmVxLT5yZXFfZWxlbXM7Ci0JaW50IGksIHJ2ID0gMDsKLQotCS8qIElvbm9zcGhlcmljTW9kZWwsIFVUQ01vZGVsLCBSZWZMb2NhdGlvbiwgUmVmZXJlbmNlVGltZSAqLwotCWlmIChyZSAmIChSUkxQX0FSX0lPTk9fTU9ERUwgfAotCSAgICAgICAgICBSUkxQX0FSX1VUQ19NT0RFTCB8Ci0JICAgICAgICAgIFJSTFBfQVJfUkVGX1RJTUUgfAotCSAgICAgICAgICBSUkxQX0FSX1JFRl9MT0MpKQotCXsKLQkJaW50IHBkdV9oYXNfZGF0YSA9IDA7Ci0KLQkJcnJscF9wZHUgPSBfcnJscF9jcmVhdGVfZ3BzX2Fzc2lzdF9wZHUoMSwgJnJybHBfZ3BzX2FkKTsKLQkJaWYgKCFycmxwX3BkdSkgewotCQkJcnYgPSAtRU5PTUVNOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCWlmIChyZSAmIFJSTFBfQVJfSU9OT19NT0RFTCkKLQkJCWlmICghX3JybHBfYWRkX2lvbm9zcGhlcmljX21vZGVsKHJybHBfZ3BzX2FkLCBncHNfYWQpKQotCQkJCXBkdV9oYXNfZGF0YSA9IDE7Ci0KLQkJaWYgKHJlICYgUlJMUF9BUl9VVENfTU9ERUwpCi0JCQlpZiAoIV9ycmxwX2FkZF91dGNfbW9kZWwocnJscF9ncHNfYWQsIGdwc19hZCkpCi0JCQkJcGR1X2hhc19kYXRhID0gMTsKLQotCQlpZiAocmUgJiBSUkxQX0FSX1JFRl9USU1FKQotCQkJaWYgKCFfcnJscF9hZGRfcmVmZXJlbmNlX3RpbWUocnJscF9ncHNfYWQsIGdwc19hZCkpCi0JCQkJcGR1X2hhc19kYXRhID0gMTsKLQotCQlpZiAocmUgJiBSUkxQX0FSX1JFRl9MT0MpCi0JCQlpZiAoIV9ycmxwX2FkZF9yZWZlcmVuY2VfbG9jYXRpb24ocnJscF9ncHNfYWQsIGdwc19hZCkpCi0JCQkJcGR1X2hhc19kYXRhID0gMTsKLQotCQlpZiAocGR1X2hhc19kYXRhKSB7Ci0JCQlsc3RfcGR1W2xzdF9jbnQrK10gPSBycmxwX3BkdTsKLQkJCXJybHBfcGR1ID0gTlVMTDsKLQkJfQotCX0KLQotCS8qIEFsbWFuYWMgKi8KLQlpZiAocmUgJiBSUkxQX0FSX0FMTUFOQUMpIHsKLQkJaSA9IDA7Ci0JCWRvIHsKLQkJCWlmICghKGdwc19hZC0+ZmllbGRzICYgR1BTX0ZJRUxEX0FMTUFOQUMpKQotCQkJCWJyZWFrOwotCi0JCQlpZiAoIXJybHBfcGR1KSB7Ci0JCQkJcnJscF9wZHUgPSBfcnJscF9jcmVhdGVfZ3BzX2Fzc2lzdF9wZHUoMSwgJnJybHBfZ3BzX2FkKTsKLQkJCQlpZiAoIXJybHBfcGR1KSB7Ci0JCQkJCXJ2ID0gLUVOT01FTTsKLQkJCQkJZ290byBlcnJvcjsKLQkJCQl9Ci0JCQl9Ci0KLQkJCXJ2ID0gX3JybHBfYWRkX2FsbWFuYWMocnJscF9ncHNfYWQsIGdwc19hZCwgJmksIDEwKTsKLQkJCWlmIChydiA8IDApCi0JCQkJZ290byBlcnJvcjsKLQotCQkJbHN0X3BkdVtsc3RfY250KytdID0gcnJscF9wZHU7Ci0JCQlycmxwX3BkdSA9IE5VTEw7Ci0JCX0gd2hpbGUgKHJ2KTsKLQl9Ci0KLQkvKiBFcGhlbWVyaXMgKi8KLQlpZiAocmUgJiBSUkxQX0FSX0VQSEVNRVJJUykgewotCQlpID0gMDsKLQkJZG8gewotCQkJaWYgKCEoZ3BzX2FkLT5maWVsZHMgJiBHUFNfRklFTERfRVBIRU1FUklTKSkKLQkJCQlicmVhazsKLQotCQkJaWYgKCFycmxwX3BkdSkgewotCQkJCXJybHBfcGR1ID0gX3JybHBfY3JlYXRlX2dwc19hc3Npc3RfcGR1KDEsICZycmxwX2dwc19hZCk7Ci0JCQkJaWYgKCFycmxwX3BkdSkgewotCQkJCQlydiA9IC1FTk9NRU07Ci0JCQkJCWdvdG8gZXJyb3I7Ci0JCQkJfQotCQkJfQotCi0JCQlydiA9IF9ycmxwX2FkZF9lcGhlbWVyaXMocnJscF9ncHNfYWQsIGdwc19hZCwgJmksIDIsIHJlcS0+ZXBoX3N2cyk7Ci0KLQkJCWxzdF9wZHVbbHN0X2NudCsrXSA9IHJybHBfcGR1OwotCQkJcnJscF9wZHUgPSBOVUxMOwotCi0JCX0gd2hpbGUgKHJ2KTsKLQl9Ci0KLQkvKiBTZXJpYWxpemUgJiBSZWxlYXNlIGFsbCBQRFVzICovCi0JZm9yIChpPTA7IGk8bHN0X2NudCAmJiBpPG9fbWF4X3BkdXM7IGkrKykgewotCQkvKiBQc2V1ZG8gc2VnbWVudGF0aW9uIGZsYWdzICovCi0JCU1vcmVBc3NEYXRhVG9CZVNlbnRfdCAqbWFkID0gY2FsbG9jKDEsIHNpemVvZigqbWFkKSk7Ci0JCSptYWQgPSAoaSA9PSAobHN0X2NudC0xKSkgPwotCQkJCU1vcmVBc3NEYXRhVG9CZVNlbnRfbm9Nb3JlTWVzc2FnZXMgOgotCQkJCU1vcmVBc3NEYXRhVG9CZVNlbnRfbW9yZU1lc3NhZ2VzT25UaGVXYXk7Ci0JCWxzdF9wZHVbaV0tPmNvbXBvbmVudC5jaG9pY2UuYXNzaXN0YW5jZURhdGEubW9yZUFzc0RhdGFUb0JlU2VudCA9IG1hZDsKLQotCQkvKiBTZXJpYWxpemF0aW9uICovCi0JCS8vIGFzbl9mcHJpbnQoc3Rkb3V0LCAmYXNuX0RFRl9QRFUsIGxzdF9wZHVbaV0pOwotCQlydiA9IHVwZXJfZW5jb2RlX3RvX25ld19idWZmZXIoJmFzbl9ERUZfUERVLCBOVUxMLCBsc3RfcGR1W2ldLCAmb19wZHVbaV0pOwotCQlpZiAocnYgPCAwKQotCQkJZ290byBlcnJvcjsKLQkJb19sZW5baV0gPSBydjsKLQl9Ci0KLQlydiA9IGxzdF9jbnQ7Ci0KLQkvKiBSZWxlYXNlIEFTTi4xIG9iamVjdHMgKi8KLWVycm9yOgotCWlmIChycmxwX3BkdSkKLQkJYXNuX0RFRl9QRFUuZnJlZV9zdHJ1Y3QoJmFzbl9ERUZfUERVLCAodm9pZCopcnJscF9wZHUsIDApOwotCi0JZm9yIChpPTA7IGk8bHN0X2NudDsgaSsrKQotCQlhc25fREVGX1BEVS5mcmVlX3N0cnVjdCgmYXNuX0RFRl9QRFUsIGxzdF9wZHVbaV0sIDApOwotCi0JcmV0dXJuIHJ2OwotfQotCi0vKiB9fX0gKi8KLQpkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvcnJscC5oIGIvcnJscC1lcGhlbWVyaXMvcnJscC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWU0MzQ0Li4wMDAwMDAwCi0tLSBhL3JybHAtZXBoZW1lcmlzL3JybHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBycmxwLmgKLSAqCi0gKiBSUkxQIEhlYWRlcgotICoKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgIFN5bHZhaW4gTXVuYXV0IDx0bnRAMjQ2dE50LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotICovCi0KLSNpZm5kZWYgX19SUkxQX0hfXwotI2RlZmluZSBfX1JSTFBfSF9fCi0KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotI2luY2x1ZGUgImdwcy5oIgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLQotLyogT3VyIGludGVybmFsIHNpbXBsaWZpZWQgc3RydWN0dXJlIGZvciByZXF1ZXN0cyAqLwotCi0jZGVmaW5lIFJSTFBfQVJfUkVGX0xPQwkJKDE8PDApCi0jZGVmaW5lIFJSTFBfQVJfUkVGX1RJTUUJKDE8PDEpCi0jZGVmaW5lIFJSTFBfQVJfVVRDX01PREVMCSgxPDwyKQotI2RlZmluZSBSUkxQX0FSX0lPTk9fTU9ERUwJKDE8PDMpCi0jZGVmaW5lIFJSTFBfQVJfQUxNQU5BQwkJKDE8PDQpCi0jZGVmaW5lIFJSTFBfQVJfRVBIRU1FUklTCSgxPDw1KQotCi1zdHJ1Y3QgcnJscF9hc3Npc3RfcmVxIHsKLQl1aW50MzJfdCByZXFfZWxlbXM7Ci0JdWludDY0X3QgZXBoX3N2czsKLX07Ci0KLQotLyogTWV0aG9kcyAqLwotaW50IHJybHBfZGVjb2RlX2Fzc2lzdGFuY2VfcmVxdWVzdChzdHJ1Y3QgcnJscF9hc3Npc3RfcmVxICphciwKLQl2b2lkICpyZXEsIGludCByZXFfbGVuKTsKLQotaW50IHJybHBfZ3BzX2Fzc2lzdF9wZHVzKAotCXN0cnVjdCBncHNfYXNzaXN0X2RhdGEgKmdwc19hZCwgc3RydWN0IHJybHBfYXNzaXN0X3JlcSAqcmVxLAotCXZvaWQgKipvX3BkdSwgaW50ICpvX2xlbiwgaW50IG9fbWF4X3BkdXMpOwotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX1JSTFBfSF9fICovCi0KZGlmZiAtLWdpdCBhL3JybHAtZXBoZW1lcmlzL3VieC1wYXJzZS5jIGIvcnJscC1lcGhlbWVyaXMvdWJ4LXBhcnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZDBmNzAuLjAwMDAwMDAKLS0tIGEvcnJscC1lcGhlbWVyaXMvdWJ4LXBhcnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotLyoKLSAqIHVieC1wYXJzZS5jCi0gKgotICogSW1wbGVtZW50YXRpb24gb2YgcGFyc2luZyBjb2RlIGNvbnZlcnRpbmcgVUJYIG1lc3NhZ2VzIHRvIEdQUyBhc3Npc3QKLSAqIGRhdGEKLSAqCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5ICBTeWx2YWluIE11bmF1dCA8dG50QDI0NnROdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgImdwcy5oIgotI2luY2x1ZGUgInVieC5oIgotI2luY2x1ZGUgInVieC1wYXJzZS5oIgotCi0KLS8qIEhlbHBlcnMgKi8KLQotc3RhdGljIGludAotZmxvYXRfdG9fZml4ZWRwb2ludChmbG9hdCBmLCBpbnQgc2YpCi17Ci0JaWYgKHNmIDwgMCkgewotCQl3aGlsZSAoc2YrKyA8IDApCi0JCQlmICo9IDIuMGY7Ci0JfSBlbHNlIHsKLQkJd2hpbGUgKHNmLS0gPiAwKQotCQkJZiAqPSAwLjVmOwotCX0KLQotCXJldHVybiAoaW50KWY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kb3VibGVfdG9fZml4ZWRwb2ludChkb3VibGUgZCwgaW50IHNmKQotewotCWlmIChzZiA8IDApIHsKLQkJd2hpbGUgKHNmKysgPCAwKQotCQkJZCAqPSAyLjA7Ci0JfSBlbHNlIHsKLQkJd2hpbGUgKHNmLS0gPiAwKQotCQkJZCAqPSAwLjU7Ci0JfQotCi0JcmV0dXJuIChpbnQpZDsKLX0KLQotCi0vKiBVQlggbWVzc2FnZSBwYXJzaW5nIHRvIGZpbGwgZ3BzIGFzc2lzdCBkYXRhICovCi0KLXN0YXRpYyB2b2lkCi1fdWJ4X21zZ19wYXJzZV9uYXZfcG9zbGxoKHN0cnVjdCB1YnhfaGRyICpoZHIsIHZvaWQgKnBsLCBpbnQgcGxfbGVuLCB2b2lkICp1ZCkKLXsKLQlzdHJ1Y3QgdWJ4X25hdl9wb3NsbGggKm5hdl9wb3NsbGggPSBwbDsKLQlzdHJ1Y3QgZ3BzX2Fzc2lzdF9kYXRhICpncHMgPSB1ZDsKLQotCS8vcHJpbnRmKCJbLl0gTkFWX1BPU0xMSFxuIik7Ci0KLQlncHMtPmZpZWxkcyB8PSBHUFNfRklFTERfUkVGUE9TOwotCi0JZ3BzLT5yZWZfcG9zLmxhdGl0dWRlICA9IChkb3VibGUpKG5hdl9wb3NsbGgtPmxhdCkgKiAxZS03OwotCWdwcy0+cmVmX3Bvcy5sb25naXR1ZGUgPSAoZG91YmxlKShuYXZfcG9zbGxoLT5sb24pICogMWUtNzsKLQlncHMtPnJlZl9wb3MuYWx0aXR1ZGUgID0gKGRvdWJsZSkobmF2X3Bvc2xsaC0+aGVpZ2h0KSAqIDFlLTM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fdWJ4X21zZ19wYXJzZV9haWRfaW5pKHN0cnVjdCB1YnhfaGRyICpoZHIsIHZvaWQgKnBsLCBpbnQgcGxfbGVuLCB2b2lkICp1ZCkKLXsKLQlzdHJ1Y3QgdWJ4X2FpZF9pbmkgKmFpZF9pbmkgPSBwbDsKLQlzdHJ1Y3QgZ3BzX2Fzc2lzdF9kYXRhICpncHMgPSB1ZDsKLQotCS8vcHJpbnRmKCJbLl0gQUlEX0lOSVxuIik7Ci0KLQkvKiBFeHRyYWN0IGluZm8gZm9yICJSZWZlcmVuY2UgVGltZSIgKi8KLQlncHMtPmZpZWxkcyB8PSBHUFNfRklFTERfUkVGVElNRTsKLQotCWdwcy0+cmVmX3RpbWUud24gPSBhaWRfaW5pLT53bjsKLQlncHMtPnJlZl90aW1lLnRvdyA9IChkb3VibGUpYWlkX2luaS0+dG93ICogMWUtMzsKLQotCS8vIEZJWE1FOiBXZSBjb3VsZCBleHRyYWN0IHJlZiBwb3NpdGlvbiBhcyB3ZWxsIGJ1dCB3ZSBuZWVkIGl0IGluCi0JLy8gICAgICAgIFdHUzg0IGdlb2RldGljIGNvb3JkaW5hdGVzIGFuZCBpdCdzIHByb3ZpZGVkIGFzIGVjZWYsIHNvCi0JLy8gICAgICAgIHdlIG5lZWQgYSBsb3Qgb2YgbWF0aCAuLi4KLX0KLQotc3RhdGljIHZvaWQKLV91YnhfbXNnX3BhcnNlX2FpZF9odWkoc3RydWN0IHVieF9oZHIgKmhkciwgdm9pZCAqcGwsIGludCBwbF9sZW4sIHZvaWQgKnVkKQotewotCXN0cnVjdCB1YnhfYWlkX2h1aSAqYWlkX2h1aSA9IHBsOwotCXN0cnVjdCBncHNfYXNzaXN0X2RhdGEgKmdwcyA9IHVkOwotCi0JLy9wcmludGYoIlsuXSBBSURfSFVJXG4iKTsKLQotCWlmIChhaWRfaHVpLT5mbGFncyAmIDB4MikgeyAvKiBVVEMgcGFyYW1ldGVycyB2YWxpZCAqLwotCQlzdHJ1Y3QgZ3BzX3V0Y19tb2RlbCAqdXRjID0gJmdwcy0+dXRjOwotCi0JCWdwcy0+ZmllbGRzIHw9IEdQU19GSUVMRF9VVEM7Ci0KLQkJdXRjLT5hMCAgICAgICAgICA9IGRvdWJsZV90b19maXhlZHBvaW50KGFpZF9odWktPnV0Y19hMCwgLTMwKTsKLQkJdXRjLT5hMSAgICAgICAgICA9IGRvdWJsZV90b19maXhlZHBvaW50KGFpZF9odWktPnV0Y19hMSwgLTUwKTsKLQkJdXRjLT5kZWx0YV90X2xzICA9IGFpZF9odWktPnV0Y19sczsKLQkJdXRjLT50X290ICAgICAgICA9IGFpZF9odWktPnV0Y190b3QgPj4gMTI7Ci0JCXV0Yy0+d25fdCAgICAgICAgPSBhaWRfaHVpLT51dGNfd250OwotCQl1dGMtPnduX2xzZiAgICAgID0gYWlkX2h1aS0+dXRjX3duZjsKLQkJdXRjLT5kbiAgICAgICAgICA9IGFpZF9odWktPnV0Y19kbjsKLQkJdXRjLT5kZWx0YV90X2xzZiA9IGFpZF9odWktPnV0Y19sc2Y7Ci0JfQotCi0JaWYgKGFpZF9odWktPmZsYWdzICYgMHgwNCkgeyAvKiBLbG9idWNoYXIgcGFyYW1ldGVycyB2YWxpZCAqLwotCQlzdHJ1Y3QgZ3BzX2lvbm9zcGhlcmVfbW9kZWwgKmlvbm8gPSAmZ3BzLT5pb25vc3BoZXJlOwotCi0JCWdwcy0+ZmllbGRzIHw9IEdQU19GSUVMRF9JT05PU1BIRVJFOwotCi0JCWlvbm8tPmFscGhhXzAgPSBmbG9hdF90b19maXhlZHBvaW50KGFpZF9odWktPmtsb2JfYTAsIC0zMCk7Ci0JCWlvbm8tPmFscGhhXzEgPSBmbG9hdF90b19maXhlZHBvaW50KGFpZF9odWktPmtsb2JfYTEsIC0yNyk7Ci0JCWlvbm8tPmFscGhhXzIgPSBmbG9hdF90b19maXhlZHBvaW50KGFpZF9odWktPmtsb2JfYTIsIC0yNCk7Ci0JCWlvbm8tPmFscGhhXzMgPSBmbG9hdF90b19maXhlZHBvaW50KGFpZF9odWktPmtsb2JfYTMsIC0yNCk7Ci0JCWlvbm8tPmJldGFfMCA9IGZsb2F0X3RvX2ZpeGVkcG9pbnQoYWlkX2h1aS0+a2xvYl9iMCwgMTEpOwotCQlpb25vLT5iZXRhXzEgPSBmbG9hdF90b19maXhlZHBvaW50KGFpZF9odWktPmtsb2JfYjEsIDE0KTsKLQkJaW9uby0+YmV0YV8yID0gZmxvYXRfdG9fZml4ZWRwb2ludChhaWRfaHVpLT5rbG9iX2IyLCAxNik7Ci0JCWlvbm8tPmJldGFfMyA9IGZsb2F0X3RvX2ZpeGVkcG9pbnQoYWlkX2h1aS0+a2xvYl9iMywgMTYpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLV91YnhfbXNnX3BhcnNlX2FpZF9hbG0oc3RydWN0IHVieF9oZHIgKmhkciwgdm9pZCAqcGwsIGludCBwbF9sZW4sIHZvaWQgKnVkKQotewotCXN0cnVjdCB1YnhfYWlkX2FsbSAqYWlkX2FsbSA9IHBsOwotCXN0cnVjdCBncHNfYXNzaXN0X2RhdGEgKmdwcyA9IHVkOwotCi0JLy9wcmludGYoIlsuXSBBSURfQUxNICVkIC0gJWRcbiIsIGFpZF9hbG0tPnN2X2lkLCBhaWRfYWxtLT5ncHNfd2Vlayk7Ci0KLQlpZiAoYWlkX2FsbS0+Z3BzX3dlZWspIHsKLQkJZ3BzLT5maWVsZHMgfD0gR1BTX0ZJRUxEX0FMTUFOQUM7Ci0JCWdwcy0+YWxtYW5hYy53bmEgPSBhaWRfYWxtLT5ncHNfd2VlayAmIDB4ZmY7Ci0JCWdwc191bnBhY2tfc2Y0NV9hbG1hbmFjKGFpZF9hbG0tPmFsbV93b3JkcywgJmdwcy0+YWxtYW5hYy5zdnNbZ3BzLT5hbG1hbmFjLm5fc3YrK10pOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLV91YnhfbXNnX3BhcnNlX2FpZF9lcGgoc3RydWN0IHVieF9oZHIgKmhkciwgdm9pZCAqcGwsIGludCBwbF9sZW4sIHZvaWQgKnVkKQotewotCXN0cnVjdCB1YnhfYWlkX2VwaCAqYWlkX2VwaCA9IHBsOwotCXN0cnVjdCBncHNfYXNzaXN0X2RhdGEgKmdwcyA9IHVkOwotCi0JLy9wcmludGYoIlsuXSBBSURfRVBIICVkIC0gJXNcbiIsIGFpZF9lcGgtPnN2X2lkLCBhaWRfZXBoLT5wcmVzZW50ID8gInByZXNlbnQiIDogIm5vdCBwcmVzZW50Iik7Ci0KLQlpZiAoYWlkX2VwaC0+cHJlc2VudCkgewotCQlpbnQgaSA9IGdwcy0+ZXBoZW1lcmlzLm5fc3YrKzsKLQkJZ3BzLT5maWVsZHMgfD0gR1BTX0ZJRUxEX0VQSEVNRVJJUzsKLQkJZ3BzLT5lcGhlbWVyaXMuc3ZzW2ldLnN2X2lkID0gYWlkX2VwaC0+c3ZfaWQ7Ci0JCWdwc191bnBhY2tfc2YxMjMoYWlkX2VwaC0+ZXBoX3dvcmRzLCAmZ3BzLT5lcGhlbWVyaXMuc3ZzW2ldKTsKLQl9Ci19Ci0KLQotLyogRGlzcGF0Y2ggdGFibGUgKi8KLXN0cnVjdCB1YnhfZGlzcGF0Y2hfZW50cnkgdWJ4X3BhcnNlX2R0W10gPSB7Ci0JVUJYX0RJU1BBVENIKE5BViwgUE9TTExILCBfdWJ4X21zZ19wYXJzZV9uYXZfcG9zbGxoKSwKLQlVQlhfRElTUEFUQ0goQUlELCBJTkksIF91YnhfbXNnX3BhcnNlX2FpZF9pbmkpLAotCVVCWF9ESVNQQVRDSChBSUQsIEhVSSwgX3VieF9tc2dfcGFyc2VfYWlkX2h1aSksCi0JVUJYX0RJU1BBVENIKEFJRCwgQUxNLCBfdWJ4X21zZ19wYXJzZV9haWRfYWxtKSwKLQlVQlhfRElTUEFUQ0goQUlELCBFUEgsIF91YnhfbXNnX3BhcnNlX2FpZF9lcGgpLAotfTsKLQpkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvdWJ4LXBhcnNlLmggYi9ycmxwLWVwaGVtZXJpcy91YngtcGFyc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIxNDc1ZC4uMDAwMDAwMAotLS0gYS9ycmxwLWVwaGVtZXJpcy91YngtcGFyc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiB1YngtcGFyc2UuaAotICoKLSAqIEhlYWRlciBmb3IgcGFyc2luZyBjb2RlIGNvbnZlcnRpbmcgVUJYIG1lc3NhZ2VzIHRvIEdQUyBhc3Npc3QgZGF0YQotICoKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgIFN5bHZhaW4gTXVuYXV0IDx0bnRAMjQ2dE50LmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotICovCi0KLSNpZm5kZWYgX19VQlhfUEFSU0VfSF9fCi0jZGVmaW5lIF9fVUJYX1BBUlNFX0hfXwotCi0KLSNpbmNsdWRlICJncHMuaCIKLSNpbmNsdWRlICJ1YnguaCIKLQotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLQotLyogRGlzcGF0Y2ggdGFibGUgKi8KLWV4dGVybiBzdHJ1Y3QgdWJ4X2Rpc3BhdGNoX2VudHJ5IHVieF9wYXJzZV9kdFtdOwotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX1VCWF9QQVJTRV9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvdWJ4LmMgYi9ycmxwLWVwaGVtZXJpcy91YnguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkZDFmMC4uMDAwMDAwMAotLS0gYS9ycmxwLWVwaGVtZXJpcy91YnguYworKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiB1YnguYwotICoKLSAqIEltcGxlbWVudGF0aW9uIG9mIGdlbmVyaWMgVUJYIGhlbHBlcnMKLSAqCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5ICBTeWx2YWluIE11bmF1dCA8dG50QDI0NnROdC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotI2luY2x1ZGUgInVieC5oIgotCi0KLXN0YXRpYyB2b2lkCi11YnhfY2hlY2tzdW0odWludDhfdCAqZGF0YSwgaW50IGxlbiwgdWludDhfdCAqY2tzdW0pCi17Ci0JaW50IGk7Ci0JdWludDhfdCBjazAgPSAwLCBjazEgPSAwOwotCWZvciAoaT0wOyBpPGxlbjsgaSsrKSB7Ci0JCWNrMCArPSBkYXRhW2ldOwotCQljazEgKz0gY2swOwotCX0KLQlja3N1bVswXSA9IGNrMDsKLQlja3N1bVsxXSA9IGNrMTsKLX0KLQotCi1zdGF0aWMgdWJ4X21zZ19oYW5kbGVyX3QKLXVieF9maW5kX2hhbmRsZXIoc3RydWN0IHVieF9kaXNwYXRjaF9lbnRyeSAqZHQsIHVpbnQ4X3QgbXNnX2NsYXNzLCB1aW50OF90IG1zZ19pZCkKLXsKLQl3aGlsZSAoZHQtPmhhbmRsZXIpIHsKLQkJaWYgKChkdC0+bXNnX2NsYXNzID09IG1zZ19jbGFzcykgJiYgKGR0LT5tc2dfaWQgPT0gbXNnX2lkKSkKLQkJCXJldHVybiBkdC0+aGFuZGxlcjsKLQkJZHQrKzsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLQotaW50Ci11YnhfbXNnX2Rpc3BhdGNoKHN0cnVjdCB1YnhfZGlzcGF0Y2hfZW50cnkgKmR0LAotICAgICAgICAgICAgICAgICB2b2lkICptc2csIGludCBsZW4sIHZvaWQgKnVzZXJkYXRhKQotewotCXN0cnVjdCB1YnhfaGRyICpoZHIgPSBtc2c7Ci0JdWludDhfdCBja3N1bVsyXSwgKmNrc3VtX3B0cjsKLQl1YnhfbXNnX2hhbmRsZXJfdCBoOwotCi0JaWYgKChoZHItPnN5bmNbMF0gIT0gVUJYX1NZTkMwKSB8fCAoaGRyLT5zeW5jWzFdICE9IFVCWF9TWU5DMSkpIHsKLQkJZnByaW50ZihzdGRlcnIsICJbIV0gSW52YWxpZCBzeW5jIGJ5dGVzXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXVieF9jaGVja3N1bShtc2cgKyAyLCBzaXplb2Yoc3RydWN0IHVieF9oZHIpICsgaGRyLT5wYXlsb2FkX2xlbiAtIDIsIGNrc3VtKTsKLQlja3N1bV9wdHIgPSBtc2cgKyAoc2l6ZW9mKHN0cnVjdCB1YnhfaGRyKSArIGhkci0+cGF5bG9hZF9sZW4pOwotCWlmICgoY2tzdW1fcHRyWzBdICE9IGNrc3VtWzBdKSB8fCAoY2tzdW1fcHRyWzFdICE9IGNrc3VtWzFdKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIlshXSBJbnZhbGlkIGNoZWNrc3VtXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWggPSB1YnhfZmluZF9oYW5kbGVyKGR0LCBoZHItPm1zZ19jbGFzcywgaGRyLT5tc2dfaWQpOwotCWlmIChoKQotCQloKGhkciwgbXNnICsgc2l6ZW9mKHN0cnVjdCB1YnhfaGRyKSwgaGRyLT5wYXlsb2FkX2xlbiwgdXNlcmRhdGEpOwotCi0JcmV0dXJuIHNpemVvZihzdHJ1Y3QgdWJ4X2hkcikgKyBoZHItPnBheWxvYWRfbGVuICsgMjsKLX0KLQpkaWZmIC0tZ2l0IGEvcnJscC1lcGhlbWVyaXMvdWJ4LmggYi9ycmxwLWVwaGVtZXJpcy91YnguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI2NDM4Ni4uMDAwMDAwMAotLS0gYS9ycmxwLWVwaGVtZXJpcy91YnguaAorKysgL2Rldi9udWxsCkBAIC0xLDIzMiArMCwwIEBACi0vKgotICogdWJ4LmgKLSAqCi0gKiBIZWFkZXIgZm9yIFVCWCByZWxhdGVkIHN0dWZmCi0gKgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSAgU3lsdmFpbiBNdW5hdXQgPHRudEAyNDZ0TnQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0gKi8KLQotI2lmbmRlZiBfX1VCWF9IX18KLSNkZWZpbmUgX19VQlhfSF9fCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0vKiBDb25zdGFudHMgdXNlZCBpbiBVQlggKi8KLQotCS8qIFN5bmMgYnl0ZXMgKHR3byBmaXJzdCBieXRlcyBvZiBlYWNoIG1lc3NhZ2UpICovCi0jZGVmaW5lIFVCWF9TWU5DMAkJMHhiNQotI2RlZmluZSBVQlhfU1lOQzEJCTB4NjIKLQotCS8qIFVCWCBtZXNzYWdlcyBjbGFzc2VzICovCi0jZGVmaW5lIFVCWF9DTEFTU19OQVYJCTB4MDEKLSNkZWZpbmUgVUJYX0NMQVNTX1JYTQkJMHgwMgotI2RlZmluZSBVQlhfQ0xBU1NfSU5GCQkweDA0Ci0jZGVmaW5lIFVCWF9DTEFTU19BQ0sJCTB4MDUKLSNkZWZpbmUgVUJYX0NMQVNTX0NGRwkJMHgwNgotI2RlZmluZSBVQlhfQ0xBU1NfVVBECQkweDA5Ci0jZGVmaW5lIFVCWF9DTEFTU19NT04JCTB4MGEKLSNkZWZpbmUgVUJYX0NMQVNTX0FJRAkJMHgwYgotI2RlZmluZSBVQlhfQ0xBU1NfVElNCQkweDBkCi0KLQkvKiBVQlggbWVzc2FnZXMgdHlwZSBJRCAoYnkgY2xhc3MpICovCi0jZGVmaW5lIFVCWF9OQVZfUE9TRUNFRgkJMHgwMQotI2RlZmluZSBVQlhfTkFWX1BPU0xMSAkJMHgwMgotI2RlZmluZSBVQlhfTkFWX1NUQVRVUwkJMHgwMwotI2RlZmluZSBVQlhfTkFWX0RPUAkJMHgwNAotI2RlZmluZSBVQlhfTkFWX1NPTAkJMHgwNgotI2RlZmluZSBVQlhfTkFWX1BPU1VUTQkJMHgwOAotI2RlZmluZSBVQlhfTkFWX1ZFTEVDRUYJCTB4MTEKLSNkZWZpbmUgVUJYX05BVl9WRUxORUQJCTB4MTIKLSNkZWZpbmUgVUJYX05BVl9USU1FR1BTCQkweDIwCi0jZGVmaW5lIFVCWF9OQVZfVElNRVVUQwkJMHgyMQotI2RlZmluZSBVQlhfTkFWX0NMT0NLCQkweDIyCi0jZGVmaW5lIFVCWF9OQVZfU1ZJTkZPCQkweDMwCi0jZGVmaW5lIFVCWF9OQVZfREdQUwkJMHgzMQotI2RlZmluZSBVQlhfTkFWX1NCQVMJCTB4MzIKLSNkZWZpbmUgVUJYX05BVl9FS0ZTVEFUVVMJMHg0MAotCi0jZGVmaW5lIFVCWF9SWE1fUkFXCQkweDEwCi0jZGVmaW5lIFVCWF9SWE1fU0ZSQgkJMHgxMQotI2RlZmluZSBVQlhfUlhNX1NWU0kJCTB4MjAKLSNkZWZpbmUgVUJYX1JYTV9TVlNJX0dQUwkweDIwCi0jZGVmaW5lIFVCWF9SWE1fQUxNCQkweDMwCi0jZGVmaW5lIFVCWF9SWE1fRVBICQkweDMxCi0jZGVmaW5lIFVCWF9SWE1fUE9TUkVRCQkweDQwCi0KLSNkZWZpbmUgVUJYX0lORl9FUlJPUgkJMHgwMAotI2RlZmluZSBVQlhfSU5GX1dBUk5JTkcJCTB4MDEKLSNkZWZpbmUgVUJYX0lORl9OT1RJQ0UJCTB4MDIKLSNkZWZpbmUgVUJYX0lORl9URVNUCQkweDAzCi0jZGVmaW5lIFVCWF9JTkZfREVCVUcJCTB4MDQKLSNkZWZpbmUgVUJYX0lORl9VU0VSCQkweDA3Ci0KLSNkZWZpbmUgVUJYX0FDS19OQUsJCTB4MDAKLSNkZWZpbmUgVUJYX0FDS19BQ0sJCTB4MDEKLQotI2RlZmluZSBVQlhfQ0ZHX1BSVAkJMHgwMAotI2RlZmluZSBVQlhfQ0ZHX1VTQgkJMHgxYgotI2RlZmluZSBVQlhfQ0ZHX01TRwkJMHgwMQotI2RlZmluZSBVQlhfQ0ZHX05NRUEJCTB4MTcKLSNkZWZpbmUgVUJYX0NGR19SQVRFCQkweDA4Ci0jZGVmaW5lIFVCWF9DRkdfQ0ZHCQkweDA5Ci0jZGVmaW5lIFVCWF9DRkdfVFAJCTB4MDcKLSNkZWZpbmUgVUJYX0NGR19OQVYyCQkweDFhCi0jZGVmaW5lIFVCWF9DRkdfREFUCQkweDA2Ci0jZGVmaW5lIFVCWF9DRkdfSU5GCQkweDAyCi0jZGVmaW5lIFVCWF9DRkdfUlNUCQkweDA0Ci0jZGVmaW5lIFVCWF9DRkdfUlhNCQkweDExCi0jZGVmaW5lIFVCWF9DRkdfQU5UCQkweDEzCi0jZGVmaW5lIFVCWF9DRkdfRlhOCQkweDBlCi0jZGVmaW5lIFVCWF9DRkdfU0JBUwkJMHgxNgotI2RlZmluZSBVQlhfQ0ZHX0xJQwkJMHg4MAotI2RlZmluZSBVQlhfQ0ZHX1RNCQkweDEwCi0jZGVmaW5lIFVCWF9DRkdfVE0yCQkweDE5Ci0jZGVmaW5lIFVCWF9DRkdfVE1PREUJCTB4MWQKLSNkZWZpbmUgVUJYX0NGR19FS0YJCTB4MTIKLQotI2RlZmluZSBVQlhfVVBEX0RPV05MCQkweDAxCi0jZGVmaW5lIFVCWF9VUERfVVBMT0FECQkweDAyCi0jZGVmaW5lIFVCWF9VUERfRVhFQwkJMHgwMwotI2RlZmluZSBVQlhfVVBEX01FTUNQWQkJMHgwNAotCi0jZGVmaW5lIFVCWF9NT05fU0NIRAkJMHgwMQotI2RlZmluZSBVQlhfTU9OX0lPCQkweDAyCi0jZGVmaW5lIFVCWF9NT05fSVBDCQkweDAzCi0jZGVmaW5lIFVCWF9NT05fVkVSCQkweDA0Ci0jZGVmaW5lIFVCWF9NT05fRVhDRVBUCQkweDA1Ci0jZGVmaW5lIFVCWF9NT05fTVNHUFAJCTB4MDYKLSNkZWZpbmUgVUJYX01PTl9SWEJVRgkJMHgwNwotI2RlZmluZSBVQlhfTU9OX1RYQlVGCQkweDA4Ci0jZGVmaW5lIFVCWF9NT05fSFcJCTB4MDkKLSNkZWZpbmUgVUJYX01PTl9VU0IJCTB4MGEKLQotI2RlZmluZSBVQlhfQUlEX1JFUQkJMHgwMAotI2RlZmluZSBVQlhfQUlEX0lOSQkJMHgwMQotI2RlZmluZSBVQlhfQUlEX0hVSQkJMHgwMgotI2RlZmluZSBVQlhfQUlEX0RBVEEJCTB4MTAKLSNkZWZpbmUgVUJYX0FJRF9BTE0JCTB4MzAKLSNkZWZpbmUgVUJYX0FJRF9FUEgJCTB4MzEKLQotI2RlZmluZSBVQlhfVElNX1RQCQkweDAxCi0jZGVmaW5lIFVCWF9USU1fVE0JCTB4MDIKLSNkZWZpbmUgVUJYX1RJTV9UTTIJCTB4MDMKLSNkZWZpbmUgVUJYX1RJTV9TVklOCQkweDA0Ci0KLQotLyogSGVhZGVyICovCi1zdHJ1Y3QgdWJ4X2hkciB7Ci0gICAgICAgIHVpbnQ4X3QgIHN5bmNbMl07Ci0gICAgICAgIHVpbnQ4X3QgIG1zZ19jbGFzczsKLSAgICAgICAgdWludDhfdCAgbXNnX2lkOwotICAgICAgICB1aW50MTZfdCBwYXlsb2FkX2xlbjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLQotLyogUGF5bG9hZCBmb3JtYXRzIChzb21lIG9mIHRoZW0pICovCi1zdHJ1Y3QgdWJ4X25hdl9wb3NsbGggewotCXVpbnQzMl90IGl0b3c7Ci0JaW50MzJfdCAgbG9uOwkvKiBzY2FsaW5nIDFlLTcgKi8KLQlpbnQzMl90ICBsYXQ7CS8qIHNjYWxpbmcgMWUtNyAqLwotCWludDMyX3QgIGhlaWdodDsvKiBtbSAqLwotCWludDMyX3QgIGhzbDsJLyogbW0gKi8KLQl1aW50MzJfdCBoYWNjOwkvKiBtbSAqLwotCXVpbnQzMl90IHZhY2M7CS8qIG1tICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3QgdWJ4X2FpZF9pbmkgewotCWludDMyX3QgIHg7Ci0JaW50MzJfdCAgeTsKLQlpbnQzMl90ICB6OwotCXVpbnQzMl90IHBvc2FjYzsKLQl1aW50MTZfdCB0bV9jZmc7Ci0JdWludDE2X3Qgd247Ci0JdWludDMyX3QgdG93OwotCWludDMyX3QgIHRvd19uczsKLQl1aW50MzJfdCB0YWNjX21zOwotCXVpbnQzMl90IHRhY2NfbnM7Ci0JaW50MzJfdCAgY2xrZDsKLQl1aW50MzJfdCBjbGtkYWNjOwotCXVpbnQzMl90IGZsYWdzOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RydWN0IHVieF9haWRfaHVpIHsKLQl1aW50MzJfdCBoZWFsdGg7Ci0JZG91YmxlICAgdXRjX2ExOwotCWRvdWJsZSAgIHV0Y19hMDsKLQlpbnQzMl90ICB1dGNfdG90OwotCWludDE2X3QgIHV0Y193bnQ7Ci0JaW50MTZfdCAgdXRjX2xzOwotCWludDE2X3QgIHV0Y193bmY7Ci0JaW50MTZfdCAgdXRjX2RuOwotCWludDE2X3QgIHV0Y19sc2Y7Ci0JaW50MTZfdCAgdXRjX3NwYXJlOwotCWZsb2F0ICAgIGtsb2JfYTA7Ci0JZmxvYXQgICAga2xvYl9hMTsKLQlmbG9hdCAgICBrbG9iX2EyOwotCWZsb2F0ICAgIGtsb2JfYTM7Ci0JZmxvYXQgICAga2xvYl9iMDsKLQlmbG9hdCAgICBrbG9iX2IxOwotCWZsb2F0ICAgIGtsb2JfYjI7Ci0JZmxvYXQgICAga2xvYl9iMzsKLQl1aW50MzJfdCBmbGFnczsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCB1YnhfYWlkX2FsbSB7Ci0JdWludDMyX3Qgc3ZfaWQ7Ci0JdWludDMyX3QgZ3BzX3dlZWs7Ci0JdWludDMyX3QgYWxtX3dvcmRzWzhdOwkvKiBQcmVzZW50IG9ubHkgaWYgJ2dwc193ZWVrJyAhPSAwICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3QgdWJ4X2FpZF9lcGggewotCXVpbnQzMl90IHN2X2lkOwotCXVpbnQzMl90IHByZXNlbnQ7Ci0JdWludDMyX3QgZXBoX3dvcmRzWzI0XTsJLyogUHJlc2VudCBvbmx5IGlmICdwcmVzZW50JyAhPSAwICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi0KLS8qIE1lc3NhZ2UgaGFuZGxlciAqLwotdHlwZWRlZiB2b2lkICgqdWJ4X21zZ19oYW5kbGVyX3QpKAotCXN0cnVjdCB1YnhfaGRyICpoZHIsIHZvaWQgKnBheWxvYWQsIGludCBwYXlsb2FkX2xlbiwgdm9pZCAqdXNlcmRhdGEpOwotCi1zdHJ1Y3QgdWJ4X2Rpc3BhdGNoX2VudHJ5IHsKLQl1aW50OF90IG1zZ19jbGFzczsKLQl1aW50OF90IG1zZ19pZDsKLQl1YnhfbXNnX2hhbmRsZXJfdCBoYW5kbGVyOwotfTsKLQotI2RlZmluZSBVQlhfRElTUEFUQ0goa2xzLGlkLGhkbCkgewkJXAotCS5tc2dfY2xhc3MgPSBVQlhfQ0xBU1NfICMjIGtscyAsCVwKLQkubXNnX2lkID0gVUJYXyAjIyBrbHMgIyMgXyAjIyBpZCwJXAotCS5oYW5kbGVyID0gKGhkbCksCQkJXAotfQotCi0KLS8qIE1ldGhvZHMgKi8KLWludCB1YnhfbXNnX2Rpc3BhdGNoKHN0cnVjdCB1YnhfZGlzcGF0Y2hfZW50cnkgKmR0LAotICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbXNnLCBpbnQgbGVuLCB2b2lkICp1c2VyZGF0YSk7Ci0KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIF9fVUJYX0hfXyAqLwotCg==