ZGlmZiAtLWdpdCBhL3JybHAtZXBoZW1lcmlzL2FzbjEvTUFQLU1TLURhdGFUeXBlcy5hc24gYi9ycmxwLWVwaGVtZXJpcy9hc24xL01BUC1NUy1EYXRhVHlwZXMuYXNuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMTJhMDIKLS0tIC9kZXYvbnVsbAorKysgYi9ycmxwLWVwaGVtZXJpcy9hc24xL01BUC1NUy1EYXRhVHlwZXMuYXNuCkBAIC0wLDAgKzEsMjc4MCBAQAorLS0gJElkOiBNQVAtTVMtRGF0YVR5cGVzLmFzbiAyODE0OSAyMDA5LTA0LTI1IDE3OjQ1OjM0WiBldHhyYWIgJAorLS0gM0dQUCBUUyAyOS4wMDIgVjguOS4wICgyMDA5LTA0KSAKKy0tIDE3LjcuMQlNb2JpbGUgU2VydmljZSBkYXRhIHR5cGVzCisKK01BUC1NUy1EYXRhVHlwZXMgeworICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKKyAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtTVMtRGF0YVR5cGVzICgxMSkgdmVyc2lvbjExICgxMSl9CisKK0RFRklOSVRJT05TCisKK0lNUExJQ0lUIFRBR1MKKworOjo9CisKK0JFR0lOCisKK0VYUE9SVFMKKworCS0tIGxvY2F0aW9uIHJlZ2lzdHJhdGlvbiB0eXBlcworCVVwZGF0ZUxvY2F0aW9uQXJnLAorCVVwZGF0ZUxvY2F0aW9uUmVzLAorCUNhbmNlbExvY2F0aW9uQXJnLAorCUNhbmNlbExvY2F0aW9uUmVzLCAKKwlQdXJnZU1TLUFyZywgCisJUHVyZ2VNUy1SZXMsCisJU2VuZElkZW50aWZpY2F0aW9uQXJnLAorCVNlbmRJZGVudGlmaWNhdGlvblJlcywgCisJVXBkYXRlR3Byc0xvY2F0aW9uQXJnLAorCVVwZGF0ZUdwcnNMb2NhdGlvblJlcywKKwlJU1QtU3VwcG9ydEluZGljYXRvciwgCisJU3VwcG9ydGVkTENTLUNhcGFiaWxpdHlTZXRzLAorCisJLS0gZ3BycyBsb2NhdGlvbiByZWdpc3RyYXRpb24gdHlwZXMKKwlHU04tQWRkcmVzcywKKworCS0tIGhhbmRvdmVyIHR5cGVzCisJRm9yd2FyZEFjY2Vzc1NpZ25hbGxpbmctQXJnLAorCVByZXBhcmVITy1BcmcsCisJUHJlcGFyZUhPLVJlcywKKwlQcmVwYXJlU3Vic2VxdWVudEhPLUFyZywgCisJUHJlcGFyZVN1YnNlcXVlbnRITy1SZXMsCisJUHJvY2Vzc0FjY2Vzc1NpZ25hbGxpbmctQXJnLAorCVNlbmRFbmRTaWduYWwtQXJnLAorCVNlbmRFbmRTaWduYWwtUmVzLAorCisJLS0gYXV0aGVudGljYXRpb24gbWFuYWdlbWVudCB0eXBlcworCVNlbmRBdXRoZW50aWNhdGlvbkluZm9BcmcsCisJU2VuZEF1dGhlbnRpY2F0aW9uSW5mb1JlcywgCisJQXV0aGVudGljYXRpb25GYWlsdXJlUmVwb3J0QXJnLAorQXV0aGVudGljYXRpb25GYWlsdXJlUmVwb3J0UmVzLAorCisJLS0gc2VjdXJpdHkgbWFuYWdlbWVudCB0eXBlcworCUtjLCAKKwlDa3NuLAorCisJLS0gZXF1aXBtZW50IG1hbmFnZW1lbnQgdHlwZXMKKwlDaGVja0lNRUktQXJnLAorCUNoZWNrSU1FSS1SZXMsCisKKwktLSBzdWJzY3JpYmVyIG1hbmFnZW1lbnQgdHlwZXMKKwlJbnNlcnRTdWJzY3JpYmVyRGF0YUFyZywKKwlJbnNlcnRTdWJzY3JpYmVyRGF0YVJlcywgCisJTFNBSWRlbnRpdHksCisJRGVsZXRlU3Vic2NyaWJlckRhdGFBcmcsCisJRGVsZXRlU3Vic2NyaWJlckRhdGFSZXMsCisJRXh0LVFvUy1TdWJzY3JpYmVkLAorCUV4dDItUW9TLVN1YnNjcmliZWQsIAorCUV4dDMtUW9TLVN1YnNjcmliZWQsCisJU3Vic2NyaWJlckRhdGEsCisJT0RCLURhdGEsCisJU3Vic2NyaWJlclN0YXR1cywKKwlab25lQ29kZUxpc3QsCisJbWF4TnVtT2Zab25lQ29kZXMsIAorCU8tQ1NJLCAKK0QtQ1NJLAorCU8tQmNzbUNhbWVsVERQQ3JpdGVyaWFMaXN0LCAKKwlULUJDU00tQ0FNRUwtVERQLUNyaXRlcmlhTGlzdCwKKwlTUy1DU0ksCisJU2VydmljZUtleSwKKwlEZWZhdWx0Q2FsbEhhbmRsaW5nLAorCUNhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nLAorCUJhc2ljU2VydmljZUNyaXRlcmlhLAorCVN1cHBvcnRlZENhbWVsUGhhc2VzLAorCU9mZmVyZWRDYW1lbDRDU0lzLAorCU9mZmVyZWRDYW1lbDRGdW5jdGlvbmFsaXRpZXMsCisJbWF4TnVtT2ZDYW1lbFREUERhdGEsCisJQ1VHLUluZGV4LCAKKwlDVUctSW5mbywKKwlDVUctSW50ZXJsb2NrLAorCUludGVyQ1VHLVJlc3RyaWN0aW9ucywKKwlJbnRyYUNVRy1PcHRpb25zLAorCU5vdGlmaWNhdGlvblRvTVNVc2VyLCAKKwlRb1MtU3Vic2NyaWJlZCwKK0lTVC1BbGVydFRpbWVyVmFsdWUsCisJVC1DU0ksCisJVC1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50LAorQVBOLAorQWRkaXRpb25hbEluZm8sCisKKwktLSBmYXVsdCByZWNvdmVyeSB0eXBlcworCVJlc2V0QXJnLAorCVJlc3RvcmVEYXRhQXJnLAorCVJlc3RvcmVEYXRhUmVzLAorCistLSBwcm92aWRlIHN1YnNjcmliZXIgaW5mbyB0eXBlcyAKK0dlb2dyYXBoaWNhbEluZm9ybWF0aW9uLCAKK01TLUNsYXNzbWFyazIsCitHUFJTTVNDbGFzcywKKworCS0tIHN1YnNjcmliZXIgaW5mb3JtYXRpb24gZW5xdWlyeSB0eXBlcworCVByb3ZpZGVTdWJzY3JpYmVySW5mb0FyZywKKwlQcm92aWRlU3Vic2NyaWJlckluZm9SZXMsCisJU3Vic2NyaWJlckluZm8sCisJTG9jYXRpb25JbmZvcm1hdGlvbiwKKwlMb2NhdGlvbkluZm9ybWF0aW9uR1BSUywKKwlSQUlkZW50aXR5LAorCVN1YnNjcmliZXJTdGF0ZSwKKwlHUFJTQ2hhcmdpbmdJRCwgCitNTlBJbmZvUmVzLAorCVJvdXRlaW5nTnVtYmVyLAorCisJLS0gYW55IHRpbWUgaW5mb3JtYXRpb24gZW5xdWlyeSB0eXBlcworCUFueVRpbWVJbnRlcnJvZ2F0aW9uQXJnLAorCUFueVRpbWVJbnRlcnJvZ2F0aW9uUmVzLAorCisJLS0gYW55IHRpbWUgaW5mb3JtYXRpb24gaGFuZGxpbmcgdHlwZXMKKwlBbnlUaW1lU3Vic2NyaXB0aW9uSW50ZXJyb2dhdGlvbkFyZywKKwlBbnlUaW1lU3Vic2NyaXB0aW9uSW50ZXJyb2dhdGlvblJlcywKKwlBbnlUaW1lTW9kaWZpY2F0aW9uQXJnLAorCUFueVRpbWVNb2RpZmljYXRpb25SZXMsCisKKwktLSBzdWJzY3JpYmVyIGRhdGEgbW9kaWZpY2F0aW9uIG5vdGlmaWNhdGlvbiB0eXBlcworCU5vdGVTdWJzY3JpYmVyRGF0YU1vZGlmaWVkQXJnLAorCU5vdGVTdWJzY3JpYmVyRGF0YU1vZGlmaWVkUmVzLAorCisJLS0gZ3BycyBsb2NhdGlvbiBpbmZvcm1hdGlvbiByZXRyaWV2YWwgdHlwZXMKKwlTZW5kUm91dGluZ0luZm9Gb3JHcHJzQXJnLAorCVNlbmRSb3V0aW5nSW5mb0ZvckdwcnNSZXMsCisKKwktLSBmYWlsdXJlIHJlcG9ydGluZyB0eXBlcworCUZhaWx1cmVSZXBvcnRBcmcsCisJRmFpbHVyZVJlcG9ydFJlcywKKworCS0tIGdwcnMgbm90aWZpY2F0aW9uIHR5cGVzCisJTm90ZU1zUHJlc2VudEZvckdwcnNBcmcsCisJTm90ZU1zUHJlc2VudEZvckdwcnNSZXMsCisKKwktLSBNb2JpbGl0eSBNYW5hZ2VtZW50IHR5cGVzCitOb3RlTU0tRXZlbnRBcmcsCisJTm90ZU1NLUV2ZW50UmVzLAorCU51bWJlclBvcnRhYmlsaXR5U3RhdHVzLAorCVBhZ2luZ0FyZWEsCisKKwktLSBWR0NTIC8gVkJTIHR5cGVzIHR5cGVzCitHcm91cElkLCAKK0xvbmctR3JvdXBJZCwKK0FkZGl0aW9uYWxTdWJzY3JpcHRpb25zCisKKzsKKworSU1QT1JUUworCW1heE51bU9mU1MsCisJU1MtU3Vic2NyaXB0aW9uT3B0aW9uLAorCVNTLUxpc3QsCisJU1MtRm9yQlMtQ29kZSwKKwlQYXNzd29yZAorRlJPTSBNQVAtU1MtRGF0YVR5cGVzIHsKKyAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCisgICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLVNTLURhdGFUeXBlcyAoMTQpIHZlcnNpb24xMSAoMTEpfQorCisJU1MtQ29kZQorRlJPTSBNQVAtU1MtQ29kZSB7CisgICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQorICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1TUy1Db2RlICgxNSkgdmVyc2lvbjExICgxMSl9CisKKwlFeHQtQmVhcmVyU2VydmljZUNvZGUKK0ZST00gTUFQLUJTLUNvZGUgeworICAgaXR1LXQgaWRlbnRpZmllZC1vcmdhbml6YXRpb24gKDQpIGV0c2kgKDApIG1vYmlsZURvbWFpbiAoMCkKKyAgIGdzbS1OZXR3b3JrICgxKSBtb2R1bGVzICgzKSBtYXAtQlMtQ29kZSAoMjApIHZlcnNpb24xMSAoMTEpfQorCisJRXh0LVRlbGVzZXJ2aWNlQ29kZQorRlJPTSBNQVAtVFMtQ29kZSB7CisgICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQorICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1UUy1Db2RlICgxOSkgdmVyc2lvbjExICgxMSl9CisKKwlBZGRyZXNzU3RyaW5nLAorSVNETi1BZGRyZXNzU3RyaW5nLCAKKwlJU0ROLVN1YmFkZHJlc3NTdHJpbmcsIAorCUZUTi1BZGRyZXNzU3RyaW5nLAorCUFjY2Vzc05ldHdvcmtTaWduYWxJbmZvLAorCUlNU0ksIAorCUlNRUksCisJVE1TSSwKKwlITFItTGlzdCwKKwlMTVNJLAorCUlkZW50aXR5LAorCUdsb2JhbENlbGxJZCwKKwlDZWxsR2xvYmFsSWRPclNlcnZpY2VBcmVhSWRPckxBSSwKKwlFeHQtQmFzaWNTZXJ2aWNlQ29kZSwKKwlOQUVBLVByZWZlcnJlZENJLAorCUVNTFBQLUluZm8sIAorCU1DLVNTLUluZm8sCisJU3Vic2NyaWJlcklkZW50aXR5LAorCUFnZU9mTG9jYXRpb25JbmZvcm1hdGlvbiwKKwlMQ1NDbGllbnRFeHRlcm5hbElELAorCUxDU0NsaWVudEludGVybmFsSUQsCisJRXh0LVNTLVN0YXR1cywKKwlMQ1NTZXJ2aWNlVHlwZUlELAorCUFTQ0ktQ2FsbFJlZmVyZW5jZSwKKwlUQkNELVNUUklORywKKwlMQUlGaXhlZExlbmd0aCwKKwlQTE1OLUlkLAorRU1MUFAtUHJpb3JpdHkKK0ZST00gTUFQLUNvbW1vbkRhdGFUeXBlcyB7CisgICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQorICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1Db21tb25EYXRhVHlwZXMgKDE4KSB2ZXJzaW9uMTEgKDExKX0KKworCUV4dGVuc2lvbkNvbnRhaW5lcgorRlJPTSBNQVAtRXh0ZW5zaW9uRGF0YVR5cGVzIHsKKyAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCisgICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUV4dGVuc2lvbkRhdGFUeXBlcyAoMjEpIHZlcnNpb24xMSAoMTEpfQorCisJQWJzZW50U3Vic2NyaWJlckRpYWdub3N0aWNTTQorRlJPTSBNQVAtRVItRGF0YVR5cGVzIHsKKyAgIGl0dS10IGlkZW50aWZpZWQtb3JnYW5pemF0aW9uICg0KSBldHNpICgwKSBtb2JpbGVEb21haW4gKDApCisgICBnc20tTmV0d29yayAoMSkgbW9kdWxlcyAoMykgbWFwLUVSLURhdGFUeXBlcyAoMTcpIHZlcnNpb24xMSAoMTEpfQorCisJVHJhY2VQcm9wYWdhdGlvbkxpc3QKK0ZST00gTUFQLU9NLURhdGFUeXBlcyB7CisgICBpdHUtdCBpZGVudGlmaWVkLW9yZ2FuaXphdGlvbiAoNCkgZXRzaSAoMCkgbW9iaWxlRG9tYWluICgwKQorICAgZ3NtLU5ldHdvcmsgKDEpIG1vZHVsZXMgKDMpIG1hcC1PTS1EYXRhVHlwZXMgKDEyKSB2ZXJzaW9uMTEgKDExKX0KKworOworCistLSBsb2NhdGlvbiByZWdpc3RyYXRpb24gdHlwZXMKKworVXBkYXRlTG9jYXRpb25BcmcgOjo9IFNFUVVFTkNFIHsKKwlpbXNpCQkJSU1TSSwKKwltc2MtTnVtYmVyCVsxXSBJU0ROLUFkZHJlc3NTdHJpbmcsCisJdmxyLU51bWJlcglJU0ROLUFkZHJlc3NTdHJpbmcsCisJbG1zaQkJCVsxMF0gTE1TSQkJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4gLAorCXZsci1DYXBhYmlsaXR5CVs2XSBWTFItQ2FwYWJpbGl0eQlPUFRJT05BTCwKKwlpbmZvcm1QcmV2aW91c05ldHdvcmtFbnRpdHkJWzExXQlOVUxMCQlPUFRJT05BTCwKKwljcy1MQ1MtTm90U3VwcG9ydGVkQnlVRQlbMTJdCU5VTEwJCU9QVElPTkFMLAorCXYtZ21sYy1BZGRyZXNzCVsyXQlHU04tQWRkcmVzcwlPUFRJT05BTCwKKwlhZGQtaW5mbwkJWzEzXSBBREQtSW5mbwlPUFRJT05BTCwKKwlwYWdpbmdBcmVhCVsxNF0gUGFnaW5nQXJlYQlPUFRJT05BTCwKKwlza2lwU3Vic2NyaWJlckRhdGFVcGRhdGUJWzE1XSBOVUxMCQlPUFRJT05BTCAKKwktLSBUaGUgc2tpcFN1YnNjcmliZXJEYXRhVXBkYXRlIHBhcmFtZXRlciBpbiB0aGUgVXBkYXRlTG9jYXRpb25BcmcgYW5kIHRoZSBBREQtSW5mbworCS0tIHN0cnVjdHVyZXMgY2FycnkgdGhlIHNhbWUgc2VtYW50aWMuCisJIH0KKworVkxSLUNhcGFiaWxpdHkgOjo9IFNFUVVFTkNFeworCXN1cHBvcnRlZENhbWVsUGhhc2VzICAJWzBdIFN1cHBvcnRlZENhbWVsUGhhc2VzCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uICwKKwlzb2xzYVN1cHBvcnRJbmRpY2F0b3IJWzJdIE5VTEwJCU9QVElPTkFMLAorCWlzdFN1cHBvcnRJbmRpY2F0b3IJWzFdIElTVC1TdXBwb3J0SW5kaWNhdG9yCU9QVElPTkFMLAorCXN1cGVyQ2hhcmdlclN1cHBvcnRlZEluU2VydmluZ05ldHdvcmtFbnRpdHkJWzNdIFN1cGVyQ2hhcmdlckluZm8JT1BUSU9OQUwsCisJbG9uZ0ZUTi1TdXBwb3J0ZWQJWzRdCU5VTEwJCU9QVElPTkFMLAorCXN1cHBvcnRlZExDUy1DYXBhYmlsaXR5U2V0cwlbNV0JU3VwcG9ydGVkTENTLUNhcGFiaWxpdHlTZXRzCU9QVElPTkFMLAorCW9mZmVyZWRDYW1lbDRDU0lzCVs2XSBPZmZlcmVkQ2FtZWw0Q1NJcwlPUFRJT05BTCwKKwlzdXBwb3J0ZWRSQVQtVHlwZXNJbmRpY2F0b3IJWzddCVN1cHBvcnRlZFJBVC1UeXBlcwlPUFRJT05BTCwKKwlsb25nR3JvdXBJRC1TdXBwb3J0ZWQJWzhdCU5VTEwJCU9QVElPTkFMIH0KKworU3VwcG9ydGVkUkFULVR5cGVzOjo9IEJJVCBTVFJJTkcgeworCXV0cmFuICAoMCksCisJZ2VyYW4gICgxKSwKKwlnYW4gICAgKDIpLAorCWktaHNwYS1ldm9sdXRpb24gKDMpLAorCWUtdXRyYW4JKDQpfSAoU0laRSAoMi4uOCkpCisJLS0gZXhjZXB0aW9uIGhhbmRsaW5nOiBiaXRzIDUgdG8gNyBzaGFsbCBiZSBpZ25vcmVkIGlmIHJlY2VpdmVkIGFuZCBub3QgdW5kZXJzdG9vZAorCSAKKworCitTdXBlckNoYXJnZXJJbmZvIDo6PSBDSE9JQ0UgeworCXNlbmRTdWJzY3JpYmVyRGF0YQlbMF0gTlVMTCwKKwlzdWJzY3JpYmVyRGF0YVN0b3JlZAlbMV0gQWdlSW5kaWNhdG9yIH0KKworQWdlSW5kaWNhdG9yIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjYpKQorCS0tIFRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMuCisKK0lTVC1TdXBwb3J0SW5kaWNhdG9yIDo6PSAgRU5VTUVSQVRFRCB7CisJYmFzaWNJU1RTdXBwb3J0ZWQJKDApLAorCWlzdENvbW1hbmRTdXBwb3J0ZWQJKDEpLAorCS4uLn0KKy0tIGV4Y2VwdGlvbiBoYW5kbGluZzoKKy0tIHJlY2VwdGlvbiBvZiB2YWx1ZXMgPiAxIHNoYWxsIGJlIG1hcHBlZCB0byAnIGlzdENvbW1hbmRTdXBwb3J0ZWQgJworCitTdXBwb3J0ZWRMQ1MtQ2FwYWJpbGl0eVNldHMgOjo9IEJJVCBTVFJJTkcgeworCWxjc0NhcGFiaWxpdHlTZXQxICgwKSwKKwlsY3NDYXBhYmlsaXR5U2V0MiAoMSksCisJbGNzQ2FwYWJpbGl0eVNldDMgKDIpLAorCWxjc0NhcGFiaWxpdHlTZXQ0ICgzKSAsCisJbGNzQ2FwYWJpbGl0eVNldDUgKDQpIH0gKFNJWkUgKDIuLjE2KSkgCistLSBDb3JlIG5ldHdvcmsgc2lnbmFsbGluZyBjYXBhYmlsaXR5IHNldDEgaW5kaWNhdGVzIExDUyBSZWxlYXNlOTggb3IgUmVsZWFzZTk5IHZlcnNpb24uCistLSBDb3JlIG5ldHdvcmsgc2lnbmFsbGluZyBjYXBhYmlsaXR5IHNldDIgaW5kaWNhdGVzIExDUyBSZWxlYXNlNC4KKy0tIENvcmUgbmV0d29yayBzaWduYWxsaW5nIGNhcGFiaWxpdHkgc2V0MyBpbmRpY2F0ZXMgTENTIFJlbGVhc2U1LgorLS0gQ29yZSBuZXR3b3JrIHNpZ25hbGxpbmcgY2FwYWJpbGl0eSBzZXQ0IGluZGljYXRlcyBMQ1MgUmVsZWFzZTYuCistLSBDb3JlIG5ldHdvcmsgc2lnbmFsbGluZyBjYXBhYmlsaXR5IHNldDUgaW5kaWNhdGVzIExDUyBSZWxlYXNlNyBvciBsYXRlciB2ZXJzaW9uLgorLS0gQSBub2RlIHNoYWxsIG1hcmsgaW4gdGhlIEJJVCBTVFJJTkcgYWxsIExDUyBjYXBhYmlsaXR5IHNldHMgaXQgc3VwcG9ydHMuIAorLS0gSWYgbm8gYml0IGlzIHNldCB0aGVuIHRoZSBzZW5kaW5nIG5vZGUgZG9lcyBub3Qgc3VwcG9ydCBMQ1MuCistLSBJZiB0aGUgcGFyYW1ldGVyIGlzIG5vdCBzZW50IGJ5IGFuIFZMUiB0aGVuIHRoZSBWTFIgbWF5IHN1cHBvcnQgYXQgbW9zdCBjYXBhYmlsaXR5IHNldDEuCistLSBJZiB0aGUgcGFyYW1ldGVyIGlzIG5vdCBzZW50IGJ5IGFuIFNHU04gdGhlbiBubyBzdXBwb3J0IGZvciBMQ1MgaXMgYXNzdW1lZC4KKy0tIEFuIFNHU04gaXMgbm90IGFsbG93ZWQgdG8gaW5kaWNhdGUgc3VwcG9ydCBvZiBjYXBhYmlsaXR5IHNldDEuCistLSBPdGhlciBiaXRzIHRoYW4gbGlzdGVkIGFib3ZlIHNoYWxsIGJlIGRpc2NhcmRlZC4KKworVXBkYXRlTG9jYXRpb25SZXMgOjo9IFNFUVVFTkNFIHsKKwlobHItTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZywKKwlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiwKKwlhZGQtQ2FwYWJpbGl0eQlOVUxMCQkJT1BUSU9OQUwsCisJcGFnaW5nQXJlYS1DYXBhYmlsaXR5CVswXU5VTEwJCQlPUFRJT05BTCB9CisKK0FERC1JbmZvIDo6PSBTRVFVRU5DRSB7CisJaW1laXN2CQlbMF0gSU1FSSwKKwlza2lwU3Vic2NyaWJlckRhdGFVcGRhdGUJWzFdIE5VTEwJCU9QVElPTkFMLAorCS0tIFRoZSBza2lwU3Vic2NyaWJlckRhdGFVcGRhdGUgcGFyYW1ldGVyIGluIHRoZSBVcGRhdGVMb2NhdGlvbkFyZyBhbmQgdGhlIEFERC1JbmZvCisJLS0gc3RydWN0dXJlcyBjYXJyeSB0aGUgc2FtZSBzZW1hbnRpYy4KKwkuLi59CisKKworUGFnaW5nQXJlYSA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uNSkgT0YgTG9jYXRpb25BcmVhIAorCisKK0xvY2F0aW9uQXJlYSA6Oj0gQ0hPSUNFIHsKKwlsYWlGaXhlZExlbmd0aAlbMF0gTEFJRml4ZWRMZW5ndGgsCisJbGFjCQkJWzFdIExBQ30KKworCitMQUMgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMikpCisJLS0gUmVmZXJzIHRvIExvY2F0aW9uIEFyZWEgQ29kZSBvZiB0aGUgTG9jYXRpb24gQXJlYSBJZGVudGlmaWNhdGlvbiBkZWZpbmVkIGluIAorICAgICAtLSAzR1BQIFRTIDIzLjAwMyBbMTddLgorCS0tIExvY2F0aW9uIEFyZWEgQ29kZSBhY2NvcmRpbmcgdG8gM0dQUCBUUyAyNC4wMDggWzM1XQorCitDYW5jZWxMb2NhdGlvbkFyZyA6Oj0gWzNdIFNFUVVFTkNFIHsKKwlpZGVudGl0eQkJSWRlbnRpdHksCisJY2FuY2VsbGF0aW9uVHlwZQlDYW5jZWxsYXRpb25UeXBlCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uLAorCXR5cGVPZlVwZGF0ZQlbMF0gVHlwZU9mVXBkYXRlCU9QVElPTkFMIH0KKworVHlwZU9mVXBkYXRlIDo6PSBFTlVNRVJBVEVEIHsKKwlzZ3NuLWNoYW5nZSAoMCksCisJbW1lLWNoYW5nZSAoMSksCisJLi4ufQorCS0tIFR5cGVPZlVwZGF0ZSBzaGFsbCBiZSBhYnNlbnQgaWYgQ2FuY2VsbGF0aW9uVHlwZSBpcyBkaWZmZXJlbnQgZnJvbSB1cGRhdGVQcm9jZWR1cmUKKworQ2FuY2VsbGF0aW9uVHlwZSA6Oj0gRU5VTUVSQVRFRCB7CisJdXBkYXRlUHJvY2VkdXJlCSgwKSwKKwlzdWJzY3JpcHRpb25XaXRoZHJhdwkoMSksCisJLi4ufQorCS0tIFRoZSBITFIgc2hhbGwgbm90IHNlbmQgdmFsdWVzIG90aGVyIHRoYW4gbGlzdGVkIGFib3ZlCisKK0NhbmNlbExvY2F0aW9uUmVzIDo6PSBTRVFVRU5DRSB7CisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK1B1cmdlTVMtQXJnIDo6PSBbM10gU0VRVUVOQ0UgeworCWltc2kJCQlJTVNJLAorCXZsci1OdW1iZXIJWzBdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKKwlzZ3NuLU51bWJlcglbMV0JSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4ufQorCitQdXJnZU1TLVJlcyA6Oj0gU0VRVUVOQ0UgeworCWZyZWV6ZVRNU0kJWzBdCU5VTEwJCU9QVElPTkFMLAorCWZyZWV6ZVAtVE1TSQlbMV0JTlVMTAkJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4sCisJZnJlZXplTS1UTVNJCVsyXQlOVUxMCQlPUFRJT05BTCB9CisKK1NlbmRJZGVudGlmaWNhdGlvbkFyZyA6Oj0gU0VRVUVOQ0UgeworCXRtc2kJCQlUTVNJLAorCW51bWJlck9mUmVxdWVzdGVkVmVjdG9ycwlOdW1iZXJPZlJlcXVlc3RlZFZlY3RvcnMgCU9QVElPTkFMLAorCS0tIHdpdGhpbiBhIGRpYWxvZ3VlIG51bWJlck9mUmVxdWVzdGVkVmVjdG9ycyBzaGFsbCBiZSBwcmVzZW50IGluIAorCS0tIHRoZSBmaXJzdCBzZXJ2aWNlIHJlcXVlc3QgYW5kIHNoYWxsIG5vdCBiZSBwcmVzZW50IGluIHN1YnNlcXVlbnQgc2VydmljZSByZXF1ZXN0cy4gCisJLS0gSWYgcmVjZWl2ZWQgaW4gYSBzdWJzZXF1ZW50IHNlcnZpY2UgcmVxdWVzdCBpdCBzaGFsbCBiZSBkaXNjYXJkZWQuIAorCXNlZ21lbnRhdGlvblByb2hpYml0ZWQJTlVMTAkJCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uLAorCW1zYy1OdW1iZXIJSVNETi1BZGRyZXNzU3RyaW5nIAlPUFRJT05BTCwKKwlwcmV2aW91cy1MQUkJWzBdIExBSUZpeGVkTGVuZ3RoCU9QVElPTkFMLAorCWhvcENvdW50ZXIJWzFdIEhvcENvdW50ZXIJT1BUSU9OQUwgfQorCitIb3BDb3VudGVyIDo6PSBJTlRFR0VSICgwLi4zKQorCitTZW5kSWRlbnRpZmljYXRpb25SZXMgOjo9IFszXSBTRVFVRU5DRSB7CisJaW1zaQkJCUlNU0kJCQlPUFRJT05BTCwKKwktLSBJTVNJIHNoYWxsIGJlIHByZXNlbnQgaW4gdGhlIGZpcnN0IChvciBvbmx5KSBzZXJ2aWNlIHJlc3BvbnNlIG9mIGEgZGlhbG9ndWUuCisJLS0gSWYgbXVsdGlwbGUgc2VydmljZSByZXF1ZXN0cyBhcmUgcHJlc2VudCBpbiBhIGRpYWxvZ3VlIHRoZW4gSU1TSQorCS0tIHNoYWxsIG5vdCBiZSBwcmVzZW50IGluIGFueSBzZXJ2aWNlIHJlc3BvbnNlIG90aGVyIHRoYW4gdGhlIGZpcnN0IG9uZS4KKwlhdXRoZW50aWNhdGlvblNldExpc3QJQXV0aGVudGljYXRpb25TZXRMaXN0CU9QVElPTkFMLAorCWN1cnJlbnRTZWN1cml0eUNvbnRleHQJWzJdQ3VycmVudFNlY3VyaXR5Q29udGV4dAlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKKy0tIGF1dGhlbnRpY2F0aW9uIG1hbmFnZW1lbnQgdHlwZXMKKworQXV0aGVudGljYXRpb25TZXRMaXN0IDo6PSBDSE9JQ0UgeworCXRyaXBsZXRMaXN0CVswXSBUcmlwbGV0TGlzdCwKKwlxdWludHVwbGV0TGlzdAlbMV0gUXVpbnR1cGxldExpc3QgfQorCitUcmlwbGV0TGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uNSkgT0YKKwkJCQlBdXRoZW50aWNhdGlvblRyaXBsZXQKKworUXVpbnR1cGxldExpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLjUpIE9GCisJCQkJQXV0aGVudGljYXRpb25RdWludHVwbGV0CisKK0F1dGhlbnRpY2F0aW9uVHJpcGxldCA6Oj0gU0VRVUVOQ0UgeworCXJhbmQJCQlSQU5ELAorCXNyZXMJCQlTUkVTLAorCWtjCQkJS2MsCisJLi4ufQorCitBdXRoZW50aWNhdGlvblF1aW50dXBsZXQgOjo9IFNFUVVFTkNFIHsKKwlyYW5kCQkJUkFORCwKKwl4cmVzCQkJWFJFUywKKwljawkJCUNLLAorCWlrCQkJSUssCisJYXV0bgkJCUFVVE4sCisJLi4ufQorCitDdXJyZW50U2VjdXJpdHlDb250ZXh0IDo6PSBDSE9JQ0UgeworCWdzbS1TZWN1cml0eUNvbnRleHREYXRhCVswXSBHU00tU2VjdXJpdHlDb250ZXh0RGF0YSwKKwl1bXRzLVNlY3VyaXR5Q29udGV4dERhdGEJWzFdIFVNVFMtU2VjdXJpdHlDb250ZXh0RGF0YSB9CisKK0dTTS1TZWN1cml0eUNvbnRleHREYXRhIDo6PSBTRVFVRU5DRSB7CisJa2MJCQlLYywKKwlja3NuCQkJQ2tzbiwKKwkuLi4gfQorCitVTVRTLVNlY3VyaXR5Q29udGV4dERhdGEgOjo9IFNFUVVFTkNFIHsKKwljawkJCUNLLAorCWlrCQkJSUssCisJa3NpCQkJS1NJLAorCS4uLiB9CisKK1JBTkQgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMTYpKQorCitTUkVTIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDQpKQorCitLYyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg4KSkKKworWFJFUyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg0Li4xNikpCisKK0NLIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDE2KSkKKworSUsgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMTYpKQorCitBVVROIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDE2KSkKKworQVVUUyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxNCkpCisKK0Nrc24gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCisJLS0gVGhlIGludGVybmFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIDNHUFAgVFMgMjQuMDA4CisKK0tTSSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKKwktLSBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gM0dQUCBUUyAyNC4wMDgKKworQXV0aGVudGljYXRpb25GYWlsdXJlUmVwb3J0QXJnIDo6PSBTRVFVRU5DRSB7CisJaW1zaQkJCUlNU0ksCisJZmFpbHVyZUNhdXNlCUZhaWx1cmVDYXVzZSwKKwlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiAsCisJcmUtYXR0ZW1wdAlCT09MRUFOCQlPUFRJT05BTCwKKwlhY2Nlc3NUeXBlCUFjY2Vzc1R5cGUJT1BUSU9OQUwsCisJcmFuZAkJCVJBTkQJCQlPUFRJT05BTCwKKwl2bHItTnVtYmVyCVswXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCisJc2dzbi1OdW1iZXIJWzFdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCB9CisKK0FjY2Vzc1R5cGUgOjo9IEVOVU1FUkFURUQgeworCWNhbGwgKDApLAorCWVtZXJnZW5jeUNhbGwgKDEpLAorCWxvY2F0aW9uVXBkYXRpbmcgKDIpLAorCXN1cHBsZW1lbnRhcnlTZXJ2aWNlICgzKSwKKwlzaG9ydE1lc3NhZ2UgKDQpLAorCWdwcnNBdHRhY2ggKDUpLAorCXJvdXRpbmdBcmVhVXBkYXRpbmcgKDYpLAorCXNlcnZpY2VSZXF1ZXN0ICg3KSwKKwlwZHBDb250ZXh0QWN0aXZhdGlvbiAoOCksCisJcGRwQ29udGV4dERlYWN0aXZhdGlvbiAoOSksCisJLi4uLAorCWdwcnNEZXRhY2ggKDEwKX0KKwktLSBleGNlcHRpb24gaGFuZGxpbmc6CisJLS0gcmVjZWl2ZWQgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxMCBzaGFsbCBiZSBpZ25vcmVkLgorCitBdXRoZW50aWNhdGlvbkZhaWx1cmVSZXBvcnRSZXMgOjo9IFNFUVVFTkNFIHsKKwlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLn0KKworRmFpbHVyZUNhdXNlIDo6PSBFTlVNRVJBVEVEIHsKKwl3cm9uZ1VzZXJSZXNwb25zZSAgKDApLAorCXdyb25nTmV0d29ya1NpZ25hdHVyZSAgKDEpfQorCistLSBncHJzIGxvY2F0aW9uIHJlZ2lzdHJhdGlvbiB0eXBlcworCitVcGRhdGVHcHJzTG9jYXRpb25BcmcgOjo9IFNFUVVFTkNFIHsKKwlpbXNpCQkJSU1TSSwKKwlzZ3NuLU51bWJlcglJU0ROLUFkZHJlc3NTdHJpbmcsCQorCXNnc24tQWRkcmVzcwlHU04tQWRkcmVzcywKKwlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiAsCisJc2dzbi1DYXBhYmlsaXR5CVswXSBTR1NOLUNhcGFiaWxpdHkJT1BUSU9OQUwsCisJaW5mb3JtUHJldmlvdXNOZXR3b3JrRW50aXR5CVsxXQlOVUxMCQlPUFRJT05BTCwKKwlwcy1MQ1MtTm90U3VwcG9ydGVkQnlVRQlbMl0JTlVMTAkJT1BUSU9OQUwsCisJdi1nbWxjLUFkZHJlc3MJWzNdCUdTTi1BZGRyZXNzCU9QVElPTkFMLAorCWFkZC1pbmZvCQlbNF0gIEFERC1JbmZvCU9QVElPTkFMLAorCWVwcy1pbmZvCQlbNV0JRVBTLUluZm8JT1BUSU9OQUwsCisJc2VydmluZ05vZGVUeXBlSW5kaWNhdG9yCVs2XQlOVUxMCQlPUFRJT05BTCwKKwlza2lwU3Vic2NyaWJlckRhdGFVcGRhdGUJWzddIE5VTEwJCU9QVElPTkFMLAorCXVzZWRSQVQtVHlwZQlbOF0gVXNlZC1SQVQtVHlwZQlPUFRJT05BTCAKKwkgfQorCitVc2VkLVJBVC1UeXBlOjo9IEVOVU1FUkFURUQgeworCXV0cmFuICAoMCksCisJZ2VyYW4gICgxKSwKKwlnYW4gICAgKDIpLAorCWktaHNwYS1ldm9sdXRpb24gKDMpLAorCWUtdXRyYW4JKDQpLAorCS4uLn0KKworRVBTLUluZm8gOjo9IENIT0lDRXsKKwlwZG4tZ3ctdXBkYXRlCVswXSBQRE4tR1ctVXBkYXRlLAorCWlzci1JbmZvcm1hdGlvbglbMV0gSVNSLUluZm9ybWF0aW9uIH0KKworUEROLUdXLVVwZGF0ZSA6Oj0gU0VRVUVOQ0V7CisJYXBuCQkJWzBdIEFQTgkJT1BUSU9OQUwsCisJcGRuLWd3LUlkZW50aXR5CVsxXSBQRE4tR1ctSWRlbnRpdHkJT1BUSU9OQUwsCisJY29udGV4dElkCQlbMl0gQ29udGV4dElkICAgICAgICAgICAgICAgICAgICAgT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVszXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uIH0KKworSVNSLUluZm9ybWF0aW9uOjo9IEJJVCBTVFJJTkcgeworCXVwZGF0ZU1NRSAgKDApLAorCWNhbmNlbFNHU04gICgxKX0gKFNJWkUgKDIuLjgpKQorCS0tIGV4Y2VwdGlvbiBoYW5kbGluZzogcmVjZXB0aW9uIG9mIHVua25vd24gYml0IGFzc2lnbm1lbnRzIGluIHRoZQorCS0tIElTUi1JbmZvcm1hdGlvbiBkYXRhIHR5cGUgc2hhbGwgYmUgZGlzY2FyZGVkIGJ5IHRoZSByZWNlaXZlciAKKworU0dTTi1DYXBhYmlsaXR5IDo6PSBTRVFVRU5DRXsKKwlzb2xzYVN1cHBvcnRJbmRpY2F0b3IJTlVMTAkJCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbMV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiAsCisJc3VwZXJDaGFyZ2VyU3VwcG9ydGVkSW5TZXJ2aW5nTmV0d29ya0VudGl0eQlbMl0gU3VwZXJDaGFyZ2VySW5mbwlPUFRJT05BTCAsCisJZ3Byc0VuaGFuY2VtZW50c1N1cHBvcnRJbmRpY2F0b3IgCVszXSBOVUxMCQlPUFRJT05BTCwKKwlzdXBwb3J0ZWRDYW1lbFBoYXNlcyAgCVs0XSBTdXBwb3J0ZWRDYW1lbFBoYXNlcwlPUFRJT05BTCwKKwlzdXBwb3J0ZWRMQ1MtQ2FwYWJpbGl0eVNldHMJWzVdICBTdXBwb3J0ZWRMQ1MtQ2FwYWJpbGl0eVNldHMJT1BUSU9OQUwsCisJb2ZmZXJlZENhbWVsNENTSXMJWzZdIE9mZmVyZWRDYW1lbDRDU0lzCU9QVElPTkFMLAorCXNtc0NhbGxCYXJyaW5nU3VwcG9ydEluZGljYXRvcglbN10JTlVMTAkJT1BUSU9OQUwsCXN1cHBvcnRlZFJBVC1UeXBlc0luZGljYXRvcglbOF0JU3VwcG9ydGVkUkFULVR5cGVzCU9QVElPTkFMLAorCXN1cHBvcnRlZEZlYXR1cmVzCVs5XSBTdXBwb3J0ZWRGZWF0dXJlcwlPUFRJT05BTCB9CisKK1N1cHBvcnRlZEZlYXR1cmVzOjo9IEJJVCBTVFJJTkcgeworCW9kYi1hbGwgKDApLAorCW9kYi1IUExNTi1BUE4gKDEpLAorCW9kYi1WUExNTi1BUE4gKDIpLAorCXJlZ1N1YiAoMyl9IChTSVpFICg0Li44KSkKKworR1NOLUFkZHJlc3MgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoNS4uMTcpKQorCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRvIFRTIDNHUFAgVFMgMjMuMDAzIFsxN10KKworVXBkYXRlR3Byc0xvY2F0aW9uUmVzIDo6PSBTRVFVRU5DRSB7CisJaGxyLU51bWJlcglJU0ROLUFkZHJlc3NTdHJpbmcsCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4sCisJYWRkLUNhcGFiaWxpdHkJTlVMTAkJCU9QVElPTkFMLAorCXNnc24tbW1lU2VwYXJhdGlvblN1cHBvcnRlZAlbMF0gTlVMTAkJT1BUSU9OQUwgfQorCistLSBoYW5kb3ZlciB0eXBlcworCitGb3J3YXJkQWNjZXNzU2lnbmFsbGluZy1BcmcgOjo9IFszXSBTRVFVRU5DRSB7CisJYW4tQVBEVQkJQWNjZXNzTmV0d29ya1NpZ25hbEluZm8sCisJaW50ZWdyaXR5UHJvdGVjdGlvbkluZm8JWzBdIEludGVncml0eVByb3RlY3Rpb25JbmZvcm1hdGlvbgkJT1BUSU9OQUwsCisJZW5jcnlwdGlvbkluZm8JWzFdIEVuY3J5cHRpb25JbmZvcm1hdGlvbgkJT1BUSU9OQUwsCisJa2V5U3RhdHVzCQlbMl0JS2V5U3RhdHVzCU9QVElPTkFMLAorCWFsbG93ZWRHU00tQWxnb3JpdGhtcwlbNF0JQWxsb3dlZEdTTS1BbGdvcml0aG1zCU9QVElPTkFMLAorCWFsbG93ZWRVTVRTLUFsZ29yaXRobXMJWzVdCUFsbG93ZWRVTVRTLUFsZ29yaXRobXMJT1BUSU9OQUwsCisJcmFkaW9SZXNvdXJjZUluZm9ybWF0aW9uCVs2XSBSYWRpb1Jlc291cmNlSW5mb3JtYXRpb24JT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVszXQlFeHRlbnNpb25Db250YWluZXIgCU9QVElPTkFMLAorCS4uLiwKKwlyYWRpb1Jlc291cmNlTGlzdAlbN10JUmFkaW9SZXNvdXJjZUxpc3QJT1BUSU9OQUwsCisJYnNzbWFwLVNlcnZpY2VIYW5kb3ZlcglbOV0JQlNTTUFQLVNlcnZpY2VIYW5kb3ZlcglPUFRJT05BTCwKKwlyYW5hcC1TZXJ2aWNlSGFuZG92ZXIJWzhdCVJBTkFQLVNlcnZpY2VIYW5kb3ZlcglPUFRJT05BTCwKKwlic3NtYXAtU2VydmljZUhhbmRvdmVyTGlzdAlbMTBdCUJTU01BUC1TZXJ2aWNlSGFuZG92ZXJMaXN0CU9QVElPTkFMLAorCWN1cnJlbnRseVVzZWRDb2RlYwlbMTFdIENvZGVjCU9QVElPTkFMLAorCWl1U3VwcG9ydGVkQ29kZWNzTGlzdAlbMTJdIFN1cHBvcnRlZENvZGVjc0xpc3QJT1BUSU9OQUwsCisJcmFiLUNvbmZpZ3VyYXRpb25JbmRpY2F0b3IJWzEzXSBOVUxMCQlPUFRJT05BTCwKKwlpdVNlbGVjdGVkQ29kZWMJWzE0XQlDb2RlYwlPUFRJT05BTCwKKwlhbHRlcm5hdGl2ZUNoYW5uZWxUeXBlCVsxNV0JUmFkaW9SZXNvdXJjZUluZm9ybWF0aW9uCU9QVElPTkFMLAorCXRyYWNlUHJvcGFnYXRpb25MaXN0CVsxN10JVHJhY2VQcm9wYWdhdGlvbkxpc3QJT1BUSU9OQUwgfQorCitBbGxvd2VkR1NNLUFsZ29yaXRobXMgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCisJLS0gaW50ZXJuYWwgc3RydWN0dXJlIGlzIGNvZGVkIGFzIEFsZ29yaXRobSBpZGVudGlmaWVyIG9jdGV0IGZyb20KKwktLSBQZXJtaXR0ZWQgQWxnb3JpdGhtcyBkZWZpbmVkIGluIDNHUFAgVFMgNDguMDA4CisJLS0gQSBub2RlIHNoYWxsIG1hcmsgYWxsIEdTTSBhbGdvcml0aG1zIHRoYXQgYXJlIGFsbG93ZWQgaW4gTVNDLUIKKworQWxsb3dlZFVNVFMtQWxnb3JpdGhtcyA6Oj0gU0VRVUVOQ0UgeworCWludGVncml0eVByb3RlY3Rpb25BbGdvcml0aG1zCVswXSAJUGVybWl0dGVkSW50ZWdyaXR5UHJvdGVjdGlvbkFsZ29yaXRobXMJT1BUSU9OQUwsCisJZW5jcnlwdGlvbkFsZ29yaXRobXMJWzFdIAlQZXJtaXR0ZWRFbmNyeXB0aW9uQWxnb3JpdGhtcwkJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4ufQorCitQZXJtaXR0ZWRJbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtcyA6Oj0KKwkJT0NURVQgU1RSSU5HIChTSVpFICgxLi5tYXhQZXJtaXR0ZWRJbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtc0xlbmd0aCkpCisJLS0gT2N0ZXRzIGNvbnRhaW4gYSBjb21wbGV0ZSBQZXJtaXR0ZWRJbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtcyBkYXRhIHR5cGUgCisJLS0gYXMgZGVmaW5lZCBpbiAzR1BQIFRTIDI1LjQxMywgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIGVuY29kaW5nIHNjaGVtZSAKKwktLSBtYW5kYXRlZCBieSAzR1BQIFRTIDI1LjQxMy4gCisJLS0gUGFkZGluZyBiaXRzIGFyZSBpbmNsdWRlZCwgaWYgbmVlZGVkLCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgCisJLS0gbGFzdCBvY3RldCBvZiB0aGUgb2N0ZXQgc3RyaW5nLiAKKworCittYXhQZXJtaXR0ZWRJbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtc0xlbmd0aCBJTlRFR0VSIDo6PSA5CisKK1Blcm1pdHRlZEVuY3J5cHRpb25BbGdvcml0aG1zIDo6PQorCQlPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLm1heFBlcm1pdHRlZEVuY3J5cHRpb25BbGdvcml0aG1zTGVuZ3RoKSkKKwktLSBPY3RldHMgY29udGFpbiBhIGNvbXBsZXRlIFBlcm1pdHRlZEVuY3J5cHRpb25BbGdvcml0aG1zIGRhdGEgdHlwZSAKKwktLSBhcyBkZWZpbmVkIGluIDNHUFAgVFMgMjUuNDEzLCBlbmNvZGVkIGFjY29yZGluZyB0byB0aGUgZW5jb2Rpbmcgc2NoZW1lIAorCS0tIG1hbmRhdGVkIGJ5IDNHUFAgVFMgMjUuNDEzCisJLS0gUGFkZGluZyBiaXRzIGFyZSBpbmNsdWRlZCwgaWYgbmVlZGVkLCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgCisJLS0gbGFzdCBvY3RldCBvZiB0aGUgb2N0ZXQgc3RyaW5nLiAKKworCittYXhQZXJtaXR0ZWRFbmNyeXB0aW9uQWxnb3JpdGhtc0xlbmd0aCBJTlRFR0VSIDo6PSA5CisKK0tleVN0YXR1cyA6Oj0gRU5VTUVSQVRFRCB7CisJb2xkICAoMCksCisJbmV3ICAoMSksCisJLi4ufQorCS0tIGV4Y2VwdGlvbiBoYW5kbGluZzoKKwktLSByZWNlaXZlZCB2YWx1ZXMgaW4gcmFuZ2UgMi0zMSBzaGFsbCBiZSB0cmVhdGVkIGFzICJvbGQiCisJLS0gcmVjZWl2ZWQgdmFsdWVzIGdyZWF0ZXIgdGhhbiAzMSBzaGFsbCBiZSB0cmVhdGVkIGFzICJuZXciCisKK1ByZXBhcmVITy1BcmcgOjo9IFszXSBTRVFVRU5DRSB7CisJdGFyZ2V0Q2VsbElkCVswXSBHbG9iYWxDZWxsSWQJT1BUSU9OQUwsCisJaG8tTnVtYmVyTm90UmVxdWlyZWQJTlVMTAkJCU9QVElPTkFMLCAKKwl0YXJnZXRSTkNJZAlbMV0gUk5DSWQJCU9QVElPTkFMLAorCWFuLUFQRFUJCVsyXSBBY2Nlc3NOZXR3b3JrU2lnbmFsSW5mbwlPUFRJT05BTCwKKwltdWx0aXBsZUJlYXJlclJlcXVlc3RlZAlbM10gTlVMTAkJT1BUSU9OQUwsCisJaW1zaQkJCVs0XSBJTVNJCQlPUFRJT05BTCwKKwlpbnRlZ3JpdHlQcm90ZWN0aW9uSW5mbwlbNV0gSW50ZWdyaXR5UHJvdGVjdGlvbkluZm9ybWF0aW9uCQlPUFRJT05BTCwKKwllbmNyeXB0aW9uSW5mbwlbNl0gRW5jcnlwdGlvbkluZm9ybWF0aW9uCQlPUFRJT05BTCwKKwlyYWRpb1Jlc291cmNlSW5mb3JtYXRpb24JWzddIFJhZGlvUmVzb3VyY2VJbmZvcm1hdGlvbglPUFRJT05BTCwKKwlhbGxvd2VkR1NNLUFsZ29yaXRobXMJWzldCUFsbG93ZWRHU00tQWxnb3JpdGhtcwlPUFRJT05BTCwKKwlhbGxvd2VkVU1UUy1BbGdvcml0aG1zCVsxMF0JQWxsb3dlZFVNVFMtQWxnb3JpdGhtcwlPUFRJT05BTCwKKwlyYWRpb1Jlc291cmNlTGlzdAlbMTFdIFJhZGlvUmVzb3VyY2VMaXN0CU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbOF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiAsCisJcmFiLUlkCQlbMTJdIFJBQi1JZAlPUFRJT05BTCwKKwlic3NtYXAtU2VydmljZUhhbmRvdmVyCVsxM10JQlNTTUFQLVNlcnZpY2VIYW5kb3ZlcglPUFRJT05BTCwKKwlyYW5hcC1TZXJ2aWNlSGFuZG92ZXIJWzE0XQlSQU5BUC1TZXJ2aWNlSGFuZG92ZXIJT1BUSU9OQUwsIAorCWJzc21hcC1TZXJ2aWNlSGFuZG92ZXJMaXN0CVsxNV0JQlNTTUFQLVNlcnZpY2VIYW5kb3Zlckxpc3QJT1BUSU9OQUwsCisJYXNjaUNhbGxSZWZlcmVuY2UJWzIwXQlBU0NJLUNhbGxSZWZlcmVuY2UJT1BUSU9OQUwsCisJZ2VyYW4tY2xhc3NtYXJrCVsxNl0gR0VSQU4tQ2xhc3NtYXJrCU9QVElPTkFMLAorCWl1Q3VycmVudGx5VXNlZENvZGVjCVsxN10gQ29kZWMJT1BUSU9OQUwsCisJaXVTdXBwb3J0ZWRDb2RlY3NMaXN0CVsxOF0gU3VwcG9ydGVkQ29kZWNzTGlzdAlPUFRJT05BTCwKKwlyYWItQ29uZmlndXJhdGlvbkluZGljYXRvcglbMTldIE5VTEwJCU9QVElPTkFMLAorCXVlc2JpLUl1CQlbMjFdCVVFU0JJLUl1CU9QVElPTkFMLAorCWltZWlzdgkJWzIyXQlJTUVJCQlPUFRJT05BTCwKKwlhbHRlcm5hdGl2ZUNoYW5uZWxUeXBlCVsyM10JUmFkaW9SZXNvdXJjZUluZm9ybWF0aW9uCU9QVElPTkFMLAorCXRyYWNlUHJvcGFnYXRpb25MaXN0CVsyNV0JVHJhY2VQcm9wYWdhdGlvbkxpc3QJT1BUSU9OQUwJIH0KKworQlNTTUFQLVNlcnZpY2VIYW5kb3Zlckxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLiBtYXhOdW1PZlNlcnZpY2VIYW5kb3ZlcnMpIE9GCisJCQkJQlNTTUFQLVNlcnZpY2VIYW5kb3ZlckluZm8KKworQlNTTUFQLVNlcnZpY2VIYW5kb3ZlckluZm8gOjo9IFNFUVVFTkNFIHsKKwlic3NtYXAtU2VydmljZUhhbmRvdmVyCUJTU01BUC1TZXJ2aWNlSGFuZG92ZXIsCisJcmFiLUlkCQlSQUItSWQsCisJLS0gUkFCIElkZW50aXR5IGlzIG5lZWRlZCB0byByZWxhdGUgdGhlIHNlcnZpY2UgaGFuZG92ZXJzIHdpdGggdGhlIHJhZGlvIGFjY2VzcyBiZWFyZXJzLiAKKwkuLi59CisKK21heE51bU9mU2VydmljZUhhbmRvdmVycyAgSU5URUdFUiA6Oj0gNworCitCU1NNQVAtU2VydmljZUhhbmRvdmVyIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQorCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRoZSBTZXJ2aWNlIEhhbmRvdmVyIGluZm9ybWF0aW9uIGVsZW1lbnQgaW4KKwktLSAzR1BQIFRTIDQ4LjAwOC4KKworUkFOQVAtU2VydmljZUhhbmRvdmVyIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQorCS0tIE9jdGV0IGNvbnRhaW5zIGEgY29tcGxldGUgU2VydmljZS1IYW5kb3ZlciBkYXRhIHR5cGUgCisJLS0gYXMgZGVmaW5lZCBpbiAzR1BQIFRTIDI1LjQxMywgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIGVuY29kaW5nIHNjaGVtZSAKKwktLSBtYW5kYXRlZCBieSAzR1BQIFRTIDI1LjQxMworCS0tIFBhZGRpbmcgYml0cyBhcmUgaW5jbHVkZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMuIAorCisKK1JhZGlvUmVzb3VyY2VMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi4gbWF4TnVtT2ZSYWRpb1Jlc291cmNlcykgT0YKKwkJCQlSYWRpb1Jlc291cmNlCisKK1JhZGlvUmVzb3VyY2UgOjo9IFNFUVVFTkNFIHsKKwlyYWRpb1Jlc291cmNlSW5mb3JtYXRpb24JUmFkaW9SZXNvdXJjZUluZm9ybWF0aW9uLAorCXJhYi1JZAkJUkFCLUlkLAorCS0tIFJBQiBJZGVudGl0eSBpcyBuZWVkZWQgdG8gcmVsYXRlIHRoZSByYWRpbyByZXNvdXJjZXMgd2l0aCB0aGUgcmFkaW8gYWNjZXNzIGJlYXJlcnMuIAorCS4uLn0KKworbWF4TnVtT2ZSYWRpb1Jlc291cmNlcyAgSU5URUdFUiA6Oj0gNworCitQcmVwYXJlSE8tUmVzIDo6PSBbM10gU0VRVUVOQ0UgeworCWhhbmRvdmVyTnVtYmVyCVswXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCisJcmVsb2NhdGlvbk51bWJlckxpc3QJWzFdCVJlbG9jYXRpb25OdW1iZXJMaXN0CU9QVElPTkFMLAorCWFuLUFQRFUJCVsyXQlBY2Nlc3NOZXR3b3JrU2lnbmFsSW5mbwlPUFRJT05BTCwKKwltdWx0aWNhbGxCZWFyZXJJbmZvCVszXQlNdWx0aWNhbGxCZWFyZXJJbmZvCU9QVElPTkFMLAorCW11bHRpcGxlQmVhcmVyTm90U3VwcG9ydGVkCU5VTEwJCQlPUFRJT05BTCwKKwlzZWxlY3RlZFVNVFMtQWxnb3JpdGhtcwlbNV0JU2VsZWN0ZWRVTVRTLUFsZ29yaXRobXMJT1BUSU9OQUwsCisJY2hvc2VuUmFkaW9SZXNvdXJjZUluZm9ybWF0aW9uCVs2XSBDaG9zZW5SYWRpb1Jlc291cmNlSW5mb3JtYXRpb24JIE9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbNF0JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiwKKwlpdVNlbGVjdGVkQ29kZWMJWzddIENvZGVjCQlPUFRJT05BTCwKKwlpdUF2YWlsYWJsZUNvZGVjc0xpc3QJWzhdIENvZGVjTGlzdAlPUFRJT05BTCB9CisKK1NlbGVjdGVkVU1UUy1BbGdvcml0aG1zIDo6PSBTRVFVRU5DRSB7CisJaW50ZWdyaXR5UHJvdGVjdGlvbkFsZ29yaXRobQlbMF0gCUNob3NlbkludGVncml0eVByb3RlY3Rpb25BbGdvcml0aG0JT1BUSU9OQUwsCisJZW5jcnlwdGlvbkFsZ29yaXRobQlbMV0gCUNob3NlbkVuY3J5cHRpb25BbGdvcml0aG0JT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4ufQorCitDaG9zZW5JbnRlZ3JpdHlQcm90ZWN0aW9uQWxnb3JpdGhtIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQorCS0tIE9jdGV0IGNvbnRhaW5zIGEgY29tcGxldGUgSW50ZWdyaXR5UHJvdGVjdGlvbkFsZ29yaXRobSBkYXRhIHR5cGUgCisJLS0gYXMgZGVmaW5lZCBpbiAzR1BQIFRTIDI1LjQxMywgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIGVuY29kaW5nIHNjaGVtZSAKKwktLSBtYW5kYXRlZCBieSAzR1BQIFRTIDI1LjQxMworCS0tIFBhZGRpbmcgYml0cyBhcmUgaW5jbHVkZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMuIAorCitDaG9zZW5FbmNyeXB0aW9uQWxnb3JpdGhtIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQorCS0tIE9jdGV0IGNvbnRhaW5zIGEgY29tcGxldGUgRW5jcnlwdGlvbkFsZ29yaXRobSBkYXRhIHR5cGUgCisJLS0gYXMgZGVmaW5lZCBpbiAzR1BQIFRTIDI1LjQxMywgZW5jb2RlZCBhY2NvcmRpbmcgdG8gdGhlIGVuY29kaW5nIHNjaGVtZSAKKwktLSBtYW5kYXRlZCBieSAzR1BQIFRTIDI1LjQxMworCS0tIFBhZGRpbmcgYml0cyBhcmUgaW5jbHVkZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMuIAorCitDaG9zZW5SYWRpb1Jlc291cmNlSW5mb3JtYXRpb24gOjo9IFNFUVVFTkNFIHsKKwljaG9zZW5DaGFubmVsSW5mbwlbMF0gQ2hvc2VuQ2hhbm5lbEluZm8JT1BUSU9OQUwsCisJY2hvc2VuU3BlZWNoVmVyc2lvbglbMV0gQ2hvc2VuU3BlZWNoVmVyc2lvbglPUFRJT05BTCwKKwkuLi59CisKK0Nob3NlbkNoYW5uZWxJbmZvIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQorCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRoZSBDaG9zZW4gQ2hhbm5lbCBpbmZvcm1hdGlvbiBlbGVtZW50IGluIDNHUFAgVFMgNDguMDA4CisKK0Nob3NlblNwZWVjaFZlcnNpb24gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCisJLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdGhlIFNwZWVjaCBWZXJzaW9uIChjaG9zZW4pIGluZm9ybWF0aW9uIGVsZW1lbnQgaW4gM0dQUCBUUworCS0tIDQ4LjAwOCAKKworUHJlcGFyZVN1YnNlcXVlbnRITy1BcmcgOjo9IFszXSBTRVFVRU5DRSB7CisJdGFyZ2V0Q2VsbElkCVswXSBHbG9iYWxDZWxsSWQJT1BUSU9OQUwsCisJdGFyZ2V0TVNDLU51bWJlcglbMV0gSVNETi1BZGRyZXNzU3RyaW5nLAorCXRhcmdldFJOQ0lkCVsyXSBSTkNJZAkJT1BUSU9OQUwsCisJYW4tQVBEVQkJWzNdCUFjY2Vzc05ldHdvcmtTaWduYWxJbmZvCU9QVElPTkFMLAorCXNlbGVjdGVkUmFiLUlkCVs0XQlSQUItSWQJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVs1XQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uLAorCWdlcmFuLWNsYXNzbWFyawlbNl0gR0VSQU4tQ2xhc3NtYXJrCU9QVElPTkFMLAorCXJhYi1Db25maWd1cmF0aW9uSW5kaWNhdG9yCVs3XSBOVUxMCQlPUFRJT05BTCB9CisKK1ByZXBhcmVTdWJzZXF1ZW50SE8tUmVzIDo6PSBbM10gU0VRVUVOQ0UgeworCWFuLUFQRFUJCUFjY2Vzc05ldHdvcmtTaWduYWxJbmZvLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbMF0JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLn0KKworUHJvY2Vzc0FjY2Vzc1NpZ25hbGxpbmctQXJnIDo6PSBbM10gU0VRVUVOQ0UgeworCWFuLUFQRFUJCUFjY2Vzc05ldHdvcmtTaWduYWxJbmZvLAorCXNlbGVjdGVkVU1UUy1BbGdvcml0aG1zCVsxXQlTZWxlY3RlZFVNVFMtQWxnb3JpdGhtcwlPUFRJT05BTCwKKwlzZWxlY3RlZEdTTS1BbGdvcml0aG0JWzJdCVNlbGVjdGVkR1NNLUFsZ29yaXRobQlPUFRJT05BTCwKKwljaG9zZW5SYWRpb1Jlc291cmNlSW5mb3JtYXRpb24JWzNdIENob3NlblJhZGlvUmVzb3VyY2VJbmZvcm1hdGlvbiBPUFRJT05BTCwKKwlzZWxlY3RlZFJhYi1JZAlbNF0gUkFCLUlkCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbMF0JRXh0ZW5zaW9uQ29udGFpbmVyIAlPUFRJT05BTCwKKwkuLi4sCisJaVVTZWxlY3RlZENvZGVjCVs1XSBDb2RlYwkJT1BUSU9OQUwsCisJaXVBdmFpbGFibGVDb2RlY3NMaXN0CVs2XSBDb2RlY0xpc3QJT1BUSU9OQUwgfQorCitTdXBwb3J0ZWRDb2RlY3NMaXN0IDo6PSBTRVFVRU5DRSB7CisJdXRyYW5Db2RlY0xpc3QJWzBdIENvZGVjTGlzdAlPUFRJT05BTCwKKwlnZXJhbkNvZGVjTGlzdAlbMV0gQ29kZWNMaXN0CU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLn0KKworQ29kZWNMaXN0IDo6PSBTRVFVRU5DRSB7CisJY29kZWMxCQlbMV0gQ29kZWMsCisJY29kZWMyCQlbMl0gQ29kZWMJCU9QVElPTkFMLAorCWNvZGVjMwkJWzNdIENvZGVjCQlPUFRJT05BTCwKKwljb2RlYzQJCVs0XSBDb2RlYwkJT1BUSU9OQUwsCisJY29kZWM1CQlbNV0gQ29kZWMJCU9QVElPTkFMLAorCWNvZGVjNgkJWzZdIENvZGVjCQlPUFRJT05BTCwKKwljb2RlYzcJCVs3XSBDb2RlYwkJT1BUSU9OQUwsCisJY29kZWM4CQlbOF0gQ29kZWMJCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbOV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLn0KKwktLSBDb2RlY3MgYXJlIHNlbnQgaW4gcHJpb3JpdHkgb3JkZXIgd2hlcmUgY29kZWMxIGhhcyBoaWdoZXN0IHByaW9yaXR5CisKK0NvZGVjIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjQpKQorCisJLS0gVGhlIGludGVybmFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6CisJLS0gb2N0ZXQgMQlDb2RlZCBhcyBDb2RlYyBJZGVudGlmaWNhdGlvbiBjb2RlIGluIDNHUFAgVFMgMjYuMTAzCisJLS0gb2N0ZXRzIDIsMyw0CVBhcmFtZXRlcnMgZm9yIHRoZSBDb2RlYyBhcyBkZWZpbmVkIGluIDNHUFAgVFMKKwktLQkJCTI2LjEwMywgaWYgYXZhaWxhYmxlLCBsZW5ndGggZGVwZW5kaW5nIG9uIHRoZSBjb2RlYworCitHRVJBTi1DbGFzc21hcmsgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMi4uODcpKQorCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRoZSBHRVJBTiBDbGFzc21hcmsgaW5mb3JtYXRpb24gZWxlbWVudCBpbiAzR1BQIFRTIDQ4LjAwOAorCitTZWxlY3RlZEdTTS1BbGdvcml0aG0gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCisJLS0gaW50ZXJuYWwgc3RydWN0dXJlIGlzIGNvZGVkIGFzIEFsZ29yaXRobSBpZGVudGlmaWVyIG9jdGV0IGZyb20gQ2hvc2VuIEVuY3J5cHRpb24KKwktLSBBbGdvcml0aG0gZGVmaW5lZCBpbiAzR1BQIFRTIDQ4LjAwOAorCS0tIEEgbm9kZSBzaGFsbCBtYXJrIG9ubHkgdGhlIHNlbGVjdGVkIEdTTSBhbGdvcml0aG0KKworU2VuZEVuZFNpZ25hbC1BcmcgOjo9IFszXSBTRVFVRU5DRSB7CisJYW4tQVBEVQkJQWNjZXNzTmV0d29ya1NpZ25hbEluZm8sCisJZXh0ZW5zaW9uQ29udGFpbmVyCVswXQlFeHRlbnNpb25Db250YWluZXIgCU9QVElPTkFMLAorCS4uLn0KKworU2VuZEVuZFNpZ25hbC1SZXMgOjo9IFNFUVVFTkNFIHsKKwlleHRlbnNpb25Db250YWluZXIJWzBdCUV4dGVuc2lvbkNvbnRhaW5lciAJT1BUSU9OQUwsCisJLi4ufQorCitSTkNJZCA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg3KSkKKwktLSBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgYXMgZm9sbG93czoKKwktLSBvY3RldCAxIGJpdHMgNDMyMQlNb2JpbGUgQ291bnRyeSBDb2RlIDFzdCBkaWdpdAorCS0tICAgICAgICAgYml0cyA4NzY1CU1vYmlsZSBDb3VudHJ5IENvZGUgMm5kIGRpZ2l0CisJLS0gb2N0ZXQgMiBiaXRzIDQzMjEJTW9iaWxlIENvdW50cnkgQ29kZSAzcmQgZGlnaXQKKwktLSAgICAgICAgIGJpdHMgODc2NQlNb2JpbGUgTmV0d29yayBDb2RlIDNyZCBkaWdpdAorCS0tCQkJb3IgZmlsbGVyICgxMTExKSBmb3IgMiBkaWdpdCBNTkNzCisJLS0gb2N0ZXQgMyBiaXRzIDQzMjEJTW9iaWxlIE5ldHdvcmsgQ29kZSAxc3QgZGlnaXQKKwktLSAgICAgICAgIGJpdHMgODc2NQlNb2JpbGUgTmV0d29yayBDb2RlIDJuZCBkaWdpdAorCS0tIG9jdGV0cyA0IGFuZCA1CUxvY2F0aW9uIEFyZWEgQ29kZSBhY2NvcmRpbmcgdG8gM0dQUCBUUyAyNC4wMDgKKwktLSBvY3RldHMgNiBhbmQgNwlSTkMgSWQgdmFsdWUgYWNjb3JkaW5nIHRvIDNHUFAgVFMgMjUuNDEzCisKK1JlbG9jYXRpb25OdW1iZXJMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlJlbG9jYXRpb25OdW1iZXIpIE9GCisJCQkJUmVsb2NhdGlvbk51bWJlcgorCitNdWx0aWNhbGxCZWFyZXJJbmZvIDo6PSBJTlRFR0VSICgxLi5tYXhOdW1PZlJlbG9jYXRpb25OdW1iZXIpCisKK1JlbG9jYXRpb25OdW1iZXIgOjo9IFNFUVVFTkNFIHsKKwloYW5kb3Zlck51bWJlcglJU0ROLUFkZHJlc3NTdHJpbmcsCisJcmFiLUlkCQlSQUItSWQsCisJLS0gUkFCIElkZW50aXR5IGlzIG5lZWRlZCB0byByZWxhdGUgdGhlIGNhbGxzIHdpdGggdGhlIHJhZGlvIGFjY2VzcyBiZWFyZXJzLiAKKwkuLi59CisKK1JBQi1JZCA6Oj0gSU5URUdFUiAoMS4ubWF4TnJPZlJBQnMpCisKK21heE5yT2ZSQUJzIElOVEVHRVIgOjo9IDI1NQorCittYXhOdW1PZlJlbG9jYXRpb25OdW1iZXIgIElOVEVHRVIgOjo9IDcKKworUmFkaW9SZXNvdXJjZUluZm9ybWF0aW9uIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDMuLjEzKSkKKwktLSBPY3RldHMgYXJlIGNvZGVkIGFjY29yZGluZyB0aGUgQ2hhbm5lbCBUeXBlIGluZm9ybWF0aW9uIGVsZW1lbnQgaW4gM0dQUCBUUyA0OC4wMDgKKworSW50ZWdyaXR5UHJvdGVjdGlvbkluZm9ybWF0aW9uIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDE4Li5tYXhOdW1PZkludGVncml0eUluZm8pKQorCS0tIE9jdGV0cyBjb250YWluIGEgY29tcGxldGUgSW50ZWdyaXR5UHJvdGVjdGlvbkluZm9ybWF0aW9uIGRhdGEgdHlwZSAKKwktLSBhcyBkZWZpbmVkIGluIDNHUFAgVFMgMjUuNDEzLCBlbmNvZGVkIGFjY29yZGluZyB0byB0aGUgZW5jb2Rpbmcgc2NoZW1lIAorCS0tIG1hbmRhdGVkIGJ5IDNHUFAgVFMgMjUuNDEzCisJLS0gUGFkZGluZyBiaXRzIGFyZSBpbmNsdWRlZCwgaWYgbmVlZGVkLCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgCisJLS0gbGFzdCBvY3RldCBvZiB0aGUgb2N0ZXQgc3RyaW5nLiAKKworbWF4TnVtT2ZJbnRlZ3JpdHlJbmZvIElOVEVHRVIgOjo9IDEwMAorCitFbmNyeXB0aW9uSW5mb3JtYXRpb24gOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMTguLm1heE51bU9mRW5jcnlwdGlvbkluZm8pKQorCS0tIE9jdGV0cyBjb250YWluIGEgY29tcGxldGUgRW5jcnlwdGlvbkluZm9ybWF0aW9uIGRhdGEgdHlwZSAKKwktLSBhcyBkZWZpbmVkIGluIDNHUFAgVFMgMjUuNDEzLCBlbmNvZGVkIGFjY29yZGluZyB0byB0aGUgZW5jb2Rpbmcgc2NoZW1lIAorCS0tIG1hbmRhdGVkIGJ5IDNHUFAgVFMgMjUuNDEzCisJLS0gUGFkZGluZyBiaXRzIGFyZSBpbmNsdWRlZCwgaWYgbmVlZGVkLCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgCisJLS0gbGFzdCBvY3RldCBvZiB0aGUgb2N0ZXQgc3RyaW5nLiAKKworbWF4TnVtT2ZFbmNyeXB0aW9uSW5mbyBJTlRFR0VSIDo6PSAxMDAKKworLS0gYXV0aGVudGljYXRpb24gbWFuYWdlbWVudCB0eXBlcworCitTZW5kQXV0aGVudGljYXRpb25JbmZvQXJnIDo6PSBTRVFVRU5DRSB7CisJaW1zaQkJCVswXSBJTVNJLAorCW51bWJlck9mUmVxdWVzdGVkVmVjdG9ycwlOdW1iZXJPZlJlcXVlc3RlZFZlY3RvcnMsCisJc2VnbWVudGF0aW9uUHJvaGliaXRlZAlOVUxMCQkJT1BUSU9OQUwsCisJaW1tZWRpYXRlUmVzcG9uc2VQcmVmZXJyZWQJWzFdIE5VTEwJCQlPUFRJT05BTCwKKwlyZS1zeW5jaHJvbmlzYXRpb25JbmZvCVJlLXN5bmNocm9uaXNhdGlvbkluZm8JT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uLAorCXJlcXVlc3RpbmdOb2RlVHlwZQlbM10gUmVxdWVzdGluZ05vZGVUeXBlCU9QVElPTkFMLAorCXJlcXVlc3RpbmdQTE1OLUlkCVs0XSBQTE1OLUlkCU9QVElPTkFMLAorCW51bWJlck9mUmVxdWVzdGVkQWRkaXRpb25hbC1WZWN0b3JzCVs1XSBOdW1iZXJPZlJlcXVlc3RlZFZlY3RvcnMJT1BUSU9OQUwsCisJYWRkaXRpb25hbFZlY3RvcnNBcmVGb3JFUFMJWzZdIE5VTEwJCU9QVElPTkFMIH0JCisKKworTnVtYmVyT2ZSZXF1ZXN0ZWRWZWN0b3JzIDo6PSBJTlRFR0VSICgxLi41KQorCitSZS1zeW5jaHJvbmlzYXRpb25JbmZvIDo6PSBTRVFVRU5DRSB7CisJcmFuZAkJCVJBTkQsCisJYXV0cwkJCUFVVFMsCisJLi4ufQorCitTZW5kQXV0aGVudGljYXRpb25JbmZvUmVzIDo6PSBbM10gU0VRVUVOQ0UgeworCWF1dGhlbnRpY2F0aW9uU2V0TGlzdAlBdXRoZW50aWNhdGlvblNldExpc3QgCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uLAorCWVwcy1BdXRoZW50aWNhdGlvblNldExpc3QJWzJdIEVQUy1BdXRoZW50aWNhdGlvblNldExpc3QJT1BUSU9OQUwgfQorCitFUFMtQXV0aGVudGljYXRpb25TZXRMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi41KSBPRgorCQkJCUVQQy1BVgorCitFUEMtQVYgOjo9IFNFUVVFTkNFIHsKKwlyYW5kCQkJUkFORCwKKwl4cmVzCQkJWFJFUywKKwlhdXRuCQkJQVVUTiwKKwlrYXNtZQkJS0FTTUUsCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK0tBU01FIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDE2KSkKKworUmVxdWVzdGluZ05vZGVUeXBlIDo6PSBFTlVNRVJBVEVEIHsKKwl2bHIgICgwKSwKKwlzZ3NuICAoMSksCisJLi4uLAorCXMtY3NjZiAgKDIpLAorCWJzZiAgKDMpLAorCWdhbi1hYWEtc2VydmVyICAoNCksCisJd2xhbi1hYWEtc2VydmVyICAoNSksCisJbW1lCQkoMTYpLAorCW1tZS1zZ3NuCSgxNykKKwl9CisJLS0gdGhlIHZhbHVlcyAyLCAzLCA0IGFuZCA1IHNoYWxsIG5vdCBiZSB1c2VkIG9uIHRoZSBNQVAtRCBvciBHciBpbnRlcmZhY2VzCisJLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgorCS0tIHJlY2VpdmVkIHZhbHVlcyBpbiB0aGUgcmFuZ2UgKDYtMTUpIHNoYWxsIGJlIHRyZWF0ZWQgYXMgInZsciIKKwktLSByZWNlaXZlZCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDE3IHNoYWxsIGJlIHRyZWF0ZWQgYXMgInNnc24iCisKKy0tIGVxdWlwbWVudCBtYW5hZ2VtZW50IHR5cGVzCisKK0NoZWNrSU1FSS1BcmcgOjo9IFNFUVVFTkNFIHsKKwlpbWVpCQkJSU1FSSwKKwlyZXF1ZXN0ZWRFcXVpcG1lbnRJbmZvCVJlcXVlc3RlZEVxdWlwbWVudEluZm8sCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK0NoZWNrSU1FSS1SZXMgOjo9IFNFUVVFTkNFIHsKKwllcXVpcG1lbnRTdGF0dXMJRXF1aXBtZW50U3RhdHVzCU9QVElPTkFMLAorCWJtdWVmCQlVRVNCSS1JdQkJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVswXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4ufQorCitSZXF1ZXN0ZWRFcXVpcG1lbnRJbmZvOjo9IEJJVCBTVFJJTkcgeworCWVxdWlwbWVudFN0YXR1cyAgKDApLAorCWJtdWVmICAoMSl9IChTSVpFICgyLi44KSkKKwktLSBleGNlcHRpb24gaGFuZGxpbmc6IHJlY2VwdGlvbiBvZiB1bmtub3duIGJpdCBhc3NpZ25tZW50cyBpbiB0aGUKKwktLSBSZXF1ZXN0ZWRFcXVpcG1lbnRJbmZvIGRhdGEgdHlwZSBzaGFsbCBiZSBkaXNjYXJkZWQgYnkgdGhlIHJlY2VpdmVyIAorCitVRVNCSS1JdSA6Oj0gU0VRVUVOQ0UgeworCXVlc2JpLUl1QQlbMF0gVUVTQkktSXVBCQkJCU9QVElPTkFMLAorCXVlc2JpLUl1QglbMV0gVUVTQkktSXVCCQkJCU9QVElPTkFMLAorCS4uLn0KKworVUVTQkktSXVBCQkJCTo6PSBCSVQgU1RSSU5HIChTSVpFKDEuLjEyOCkpCistLSBTZWUgM0dQUCBUUyAyNS40MTMKKworVUVTQkktSXVCCQkJCTo6PSBCSVQgU1RSSU5HIChTSVpFKDEuLjEyOCkpCistLSBTZWUgM0dQUCBUUyAyNS40MTMKKworRXF1aXBtZW50U3RhdHVzIDo6PSBFTlVNRVJBVEVEIHsKKwl3aGl0ZUxpc3RlZCAgKDApLAorCWJsYWNrTGlzdGVkICAoMSksCisJZ3JleUxpc3RlZCAgKDIpfQorCistLSBzdWJzY3JpYmVyIG1hbmFnZW1lbnQgdHlwZXMKKworSW5zZXJ0U3Vic2NyaWJlckRhdGFBcmcgOjo9IFNFUVVFTkNFIHsKKwlpbXNpCQkJWzBdIElNU0kJCU9QVElPTkFMLAorCUNPTVBPTkVOVFMgT0YJU3Vic2NyaWJlckRhdGEsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsxNF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiAsCQorCW5hZWEtUHJlZmVycmVkQ0kJWzE1XSBOQUVBLVByZWZlcnJlZENJCU9QVElPTkFMLAorCS0tIG5hZWEtUHJlZmVycmVkQ0kgaXMgaW5jbHVkZWQgYXQgdGhlIGRpc2NyZXRpb24gb2YgdGhlIEhMUiBvcGVyYXRvci4KKwlncHJzU3Vic2NyaXB0aW9uRGF0YQlbMTZdIEdQUlNTdWJzY3JpcHRpb25EYXRhCU9QVElPTkFMLAorCXJvYW1pbmdSZXN0cmljdGVkSW5TZ3NuRHVlVG9VbnN1cHBvcnRlZEZlYXR1cmUgWzIzXSAJTlVMTAkKKwkJCQkJCQlPUFRJT05BTCwgCisJbmV0d29ya0FjY2Vzc01vZGUJWzI0XSBOZXR3b3JrQWNjZXNzTW9kZQlPUFRJT05BTCwKKwlsc2FJbmZvcm1hdGlvbglbMjVdIExTQUluZm9ybWF0aW9uCU9QVElPTkFMLAorCWxtdS1JbmRpY2F0b3IJWzIxXQlOVUxMCQlPUFRJT05BTCwKKwlsY3NJbmZvcm1hdGlvbglbMjJdCUxDU0luZm9ybWF0aW9uCU9QVElPTkFMLAorCWlzdEFsZXJ0VGltZXIJWzI2XSBJU1QtQWxlcnRUaW1lclZhbHVlCU9QVElPTkFMLAorCXN1cGVyQ2hhcmdlclN1cHBvcnRlZEluSExSCVsyN10gQWdlSW5kaWNhdG9yCU9QVElPTkFMLAorCW1jLVNTLUluZm8JWzI4XSBNQy1TUy1JbmZvCU9QVElPTkFMLAorCWNzLUFsbG9jYXRpb25SZXRlbnRpb25Qcmlvcml0eQlbMjldIENTLUFsbG9jYXRpb25SZXRlbnRpb25Qcmlvcml0eQkJT1BUSU9OQUwsCisJc2dzbi1DQU1FTC1TdWJzY3JpcHRpb25JbmZvCVsxN10gU0dTTi1DQU1FTC1TdWJzY3JpcHRpb25JbmZvCU9QVElPTkFMLAorCWNoYXJnaW5nQ2hhcmFjdGVyaXN0aWNzIAlbMThdCUNoYXJnaW5nQ2hhcmFjdGVyaXN0aWNzIAlPUFRJT05BTCwKKwlhY2Nlc3NSZXN0cmljdGlvbkRhdGEJWzE5XSBBY2Nlc3NSZXN0cmljdGlvbkRhdGEJT1BUSU9OQUwsCisJaWNzLUluZGljYXRvcglbMjBdCUJPT0xFQU4JT1BUSU9OQUwsCisJZXBzLVN1YnNjcmlwdGlvbkRhdGEJWzMxXQlFUFMtU3Vic2NyaXB0aW9uRGF0YQlPUFRJT05BTCwKKwljc2ctU3Vic2NyaXB0aW9uRGF0YUxpc3QJWzMyXSBDU0ctU3Vic2NyaXB0aW9uRGF0YUxpc3QJT1BUSU9OQUwgfQorCS0tIElmIHRoZSBOZXR3b3JrIEFjY2VzcyBNb2RlIHBhcmFtZXRlciBpcyBzZW50LCBpdCBzaGFsbCBiZSBwcmVzZW50IG9ubHkgaW4gCisJLS0gdGhlIGZpcnN0IHNlcXVlbmNlIGlmIHNlcW1lbnRhdGlvbiBpcyB1c2VkCisKK0NTRy1TdWJzY3JpcHRpb25EYXRhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uNTApIE9GCisJCQkJQ1NHLVN1YnNjcmlwdGlvbkRhdGEKKworQ1NHLVN1YnNjcmlwdGlvbkRhdGEgOjo9IFNFUVVFTkNFIHsKKwljc2ctSWQJIAkJQ1NHLUlkLAorCWV4cGlyYXRpb25EYXRlCQlUaW1lCQlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJCUV4dGVuc2lvbkNvbnRhaW5lciAJT1BUSU9OQUwsCisJLi4ufQorCitDU0ctSWQgOjo9IEJJVCBTVFJJTkcgKFNJWkUgKDI3KSkKKwktLSBjb2RlZCBhY2NvcmRpbmcgdG8gM0dQUCBUUyAyMy4wMDMgWzE3XS4KKworVGltZSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg0KSkKKwktLSBPY3RldHMgYXJlIGNvZGVkIGFjY29yZGluZyB0byBJRVRGIFJGQyAzNTg4IFsxMzldCisKKworRVBTLVN1YnNjcmlwdGlvbkRhdGEgOjo9IFNFUVVFTkNFIHsKKwlhcG4tb2ktUmVwbGFjZW1lbnQJWzBdCUFQTi1PSS1SZXBsYWNlbWVudAlPUFRJT05BTCwKKwlyZnNwLWlkCQlbMl0JUkZTUC1JRAkJT1BUSU9OQUwsCisJYW1icgkJCVszXQlBTUJSCQlPUFRJT05BTCwKKwlhcG4tQ29uZmlndXJhdGlvblByb2ZpbGUJWzRdCUFQTi1Db25maWd1cmF0aW9uUHJvZmlsZQlPUFRJT05BTCwKKwlzdG4tc3IJCVs2XQlJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVs1XQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uIH0KKworQVBOLU9JLVJlcGxhY2VtZW50IDo6PSAgT0NURVQgU1RSSU5HIChTSVpFICg5Li4xMDApKQorCS0tIE9jdGV0cyBhcmUgY29kZWQgYXMgQVBOIE9wZXJhdG9yIElkZW50aWZpZXIgYWNjb3JkaW5nIHRvIFRTIDNHUFAgVFMgMjMuMDAzIFsxN10gCisKK1JGU1AtSUQgOjo9ICBJTlRFR0VSICgxLi4yNTYpCisKK0FQTi1Db25maWd1cmF0aW9uUHJvZmlsZSA6Oj0gU0VRVUVOQ0UgeworCWRlZmF1bHRDb250ZXh0CUNvbnRleHRJZCwKKwljb21wbGV0ZURhdGFMaXN0SW5jbHVkZWQJTlVMTAkJCU9QVElPTkFMLAorCQktLSBJZiBzZWdtZW50YXRpb24gaXMgdXNlZCwgY29tcGxldGVEYXRhTGlzdEluY2x1ZGVkIG1heSBvbmx5IGJlIHByZXNlbnQgaW4gdGhlCisJCS0tIGZpcnN0IHNlZ21lbnQgb2YgQVBOLUNvbmZpZ3VyYXRpb25Qcm9maWxlLgorCWVwc0RhdGFMaXN0CVsxXQlFUFMtRGF0YUxpc3QsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uIH0KKworRVBTLURhdGFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkFQTi1Db25maWd1cmF0aW9ucykgT0YKKwkJCQlBUE4tQ29uZmlndXJhdGlvbgorCisKK21heE51bU9mQVBOLUNvbmZpZ3VyYXRpb25zICBJTlRFR0VSIDo6PSA1MAorCisKK0FQTi1Db25maWd1cmF0aW9uIDo6PSBTRVFVRU5DRSB7CisJY29udGV4dElkCQlbMF0gQ29udGV4dElkLAorCXNlcnZlZFBhcnR5SVAtQWRkcmVzcwlbMV0gUERQLUFkZHJlc3MJT1BUSU9OQUwsCisJYXBuCQkJWzJdIEFQTiwKKwllcHMtcW9zLVN1YnNjcmliZWQJWzNdIEVQUy1Rb1MtU3Vic2NyaWJlZCwKKwlwZG4tZ3ctSWRlbnRpdHkJWzRdIFBETi1HVy1JZGVudGl0eQlPUFRJT05BTCwKKwlwZG4tZ3ctQWxsb2NhdGlvblR5cGUJWzVdIFBETi1HVy1BbGxvY2F0aW9uVHlwZQlPUFRJT05BTCwKKwl2cGxtbkFkZHJlc3NBbGxvd2VkCVs2XSBOVUxMCQlPUFRJT05BTCwKKwljaGFyZ2luZ0NoYXJhY3RlcmlzdGljcwlbN10gQ2hhcmdpbmdDaGFyYWN0ZXJpc3RpY3MJT1BUSU9OQUwsCisJYW1icgkJCVs4XSBBTUJSCQlPUFRJT05BTCwKKwlzcGVjaWZpY0FQTkluZm9MaXN0CVs5XSBTcGVjaWZpY0FQTkluZm9MaXN0CU9QVElPTkFMLAlleHRlbnNpb25Db250YWluZXIJWzEwXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uIH0KKworRVBTLVFvUy1TdWJzY3JpYmVkIDo6PSBTRVFVRU5DRSB7CisJcW9zLUNsYXNzLUlkZW50aWZpZXIJWzBdIFFvUy1DbGFzcy1JZGVudGlmaWVyLAorCWFsbG9jYXRpb24tUmV0ZW50aW9uLVByaW9yaXR5CVsxXSBBbGxvY2F0aW9uLVJldGVudGlvbi1Qcmlvcml0eSwKKwlleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4gfQorCitBTUJSIDo6PSBTRVFVRU5DRSB7CisJbWF4LVJlcXVlc3RlZEJhbmR3aWR0aC1VTAlbMF0gQmFuZHdpZHRoLAorCW1heC1SZXF1ZXN0ZWRCYW5kd2lkdGgtREwJWzFdIEJhbmR3aWR0aCwKKwlleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4gfQorCisKK1NwZWNpZmljQVBOSW5mb0xpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mU3BlY2lmaWNBUE5JbmZvcykgT0YKKwkJCQlTcGVjaWZpY0FQTkluZm8KKworbWF4TnVtT2ZTcGVjaWZpY0FQTkluZm9zICBJTlRFR0VSIDo6PSA1MAorCitTcGVjaWZpY0FQTkluZm8gOjo9IFNFUVVFTkNFIHsKKwlhcG4JCQlbMF0gQVBOLAorCXBkbi1ndy1JZGVudGl0eQlbMV0gUEROLUdXLUlkZW50aXR5LAorCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiB9CisKK0JhbmR3aWR0aCA6Oj0gSU5URUdFUiAKKwktLSBiaXRzIHBlciBzZWNvbmQKKworUW9TLUNsYXNzLUlkZW50aWZpZXIgOjo9IElOVEVHRVIgKDEuLjkpCisJLS0gdmFsdWVzIGFyZSBkZWZpbmVkIGluICAzR1BQIFRTIDI5LjIxMgorCisKKworQWxsb2NhdGlvbi1SZXRlbnRpb24tUHJpb3JpdHkgOjo9IFNFUVVFTkNFIHsKKwlwcmlvcml0eS1sZXZlbAlbMF0gSU5URUdFUiwKKwlwcmUtZW1wdGlvbi1jYXBhYmlsaXR5CVsxXSBCT09MRUFOCU9QVElPTkFMLAorCXByZS1lbXB0aW9uLXZ1bG5lcmFiaWxpdHkJWzJdIEJPT0xFQU4JT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVszXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uIH0KKworUEROLUdXLUlkZW50aXR5IDo6PSBTRVFVRU5DRSB7CisJcGRuLWd3LWlwdjQtQWRkcmVzcwlbMF0gUERQLUFkZHJlc3MJT1BUSU9OQUwsCisJcGRuLWd3LWlwdjYtQWRkcmVzcwlbMV0gUERQLUFkZHJlc3MJT1BUSU9OQUwsCisJcGRuLWd3LW5hbWUJWzJdIEZRRE4JCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbM10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiB9CisKK0ZRRE4gOjo9ICBPQ1RFVCBTVFJJTkcgKFNJWkUgKDkuLjEwMCkpCisKKworUEROLUdXLUFsbG9jYXRpb25UeXBlIDo6PSBFTlVNRVJBVEVEIHsKKwlzdGF0aWMJKDApLAorCWR5bmFtaWMJKDEpfQorCisKK0FjY2Vzc1Jlc3RyaWN0aW9uRGF0YSA6Oj0gQklUIFNUUklORyB7CisJdXRyYW5Ob3RBbGxvd2VkICgwKSwKKwlnZXJhbk5vdEFsbG93ZWQgKDEpLAorCWdhbk5vdEFsbG93ZWQgICAoMiksCisJaS1oc3BhLWV2b2x1dGlvbk5vdEFsbG93ZWQgKDMpLAorCWUtdXRyYW5Ob3RBbGxvd2VkICg0KSwKKwloby10b05vbjNHUFAtQWNjZXNzTm90QWxsb3dlZCAoNSkgfSAoU0laRSAoMi4uOCkpCisJLS0gZXhjZXB0aW9uIGhhbmRsaW5nOiAKKwktLSBhY2Nlc3MgcmVzdHJpY3Rpb24gZGF0YSByZWxhdGVkIHRvIGFuIGFjY2VzcyB0eXBlIG5vdCBzdXBwb3J0ZWQgYnkgYSBub2RlCisJLS0gc2hhbGwgYmUgaWdub3JlZAorCS0tIGJpdHMgNiB0byA3IHNoYWxsIGJlIGlnbm9yZWQgaWYgcmVjZWl2ZWQgYW5kIG5vdCB1bmRlcnN0b29kCisJCisKK0NTLUFsbG9jYXRpb25SZXRlbnRpb25Qcmlvcml0eSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxKSkKKwktLSBUaGlzIGRhdGEgdHlwZSBlbmNvZGVzIGVhY2ggcHJpb3JpdHkgbGV2ZWwgZGVmaW5lZCBpbiBUUyAyMy4xMDcgYXMgdGhlIGJpbmFyeSB2YWx1ZQorCS0tIG9mIHRoZSBwcmlvcml0eSBsZXZlbC4KKworSVNULUFsZXJ0VGltZXJWYWx1ZSA6Oj0gSU5URUdFUiAoMTUuLjI1NSkKKworTENTSW5mb3JtYXRpb24gOjo9IFNFUVVFTkNFIHsKKwlnbWxjLUxpc3QJWzBdCUdNTEMtTGlzdAlPUFRJT05BTCwKKwlsY3MtUHJpdmFjeUV4Y2VwdGlvbkxpc3QJWzFdCUxDUy1Qcml2YWN5RXhjZXB0aW9uTGlzdAlPUFRJT05BTCwKKwltb2xyLUxpc3QJCVsyXQlNT0xSLUxpc3QJT1BUSU9OQUwsCisJLi4uLAorCWFkZC1sY3MtUHJpdmFjeUV4Y2VwdGlvbkxpc3QJWzNdCUxDUy1Qcml2YWN5RXhjZXB0aW9uTGlzdAlPUFRJT05BTCB9CisJLS0gYWRkLWxjcy1Qcml2YWN5RXhjZXB0aW9uTGlzdCBtYXkgYmUgc2VudCBvbmx5IGlmIGxjcy1Qcml2YWN5RXhjZXB0aW9uTGlzdCBpcworCS0tIHByZXNlbnQgYW5kIGNvbnRhaW5zIGZvdXIgaW5zdGFuY2VzIG9mIExDUy1Qcml2YWN5Q2xhc3MuIElmIHRoZSBtZW50aW9uZWQgY29uZGl0aW9uCisJLS0gaXMgbm90IHNhdGlzZmllZCB0aGUgcmVjZWl2aW5nIG5vZGUgc2hhbGwgZGlzY2FyZCBhZGQtbGNzLVByaXZhY3lFeGNlcHRpb25MaXN0LgorCS0tIElmIGFuIExDUy1Qcml2YWN5Q2xhc3MgaXMgcmVjZWl2ZWQgYm90aCBpbiBsY3MtUHJpdmFjeUV4Y2VwdGlvbkxpc3QgYW5kIGluCisJLS0gYWRkLWxjcy1Qcml2YWN5RXhjZXB0aW9uTGlzdCB3aXRoIHRoZSBzYW1lIFNTLUNvZGUsIHRoZW4gdGhlIGVycm9yIHVuZXhwZWN0ZWQgCisJLS0gZGF0YSB2YWx1ZSBzaGFsbCBiZSByZXR1cm5lZC4KKworR01MQy1MaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkdNTEMpIE9GCisJCQkJSVNETi1BZGRyZXNzU3RyaW5nCisJLS0gaWYgc2VnbWVudGF0aW9uIGlzIHVzZWQsIHRoZSBjb21wbGV0ZSBHTUxDLUxpc3Qgc2hhbGwgYmUgc2VudCBpbiBvbmUgc2VnbWVudAorCittYXhOdW1PZkdNTEMgIElOVEVHRVIgOjo9IDUKKworTmV0d29ya0FjY2Vzc01vZGUgOjo9IEVOVU1FUkFURUQgeworCXBhY2tldEFuZENpcmN1aXQJKDApLAorCW9ubHlDaXJjdWl0CQkoMSksCisJb25seVBhY2tldAkJKDIpLAorCS4uLn0KKwktLSBpZiB1bmtub3duIHZhbHVlcyBhcmUgcmVjZWl2ZWQgaW4gTmV0d29ya0FjY2Vzc01vZGUKKwktLSB0aGV5IHNoYWxsIGJlIGRpc2NhcmRlZC4KKworR1BSU0RhdGFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlBEUC1Db250ZXh0cykgT0YKKwkJCQlQRFAtQ29udGV4dAorCittYXhOdW1PZlBEUC1Db250ZXh0cyAgSU5URUdFUiA6Oj0gNTAKKworUERQLUNvbnRleHQgOjo9IFNFUVVFTkNFIHsKKwlwZHAtQ29udGV4dElkCUNvbnRleHRJZCwKKwlwZHAtVHlwZQkJWzE2XSBQRFAtVHlwZSwKKwlwZHAtQWRkcmVzcwlbMTddIFBEUC1BZGRyZXNzCU9QVElPTkFMLAorCXFvcy1TdWJzY3JpYmVkCVsxOF0gUW9TLVN1YnNjcmliZWQsCisJdnBsbW5BZGRyZXNzQWxsb3dlZAlbMTldIE5VTEwJT1BUSU9OQUwsCisJYXBuCQkJWzIwXSBBUE4sCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsyMV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiAsCisJZXh0LVFvUy1TdWJzY3JpYmVkCVswXSBFeHQtUW9TLVN1YnNjcmliZWQJT1BUSU9OQUwsIAorCXBkcC1DaGFyZ2luZ0NoYXJhY3RlcmlzdGljcwlbMV0gQ2hhcmdpbmdDaGFyYWN0ZXJpc3RpY3MJT1BUSU9OQUwsCisJZXh0Mi1Rb1MtU3Vic2NyaWJlZAlbMl0gRXh0Mi1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTCwKKwktLSBleHQyLVFvUy1TdWJzY3JpYmVkIG1heSBiZSBwcmVzZW50IG9ubHkgaWYgZXh0LVFvUy1TdWJzY3JpYmVkIGlzIHByZXNlbnQuCisJZXh0My1Rb1MtU3Vic2NyaWJlZAlbM10gRXh0My1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTAorCS0tIGV4dDMtUW9TLVN1YnNjcmliZWQgbWF5IGJlIHByZXNlbnQgb25seSBpZiBleHQyLVFvUy1TdWJzY3JpYmVkIGlzIHByZXNlbnQuCisJIH0KKworQ29udGV4dElkIDo6PSBJTlRFR0VSICgxLi5tYXhOdW1PZlBEUC1Db250ZXh0cykKKworR1BSU1N1YnNjcmlwdGlvbkRhdGEgOjo9IFNFUVVFTkNFIHsKKwljb21wbGV0ZURhdGFMaXN0SW5jbHVkZWQJTlVMTAkJCU9QVElPTkFMLAorCQktLSBJZiBzZWdtZW50YXRpb24gaXMgdXNlZCwgY29tcGxldGVEYXRhTGlzdEluY2x1ZGVkIG1heSBvbmx5IGJlIHByZXNlbnQgaW4gdGhlCisJCS0tIGZpcnN0IHNlZ21lbnQgb2YgR1BSU1N1YnNjcmlwdGlvbkRhdGEuCisJZ3Byc0RhdGFMaXN0CVsxXQlHUFJTRGF0YUxpc3QsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uIH0KKworU0dTTi1DQU1FTC1TdWJzY3JpcHRpb25JbmZvIDo6PSBTRVFVRU5DRSB7CisJZ3Bycy1DU0kJCVswXQlHUFJTLUNTSQlPUFRJT05BTCwKKwltby1zbXMtQ1NJCVsxXQlTTVMtQ1NJCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiwKKwltdC1zbXMtQ1NJCVszXQlTTVMtQ1NJCU9QVElPTkFMLAorCW10LXNtc0NBTUVMVERQLUNyaXRlcmlhTGlzdAlbNF0JTVQtc21zQ0FNRUxURFAtQ3JpdGVyaWFMaXN0CU9QVElPTkFMLAorCW1nLWNzaQkJWzVdCU1HLUNTSQlPUFRJT05BTAorCX0KKworR1BSUy1DU0kgOjo9IFNFUVVFTkNFIHsKKwlncHJzLUNhbWVsVERQRGF0YUxpc3QJWzBdIEdQUlMtQ2FtZWxURFBEYXRhTGlzdAlPUFRJT05BTCwKKwljYW1lbENhcGFiaWxpdHlIYW5kbGluZwlbMV0gQ2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJbm90aWZpY2F0aW9uVG9DU0UJWzNdCU5VTEwJCU9QVElPTkFMLAorCWNzaS1BY3RpdmUJWzRdCU5VTEwJCU9QVElPTkFMLAorCS4uLn0KKy0tCW5vdGlmaWNhdGlvblRvQ1NFIGFuZCBjc2ktQWN0aXZlIHNoYWxsIG5vdCBiZSBwcmVzZW50IHdoZW4gR1BSUy1DU0kgaXMgc2VudCB0byBTR1NOLgorLS0JVGhleSBtYXkgb25seSBiZSBpbmNsdWRlZCBpbiBBVFNJL0FUTSBhY2svTlNEQyBtZXNzYWdlLiAKKy0tCUdQUlMtQ2FtZWxURFBEYXRhIGFuZCAgY2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcgc2hhbGwgYmUgcHJlc2VudCBpbiAKKy0tCXRoZSBHUFJTLUNTSSBzZXF1ZW5jZS4KKy0tCUlmIEdQUlMtQ1NJIGlzIHNlZ21lbnRlZCwgZ3Bycy1DYW1lbFREUERhdGFMaXN0IGFuZCBjYW1lbENhcGFiaWxpdHlIYW5kbGluZyBzaGFsbCBiZSAKKy0tCXByZXNlbnQgaW4gdGhlIGZpcnN0IHNlZ21lbnQKKworR1BSUy1DYW1lbFREUERhdGFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkNhbWVsVERQRGF0YSkgT0YKKwlHUFJTLUNhbWVsVERQRGF0YQorLS0JR1BSUy1DYW1lbFREUERhdGFMaXN0IHNoYWxsIG5vdCBjb250YWluIG1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YKKy0tCUdQUlMtQ2FtZWxURFBEYXRhIGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWUgZm9yIGdwcnMtVHJpZ2dlckRldGVjdGlvblBvaW50LgorCitHUFJTLUNhbWVsVERQRGF0YSA6Oj0gU0VRVUVOQ0UgeworCWdwcnMtVHJpZ2dlckRldGVjdGlvblBvaW50CVswXSBHUFJTLVRyaWdnZXJEZXRlY3Rpb25Qb2ludCwKKwlzZXJ2aWNlS2V5CVsxXSBTZXJ2aWNlS2V5LAorCWdzbVNDRi1BZGRyZXNzCVsyXSBJU0ROLUFkZHJlc3NTdHJpbmcsCisJZGVmYXVsdFNlc3Npb25IYW5kbGluZwlbM10gRGVmYXVsdEdQUlMtSGFuZGxpbmcsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVs0XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uCisJfQorCitEZWZhdWx0R1BSUy1IYW5kbGluZyA6Oj0gRU5VTUVSQVRFRCB7CisJY29udGludWVUcmFuc2FjdGlvbiAoMCkgLAorCXJlbGVhc2VUcmFuc2FjdGlvbiAoMSkgLAorCS4uLn0KKy0tIGV4Y2VwdGlvbiBoYW5kbGluZzoKKy0tIHJlY2VwdGlvbiBvZiB2YWx1ZXMgaW4gcmFuZ2UgMi0zMSBzaGFsbCBiZSB0cmVhdGVkIGFzICJjb250aW51ZVRyYW5zYWN0aW9uIgorLS0gcmVjZXB0aW9uIG9mIHZhbHVlcyBncmVhdGVyIHRoYW4gMzEgc2hhbGwgYmUgdHJlYXRlZCBhcyAicmVsZWFzZVRyYW5zYWN0aW9uIgorCitHUFJTLVRyaWdnZXJEZXRlY3Rpb25Qb2ludCA6Oj0gRU5VTUVSQVRFRCB7CisJYXR0YWNoIAkJCSgxKSwKKwlhdHRhY2hDaGFuZ2VPZlBvc2l0aW9uIAkJKDIpLAorCXBkcC1Db250ZXh0RXN0YWJsaXNobWVudCAJCSgxMSksCisJcGRwLUNvbnRleHRFc3RhYmxpc2htZW50QWNrbm93bGVkZ2VtZW50CSgxMiksCisJcGRwLUNvbnRleHRDaGFuZ2VPZlBvc2l0aW9uIAkJKDE0KSwKKwkuLi4gfQorLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgorLS0gRm9yIEdQUlMtQ2FtZWxURFBEYXRhIHNlcXVlbmNlcyBjb250YWluaW5nIHRoaXMgcGFyYW1ldGVyIHdpdGggYW55CistLSBvdGhlciB2YWx1ZSB0aGFuIHRoZSBvbmVzIGxpc3RlZCB0aGUgcmVjZWl2ZXIgc2hhbGwgaWdub3JlIHRoZSB3aG9sZSAKKy0tIEdQUlMtQ2FtZWxURFBEYXRhc2VxdWVuY2UuCisKK0FQTiA6Oj0gIE9DVEVUIFNUUklORyAoU0laRSAoMi4uNjMpKQorCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRvIFRTIDNHUFAgVFMgMjMuMDAzIFsxN10gCisKK1BEUC1UeXBlIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIpKQorCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRvIFRTIDNHUFAgVFMgMjkuMDYwIFsxMDVdCisKK1BEUC1BZGRyZXNzIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjE2KSkKKwktLSBPY3RldHMgYXJlIGNvZGVkIGFjY29yZGluZyB0byBUUyAzR1BQIFRTIDI5LjA2MCBbMTA1XQorCisJLS0gVGhlIHBvc3NpYmxlIHNpemUgdmFsdWVzIGFyZToKKwktLSAxLTcgb2N0ZXRzICBYLjI1IGFkZHJlc3MgdHlwZQorCS0tICA0ICBvY3RldHMgIElQdjQgYWRkcmVzcyB0eXBlCisJLS0gMTYgIG9jdGV0cyAgSXB2NiBhZGRyZXNzIHR5cGUKKworUW9TLVN1YnNjcmliZWQgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMykpCisJLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gVFMgM0dQUCBUUyAyNC4wMDggWzM1XSBRdWFsaXR5IG9mIFNlcnZpY2UgT2N0ZXRzIAorCS0tIDMtNS4KKworRXh0LVFvUy1TdWJzY3JpYmVkIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjkpKQorCS0tIE9DVEVUIDE6IAorCS0tICBBbGxvY2F0aW9uL1JldGVudGlvbiBQcmlvcml0eSAoVGhpcyBvY3RldCBlbmNvZGVzIGVhY2ggcHJpb3JpdHkgbGV2ZWwgZGVmaW5lZCBpbgorCS0tICAgICAyMy4xMDcgYXMgdGhlIGJpbmFyeSB2YWx1ZSBvZiB0aGUgcHJpb3JpdHkgbGV2ZWwsIGRlY2xhcmF0aW9uIGluIDI5LjA2MCkKKwktLSBPY3RldHMgMi05IGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gM0dQUCBUUyAyNC4wMDggWzM1XSBRdWFsaXR5IG9mIFNlcnZpY2UgT2N0ZXRzIAorCS0tIDYtMTMuCisKK0V4dDItUW9TLVN1YnNjcmliZWQgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uMykpCisJLS0gT2N0ZXRzIDEtMyBhcmUgY29kZWQgYWNjb3JkaW5nIHRvIDNHUFAgVFMgMjQuMDA4IFszNV0gUXVhbGl0eSBvZiBTZXJ2aWNlIE9jdGV0cyAxNC0xNi4KKwktLSBJZiBRdWFsaXR5IG9mIFNlcnZpY2UgaW5mb3JtYXRpb24gaXMgc3RydWN0dXJlZCB3aXRoIDE0IG9jdGV0IGxlbmd0aCwgdGhlbgorCS0tIE9jdGV0IDEgaXMgY29kZWQgYWNjb3JkaW5nIHRvIDNHUFAgVFMgMjQuMDA4IFszNV0gUXVhbGl0eSBvZiBTZXJ2aWNlIE9jdGV0IDE0LgorCitFeHQzLVFvUy1TdWJzY3JpYmVkIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjIpKQorCS0tIE9jdGV0cyAxLTIgYXJlIGNvZGVkIGFjY29yZGluZyB0byAzR1BQIFRTIDI0LjAwOCBbMzVdIFF1YWxpdHkgb2YgU2VydmljZSBPY3RldHMgMTctMTguCisKK0NoYXJnaW5nQ2hhcmFjdGVyaXN0aWNzIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDIpKQorCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRvIDNHUFAgVFMgMzIuMjE1LgorCitMU0FPbmx5QWNjZXNzSW5kaWNhdG9yIDo6PSBFTlVNRVJBVEVEIHsKKwlhY2Nlc3NPdXRzaWRlTFNBc0FsbG93ZWQgICgwKSwKKwlhY2Nlc3NPdXRzaWRlTFNBc1Jlc3RyaWN0ZWQgKDEpfQorCitMU0FEYXRhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZMU0FzKSBPRgorCQkJCUxTQURhdGEKKworbWF4TnVtT2ZMU0FzICBJTlRFR0VSIDo6PSAyMAorCitMU0FEYXRhIDo6PSBTRVFVRU5DRSB7CisJbHNhSWRlbnRpdHkJWzBdIExTQUlkZW50aXR5LAorCWxzYUF0dHJpYnV0ZXMJWzFdIExTQUF0dHJpYnV0ZXMsCisJbHNhQWN0aXZlTW9kZUluZGljYXRvcglbMl0gTlVMTAkJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVszXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4ufQorCitMU0FJbmZvcm1hdGlvbiA6Oj0gU0VRVUVOQ0UgeworCWNvbXBsZXRlRGF0YUxpc3RJbmNsdWRlZAlOVUxMCQkJT1BUSU9OQUwsCisKKwkJLS0gSWYgc2VnbWVudGF0aW9uIGlzIHVzZWQsIGNvbXBsZXRlRGF0YUxpc3RJbmNsdWRlZCBtYXkgb25seSBiZSBwcmVzZW50IGluIHRoZQorCQktLSBmaXJzdCBzZWdtZW50LgorCWxzYU9ubHlBY2Nlc3NJbmRpY2F0b3IJWzFdCUxTQU9ubHlBY2Nlc3NJbmRpY2F0b3IJT1BUSU9OQUwsCisJbHNhRGF0YUxpc3QJWzJdCUxTQURhdGFMaXN0CU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbM10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLn0KKworTFNBSWRlbnRpdHkgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMykpCisJLS0gT2N0ZXRzIGFyZSBjb2RlZCBhY2NvcmRpbmcgdG8gVFMgM0dQUCBUUyAyMy4wMDMgWzE3XQorCitMU0FBdHRyaWJ1dGVzIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQorCS0tIE9jdGV0cyBhcmUgY29kZWQgYWNjb3JkaW5nIHRvIFRTIDNHUFAgVFMgNDguMDA4IFs0OV0KKworU3Vic2NyaWJlckRhdGEgOjo9IFNFUVVFTkNFIHsKKwltc2lzZG4JCVsxXSBJU0ROLUFkZHJlc3NTdHJpbmcJT1BUSU9OQUwsCisJY2F0ZWdvcnkJCVsyXSBDYXRlZ29yeQlPUFRJT05BTCwKKwlzdWJzY3JpYmVyU3RhdHVzCVszXSBTdWJzY3JpYmVyU3RhdHVzCU9QVElPTkFMLAorCWJlYXJlclNlcnZpY2VMaXN0CVs0XSBCZWFyZXJTZXJ2aWNlTGlzdAlPUFRJT05BTCwKKwktLSBUaGUgZXhjZXB0aW9uIGhhbmRsaW5nIGZvciByZWNlcHRpb24gb2YgdW5zdXBwb3J0ZWQgLyBub3QgYWxsb2NhdGVkCisJLS0gYmVhcmVyU2VydmljZUNvZGVzIGlzIGRlZmluZWQgaW4gc2VjdGlvbiA4LjguMQorCXRlbGVzZXJ2aWNlTGlzdAlbNl0gVGVsZXNlcnZpY2VMaXN0CU9QVElPTkFMLAorCS0tIFRoZSBleGNlcHRpb24gaGFuZGxpbmcgZm9yIHJlY2VwdGlvbiBvZiB1bnN1cHBvcnRlZCAvIG5vdCBhbGxvY2F0ZWQKKwktLSB0ZWxlc2VydmljZUNvZGVzIGlzIGRlZmluZWQgaW4gc2VjdGlvbiA4LjguMQorCXByb3Zpc2lvbmVkU1MJWzddIEV4dC1TUy1JbmZvTGlzdAlPUFRJT05BTCwKKwlvZGItRGF0YQkJWzhdIE9EQi1EYXRhCU9QVElPTkFMLAorCXJvYW1pbmdSZXN0cmljdGlvbkR1ZVRvVW5zdXBwb3J0ZWRGZWF0dXJlICBbOV0gTlVMTAlPUFRJT05BTCwKKwlyZWdpb25hbFN1YnNjcmlwdGlvbkRhdGEJWzEwXSBab25lQ29kZUxpc3QJT1BUSU9OQUwsCisJdmJzU3Vic2NyaXB0aW9uRGF0YQlbMTFdIFZCU0RhdGFMaXN0CU9QVElPTkFMLAorCXZnY3NTdWJzY3JpcHRpb25EYXRhCVsxMl0gVkdDU0RhdGFMaXN0CU9QVElPTkFMLAorCXZsckNhbWVsU3Vic2NyaXB0aW9uSW5mbwlbMTNdIFZsckNhbWVsU3Vic2NyaXB0aW9uSW5mbwlPUFRJT05BTAorCX0KKworQ2F0ZWdvcnkgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCisJLS0gVGhlIGludGVybmFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIElUVS1UIFJlYyBRLjc2My4KKworU3Vic2NyaWJlclN0YXR1cyA6Oj0gRU5VTUVSQVRFRCB7CisJc2VydmljZUdyYW50ZWQgICgwKSwKKwlvcGVyYXRvckRldGVybWluZWRCYXJyaW5nICAoMSl9CisKK0JlYXJlclNlcnZpY2VMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkJlYXJlclNlcnZpY2VzKSBPRgorCQkJCUV4dC1CZWFyZXJTZXJ2aWNlQ29kZQorCittYXhOdW1PZkJlYXJlclNlcnZpY2VzICBJTlRFR0VSIDo6PSA1MAorCitUZWxlc2VydmljZUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mVGVsZXNlcnZpY2VzKSBPRgorCQkJCUV4dC1UZWxlc2VydmljZUNvZGUKKworbWF4TnVtT2ZUZWxlc2VydmljZXMgIElOVEVHRVIgOjo9IDIwCisKK09EQi1EYXRhIDo6PSBTRVFVRU5DRSB7CisJb2RiLUdlbmVyYWxEYXRhCU9EQi1HZW5lcmFsRGF0YSwKKwlvZGItSFBMTU4tRGF0YQlPREItSFBMTU4tRGF0YQlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLn0KKworT0RCLUdlbmVyYWxEYXRhIDo6PSBCSVQgU1RSSU5HIHsKKwlhbGxPRy1DYWxsc0JhcnJlZCAgKDApLAorCWludGVybmF0aW9uYWxPR0NhbGxzQmFycmVkICAoMSksCisJaW50ZXJuYXRpb25hbE9HQ2FsbHNOb3RUb0hQTE1OLUNvdW50cnlCYXJyZWQgICgyKSwKKwlpbnRlcnpvbmFsT0dDYWxsc0JhcnJlZCAoNiksCisJaW50ZXJ6b25hbE9HQ2FsbHNOb3RUb0hQTE1OLUNvdW50cnlCYXJyZWQgKDcpLAorCWludGVyem9uYWxPR0NhbGxzQW5kSW50ZXJuYXRpb25hbE9HQ2FsbHNOb3RUb0hQTE1OLUNvdW50cnlCYXJyZWQgKDgpLAorCXByZW1pdW1SYXRlSW5mb3JtYXRpb25PR0NhbGxzQmFycmVkICAoMyksCisJcHJlbWl1bVJhdGVFbnRlcnRhaW5lbWVudE9HQ2FsbHNCYXJyZWQgICg0KSwKKwlzcy1BY2Nlc3NCYXJyZWQgICg1KSwKKwlhbGxFQ1QtQmFycmVkICg5KSwKKwljaGFyZ2VhYmxlRUNULUJhcnJlZCAoMTApLAorCWludGVybmF0aW9uYWxFQ1QtQmFycmVkICgxMSksCisJaW50ZXJ6b25hbEVDVC1CYXJyZWQgKDEyKSwKKwlkb3VibHlDaGFyZ2VhYmxlRUNULUJhcnJlZCAoMTMpLAorCW11bHRpcGxlRUNULUJhcnJlZCAoMTQpLAorCWFsbFBhY2tldE9yaWVudGVkU2VydmljZXNCYXJyZWQgKDE1KSwKKwlyb2FtZXJBY2Nlc3NUb0hQTE1OLUFQLUJhcnJlZCAgKDE2KSwKKwlyb2FtZXJBY2Nlc3NUb1ZQTE1OLUFQLUJhcnJlZCAgKDE3KSwKKwlyb2FtaW5nT3V0c2lkZVBMTU5PRy1DYWxsc0JhcnJlZCAgKDE4KSwKKwlhbGxJQy1DYWxsc0JhcnJlZCAgKDE5KSwKKwlyb2FtaW5nT3V0c2lkZVBMTU5JQy1DYWxsc0JhcnJlZCAgKDIwKSwKKwlyb2FtaW5nT3V0c2lkZVBMTU5JQ291bnRyeUlDLUNhbGxzQmFycmVkICAoMjEpLAorCXJvYW1pbmdPdXRzaWRlUExNTi1CYXJyZWQgICgyMiksCisJcm9hbWluZ091dHNpZGVQTE1OLUNvdW50cnlCYXJyZWQgICgyMyksCisJcmVnaXN0cmF0aW9uQWxsQ0YtQmFycmVkICAoMjQpLAorCXJlZ2lzdHJhdGlvbkNGTm90VG9IUExNTi1CYXJyZWQgICgyNSksCisJcmVnaXN0cmF0aW9uSW50ZXJ6b25hbENGLUJhcnJlZCAgKDI2KSwKKwlyZWdpc3RyYXRpb25JbnRlcnpvbmFsQ0ZOb3RUb0hQTE1OLUJhcnJlZCAgKDI3KSwKKwlyZWdpc3RyYXRpb25JbnRlcm5hdGlvbmFsQ0YtQmFycmVkICAoMjgpfSAoU0laRSAoMTUuLjMyKSkKKwktLSBleGNlcHRpb24gaGFuZGxpbmc6IHJlY2VwdGlvbiBvZiB1bmtub3duIGJpdCBhc3NpZ25tZW50cyBpbiB0aGUKKwktLSBPREItR2VuZXJhbERhdGEgdHlwZSBzaGFsbCBiZSB0cmVhdGVkIGxpa2UgdW5zdXBwb3J0ZWQgT0RCLUdlbmVyYWxEYXRhCisJLS0gV2hlbiB0aGUgT0RCLUdlbmVyYWxEYXRhIHR5cGUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBITFIgZm9yIGEgZ2l2ZW4gc3Vic2NyaWJlciwgCisJLS0gaW4gTm90ZVN1YnNjcmliZXJEYXRhTW9kaWZpZWQgb3BlcmF0aW9uIHNlbnQgdG93YXJkIHRoZSBnc21TQ0YgCisJLS0gYWxsIGJpdHMgc2hhbGwgYmUgc2V0IHRvICJPIi4KKworT0RCLUhQTE1OLURhdGEgOjo9IEJJVCBTVFJJTkcgeworCXBsbW4tU3BlY2lmaWNCYXJyaW5nVHlwZTEgICgwKSwKKwlwbG1uLVNwZWNpZmljQmFycmluZ1R5cGUyICAoMSksCisJcGxtbi1TcGVjaWZpY0JhcnJpbmdUeXBlMyAgKDIpLAorCXBsbW4tU3BlY2lmaWNCYXJyaW5nVHlwZTQgICgzKX0gKFNJWkUgKDQuLjMyKSkKKwktLSBleGNlcHRpb24gaGFuZGxpbmc6IHJlY2VwdGlvbiBvZiB1bmtub3duIGJpdCBhc3NpZ25tZW50cyBpbiB0aGUKKwktLSBPREItSFBMTU4tRGF0YSB0eXBlIHNoYWxsIGJlIHRyZWF0ZWQgbGlrZSB1bnN1cHBvcnRlZCBPREItSFBMTU4tRGF0YSAKKwktLSBXaGVuIHRoZSBPREItSFBMTU4tRGF0YSB0eXBlIGlzIHJlbW92ZWQgZnJvbSB0aGUgSExSIGZvciBhIGdpdmVuIHN1YnNjcmliZXIsIAorCS0tIGluIE5vdGVTdWJzY3JpYmVyRGF0YU1vZGlmaWVkIG9wZXJhdGlvbiBzZW50IHRvd2FyZCB0aGUgZ3NtU0NGCisJLS0gYWxsIGJpdHMgc2hhbGwgYmUgc2V0IHRvICJPIi4KKworRXh0LVNTLUluZm9MaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlNTKSBPRgorCQkJCUV4dC1TUy1JbmZvCisKK0V4dC1TUy1JbmZvIDo6PSBDSE9JQ0UgeworCWZvcndhcmRpbmdJbmZvCVswXSBFeHQtRm9yd0luZm8sCisJY2FsbEJhcnJpbmdJbmZvCVsxXSBFeHQtQ2FsbEJhckluZm8sCisJY3VnLUluZm8JCVsyXSBDVUctSW5mbywKKwlzcy1EYXRhCQlbM10gRXh0LVNTLURhdGEsCisJZW1scHAtSW5mbwlbNF0gRU1MUFAtSW5mb30KKworRXh0LUZvcndJbmZvIDo6PSBTRVFVRU5DRSB7CisJc3MtQ29kZQkJU1MtQ29kZSwKKwlmb3J3YXJkaW5nRmVhdHVyZUxpc3QJRXh0LUZvcndGZWF0dXJlTGlzdCwKKwlleHRlbnNpb25Db250YWluZXIJWzBdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK0V4dC1Gb3J3RmVhdHVyZUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mRXh0LUJhc2ljU2VydmljZUdyb3VwcykgT0YKKwkJCQlFeHQtRm9yd0ZlYXR1cmUKKworRXh0LUZvcndGZWF0dXJlIDo6PSBTRVFVRU5DRSB7CisJYmFzaWNTZXJ2aWNlCUV4dC1CYXNpY1NlcnZpY2VDb2RlCU9QVElPTkFMLAorCXNzLVN0YXR1cwkJWzRdIEV4dC1TUy1TdGF0dXMsCisJZm9yd2FyZGVkVG9OdW1iZXIJWzVdIElTRE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKKwktLSBXaGVuIHRoaXMgZGF0YSB0eXBlIGlzIHNlbnQgZnJvbSBhbiBITFIgd2hpY2ggc3VwcG9ydHMgQ0FNRUwgUGhhc2UgMgorCS0tIHRvIGEgVkxSIHRoYXQgc3VwcG9ydHMgQ0FNRUwgUGhhc2UgMiB0aGUgVkxSIHNoYWxsIG5vdCBjaGVjayB0aGUKKwktLSBmb3JtYXQgb2YgdGhlIG51bWJlcgorCWZvcndhcmRlZFRvU3ViYWRkcmVzcwlbOF0gSVNETi1TdWJhZGRyZXNzU3RyaW5nCU9QVElPTkFMLAorCWZvcndhcmRpbmdPcHRpb25zCVs2XSBFeHQtRm9yd09wdGlvbnMJT1BUSU9OQUwsCisJbm9SZXBseUNvbmRpdGlvblRpbWUJWzddIEV4dC1Ob1JlcENvbmRUaW1lCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbOV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiwKKwlsb25nRm9yd2FyZGVkVG9OdW1iZXIJWzEwXSBGVE4tQWRkcmVzc1N0cmluZwlPUFRJT05BTCB9CisKK0V4dC1Gb3J3T3B0aW9ucyA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi41KSkKKworCS0tIE9DVEVUIDE6CisKKwktLSAgYml0IDg6IG5vdGlmaWNhdGlvbiB0byBmb3J3YXJkaW5nIHBhcnR5CisJLS0JMCAgbm8gbm90aWZpY2F0aW9uCisJLS0JMSAgbm90aWZpY2F0aW9uCisKKwktLSAgYml0IDc6IHJlZGlyZWN0aW5nIHByZXNlbnRhdGlvbgorCS0tCTAgbm8gcHJlc2VudGF0aW9uICAKKwktLQkxICBwcmVzZW50YXRpb24KKworCS0tICBiaXQgNjogbm90aWZpY2F0aW9uIHRvIGNhbGxpbmcgcGFydHkKKwktLQkwICBubyBub3RpZmljYXRpb24KKwktLQkxICBub3RpZmljYXRpb24KKworCS0tICBiaXQgNTogMCAodW51c2VkKQorCisJLS0gIGJpdHMgNDM6IGZvcndhcmRpbmcgcmVhc29uCisJLS0JMDAgIG1zIG5vdCByZWFjaGFibGUKKwktLQkwMSAgbXMgYnVzeQorCS0tCTEwICBubyByZXBseQorCS0tCTExICB1bmNvbmRpdGlvbmFsCisKKwktLSBiaXRzIDIxOiAwMCAodW51c2VkKQorCisJLS0gT0NURVRTIDItNTogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFRoZXkgc2hhbGwgYmUgZGlzY2FyZGVkIGlmCisJLS0gcmVjZWl2ZWQgYW5kIG5vdCB1bmRlcnN0b29kLgorCitFeHQtTm9SZXBDb25kVGltZSA6Oj0gSU5URUdFUiAoMS4uMTAwKQorCS0tIE9ubHkgdmFsdWVzIDUtMzAgYXJlIHVzZWQuCisJLS0gVmFsdWVzIGluIHRoZSByYW5nZXMgMS00IGFuZCAzMS0xMDAgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlCisJLS0gSWYgcmVjZWl2ZWQ6CisJLS0JCXZhbHVlcyAxLTQgc2hhbGwgYmUgbWFwcGVkIG9uIHRvIHZhbHVlIDUKKwktLQkJdmFsdWVzIDMxLTEwMCBzaGFsbCBiZSBtYXBwZWQgb24gdG8gdmFsdWUgMzAKKworRXh0LUNhbGxCYXJJbmZvIDo6PSBTRVFVRU5DRSB7CisJc3MtQ29kZQkJU1MtQ29kZSwKKwljYWxsQmFycmluZ0ZlYXR1cmVMaXN0CUV4dC1DYWxsQmFyRmVhdHVyZUxpc3QsCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK0V4dC1DYWxsQmFyRmVhdHVyZUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mRXh0LUJhc2ljU2VydmljZUdyb3VwcykgT0YKKwkJCQlFeHQtQ2FsbEJhcnJpbmdGZWF0dXJlCisKK0V4dC1DYWxsQmFycmluZ0ZlYXR1cmUgOjo9IFNFUVVFTkNFIHsKKwliYXNpY1NlcnZpY2UJRXh0LUJhc2ljU2VydmljZUNvZGUJT1BUSU9OQUwsCisJc3MtU3RhdHVzCQlbNF0gRXh0LVNTLVN0YXR1cywKKwlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLn0KKworQ1VHLUluZm8gOjo9IFNFUVVFTkNFIHsKKwljdWctU3Vic2NyaXB0aW9uTGlzdAlDVUctU3Vic2NyaXB0aW9uTGlzdCwKKwljdWctRmVhdHVyZUxpc3QJQ1VHLUZlYXR1cmVMaXN0CU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbMF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLn0KKworQ1VHLVN1YnNjcmlwdGlvbkxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDAuLm1heE51bU9mQ1VHKSBPRgorCQkJCUNVRy1TdWJzY3JpcHRpb24KKworQ1VHLVN1YnNjcmlwdGlvbiA6Oj0gU0VRVUVOQ0UgeworCWN1Zy1JbmRleAlDVUctSW5kZXgsCisJY3VnLUludGVybG9jawlDVUctSW50ZXJsb2NrLAorCWludHJhQ1VHLU9wdGlvbnMJSW50cmFDVUctT3B0aW9ucywKKwliYXNpY1NlcnZpY2VHcm91cExpc3QJRXh0LUJhc2ljU2VydmljZUdyb3VwTGlzdAlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJWzBdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK0NVRy1JbmRleCA6Oj0gSU5URUdFUiAoMC4uMzI3NjcpCisJLS0gVGhlIGludGVybmFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIEVUUyAzMDAgMTM4LgorCitDVUctSW50ZXJsb2NrIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDQpKQorCitJbnRyYUNVRy1PcHRpb25zIDo6PSBFTlVNRVJBVEVEIHsKKwlub0NVRy1SZXN0cmljdGlvbnMgICgwKSwKKwljdWdJQy1DYWxsQmFycmVkICAoMSksCisJY3VnT0ctQ2FsbEJhcnJlZCAgKDIpfQorCittYXhOdW1PZkNVRyAgSU5URUdFUiA6Oj0gMTAKKworQ1VHLUZlYXR1cmVMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkV4dC1CYXNpY1NlcnZpY2VHcm91cHMpIE9GCisJCQkJQ1VHLUZlYXR1cmUKKworRXh0LUJhc2ljU2VydmljZUdyb3VwTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZFeHQtQmFzaWNTZXJ2aWNlR3JvdXBzKSBPRgorCQkJCUV4dC1CYXNpY1NlcnZpY2VDb2RlCisKK21heE51bU9mRXh0LUJhc2ljU2VydmljZUdyb3VwcyAgSU5URUdFUiA6Oj0gMzIKKworQ1VHLUZlYXR1cmUgOjo9IFNFUVVFTkNFIHsKKwliYXNpY1NlcnZpY2UJRXh0LUJhc2ljU2VydmljZUNvZGUJT1BUSU9OQUwsCisJcHJlZmVyZW50aWFsQ1VHLUluZGljYXRvcglDVUctSW5kZXgJT1BUSU9OQUwsCisJaW50ZXJDVUctUmVzdHJpY3Rpb25zCUludGVyQ1VHLVJlc3RyaWN0aW9ucywKKwlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLn0KKworSW50ZXJDVUctUmVzdHJpY3Rpb25zIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEpKQorCisJLS0gYml0cyA4NzY1NDM6IDAwMDAwMCAodW51c2VkKQorCS0tIEV4Y2VwdGlvbiBoYW5kbGluZzoKKwktLSBiaXRzIDg3NjU0MyBzaGFsbCBiZSBpZ25vcmVkIGlmIHJlY2VpdmVkIGFuZCBub3QgdW5kZXJzdG9vZAorCisJLS0gYml0cyAyMQorCS0tCTAwICBDVUcgb25seSBmYWNpbGl0aWVzCisJLS0JMDEgIENVRyB3aXRoIG91dGdvaW5nIGFjY2VzcworCS0tCTEwICBDVUcgd2l0aCBpbmNvbWluZyBhY2Nlc3MKKwktLQkxMSAgQ1VHIHdpdGggYm90aCBvdXRnb2luZyBhbmQgaW5jb21pbmcgYWNjZXNzCisKK0V4dC1TUy1EYXRhIDo6PSBTRVFVRU5DRSB7CisJc3MtQ29kZQkJU1MtQ29kZSwKKwlzcy1TdGF0dXMJWzRdIEV4dC1TUy1TdGF0dXMsCisJc3MtU3Vic2NyaXB0aW9uT3B0aW9uCVNTLVN1YnNjcmlwdGlvbk9wdGlvbglPUFRJT05BTCwKKwliYXNpY1NlcnZpY2VHcm91cExpc3QJRXh0LUJhc2ljU2VydmljZUdyb3VwTGlzdAlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJWzVdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK0xDUy1Qcml2YWN5RXhjZXB0aW9uTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZQcml2YWN5Q2xhc3MpIE9GCisJCQkJTENTLVByaXZhY3lDbGFzcworCittYXhOdW1PZlByaXZhY3lDbGFzcyAgSU5URUdFUiA6Oj0gNAorCitMQ1MtUHJpdmFjeUNsYXNzIDo6PSBTRVFVRU5DRSB7CisJc3MtQ29kZQkJU1MtQ29kZSwKKwlzcy1TdGF0dXMJCUV4dC1TUy1TdGF0dXMsCisJbm90aWZpY2F0aW9uVG9NU1VzZXIJWzBdIE5vdGlmaWNhdGlvblRvTVNVc2VyCU9QVElPTkFMLAorCS0tIG5vdGlmaWNhdGlvblRvTVNVc2VyIG1heSBiZSBzZW50IG9ubHkgZm9yIFNTLWNvZGVzIGNhbGxTZXNzaW9uUmVsYXRlZAorCS0tIGFuZCBjYWxsU2Vzc2lvblVucmVsYXRlZC4gSWYgbm90IHJlY2VpdmVkIGZvciBTUy1jb2RlcyBjYWxsU2Vzc2lvblJlbGF0ZWQKKwktLSBhbmQgY2FsbFNlc3Npb25VbnJlbGF0ZWQsCisJLS0gdGhlIGRlZmF1bHQgdmFsdWVzIGFjY29yZGluZyB0byAzR1BQIFRTIDIzLjI3MSBzaGFsbCBiZSBhc3N1bWVkLgorCWV4dGVybmFsQ2xpZW50TGlzdAlbMV0gRXh0ZXJuYWxDbGllbnRMaXN0CU9QVElPTkFMLAorCS0tIGV4dGVybmFsQ2xpZW50TGlzdCBtYXkgYmUgc2VudCBvbmx5IGZvciBTUy1jb2RlIGNhbGxTZXNzaW9uVW5yZWxhdGVkIHRvIGEKKwktLSB2aXNpdGVkIG5vZGUgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IExDUyBSZWxlYXNlIDQgb3IgbGF0ZXIgdmVyc2lvbnMuCisJLS0gZXh0ZXJuYWxDbGllbnRMaXN0IG1heSBiZSBzZW50IG9ubHkgZm9yIFNTLWNvZGVzIGNhbGxTZXNzaW9uVW5yZWxhdGVkIGFuZAorCS0tIGNhbGxTZXNzaW9uUmVsYXRlZCB0byBhIHZpc2l0ZWQgbm9kZSB0aGF0IHN1cHBvcnRzIExDUyBSZWxlYXNlIDQgb3IgbGF0ZXIgdmVyc2lvbnMuCisJcGxtbkNsaWVudExpc3QJWzJdIFBMTU5DbGllbnRMaXN0CU9QVElPTkFMLAorCS0tIHBsbW5DbGllbnRMaXN0IG1heSBiZSBzZW50IG9ubHkgZm9yIFNTLWNvZGUgcGxtbm9wZXJhdG9yLgorCWV4dGVuc2lvbkNvbnRhaW5lcglbM10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiwKKwlleHQtZXh0ZXJuYWxDbGllbnRMaXN0CVs0XSBFeHQtRXh0ZXJuYWxDbGllbnRMaXN0CU9QVElPTkFMLAorCS0tIEV4dC1leHRlcm5hbENsaWVudExpc3QgbWF5IGJlIHNlbnQgb25seSBpZiB0aGUgdmlzaXRlZCBub2RlIHN1cHBvcnRzIExDUyBSZWxlYXNlIDQgb3IKKwktLSBsYXRlciB2ZXJzaW9ucywgdGhlIHVzZXIgZGlkIHNwZWNpZnkgbW9yZSB0aGFuIDUgY2xpZW50cywgYW5kIFdoaXRlIEJvb2sgU0NDUCBpcyB1c2VkLgorCXNlcnZpY2VUeXBlTGlzdAlbNV0JU2VydmljZVR5cGVMaXN0CU9QVElPTkFMCisJLS0gc2VydmljZVR5cGVMaXN0IG1heSBiZSBzZW50IG9ubHkgZm9yIFNTLWNvZGUgc2VydmljZVR5cGUgYW5kIGlmIHRoZSB2aXNpdGVkIG5vZGUKKwktLSBzdXBwb3J0cyBMQ1MgUmVsZWFzZSA1IG9yIGxhdGVyIHZlcnNpb25zLgorCS0tIAorCS0tIGlmIHNlZ21lbnRhdGlvbiBpcyB1c2VkLCB0aGUgY29tcGxldGUgTENTLVByaXZhY3lDbGFzcyBzaGFsbCBiZSBzZW50IGluIG9uZSBzZWdtZW50Cit9CisKK0V4dGVybmFsQ2xpZW50TGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMC4ubWF4TnVtT2ZFeHRlcm5hbENsaWVudCkgT0YKKwkJCQlFeHRlcm5hbENsaWVudAorCittYXhOdW1PZkV4dGVybmFsQ2xpZW50ICBJTlRFR0VSIDo6PSA1CisKK1BMTU5DbGllbnRMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlBMTU5DbGllbnQpIE9GCisJCQkJTENTQ2xpZW50SW50ZXJuYWxJRAorCittYXhOdW1PZlBMTU5DbGllbnQgIElOVEVHRVIgOjo9IDUKKworRXh0LUV4dGVybmFsQ2xpZW50TGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZFeHQtRXh0ZXJuYWxDbGllbnQpIE9GCisJCQkJRXh0ZXJuYWxDbGllbnQKKworbWF4TnVtT2ZFeHQtRXh0ZXJuYWxDbGllbnQgIElOVEVHRVIgOjo9IDM1CisKK0V4dGVybmFsQ2xpZW50IDo6PSBTRVFVRU5DRSB7CisJY2xpZW50SWRlbnRpdHkJTENTQ2xpZW50RXh0ZXJuYWxJRCwKKwlnbWxjLVJlc3RyaWN0aW9uCVswXSBHTUxDLVJlc3RyaWN0aW9uCU9QVElPTkFMLAorCW5vdGlmaWNhdGlvblRvTVNVc2VyCVsxXSBOb3RpZmljYXRpb25Ub01TVXNlcglPUFRJT05BTCwKKwktLSBJZiBub3RpZmljYXRpb25Ub01TVXNlciBpcyBub3QgcmVjZWl2ZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGFjY29yZGluZyB0byAKKwktLSAzR1BQIFRTIDIzLjI3MSBzaGFsbCBiZSBhc3N1bWVkLgorCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiB9CisKK0dNTEMtUmVzdHJpY3Rpb24gOjo9IEVOVU1FUkFURUQgeworCWdtbGMtTGlzdAkJKDApLAorCWhvbWUtQ291bnRyeQkoMSkgLAorCS4uLiB9CistLSBleGNlcHRpb24gaGFuZGxpbmc6CistLSBBdCByZWNlcHRpb24gb2YgYW55IG90aGVyIHZhbHVlIHRoYW4gdGhlIG9uZXMgbGlzdGVkIHRoZSByZWNlaXZlciBzaGFsbCBpZ25vcmUKKy0tIEdNTEMtUmVzdHJpY3Rpb24uCisKK05vdGlmaWNhdGlvblRvTVNVc2VyIDo6PSBFTlVNRVJBVEVEIHsKKwlub3RpZnlMb2NhdGlvbkFsbG93ZWQJKDApLAorCW5vdGlmeUFuZFZlcmlmeS1Mb2NhdGlvbkFsbG93ZWRJZk5vUmVzcG9uc2UJKDEpLAorCW5vdGlmeUFuZFZlcmlmeS1Mb2NhdGlvbk5vdEFsbG93ZWRJZk5vUmVzcG9uc2UJKDIpLAorCS4uLiwKKwlsb2NhdGlvbk5vdEFsbG93ZWQgKDMpIH0KKy0tIGV4Y2VwdGlvbiBoYW5kbGluZzoKKy0tIEF0IHJlY2VwdGlvbiBvZiBhbnkgb3RoZXIgdmFsdWUgdGhhbiB0aGUgb25lcyBsaXN0ZWQgdGhlIHJlY2VpdmVyIHNoYWxsIGlnbm9yZQorLS0gTm90aWZpY2F0aW9uVG9NU1VzZXIuCisKK1NlcnZpY2VUeXBlTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZTZXJ2aWNlVHlwZSkgT0YKKwkJCQlTZXJ2aWNlVHlwZQorCittYXhOdW1PZlNlcnZpY2VUeXBlICBJTlRFR0VSIDo6PSAzMgorCitTZXJ2aWNlVHlwZSA6Oj0gU0VRVUVOQ0UgeworCXNlcnZpY2VUeXBlSWRlbnRpdHkJTENTU2VydmljZVR5cGVJRCwKKwlnbWxjLVJlc3RyaWN0aW9uCVswXSBHTUxDLVJlc3RyaWN0aW9uCU9QVElPTkFMLAorCW5vdGlmaWNhdGlvblRvTVNVc2VyCVsxXSBOb3RpZmljYXRpb25Ub01TVXNlcglPUFRJT05BTCwKKwktLSBJZiBub3RpZmljYXRpb25Ub01TVXNlciBpcyBub3QgcmVjZWl2ZWQsIHRoZSBkZWZhdWx0IHZhbHVlIGFjY29yZGluZyB0byAKKwktLSAzR1BQIFRTIDIzLjI3MSBzaGFsbCBiZSBhc3N1bWVkLgorCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiB9CisKK01PTFItTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZNT0xSLUNsYXNzKSBPRgorCQkJCU1PTFItQ2xhc3MKKworbWF4TnVtT2ZNT0xSLUNsYXNzICBJTlRFR0VSIDo6PSAzCisKK01PTFItQ2xhc3MgOjo9IFNFUVVFTkNFIHsKKwlzcy1Db2RlCQlTUy1Db2RlLAorCXNzLVN0YXR1cwkJRXh0LVNTLVN0YXR1cywKKwlleHRlbnNpb25Db250YWluZXIJWzBdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK1pvbmVDb2RlTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2Zab25lQ29kZXMpCisJCQkJT0YgWm9uZUNvZGUKKworWm9uZUNvZGUgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMikpCisJLS0gaW50ZXJuYWwgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gVFMgM0dQUCBUUyAyMy4wMDMgWzE3XQorCittYXhOdW1PZlpvbmVDb2RlcyAgSU5URUdFUiA6Oj0gMTAKKworSW5zZXJ0U3Vic2NyaWJlckRhdGFSZXMgOjo9IFNFUVVFTkNFIHsKKwl0ZWxlc2VydmljZUxpc3QJWzFdIFRlbGVzZXJ2aWNlTGlzdAlPUFRJT05BTCwKKwliZWFyZXJTZXJ2aWNlTGlzdAlbMl0gQmVhcmVyU2VydmljZUxpc3QJT1BUSU9OQUwsCisJc3MtTGlzdAkJWzNdIFNTLUxpc3QJT1BUSU9OQUwsCisJb2RiLUdlbmVyYWxEYXRhCVs0XSBPREItR2VuZXJhbERhdGEJT1BUSU9OQUwsCisJcmVnaW9uYWxTdWJzY3JpcHRpb25SZXNwb25zZQlbNV0gUmVnaW9uYWxTdWJzY3JpcHRpb25SZXNwb25zZQlPUFRJT05BTCwKKwlzdXBwb3J0ZWRDYW1lbFBoYXNlcwlbNl0gU3VwcG9ydGVkQ2FtZWxQaGFzZXMJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVs3XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uICwKKwlvZmZlcmVkQ2FtZWw0Q1NJcwlbOF0gT2ZmZXJlZENhbWVsNENTSXMJT1BUSU9OQUwsCisJc3VwcG9ydGVkRmVhdHVyZXMJWzldIFN1cHBvcnRlZEZlYXR1cmVzCU9QVElPTkFMIH0KKworUmVnaW9uYWxTdWJzY3JpcHRpb25SZXNwb25zZSA6Oj0gRU5VTUVSQVRFRCB7CisJbmV0d29ya05vZGUtQXJlYVJlc3RyaWN0ZWQJKDApLAorCXRvb01hbnlab25lQ29kZXMJKDEpLAorCXpvbmVDb2Rlc0NvbmZsaWN0CSgyKSwKKwlyZWdpb25hbFN1YnNjTm90U3VwcG9ydGVkCSgzKX0KKworRGVsZXRlU3Vic2NyaWJlckRhdGFBcmcgOjo9IFNFUVVFTkNFIHsKKwlpbXNpCQkJWzBdIElNU0ksCisJYmFzaWNTZXJ2aWNlTGlzdAlbMV0gQmFzaWNTZXJ2aWNlTGlzdAlPUFRJT05BTCwKKwktLSBUaGUgZXhjZXB0aW9uIGhhbmRsaW5nIGZvciByZWNlcHRpb24gb2YgdW5zdXBwb3J0ZWQvbm90IGFsbG9jYXRlZAorCS0tIGJhc2ljU2VydmljZUNvZGVzIGlzIGRlZmluZWQgaW4gc2VjdGlvbiA2LjguMgorCXNzLUxpc3QJCVsyXSBTUy1MaXN0CU9QVElPTkFMLAorCXJvYW1pbmdSZXN0cmljdGlvbkR1ZVRvVW5zdXBwb3J0ZWRGZWF0dXJlIFs0XSBOVUxMCU9QVElPTkFMLAorCXJlZ2lvbmFsU3Vic2NyaXB0aW9uSWRlbnRpZmllcglbNV0gWm9uZUNvZGUJT1BUSU9OQUwsCisJdmJzR3JvdXBJbmRpY2F0aW9uCVs3XSBOVUxMCQlPUFRJT05BTCwKKwl2Z2NzR3JvdXBJbmRpY2F0aW9uCVs4XSBOVUxMCSAJT1BUSU9OQUwsCisJY2FtZWxTdWJzY3JpcHRpb25JbmZvV2l0aGRyYXcJWzldIE5VTEwJIAlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJWzZdIEV4dGVuc2lvbkNvbnRhaW5lciAJT1BUSU9OQUwsCisJLi4uLAorCWdwcnNTdWJzY3JpcHRpb25EYXRhV2l0aGRyYXcJWzEwXSBHUFJTU3Vic2NyaXB0aW9uRGF0YVdpdGhkcmF3CU9QVElPTkFMLAorCXJvYW1pbmdSZXN0cmljdGVkSW5TZ3NuRHVlVG9VbnN1cHBwb3J0ZWRGZWF0dXJlIFsxMV0gTlVMTAlPUFRJT05BTCwKKwlsc2FJbmZvcm1hdGlvbldpdGhkcmF3CVsxMl0gTFNBSW5mb3JtYXRpb25XaXRoZHJhdwlPUFRJT05BTCwKKwlnbWxjLUxpc3RXaXRoZHJhdyAJWzEzXQlOVUxMCQlPUFRJT05BTCwKKwlpc3RJbmZvcm1hdGlvbldpdGhkcmF3CVsxNF0gTlVMTAkJT1BUSU9OQUwsCisJc3BlY2lmaWNDU0ktV2l0aGRyYXcJWzE1XSBTcGVjaWZpY0NTSS1XaXRoZHJhdwlPUFRJT05BTCwKKwljaGFyZ2luZ0NoYXJhY3RlcmlzdGljc1dpdGhkcmF3CVsxNl0gTlVMTAkJT1BUSU9OQUwsCisJc3RuLXNyV2l0aGRyYXcJWzE3XSBOVUxMCQlPUFRJT05BTCwKKwllcHNTdWJzY3JpcHRpb25EYXRhV2l0aGRyYXcJWzE4XSBFUFMtU3Vic2NyaXB0aW9uRGF0YVdpdGhkcmF3CU9QVElPTkFMLAorCWFwbi1vaS1yZXBsYWNlbWVudFdpdGhkcmF3CVsxOV0gTlVMTAkJT1BUSU9OQUwsCisJY3NnLVN1YnNjcmlwdGlvbkRlbGV0ZWQJWzIwXQlOVUxMCQlPUFRJT05BTCB9CisKK1NwZWNpZmljQ1NJLVdpdGhkcmF3IDo6PSBCSVQgU1RSSU5HIHsKKwlvLWNzaSAoMCksCisJc3MtY3NpICgxKSwKKwl0aWYtY3NpICgyKSwKKwlkLWNzaSAoMyksCisJdnQtY3NpICg0KSwKKwltby1zbXMtY3NpICg1KSwKKwltLWNzaSAoNiksCisJZ3Bycy1jc2kgKDcpLAorCXQtY3NpICg4KSwKKwltdC1zbXMtY3NpICg5KSwKKwltZy1jc2kgKDEwKSwKKwlvLUlNLUNTSSAoMTEpLCAKKwlkLUlNLUNTSSAoMTIpLAorCXZ0LUlNLUNTSSAoMTMpIH0gKFNJWkUoOC4uMzIpKSAKKy0tIGV4Y2VwdGlvbiBoYW5kbGluZzoKKy0tIGJpdHMgMTEgdG8gMzEgc2hhbGwgYmUgaWdub3JlZCBpZiByZWNlaXZlZCBieSBhIG5vbi1JUCBNdWx0aW1lZGlhIENvcmUgTmV0d29yayBlbnRpdHkuCistLSBiaXRzIDAtMTAgYW5kIDE0LTMxIHNoYWxsIGJlIGlnbm9yZWQgaWYgcmVjZWl2ZWQgYnkgYW4gSVAgTXVsdGltZWRpYSBDb3JlIE5ldHdvcmsgZW50aXR5LgorLS0gYml0cyAxMS0xMyBhcmUgb25seSBhcHBsaWNhYmxlIGluIGFuIElQIE11bHRpbWVkaWEgQ29yZSBOZXR3b3JrLgorLS0gQml0IDggYW5kIGJpdHMgMTEtMTMgYXJlIG9ubHkgYXBwbGljYWJsZSBmb3IgdGhlIE5vdGVTdWJzY3JpYmVyRGF0YU1vZGlmaWVkIG9wZXJhdGlvbi4KKworR1BSU1N1YnNjcmlwdGlvbkRhdGFXaXRoZHJhdyA6Oj0gQ0hPSUNFIHsKKwlhbGxHUFJTRGF0YQlOVUxMLAorCWNvbnRleHRJZExpc3QJQ29udGV4dElkTGlzdH0KKworRVBTLVN1YnNjcmlwdGlvbkRhdGFXaXRoZHJhdyA6Oj0gQ0hPSUNFIHsKKwlhbGxFUFMtRGF0YQlOVUxMLAorCWNvbnRleHRJZExpc3QJQ29udGV4dElkTGlzdH0KKworQ29udGV4dElkTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZQRFAtQ29udGV4dHMpIE9GCisJCQkJQ29udGV4dElkCisKK0xTQUluZm9ybWF0aW9uV2l0aGRyYXcgOjo9IENIT0lDRSB7CisJYWxsTFNBRGF0YQlOVUxMLAorCWxzYUlkZW50aXR5TGlzdAlMU0FJZGVudGl0eUxpc3QgfQorCitMU0FJZGVudGl0eUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mTFNBcykgT0YKKwkJCQlMU0FJZGVudGl0eQorCitCYXNpY1NlcnZpY2VMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkJhc2ljU2VydmljZXMpIE9GCisJCQkJRXh0LUJhc2ljU2VydmljZUNvZGUKKworbWF4TnVtT2ZCYXNpY1NlcnZpY2VzICBJTlRFR0VSIDo6PSA3MAorCitEZWxldGVTdWJzY3JpYmVyRGF0YVJlcyA6Oj0gU0VRVUVOQ0UgeworCXJlZ2lvbmFsU3Vic2NyaXB0aW9uUmVzcG9uc2UJWzBdIFJlZ2lvbmFsU3Vic2NyaXB0aW9uUmVzcG9uc2UJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK1ZsckNhbWVsU3Vic2NyaXB0aW9uSW5mbyA6Oj0gU0VRVUVOQ0UgeworCW8tQ1NJCQlbMF0gTy1DU0kJCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbMV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiwKKwlzcy1DU0kJCVsyXSBTUy1DU0kJT1BUSU9OQUwsCisJby1CY3NtQ2FtZWxURFAtQ3JpdGVyaWFMaXN0CVs0XSBPLUJjc21DYW1lbFREUENyaXRlcmlhTGlzdAlPUFRJT05BTCwKKwl0aWYtQ1NJCQlbM10gTlVMTAlPUFRJT05BTCwKKwltLUNTSQkJWzVdIE0tQ1NJCU9QVElPTkFMLAorCW1vLXNtcy1DU0kJWzZdIFNNUy1DU0kJT1BUSU9OQUwsCisJdnQtQ1NJCQlbN10gVC1DU0kJT1BUSU9OQUwsCisJdC1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYUxpc3QJWzhdIFQtQkNTTS1DQU1FTC1URFAtQ3JpdGVyaWFMaXN0CU9QVElPTkFMLAorCWQtQ1NJCQlbOV0gRC1DU0kJT1BUSU9OQUwsCisJbXQtc21zLUNTSQlbMTBdIFNNUy1DU0kJT1BUSU9OQUwsCisJbXQtc21zQ0FNRUxURFAtQ3JpdGVyaWFMaXN0CVsxMV0JTVQtc21zQ0FNRUxURFAtQ3JpdGVyaWFMaXN0CU9QVElPTkFMCisJfQorCitNVC1zbXNDQU1FTFREUC1Dcml0ZXJpYUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLiBtYXhOdW1PZkNhbWVsVERQRGF0YSkgT0YKKwlNVC1zbXNDQU1FTFREUC1Dcml0ZXJpYQorCitNVC1zbXNDQU1FTFREUC1Dcml0ZXJpYSA6Oj0gU0VRVUVOQ0UgeworCXNtcy1UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQJU01TLVRyaWdnZXJEZXRlY3Rpb25Qb2ludCwKKwl0cGR1LVR5cGVDcml0ZXJpb24JWzBdCVRQRFUtVHlwZUNyaXRlcmlvbgkJT1BUSU9OQUwsCisJLi4uIH0KKworVFBEVS1UeXBlQ3JpdGVyaW9uIDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlRQRFVUeXBlcykgT0YKKwlNVC1TTVMtVFBEVS1UeXBlCisKKworbWF4TnVtT2ZUUERVVHlwZXMgSU5URUdFUiA6Oj0gNQorCitNVC1TTVMtVFBEVS1UeXBlIDo6PSBFTlVNRVJBVEVEIHsKKwlzbXMtREVMSVZFUiAJKDApLAorCXNtcy1TVUJNSVQtUkVQT1JUIAkoMSksCisJc21zLVNUQVRVUy1SRVBPUlQgCSgyKSwKKwkuLi4gfQorCistLQlleGNlcHRpb24gaGFuZGxpbmc6CistLQlGb3IgVFBEVS1UeXBlQ3JpdGVyaW9uIHNlcXVlbmNlcyBjb250YWluaW5nIHRoaXMgcGFyYW1ldGVyIHdpdGggYW55CistLQlvdGhlciB2YWx1ZSB0aGFuIHRoZSBvbmVzIGxpc3RlZCBhYm92ZSB0aGUgcmVjZWl2ZXIgc2hhbGwgaWdub3JlIAorLS0JdGhlIHdob2xlIFRQRFUtVHlwZUNyaXRlcmlvbiBzZXF1ZW5jZS4KKy0tCUluIENBTUVMIHBoYXNlIDQsIHNtcy1TVUJNSVQtUkVQT1JUIHNoYWxsIG5vdCBiZSB1c2VkIGFuZCBhIHJlY2VpdmVkIFRQRFUtVHlwZUNyaXRlcmlvbgorLS0Jc2VxdWVuY2UgY29udGFpbmluZyBzbXMtU1VCTUlULVJFUE9SVCBzaGFsbCBiZSB3aG9sbHkgaWdub3JlZC4KKworRC1DU0kgOjo9IFNFUVVFTkNFIHsKKwlkcC1BbmFseXNlZEluZm9Dcml0ZXJpYUxpc3QJWzBdIERQLUFuYWx5c2VkSW5mb0NyaXRlcmlhTGlzdAlPUFRJT05BTCwKKwljYW1lbENhcGFiaWxpdHlIYW5kbGluZwlbMV0gQ2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJbm90aWZpY2F0aW9uVG9DU0UJWzNdCU5VTEwJCU9QVElPTkFMLAorCWNzaS1BY3RpdmUJWzRdCU5VTEwJCU9QVElPTkFMLAorCS4uLn0gCistLQlub3RpZmljYXRpb25Ub0NTRSBhbmQgY3NpLUFjdGl2ZSBzaGFsbCBub3QgYmUgcHJlc2VudCB3aGVuIEQtQ1NJIGlzIHNlbnQgdG8gVkxSL0dNU0MuCistLQlUaGV5IG1heSBvbmx5IGJlIGluY2x1ZGVkIGluIEFUU0kvQVRNIGFjay9OU0RDIG1lc3NhZ2UuCistLQlEUC1BbmFseXNlZEluZm9Dcml0ZXJpYSBhbmQgIGNhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nIHNoYWxsIGJlIHByZXNlbnQgaW4gCistLQl0aGUgRC1DU0kgc2VxdWVuY2UuCistLQlJZiBELUNTSSBpcyBzZWdtZW50ZWQsIHRoZW4gdGhlIGZpcnN0IHNlZ21lbnQgc2hhbGwgY29udGFpbiBkcC1BbmFseXNlZEluZm9Dcml0ZXJpYUxpc3QKKy0tCWFuZCBjYW1lbENhcGFiaWxpdHlIYW5kbGluZy4gU3Vic2VxdWVudCBzZWdtZW50cyBzaGFsbCBub3QgY29udGFpbgorLS0JY2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcsIGJ1dCBtYXkgY29udGFpbiBkcC1BbmFseXNlZEluZm9Dcml0ZXJpYUxpc3QuCisKK0RQLUFuYWx5c2VkSW5mb0NyaXRlcmlhTGlzdCAgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mRFAtQW5hbHlzZWRJbmZvQ3JpdGVyaWEpIE9GCisJCQkJRFAtQW5hbHlzZWRJbmZvQ3JpdGVyaXVtCisKK21heE51bU9mRFAtQW5hbHlzZWRJbmZvQ3JpdGVyaWEgSU5URUdFUiA6Oj0gMTAKKworRFAtQW5hbHlzZWRJbmZvQ3JpdGVyaXVtIDo6PSBTRVFVRU5DRSB7CisJZGlhbGxlZE51bWJlcglJU0ROLUFkZHJlc3NTdHJpbmcsCisJc2VydmljZUtleQlTZXJ2aWNlS2V5LAorCWdzbVNDRi1BZGRyZXNzCUlTRE4tQWRkcmVzc1N0cmluZywKKwlkZWZhdWx0Q2FsbEhhbmRsaW5nCURlZmF1bHRDYWxsSGFuZGxpbmcsCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK1NTLUNTSSA6Oj0gU0VRVUVOQ0UgeworCXNzLUNhbWVsRGF0YQlTUy1DYW1lbERhdGEsCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4sCisJbm90aWZpY2F0aW9uVG9DU0UJWzBdCU5VTEwJCU9QVElPTkFMLAorCWNzaS1BY3RpdmUJWzFdCU5VTEwJCU9QVElPTkFMCistLQlub3RpZmljYXRpb25Ub0NTRSBhbmQgY3NpLUFjdGl2ZSBzaGFsbCBub3QgYmUgcHJlc2VudCB3aGVuIFNTLUNTSSBpcyBzZW50IHRvIFZMUi4KKy0tCVRoZXkgbWF5IG9ubHkgYmUgaW5jbHVkZWQgaW4gQVRTSS9BVE0gYWNrL05TREMgbWVzc2FnZS4KK30KKworU1MtQ2FtZWxEYXRhICA6Oj0gU0VRVUVOQ0UgeworCXNzLUV2ZW50TGlzdAlTUy1FdmVudExpc3QsCisJZ3NtU0NGLUFkZHJlc3MJSVNETi1BZGRyZXNzU3RyaW5nLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbMF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLCAKKwkuLi59CisKK1NTLUV2ZW50TGlzdCAgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mQ2FtZWxTU0V2ZW50cykgT0YgU1MtQ29kZQorCS0tIEFjdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgU1MtQ29kZSB2YWx1ZXMgYXJlIGRlZmluZWQgaW4gQ0FNRUwgUGhhc2UgMzoKKwktLSBlY3QJCVNTLUNvZGUgOjo9ICcwMDExMDAwMSdCCisJLS0gbXVsdGlQVFkJU1MtQ29kZSA6Oj0gJzAxMDEwMDAxJ0IKKwktLSBjZAkJU1MtQ29kZSA6Oj0gJzAwMTAwMTAwJ0IKKwktLSBjY2JzCQlTUy1Db2RlIDo6PSAnMDEwMDAxMDAnQgorCS0tIGFsbCBvdGhlciBTUyBjb2RlcyBzaGFsbCBiZSBpZ25vcmVkCisJLS0gV2hlbiBTUy1DU0kgaXMgc2VudCB0byB0aGUgVkxSLCBpdCBzaGFsbCBub3QgY29udGFpbiBhIG1hcmtpbmcgZm9yIGNjYnMuCisJLS0gSWYgdGhlIFZMUiByZWNlaXZlcyBTUy1DU0kgY29udGFpbmluZyBhIG1hcmtpbmcgZm9yIGNjYnMsIHRoZSBWTFIgc2hhbGwgZGlzY2FyZCB0aGUKKwktLSBjY2JzIG1hcmtpbmcgaW4gU1MtQ1NJLgorCittYXhOdW1PZkNhbWVsU1NFdmVudHMgSU5URUdFUiA6Oj0gMTAKKworTy1DU0kgOjo9IFNFUVVFTkNFIHsKKwlvLUJjc21DYW1lbFREUERhdGFMaXN0CU8tQmNzbUNhbWVsVERQRGF0YUxpc3QsCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4sCisJY2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcJWzBdIENhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nCU9QVElPTkFMLAorCW5vdGlmaWNhdGlvblRvQ1NFCVsxXQlOVUxMCQlPUFRJT05BTCwKKwljc2lBY3RpdmUJCVsyXQlOVUxMCQlPUFRJT05BTH0KKy0tCW5vdGlmaWNhdGlvbnRvQ1NFIGFuZCBjc2lBY3RpdmUgc2hhbGwgbm90IGJlIHByZXNlbnQgd2hlbiBPLUNTSSBpcyBzZW50IHRvIFZMUi9HTVNDLgorLS0JVGhleSBtYXkgb25seSBiZSBpbmNsdWRlZCBpbiBBVFNJL0FUTSBhY2svTlNEQyBtZXNzYWdlLgorLS0JTy1DU0kgc2hhbGwgbm90IGJlIHNlZ21lbnRlZC4KKworTy1CY3NtQ2FtZWxURFBEYXRhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZDYW1lbFREUERhdGEpIE9GCisJTy1CY3NtQ2FtZWxURFBEYXRhCisJLS0gTy1CY3NtQ2FtZWxURFBEYXRhTGlzdCBzaGFsbCBub3QgY29udGFpbiBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mCisJLS0gTy1CY3NtQ2FtZWxURFBEYXRhIGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWUgZm9yIG8tQmNzbVRyaWdnZXJEZXRlY3Rpb25Qb2ludC4KKwktLSBGb3IgQ0FNRUwgUGhhc2UgMiwgdGhpcyBtZWFucyB0aGF0IG9ubHkgb25lIGluc3RhbmNlIG9mIE8tQmNzbUNhbWVsVERQRGF0YSBpcyBhbGxvd2VkCisJLS0gd2l0aCBvLUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQgYmVpbmcgZXF1YWwgdG8gRFAyLgorCittYXhOdW1PZkNhbWVsVERQRGF0YSAgSU5URUdFUiA6Oj0gMTAKKworTy1CY3NtQ2FtZWxURFBEYXRhIDo6PSBTRVFVRU5DRSB7CisJby1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50CU8tQmNzbVRyaWdnZXJEZXRlY3Rpb25Qb2ludCwKKwlzZXJ2aWNlS2V5CVNlcnZpY2VLZXksCisJZ3NtU0NGLUFkZHJlc3MJWzBdIElTRE4tQWRkcmVzc1N0cmluZywKKwlkZWZhdWx0Q2FsbEhhbmRsaW5nCVsxXSBEZWZhdWx0Q2FsbEhhbmRsaW5nLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLgorCX0KKworU2VydmljZUtleSA6Oj0gSU5URUdFUiAoMC4uMjE0NzQ4MzY0NykKKworTy1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50IDo6PSBFTlVNRVJBVEVEIHsKKwljb2xsZWN0ZWRJbmZvICgyKSwKKwkuLi4sCisJcm91dGVTZWxlY3RGYWlsdXJlICg0KSB9CisJLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgorCS0tIEZvciBPLUJjc21DYW1lbFREUERhdGEgc2VxdWVuY2VzIGNvbnRhaW5pbmcgdGhpcyBwYXJhbWV0ZXIgd2l0aCBhbnkKKwktLSBvdGhlciB2YWx1ZSB0aGFuIHRoZSBvbmVzIGxpc3RlZCB0aGUgcmVjZWl2ZXIgc2hhbGwgaWdub3JlIHRoZSB3aG9sZSAKKwktLSBPLUJjc21DYW1lbFREUERhdGFzZXF1ZW5jZS4gCisJLS0gRm9yIE8tQmNzbUNhbWVsVERQLUNyaXRlcmlhIHNlcXVlbmNlcyBjb250YWluaW5nIHRoaXMgcGFyYW1ldGVyIHdpdGggYW55CisJLS0gb3RoZXIgdmFsdWUgdGhhbiB0aGUgb25lcyBsaXN0ZWQgdGhlIHJlY2VpdmVyIHNoYWxsIGlnbm9yZSB0aGUgd2hvbGUKKwktLSBPLUJjc21DYW1lbFREUC1Dcml0ZXJpYSBzZXF1ZW5jZS4KKworTy1CY3NtQ2FtZWxURFBDcml0ZXJpYUxpc3QgOjo9IFNFUVVFTkNFIFNJWkUgKDEuLm1heE51bU9mQ2FtZWxURFBEYXRhKSBPRgorCU8tQmNzbUNhbWVsVERQLUNyaXRlcmlhIAorCitULUJDU00tQ0FNRUwtVERQLUNyaXRlcmlhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZDYW1lbFREUERhdGEpIE9GCisJVC1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYSAKKworTy1CY3NtQ2FtZWxURFAtQ3JpdGVyaWEgOjo9IFNFUVVFTkNFIHsKKwlvLUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQJTy1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50LAkKKwlkZXN0aW5hdGlvbk51bWJlckNyaXRlcmlhIAlbMF0gRGVzdGluYXRpb25OdW1iZXJDcml0ZXJpYQlPUFRJT05BTCwKKwliYXNpY1NlcnZpY2VDcml0ZXJpYQlbMV0gQmFzaWNTZXJ2aWNlQ3JpdGVyaWEJT1BUSU9OQUwsCisJY2FsbFR5cGVDcml0ZXJpYQlbMl0gQ2FsbFR5cGVDcml0ZXJpYQlPUFRJT05BTCwKKwkuLi4sCisJby1DYXVzZVZhbHVlQ3JpdGVyaWEJWzNdIE8tQ2F1c2VWYWx1ZUNyaXRlcmlhCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbNF0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMIH0KKworVC1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYSA6Oj0gU0VRVUVOQ0UgeworCXQtQkNTTS1UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQJVC1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50LAkKKwliYXNpY1NlcnZpY2VDcml0ZXJpYQlbMF0gQmFzaWNTZXJ2aWNlQ3JpdGVyaWEJT1BUSU9OQUwsCisJdC1DYXVzZVZhbHVlQ3JpdGVyaWEJWzFdIFQtQ2F1c2VWYWx1ZUNyaXRlcmlhCU9QVElPTkFMLAorCS4uLiB9CisKK0Rlc3RpbmF0aW9uTnVtYmVyQ3JpdGVyaWEgIDo6PSBTRVFVRU5DRSB7CisJbWF0Y2hUeXBlCQlbMF0gTWF0Y2hUeXBlLAorCWRlc3RpbmF0aW9uTnVtYmVyTGlzdCAJWzFdIERlc3RpbmF0aW9uTnVtYmVyTGlzdAlPUFRJT05BTCwKKwlkZXN0aW5hdGlvbk51bWJlckxlbmd0aExpc3QJWzJdIERlc3RpbmF0aW9uTnVtYmVyTGVuZ3RoTGlzdAlPUFRJT05BTCwKKwktLSBvbmUgb3IgYm90aCBvZiBkZXN0aW5hdGlvbk51bWJlckxpc3QgYW5kIGRlc3RpbmF0aW9uTnVtYmVyTGVuZ3RoTGlzdCAKKwktLSBzaGFsbCBiZSBwcmVzZW50CisJLi4ufQorCitEZXN0aW5hdGlvbk51bWJlckxpc3QgIDo6PSBTRVFVRU5DRSBTSVpFCSgxLi5tYXhOdW1PZkNhbWVsRGVzdGluYXRpb25OdW1iZXJzKSBPRgorCQkJCUlTRE4tQWRkcmVzc1N0cmluZworCS0tIFRoZSByZWNlaXZpbmcgZW50aXR5IHNoYWxsIG5vdCBjaGVjayB0aGUgZm9ybWF0IG9mIGEgbnVtYmVyIGluCisJLS0gdGhlIGRpYWxsZWQgbnVtYmVyIGxpc3QKKworRGVzdGluYXRpb25OdW1iZXJMZW5ndGhMaXN0ICA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZDYW1lbERlc3RpbmF0aW9uTnVtYmVyTGVuZ3RocykgT0YgCisJCQkJCUlOVEVHRVIoMS4ubWF4TnVtT2ZJU0ROLUFkZHJlc3NEaWdpdHMpCisKK0Jhc2ljU2VydmljZUNyaXRlcmlhICAgOjo9IFNFUVVFTkNFIFNJWkUoMS4ubWF4TnVtT2ZDYW1lbEJhc2ljU2VydmljZUNyaXRlcmlhKSBPRgorCUV4dC1CYXNpY1NlcnZpY2VDb2RlCisKK21heE51bU9mSVNETi1BZGRyZXNzRGlnaXRzICBJTlRFR0VSIDo6PSAxNQorCittYXhOdW1PZkNhbWVsRGVzdGluYXRpb25OdW1iZXJzICBJTlRFR0VSIDo6PSAxMAorCittYXhOdW1PZkNhbWVsRGVzdGluYXRpb25OdW1iZXJMZW5ndGhzICBJTlRFR0VSIDo6PSAzCisKK21heE51bU9mQ2FtZWxCYXNpY1NlcnZpY2VDcml0ZXJpYSAgSU5URUdFUiA6Oj0gNQorCitDYWxsVHlwZUNyaXRlcmlhICAgICAgIDo6PSBFTlVNRVJBVEVEIHsKKwlmb3J3YXJkZWQgCSgwKSwKKwlub3RGb3J3YXJkZWQJKDEpfQorCitNYXRjaFR5cGUgICAgICAgOjo9IEVOVU1FUkFURUQgeworCWluaGliaXRpbmcgCSgwKSwKKwllbmFibGluZwkJKDEpfQorCitPLUNhdXNlVmFsdWVDcml0ZXJpYSAgIDo6PSBTRVFVRU5DRSBTSVpFKDEuLm1heE51bU9mQ0FNRUwtTy1DYXVzZVZhbHVlQ3JpdGVyaWEpIE9GCisJQ2F1c2VWYWx1ZQorCitULUNhdXNlVmFsdWVDcml0ZXJpYSAgIDo6PSBTRVFVRU5DRSBTSVpFKDEuLm1heE51bU9mQ0FNRUwtVC1DYXVzZVZhbHVlQ3JpdGVyaWEpIE9GCisJQ2F1c2VWYWx1ZQorCittYXhOdW1PZkNBTUVMLU8tQ2F1c2VWYWx1ZUNyaXRlcmlhICBJTlRFR0VSIDo6PSA1CisKK21heE51bU9mQ0FNRUwtVC1DYXVzZVZhbHVlQ3JpdGVyaWEgIElOVEVHRVIgOjo9IDUKKworQ2F1c2VWYWx1ZSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFKDEpKQorLS0gVHlwZSBleHRyYWN0ZWQgZnJvbSBDYXVzZSBwYXJhbWV0ZXIgaW4gSVRVLVQgUmVjb21tZW5kYXRpb24gUS43NjMuCistLSBGb3IgdGhlIHVzZSBvZiBjYXVzZSB2YWx1ZSByZWZlciB0byBJVFUtVCBSZWNvbW1lbmRhdGlvbiBRLjg1MC4KKworRGVmYXVsdENhbGxIYW5kbGluZyA6Oj0gRU5VTUVSQVRFRCB7CisJY29udGludWVDYWxsICgwKSAsCisJcmVsZWFzZUNhbGwgKDEpICwKKwkuLi59CisJLS0gZXhjZXB0aW9uIGhhbmRsaW5nOgorCS0tIHJlY2VwdGlvbiBvZiB2YWx1ZXMgaW4gcmFuZ2UgMi0zMSBzaGFsbCBiZSB0cmVhdGVkIGFzICJjb250aW51ZUNhbGwiCisJLS0gcmVjZXB0aW9uIG9mIHZhbHVlcyBncmVhdGVyIHRoYW4gMzEgc2hhbGwgYmUgdHJlYXRlZCBhcyAicmVsZWFzZUNhbGwiCisKK0NhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nIDo6PSBJTlRFR0VSKDEuLjE2KSAKKwktLSB2YWx1ZSAxID0gQ0FNRUwgcGhhc2UgMSwKKwktLSB2YWx1ZSAyID0gQ0FNRUwgcGhhc2UgMiwKKwktLSB2YWx1ZSAzID0gQ0FNRUwgUGhhc2UgMywKKwktLSB2YWx1ZSA0ID0gQ0FNRUwgcGhhc2UgNDoKKwktLSByZWNlcHRpb24gb2YgdmFsdWVzIGdyZWF0ZXIgdGhhbiA0IHNoYWxsIGJlIHRyZWF0ZWQgYXMgQ0FNRUwgcGhhc2UgNC4KKworU3VwcG9ydGVkQ2FtZWxQaGFzZXMgOjo9IEJJVCBTVFJJTkcgeworCXBoYXNlMSAoMCksCisJcGhhc2UyICgxKSwKKwlwaGFzZTMgKDIpLAorCXBoYXNlNCAoMyl9IChTSVpFICgxLi4xNikpIAorLS0gQSBub2RlIHNoYWxsIG1hcmsgaW4gdGhlIEJJVCBTVFJJTkcgYWxsIENBTUVMIFBoYXNlcyBpdCBzdXBwb3J0cy4KKy0tIE90aGVyIHZhbHVlcyB0aGFuIGxpc3RlZCBhYm92ZSBzaGFsbCBiZSBkaXNjYXJkZWQuCisKK09mZmVyZWRDYW1lbDRDU0lzIDo6PSBCSVQgU1RSSU5HIHsgCQorCW8tY3NpCQkoMCksCisJZC1jc2kJCSgxKSwKKwl2dC1jc2kJCSgyKSwKKwl0LWNzaQkJKDMpLAorCW10LXNtcy1jc2kJKDQpLAorCW1nLWNzaQkJKDUpLAorCXBzaS1lbmhhbmNlbWVudHMJKDYpIAorfSAoU0laRSAoNy4uMTYpKQorLS0gQSBub2RlIHN1cHBvcnRpbmcgQ2FtZWwgcGhhc2UgNCBzaGFsbCBtYXJrIGluIHRoZSBCSVQgU1RSSU5HIGFsbCBDYW1lbDQgQ1NJcyAKKy0tIGl0IG9mZmVycy4KKy0tIE90aGVyIHZhbHVlcyB0aGFuIGxpc3RlZCBhYm92ZSBzaGFsbCBiZSBkaXNjYXJkZWQuCisKK09mZmVyZWRDYW1lbDRGdW5jdGlvbmFsaXRpZXMgOjo9IEJJVCBTVFJJTkcgeyAJCisJaW5pdGlhdGVDYWxsQXR0ZW1wdAkoMCksCisJc3BsaXRMZWcJCSgxKSwKKwltb3ZlTGVnCQkoMiksCisJZGlzY29ubmVjdExlZwkoMyksCisJZW50aXR5UmVsZWFzZWQJKDQpLAorCWRmYy1XaXRoQXJndW1lbnQJKDUpLAorCXBsYXlUb25lCQkoNiksCisJZHRtZi1NaWRDYWxsCSg3KSwKKwljaGFyZ2luZ0luZGljYXRvcgkoOCksCisJYWxlcnRpbmdEUAkoOSksCisJbG9jYXRpb25BdEFsZXJ0aW5nCSgxMCksCisJY2hhbmdlT2ZQb3NpdGlvbkRQCSgxMSksCisJb3ItSW50ZXJhY3Rpb25zCSgxMiksCisJd2FybmluZ1RvbmVFbmhhbmNlbWVudHMJKDEzKSwKKwljZi1FbmhhbmNlbWVudHMJKDE0KSwKKwlzdWJzY3JpYmVkRW5oYW5jZWREaWFsbGVkU2VydmljZXMgCSgxNSksCisJc2VydmluZ05ldHdvcmtFbmhhbmNlZERpYWxsZWRTZXJ2aWNlcyAoMTYpLAorCWNyaXRlcmlhRm9yQ2hhbmdlT2ZQb3NpdGlvbkRQCSgxNyksCisJc2VydmljZUNoYW5nZURQCSgxOCksCisJY29sbGVjdEluZm9ybWF0aW9uCSgxOSkKK30gKFNJWkUgKDE1Li42NCkpCistLSBBIG5vZGUgc3VwcG9ydGluZyBDYW1lbCBwaGFzZSA0IHNoYWxsIG1hcmsgaW4gdGhlIEJJVCBTVFJJTkcgYWxsIENBTUVMNCAKKy0tIGZ1bmN0aW9uYWxpdGllcyBpdCBvZmZlcnMuCistLSBPdGhlciB2YWx1ZXMgdGhhbiBsaXN0ZWQgYWJvdmUgc2hhbGwgYmUgZGlzY2FyZGVkLgorCitTTVMtQ1NJIDo6PSBTRVFVRU5DRSB7CisJc21zLUNBTUVMLVREUC1EYXRhTGlzdAlbMF0gU01TLUNBTUVMLVREUC1EYXRhTGlzdAlPUFRJT05BTCwKKwljYW1lbENhcGFiaWxpdHlIYW5kbGluZwlbMV0gQ2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJbm90aWZpY2F0aW9uVG9DU0UJWzNdIE5VTEwJCU9QVElPTkFMLAorCWNzaS1BY3RpdmUJWzRdIE5VTEwJCU9QVElPTkFMLAorCS4uLn0KKy0tCW5vdGlmaWNhdGlvblRvQ1NFIGFuZCBjc2ktQWN0aXZlIHNoYWxsIG5vdCBiZSBwcmVzZW50CistLQl3aGVuIE1PLVNNUy1DU0kgb3IgTVQtU01TLUNTSSBpcyBzZW50IHRvIFZMUiBvciBTR1NOLgorLS0JVGhleSBtYXkgb25seSBiZSBpbmNsdWRlZCBpbiBBVFNJL0FUTSBhY2svTlNEQyBtZXNzYWdlLgorLS0JU01TLUNBTUVMLVREUC1EYXRhIGFuZCAgY2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcgc2hhbGwgYmUgcHJlc2VudCBpbiAKKy0tCXRoZSBTTVMtQ1NJIHNlcXVlbmNlLgorLS0JSWYgU01TLUNTSSBpcyBzZWdtZW50ZWQsIHNtcy1DQU1FTC1URFAtRGF0YUxpc3QgYW5kIGNhbWVsQ2FwYWJpbGl0eUhhbmRsaW5nIHNoYWxsIGJlIAorLS0JcHJlc2VudCBpbiB0aGUgZmlyc3Qgc2VnbWVudAorCitTTVMtQ0FNRUwtVERQLURhdGFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkNhbWVsVERQRGF0YSkgT0YKKwlTTVMtQ0FNRUwtVERQLURhdGEKKy0tCVNNUy1DQU1FTC1URFAtRGF0YUxpc3Qgc2hhbGwgbm90IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBvZgorLS0JU01TLUNBTUVMLVREUC1EYXRhIGNvbnRhaW5pbmcgdGhlIHNhbWUgdmFsdWUgZm9yIHNtcy1UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQuCisKK1NNUy1DQU1FTC1URFAtRGF0YSA6Oj0gU0VRVUVOQ0UgeworCXNtcy1UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQJWzBdIFNNUy1UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQsCisJc2VydmljZUtleQlbMV0gU2VydmljZUtleSwKKwlnc21TQ0YtQWRkcmVzcwlbMl0gSVNETi1BZGRyZXNzU3RyaW5nLAorCWRlZmF1bHRTTVMtSGFuZGxpbmcJWzNdIERlZmF1bHRTTVMtSGFuZGxpbmcsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVs0XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uCisJfQorCitTTVMtVHJpZ2dlckRldGVjdGlvblBvaW50IDo6PSBFTlVNRVJBVEVEIHsKKwlzbXMtQ29sbGVjdGVkSW5mbyAoMSksCisJLi4uLAorCXNtcy1EZWxpdmVyeVJlcXVlc3QgKDIpCisJfQorLS0JZXhjZXB0aW9uIGhhbmRsaW5nOgorLS0JRm9yIFNNUy1DQU1FTC1URFAtRGF0YSBhbmQgTVQtc21zQ0FNRUxURFAtQ3JpdGVyaWEgc2VxdWVuY2VzIGNvbnRhaW5pbmcgdGhpcyAKKy0tCXBhcmFtZXRlciB3aXRoIGFueSBvdGhlciB2YWx1ZSB0aGFuIHRoZSBvbmVzIGxpc3RlZCB0aGUgcmVjZWl2ZXIgc2hhbGwgaWdub3JlCistLQl0aGUgd2hvbGUgc2VxdWVuY2UuCistLQorLS0JSWYgdGhpcyBwYXJhbWV0ZXIgaXMgcmVjZWl2ZWQgd2l0aCBhbnkgb3RoZXIgdmFsdWUgdGhhbiBzbXMtQ29sbGVjdGVkSW5mbworLS0JaW4gYW4gU01TLUNBTUVMLVREUC1EYXRhIHNlcXVlbmNlIGNvbnRhaW5lZCBpbiBtby1zbXMtQ1NJLCB0aGVuIHRoZSByZWNlaXZlciBzaGFsbAorLS0JaWdub3JlIHRoZSB3aG9sZSBTTVMtQ0FNRUwtVERQLURhdGEgc2VxdWVuY2UuCistLQorLS0JSWYgdGhpcyBwYXJhbWV0ZXIgaXMgcmVjZWl2ZWQgd2l0aCBhbnkgb3RoZXIgdmFsdWUgdGhhbiBzbXMtRGVsaXZlcnlSZXF1ZXN0CistLQlpbiBhbiBTTVMtQ0FNRUwtVERQLURhdGEgc2VxdWVuY2UgY29udGFpbmVkIGluIG10LXNtcy1DU0kgdGhlbiB0aGUgcmVjZWl2ZXIgc2hhbGwKKy0tCWlnbm9yZSB0aGUgd2hvbGUgU01TLUNBTUVMLVREUC1EYXRhIHNlcXVlbmNlLgorLS0KKy0tCUlmIHRoaXMgcGFyYW1ldGVyIGlzIHJlY2VpdmVkIHdpdGggYW55IG90aGVyIHZhbHVlIHRoYW4gc21zLURlbGl2ZXJ5UmVxdWVzdAorLS0JaW4gYW4gTVQtc21zQ0FNRUxURFAtQ3JpdGVyaWEgc2VxdWVuY2UgdGhlbiB0aGUgcmVjZWl2ZXIgc2hhbGwKKy0tCWlnbm9yZSB0aGUgd2hvbGUgTVQtc21zQ0FNRUxURFAtQ3JpdGVyaWEgc2VxdWVuY2UuCisKK0RlZmF1bHRTTVMtSGFuZGxpbmcgOjo9IEVOVU1FUkFURUQgeworCWNvbnRpbnVlVHJhbnNhY3Rpb24gKDApICwKKwlyZWxlYXNlVHJhbnNhY3Rpb24gKDEpICwKKwkuLi59CistLQlleGNlcHRpb24gaGFuZGxpbmc6CistLQlyZWNlcHRpb24gb2YgdmFsdWVzIGluIHJhbmdlIDItMzEgc2hhbGwgYmUgdHJlYXRlZCBhcyAiY29udGludWVUcmFuc2FjdGlvbiIKKy0tCXJlY2VwdGlvbiBvZiB2YWx1ZXMgZ3JlYXRlciB0aGFuIDMxIHNoYWxsIGJlIHRyZWF0ZWQgYXMgInJlbGVhc2VUcmFuc2FjdGlvbiIKKworTS1DU0kgOjo9IFNFUVVFTkNFIHsKKwltb2JpbGl0eVRyaWdnZXJzCU1vYmlsaXR5VHJpZ2dlcnMsCisJc2VydmljZUtleQlTZXJ2aWNlS2V5LAorCWdzbVNDRi1BZGRyZXNzCVswXQlJU0ROLUFkZHJlc3NTdHJpbmcsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsxXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJbm90aWZpY2F0aW9uVG9DU0UJWzJdIE5VTEwJCU9QVElPTkFMLAorCWNzaS1BY3RpdmUJWzNdIE5VTEwJCU9QVElPTkFMLAorCS4uLn0KKy0tCW5vdGlmaWNhdGlvblRvQ1NFIGFuZCBjc2ktQWN0aXZlIHNoYWxsIG5vdCBiZSBwcmVzZW50IHdoZW4gTS1DU0kgaXMgc2VudCB0byBWTFIuCistLQlUaGV5IG1heSBvbmx5IGJlIGluY2x1ZGVkIGluIEFUU0kvQVRNIGFjay9OU0RDIG1lc3NhZ2UuCisKK01HLUNTSSA6Oj0gU0VRVUVOQ0UgeworCW1vYmlsaXR5VHJpZ2dlcnMJTW9iaWxpdHlUcmlnZ2VycywKKwlzZXJ2aWNlS2V5CVNlcnZpY2VLZXksCisJZ3NtU0NGLUFkZHJlc3MJWzBdCUlTRE4tQWRkcmVzc1N0cmluZywKKwlleHRlbnNpb25Db250YWluZXIJWzFdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwlub3RpZmljYXRpb25Ub0NTRQlbMl0gTlVMTAkJT1BUSU9OQUwsCisJY3NpLUFjdGl2ZQlbM10gTlVMTAkJT1BUSU9OQUwsCisJLi4ufQorLS0Jbm90aWZpY2F0aW9uVG9DU0UgYW5kIGNzaS1BY3RpdmUgc2hhbGwgbm90IGJlIHByZXNlbnQgd2hlbiBNRy1DU0kgaXMgc2VudCB0byBTR1NOLgorLS0JVGhleSBtYXkgb25seSBiZSBpbmNsdWRlZCBpbiBBVFNJL0FUTSBhY2svTlNEQyBtZXNzYWdlLgorCitNb2JpbGl0eVRyaWdnZXJzICA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZNb2JpbGl0eVRyaWdnZXJzKSBPRgorCU1NLUNvZGUKKworbWF4TnVtT2ZNb2JpbGl0eVRyaWdnZXJzIElOVEVHRVIgOjo9IDEwCisKK01NLUNvZGUgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMSkpCistLQlUaGlzIHR5cGUgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIE1vYmlsaXR5IE1hbmFnZW1lbnQgZXZlbnQuCistLQlBY3Rpb25zIGZvciB0aGUgZm9sbG93aW5nIE1NLUNvZGUgdmFsdWVzIGFyZSBkZWZpbmVkIGluIENBTUVMIFBoYXNlIDQ6CistLQorLS0JQ1MgZG9tYWluIE1NIGV2ZW50czoKKy0tCUxvY2F0aW9uLXVwZGF0ZS1pbi1zYW1lLVZMUglNTS1Db2RlIDo6PSAnMDAwMDAwMDAnQgorLS0JTG9jYXRpb24tdXBkYXRlLXRvLW90aGVyLVZMUglNTS1Db2RlIDo6PSAnMDAwMDAwMDEnQgorLS0JSU1TSS1BdHRhY2gJTU0tQ29kZSA6Oj0gJzAwMDAwMDEwJ0IKKy0tCU1TLWluaXRpYXRlZC1JTVNJLURldGFjaAlNTS1Db2RlIDo6PSAnMDAwMDAwMTEnQgorLS0JTmV0d29yay1pbml0aWF0ZWQtSU1TSS1EZXRhY2gJTU0tQ29kZSA6Oj0gJzAwMDAwMTAwJ0IKKy0tCistLQlQUyBkb21haW4gTU0gZXZlbnRzOgorLS0JUm91dGVpbmctQXJlYS11cGRhdGUtaW4tc2FtZS1TR1NOCU1NLUNvZGUgOjo9ICcxMDAwMDAwMCdCCistLQlSb3V0ZWluZy1BcmVhLXVwZGF0ZS10by1vdGhlci1TR1NOLXVwZGF0ZS1mcm9tLW5ldy1TR1NOCistLQkJCQlNTS1Db2RlIDo6PSAnMTAwMDAwMDEnQgorLS0JUm91dGVpbmctQXJlYS11cGRhdGUtdG8tb3RoZXItU0dTTi1kaXNjb25uZWN0LWJ5LWRldGFjaAorLS0JCQkJTU0tQ29kZSA6Oj0gJzEwMDAwMDEwJ0IKKy0tCUdQUlMtQXR0YWNoCU1NLUNvZGUgOjo9ICcxMDAwMDAxMSdCCistLQlNUy1pbml0aWF0ZWQtR1BSUy1EZXRhY2gJTU0tQ29kZSA6Oj0gJzEwMDAwMTAwJ0IKKy0tCU5ldHdvcmstaW5pdGlhdGVkLUdQUlMtRGV0YWNoCU1NLUNvZGUgOjo9ICcxMDAwMDEwMSdCIAorLS0JTmV0d29yay1pbml0aWF0ZWQtdHJhbnNmZXItdG8tTVMtbm90LXJlYWNoYWJsZS1mb3ItcGFnaW5nCistLQkJCQlNTS1Db2RlIDo6PSAnMTAwMDAxMTAnQgorLS0KKy0tCUlmIHRoZSBNU0MgcmVjZWl2ZXMgYW55IG90aGVyIE1NLWNvZGUgdGhhbiB0aGUgb25lcyBsaXN0ZWQgYWJvdmUgZm9yIHRoZQorLS0JQ1MgZG9tYWluLCB0aGVuIHRoZSBNU0Mgc2hhbGwgaWdub3JlIHRoYXQgTU0tY29kZS4KKy0tCUlmIHRoZSBTR1NOIHJlY2VpdmVzIGFueSBvdGhlciBNTS1jb2RlIHRoYW4gdGhlIG9uZXMgbGlzdGVkIGFib3ZlIGZvciB0aGUKKy0tCVBTIGRvbWFpbiwgdGhlbiB0aGUgU0dTTiBzaGFsbCBpZ25vcmUgdGhhdCBNTS1jb2RlLgorCitULUNTSSA6Oj0gU0VRVUVOQ0UgeworCXQtQmNzbUNhbWVsVERQRGF0YUxpc3QJVC1CY3NtQ2FtZWxURFBEYXRhTGlzdCwKKwlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiwKKwljYW1lbENhcGFiaWxpdHlIYW5kbGluZwlbMF0gQ2FtZWxDYXBhYmlsaXR5SGFuZGxpbmcJT1BUSU9OQUwsCisJbm90aWZpY2F0aW9uVG9DU0UJWzFdIE5VTEwJCU9QVElPTkFMLAorCWNzaS1BY3RpdmUJWzJdIE5VTEwJCU9QVElPTkFMfQorLS0Jbm90aWZpY2F0aW9uVG9DU0UgYW5kIGNzaS1BY3RpdmUgc2hhbGwgbm90IGJlIHByZXNlbnQgd2hlbiBWVC1DU0kvVC1DU0kgaXMgc2VudAorLS0JdG8gVkxSL0dNU0MuCistLQlUaGV5IG1heSBvbmx5IGJlIGluY2x1ZGVkIGluIEFUU0kvQVRNIGFjay9OU0RDIG1lc3NhZ2UuCistLQlULUNTSSBzaGFsbCBub3QgYmUgc2VnbWVudGVkLgorCitULUJjc21DYW1lbFREUERhdGFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZkNhbWVsVERQRGF0YSkgT0YKKwlULUJjc21DYW1lbFREUERhdGEKKwktLS0gVC1CY3NtQ2FtZWxURFBEYXRhTGlzdCBzaGFsbCBub3QgY29udGFpbiBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mCisJLS0tIFQtQmNzbUNhbWVsVERQRGF0YSBjb250YWluaW5nIHRoZSBzYW1lIHZhbHVlIGZvciB0LUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQuCisJLS0tIEZvciBDQU1FTCBQaGFzZSAyLCB0aGlzIG1lYW5zIHRoYXQgb25seSBvbmUgaW5zdGFuY2Ugb2YgVC1CY3NtQ2FtZWxURFBEYXRhIGlzIGFsbG93ZWQKKwktLS0gd2l0aCB0LUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQgYmVpbmcgZXF1YWwgdG8gRFAxMi4gCisJLS0tIEZvciBDQU1FTCBQaGFzZSAzLCBtb3JlIFREUJJzIGFyZSBhbGxvd2VkLgorCitULUJjc21DYW1lbFREUERhdGEgOjo9IFNFUVVFTkNFIHsKKwl0LUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQJVC1CY3NtVHJpZ2dlckRldGVjdGlvblBvaW50LAorCXNlcnZpY2VLZXkJU2VydmljZUtleSwKKwlnc21TQ0YtQWRkcmVzcwlbMF0gSVNETi1BZGRyZXNzU3RyaW5nLAorCWRlZmF1bHRDYWxsSGFuZGxpbmcJWzFdIERlZmF1bHRDYWxsSGFuZGxpbmcsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4ufQorCitULUJjc21UcmlnZ2VyRGV0ZWN0aW9uUG9pbnQgOjo9IEVOVU1FUkFURUQgeworCXRlcm1BdHRlbXB0QXV0aG9yaXplZCAoMTIpLAorCS4uLiAsCisJdEJ1c3kgKDEzKSwKKwl0Tm9BbnN3ZXIgKDE0KX0KKwktLSBleGNlcHRpb24gaGFuZGxpbmc6CisJLS0gRm9yIFQtQmNzbUNhbWVsVERQRGF0YSBzZXF1ZW5jZXMgY29udGFpbmluZyB0aGlzIHBhcmFtZXRlciB3aXRoIGFueSBvdGhlcgorCS0tIHZhbHVlIHRoYW4gdGhlIG9uZXMgbGlzdGVkIGFib3ZlLCB0aGUgcmVjZWl2ZXIgc2hhbGwgaWdub3JlIHRoZSB3aG9sZQorCS0tIFQtQmNzbUNhbWVsVERQRGF0YSBzZXF1ZW5jZS4KKworLS0gZ3BycyBsb2NhdGlvbiBpbmZvcm1hdGlvbiByZXRyaWV2YWwgdHlwZXMKKworU2VuZFJvdXRpbmdJbmZvRm9yR3Byc0FyZyA6Oj0gU0VRVUVOQ0UgeworCWltc2kJCQkJWzBdIElNU0ksCisJZ2dzbi1BZGRyZXNzCQlbMV0gR1NOLUFkZHJlc3MJT1BUSU9OQUwsIAorCWdnc24tTnVtYmVyCQlbMl0JSVNETi1BZGRyZXNzU3RyaW5nLAorCWV4dGVuc2lvbkNvbnRhaW5lcgkJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK1NlbmRSb3V0aW5nSW5mb0ZvckdwcnNSZXMgOjo9IFNFUVVFTkNFIHsKKwlzZ3NuLUFkZHJlc3MJCVswXSBHU04tQWRkcmVzcywKKwlnZ3NuLUFkZHJlc3MJCVsxXQlHU04tQWRkcmVzcwlPUFRJT05BTCwKKwltb2JpbGVOb3RSZWFjaGFibGVSZWFzb24JCVsyXQlBYnNlbnRTdWJzY3JpYmVyRGlhZ25vc3RpY1NNCQlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJCVszXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4ufQorCistLSBmYWlsdXJlIHJlcG9ydCB0eXBlcworCitGYWlsdXJlUmVwb3J0QXJnIDo6PSBTRVFVRU5DRSB7CisJaW1zaQkJCQlbMF0gSU1TSSwKKwlnZ3NuLU51bWJlcgkJWzFdIElTRE4tQWRkcmVzc1N0cmluZwksCisJZ2dzbi1BZGRyZXNzCQlbMl0gR1NOLUFkZHJlc3MJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCQlbM10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLn0KKworRmFpbHVyZVJlcG9ydFJlcyA6Oj0gU0VRVUVOQ0UgeworCWdnc24tQWRkcmVzcwkJWzBdIEdTTi1BZGRyZXNzCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcgkJWzFdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKKy0tIGdwcnMgbm90aWZpY2F0aW9uIHR5cGVzCisKK05vdGVNc1ByZXNlbnRGb3JHcHJzQXJnIDo6PSBTRVFVRU5DRSB7CisJaW1zaQkJCQlbMF0gSU1TSSwKKwlzZ3NuLUFkZHJlc3MJCVsxXSBHU04tQWRkcmVzcywKKwlnZ3NuLUFkZHJlc3MJCVsyXSBHU04tQWRkcmVzcwlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJCVszXSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4ufQorCitOb3RlTXNQcmVzZW50Rm9yR3Byc1JlcyA6Oj0gU0VRVUVOQ0UgeworCWV4dGVuc2lvbkNvbnRhaW5lcgkJWzBdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKKy0tIGZhdWx0IHJlY292ZXJ5IHR5cGVzCisKK1Jlc2V0QXJnIDo6PSBTRVFVRU5DRSB7CisJaGxyLU51bWJlcglJU0ROLUFkZHJlc3NTdHJpbmcsCisJaGxyLUxpc3QJCUhMUi1MaXN0CQlPUFRJT05BTCwKKwkuLi59CisKK1Jlc3RvcmVEYXRhQXJnIDo6PSBTRVFVRU5DRSB7CisJaW1zaQkJCUlNU0ksCisJbG1zaQkJCUxNU0kJCQlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiAsCisJdmxyLUNhcGFiaWxpdHkJWzZdIFZMUi1DYXBhYmlsaXR5CU9QVElPTkFMIH0KKworUmVzdG9yZURhdGFSZXMgOjo9IFNFUVVFTkNFIHsKKwlobHItTnVtYmVyCUlTRE4tQWRkcmVzc1N0cmluZywKKwltc05vdFJlYWNoYWJsZQlOVUxMCQkJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKKy0tIFZCUy9WR0NTIHR5cGVzCitWQlNEYXRhTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZWQlNHcm91cElkcykgT0YKKwkJCQlWb2ljZUJyb2FkY2FzdERhdGEKKworVkdDU0RhdGFMaXN0IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5tYXhOdW1PZlZHQ1NHcm91cElkcykgT0YKKwkJCQlWb2ljZUdyb3VwQ2FsbERhdGEKKworbWF4TnVtT2ZWQlNHcm91cElkcyAgSU5URUdFUiA6Oj0gNTAKKworbWF4TnVtT2ZWR0NTR3JvdXBJZHMgIElOVEVHRVIgOjo9IDUwCisKK1ZvaWNlR3JvdXBDYWxsRGF0YSAgOjo9IFNFUVVFTkNFIHsKKwlncm91cElkCQlHcm91cElkLCAKKwktLSBncm91cElkIHNoYWxsIGJlIGZpbGxlZCB3aXRoIHNpeCBUQkNEIGZpbGxlcnMgKDExMTEpaWYgdGhlIGxvbmdHcm91cElkIGlzIHByZXNlbnQgIAorCWV4dGVuc2lvbkNvbnRhaW5lcglFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uLAorCWFkZGl0aW9uYWxTdWJzY3JpcHRpb25zCUFkZGl0aW9uYWxTdWJzY3JpcHRpb25zCU9QVElPTkFMLAorCWFkZGl0aW9uYWxJbmZvCVswXSBBZGRpdGlvbmFsSW5mbwlPUFRJT05BTCwKKwlsb25nR3JvdXBJZAlbMV0gTG9uZy1Hcm91cElkCU9QVElPTkFMIH0KKworCS0tIFZvaWNlR3JvdXBDYWxsRGF0YSBjb250YWluaW5nIGEgbG9uZ0dyb3VwSWQgc2hhbGwgbm90IGJlIHNlbnQgdG8gVkxScyB0aGF0IGRpZCBub3QKKwktLSBpbmRpY2F0ZSBzdXBwb3J0IG9mIGxvbmcgR3JvdXAgSURzIHdpdGhpbiB0aGUgVXBkYXRlIExvY2F0aW9uIG9yIFJlc3RvcmUgRGF0YSAKKwktLSByZXF1ZXN0IG1lc3NhZ2UKKworQWRkaXRpb25hbEluZm8gOjo9IEJJVCBTVFJJTkcgKFNJWkUgKDEuLjEzNikpCistLQkgUmVmZXJzIHRvIEFkZGl0aW9uYWwgSW5mbyBhcyBzcGVjaWZpZWQgaW4gM0dQUCBUUyA0My4wNjggCisKK0FkZGl0aW9uYWxTdWJzY3JpcHRpb25zIDo6PSBCSVQgU1RSSU5HIHsKKwlwcml2aWxlZ2VkVXBsaW5rUmVxdWVzdCAoMCksCisJZW1lcmdlbmN5VXBsaW5rUmVxdWVzdCAoMSksCisJZW1lcmdlbmN5UmVzZXQgKDIpfSAoU0laRSAoMy4uOCkpCistLSBPdGhlciBiaXRzIHRoYW4gbGlzdGVkIGFib3ZlIHNoYWxsIGJlIGRpc2NhcmRlZC4KKworVm9pY2VCcm9hZGNhc3REYXRhIDo6PSBTRVFVRU5DRSB7CisJZ3JvdXBpZAkJR3JvdXBJZCwgCisJLS0gZ3JvdXBJZCBzaGFsbCBiZSBmaWxsZWQgd2l0aCBzaXggVEJDRCBmaWxsZXJzICgxMTExKWlmIHRoZSBsb25nR3JvdXBJZCBpcyBwcmVzZW50CisJYnJvYWRjYXN0SW5pdEVudGl0bGVtZW50CU5VTEwJCQlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiwKKwlsb25nR3JvdXBJZAlbMF0gTG9uZy1Hcm91cElkCU9QVElPTkFMIH0KKwkKKy0tIFZvaWNlQnJvYWRjYXN0RGF0YSBjb250YWluaW5nIGEgbG9uZ0dyb3VwSWQgc2hhbGwgbm90IGJlIHNlbnQgdG8gVkxScyB0aGF0IGRpZCBub3QKKy0tIGluZGljYXRlIHN1cHBvcnQgb2YgbG9uZyBHcm91cCBJRHMgd2l0aGluIHRoZSBVcGRhdGUgTG9jYXRpb24gb3IgUmVzdG9yZSBEYXRhIAorCS0tIHJlcXVlc3QgbWVzc2FnZQorCitHcm91cElkICA6Oj0gVEJDRC1TVFJJTkcgKFNJWkUgKDMpKQorCS0tIFdoZW4gR3JvdXAtSWQgaXMgbGVzcyB0aGFuIHNpeCBjaGFyYWN0ZXJzIGluIGxlbmd0aCwgdGhlIFRCQ0QgZmlsbGVyICgxMTExKQorCS0tIGlzIHVzZWQgdG8gZmlsbCB1bnVzZWQgaGFsZiBvY3RldHMuCisJLS0gUmVmZXJzIHRvIHRoZSBHcm91cCBJZGVudGlmaWNhdGlvbiBhcyBzcGVjaWZpZWQgaW4gM0dQUCBUUyAyMy4wMDMgCisJLS0gYW5kIDNHUFAgVFMgNDMuMDY4LyA0My4wNjkKKworTG9uZy1Hcm91cElkICA6Oj0gVEJDRC1TVFJJTkcgKFNJWkUgKDQpKQorCS0tIFdoZW4gTG9uZy1Hcm91cC1JZCBpcyBsZXNzIHRoYW4gZWlnaHQgY2hhcmFjdGVycyBpbiBsZW5ndGgsIHRoZSBUQkNEIGZpbGxlciAoMTExMSkKKwktLSBpcyB1c2VkIHRvIGZpbGwgdW51c2VkIGhhbGYgb2N0ZXRzLgorCS0tIFJlZmVycyB0byB0aGUgR3JvdXAgSWRlbnRpZmljYXRpb24gYXMgc3BlY2lmaWVkIGluIDNHUFAgVFMgMjMuMDAzIAorCS0tIGFuZCAzR1BQIFRTIDQzLjA2OC8gNDMuMDY5CisKKworLS0gcHJvdmlkZSBzdWJzY3JpYmVyIGluZm8gdHlwZXMKKworUHJvdmlkZVN1YnNjcmliZXJJbmZvQXJnIDo6PSBTRVFVRU5DRSB7CisJaW1zaQkJWzBdIElNU0ksCisJbG1zaQkJWzFdIExNU0kJT1BUSU9OQUwsCisJcmVxdWVzdGVkSW5mbwlbMl0gUmVxdWVzdGVkSW5mbywKKwlleHRlbnNpb25Db250YWluZXIJWzNdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4sCisJY2FsbFByaW9yaXR5CVs0XQlFTUxQUC1Qcmlvcml0eQlPUFRJT05BTAorCX0KKworUHJvdmlkZVN1YnNjcmliZXJJbmZvUmVzIDo6PSBTRVFVRU5DRSB7CisJc3Vic2NyaWJlckluZm8JU3Vic2NyaWJlckluZm8sCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK1N1YnNjcmliZXJJbmZvIDo6PSBTRVFVRU5DRSB7CisJbG9jYXRpb25JbmZvcm1hdGlvbglbMF0gTG9jYXRpb25JbmZvcm1hdGlvbglPUFRJT05BTCwKKwlzdWJzY3JpYmVyU3RhdGUJWzFdIFN1YnNjcmliZXJTdGF0ZQlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4gLAorCWxvY2F0aW9uSW5mb3JtYXRpb25HUFJTCVszXSBMb2NhdGlvbkluZm9ybWF0aW9uR1BSUwlPUFRJT05BTCwKKwlwcy1TdWJzY3JpYmVyU3RhdGUJWzRdIFBTLVN1YnNjcmliZXJTdGF0ZQlPUFRJT05BTCwKKwlpbWVpCQkJWzVdIElNRUkJCU9QVElPTkFMLAorCW1zLUNsYXNzbWFyazIJWzZdIE1TLUNsYXNzbWFyazIJT1BUSU9OQUwsCisJZ3Bycy1NUy1DbGFzcwlbN10gR1BSU01TQ2xhc3MJT1BUSU9OQUwsCisJbW5wSW5mb1JlcwlbOF0gTU5QSW5mb1JlcwlPUFRJT05BTCB9CisKKy0tCUlmIHRoZSBITFIgcmVjZWl2ZXMgbG9jYXRpb25JbmZvcm1hdGlvbiwgc3Vic2NyaWJlclN0YXRlIG9yIG1zLUNsYXNzbWFyazIgZnJvbSBhbiBTR1NOCistLQlpdCBzaGFsbCBkaXNjYXJkIHRoZW0uCistLQlJZiB0aGUgSExSIHJlY2VpdmVzIGxvY2F0aW9uSW5mb3JtYXRpb25HUFJTLCBwcy1TdWJzY3JpYmVyU3RhdGUgb3IgZ3Bycy1NUy1DbGFzcyBmcm9tCistLQlhIFZMUiBpdCBzaGFsbCBkaXNjYXJkIHRoZW0uCistLQlJZiB0aGUgSExSIHJlY2VpdmVzIHBhcmFtZXRlcnMgd2hpY2ggaXQgaGFzIG5vdCByZXF1ZXN0ZWQsIGl0IHNoYWxsIGRpc2NhcmQgdGhlbS4KKworTU5QSW5mb1JlcyA6Oj0gU0VRVUVOQ0UgeworCXJvdXRlaW5nTnVtYmVyCVswXSBSb3V0ZWluZ051bWJlciAJT1BUSU9OQUwsCisJaW1zaQkJCVsxXSBJTVNJCQlPUFRJT05BTCwKKwltc2lzZG4JCVsyXSBJU0ROLUFkZHJlc3NTdHJpbmcgCU9QVElPTkFMLAorCW51bWJlclBvcnRhYmlsaXR5U3RhdHVzCVszXSBOdW1iZXJQb3J0YWJpbGl0eVN0YXR1cwlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJWzRdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4gfQorLS0JVGhlIElNU0kgcGFyYW1ldGVyIGNvbnRhaW5zIGEgZ2VuZXJpYyBJTVNJLCBpLmUuIGl0IGlzIG5vdCB0aWVkIG5lY2Vzc2FyaWx5IHRvIHRoZSAKKy0tCVN1YnNjcmliZXIuIE1DQyBhbmQgTU5DIHZhbHVlcyBpbiB0aGlzIElNU0kgc2hhbGwgcG9pbnQgdG8gdGhlIFN1YnNjcmlwdGlvbiBOZXR3b3JrIG9mIAorLS0JdGhlIFN1YnNjcmliZXIuIFNlZSAzR1BQIFRTIDIzLjA2NiBbMTA4XS4KKworUm91dGVpbmdOdW1iZXIgOjo9IFRCQ0QtU1RSSU5HIChTSVpFICgxLi41KSkKKworCitOdW1iZXJQb3J0YWJpbGl0eVN0YXR1cyA6Oj0gRU5VTUVSQVRFRCB7CisJbm90S25vd25Ub0JlUG9ydGVkCSgwKSwKKwlvd25OdW1iZXJQb3J0ZWRPdXQJKDEpLAorCWZvcmVpZ25OdW1iZXJQb3J0ZWRUb0ZvcmVpZ25OZXR3b3JrCSgyKSwKKwkuLi4sCisJb3duTnVtYmVyTm90UG9ydGVkT3V0CSg0KSwKKwlmb3JlaWduTnVtYmVyUG9ydGVkSW4JKDUpCisJfQorCS0tCWV4Y2VwdGlvbiBoYW5kbGluZzogCisJLS0gIHJlY2VwdGlvbiBvZiBvdGhlciB2YWx1ZXMgdGhhbiB0aGUgb25lcyBsaXN0ZWQgdGhlIHJlY2VpdmVyIHNoYWxsIGlnbm9yZSB0aGUgCisJLS0gIHdob2xlIE51bWJlclBvcnRhYmlsaXR5U3RhdHVzOworCS0tICBvd25OdW1iZXJOb3RQb3J0ZWRPdXQgb3IgZm9yZWlnbk51bWJlclBvcnRlZEluIG1heSBvbmx5IGJlIGluY2x1ZGVkIGluIEFueSBUaW1lIAorCS0tICBJbnRlcnJvZ2F0aW9uIG1lc3NhZ2UuCisKK01TLUNsYXNzbWFyazIgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMykpCisJLS0gVGhpcyBwYXJhbWV0ZXIgY2FycmllcyB0aGUgdmFsdWUgcGFydCBvZiB0aGUgTVMgQ2xhc3NtYXJrIDIgSUUgZGVmaW5lZCBpbiAKKwktLSAzR1BQIFRTIDI0LjAwOCBbMzVdLgorCitHUFJTTVNDbGFzcyA6Oj0gU0VRVUVOQ0UgeworCW1TTmV0d29ya0NhcGFiaWxpdHkJWzBdIE1TTmV0d29ya0NhcGFiaWxpdHksCisJbVNSYWRpb0FjY2Vzc0NhcGFiaWxpdHkJWzFdIE1TUmFkaW9BY2Nlc3NDYXBhYmlsaXR5CU9QVElPTkFMCisJfQorCitNU05ldHdvcmtDYXBhYmlsaXR5IDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDEuLjgpKQorCS0tIFRoaXMgcGFyYW1ldGVyIGNhcnJpZXMgdGhlIHZhbHVlIHBhcnQgb2YgdGhlIE1TIE5ldHdvcmsgQ2FwYWJpbGl0eSBJRSBkZWZpbmVkIGluIAorCS0tIDNHUFAgVFMgMjQuMDA4IFszNV0uCisJCitNU1JhZGlvQWNjZXNzQ2FwYWJpbGl0eSA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxLi41MCkpCisJLS0gVGhpcyBwYXJhbWV0ZXIgY2FycmllcyB0aGUgdmFsdWUgcGFydCBvZiB0aGUgTVMgUmFkaW8gQWNjZXNzIENhcGFiaWxpdHkgSUUgZGVmaW5lZCBpbgorCS0tIDNHUFAgVFMgMjQuMDA4IFszNV0uCisKK1JlcXVlc3RlZEluZm8gOjo9IFNFUVVFTkNFIHsKKwlsb2NhdGlvbkluZm9ybWF0aW9uCVswXSBOVUxMCQlPUFRJT05BTCwKKwlzdWJzY3JpYmVyU3RhdGUJWzFdIE5VTEwJCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbMl0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiwgCisJY3VycmVudExvY2F0aW9uCVszXSBOVUxMCQlPUFRJT05BTCwKKwlyZXF1ZXN0ZWREb21haW4JWzRdIERvbWFpblR5cGUJT1BUSU9OQUwsCisJaW1laQkJCVs2XSBOVUxMCQlPUFRJT05BTCwKKwltcy1jbGFzc21hcmsJWzVdIE5VTEwJCU9QVElPTkFMLAorCW1ucFJlcXVlc3RlZEluZm8JWzddIE5VTEwgCQlPUFRJT05BTCB9CisKKy0tCWN1cnJlbnRMb2NhdGlvbiBzaGFsbCBiZSBhYnNlbnQgaWYgbG9jYXRpb25JbmZvcm1hdGlvbiBpcyBhYnNlbnQKKworRG9tYWluVHlwZSA6Oj0gIEVOVU1FUkFURUQgeworCWNzLURvbWFpbgkJKDApLAorCXBzLURvbWFpbgkJKDEpLAorCS4uLn0KKy0tIGV4Y2VwdGlvbiBoYW5kbGluZzoKKy0tIHJlY2VwdGlvbiBvZiB2YWx1ZXMgPiAxIHNoYWxsIGJlIG1hcHBlZCB0byAnY3MtRG9tYWluJworCitMb2NhdGlvbkluZm9ybWF0aW9uIDo6PSBTRVFVRU5DRSB7CisJYWdlT2ZMb2NhdGlvbkluZm9ybWF0aW9uCUFnZU9mTG9jYXRpb25JbmZvcm1hdGlvbglPUFRJT05BTCwKKwlnZW9ncmFwaGljYWxJbmZvcm1hdGlvbglbMF0gR2VvZ3JhcGhpY2FsSW5mb3JtYXRpb24JT1BUSU9OQUwsCisJdmxyLW51bWJlcglbMV0gSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAorCWxvY2F0aW9uTnVtYmVyCVsyXSBMb2NhdGlvbk51bWJlcglPUFRJT05BTCwKKwljZWxsR2xvYmFsSWRPclNlcnZpY2VBcmVhSWRPckxBSQlbM10gQ2VsbEdsb2JhbElkT3JTZXJ2aWNlQXJlYUlkT3JMQUkJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVs0XSBFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uICwKKwlzZWxlY3RlZExTQS1JZAlbNV0gTFNBSWRlbnRpdHkJT1BUSU9OQUwsCisJbXNjLU51bWJlcglbNl0gSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAorCWdlb2RldGljSW5mb3JtYXRpb24JWzddIEdlb2RldGljSW5mb3JtYXRpb24JT1BUSU9OQUwsIAorCWN1cnJlbnRMb2NhdGlvblJldHJpZXZlZAlbOF0gTlVMTAkJT1BUSU9OQUwsCisJc2FpLVByZXNlbnQJWzldIE5VTEwJCU9QVElPTkFMIH0KKy0tIHNhaS1QcmVzZW50IGluZGljYXRlcyB0aGF0IHRoZSBjZWxsR2xvYmFsSWRPclNlcnZpY2VBcmVhSWRPckxBSSBwYXJhbWV0ZXIgY29udGFpbnMKKy0tIGEgU2VydmljZSBBcmVhIElkZW50aXR5LgorLS0gY3VycmVudExvY2F0aW9uUmV0cmlldmVkIHNoYWxsIGJlIHByZXNlbnQgCistLSBpZiB0aGUgbG9jYXRpb24gaW5mb3JtYXRpb24gd2VyZSByZXRyaWV2ZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsbCBwYWdpbmcuCisKK0xvY2F0aW9uSW5mb3JtYXRpb25HUFJTIDo6PSBTRVFVRU5DRSB7CisJY2VsbEdsb2JhbElkT3JTZXJ2aWNlQXJlYUlkT3JMQUkJWzBdIENlbGxHbG9iYWxJZE9yU2VydmljZUFyZWFJZE9yTEFJIE9QVElPTkFMLAorCXJvdXRlaW5nQXJlYUlkZW50aXR5CVsxXSBSQUlkZW50aXR5CU9QVElPTkFMLAorCWdlb2dyYXBoaWNhbEluZm9ybWF0aW9uCVsyXSBHZW9ncmFwaGljYWxJbmZvcm1hdGlvbglPUFRJT05BTCwKKwlzZ3NuLU51bWJlcglbM10gSVNETi1BZGRyZXNzU3RyaW5nCU9QVElPTkFMLAorCXNlbGVjdGVkTFNBSWRlbnRpdHkJWzRdIExTQUlkZW50aXR5CU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbNV0gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiwKKwlzYWktUHJlc2VudAlbNl0gTlVMTAkJT1BUSU9OQUwsCisJZ2VvZGV0aWNJbmZvcm1hdGlvbglbN10gR2VvZGV0aWNJbmZvcm1hdGlvbglPUFRJT05BTCwKKwljdXJyZW50TG9jYXRpb25SZXRyaWV2ZWQJWzhdIE5VTEwJCU9QVElPTkFMLAorCWFnZU9mTG9jYXRpb25JbmZvcm1hdGlvbglbOV0gQWdlT2ZMb2NhdGlvbkluZm9ybWF0aW9uCU9QVElPTkFMIH0KKy0tIHNhaS1QcmVzZW50IGluZGljYXRlcyB0aGF0IHRoZSBjZWxsR2xvYmFsSWRPclNlcnZpY2VBcmVhSWRPckxBSSBwYXJhbWV0ZXIgY29udGFpbnMKKy0tIGEgU2VydmljZSBBcmVhIElkZW50aXR5LgorLS0gY3VycmVudExvY2F0aW9uUmV0cmlldmVkIHNoYWxsIGJlIHByZXNlbnQgaWYgdGhlIGxvY2F0aW9uIGluZm9ybWF0aW9uCistLSB3YXMgcmV0cmlldmVkIGFmdGVyIHN1Y2Nlc3NmdWwgcGFnaW5nLgorCitSQUlkZW50aXR5IDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDYpKQorLS0gUm91dGluZyBBcmVhIElkZW50aXR5IGlzIGNvZGVkIGluIGFjY29yZGFuY2Ugd2l0aCAzR1BQIFRTIDI5LjA2MCBbMTA1XS4KKy0tIEl0IHNoYWxsIGNvbnRhaW4gdGhlIHZhbHVlIHBhcnQgZGVmaW5lZCBpbiAzR1BQIFRTIDI5LjA2MCBvbmx5LiBJLmUuIHRoZSAzR1BQIFRTIDI5LjA2MAorLS0gdHlwZSBpZGVudGlmaWVyIG9jdGV0IHNoYWxsIG5vdCBiZSBpbmNsdWRlZC4KKworCitHZW9ncmFwaGljYWxJbmZvcm1hdGlvbiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICg4KSkKKy0tCVJlZmVycyB0byBnZW9ncmFwaGljYWwgSW5mb3JtYXRpb24gZGVmaW5lZCBpbiAzR1BQIFRTIDIzLjAzMi4KKy0tCU9ubHkgdGhlIGRlc2NyaXB0aW9uIG9mIGFuIGVsbGlwc29pZCBwb2ludCB3aXRoIHVuY2VydGFpbnR5IGNpcmNsZQorLS0JYXMgc3BlY2lmaWVkIGluIDNHUFAgVFMgMjMuMDMyIGlzIGFsbG93ZWQgdG8gYmUgdXNlZAorLS0JVGhlIGludGVybmFsIHN0cnVjdHVyZSBhY2NvcmRpbmcgdG8gM0dQUCBUUyAyMy4wMzIgaXMgYXMgZm9sbG93czoKKy0tCQlUeXBlIG9mIHNoYXBlIChlbGxpcHNvaWQgcG9pbnQgd2l0aCB1bmNlcnRhaW50eSBjaXJjbGUpCTEgb2N0ZXQKKy0tCQlEZWdyZWVzIG9mIExhdGl0dWRlCQkJCTMgb2N0ZXRzCistLQkJRGVncmVlcyBvZiBMb25naXR1ZGUJCQkJMyBvY3RldHMKKy0tCQlVbmNlcnRhaW50eSBjb2RlCQkJCTEgb2N0ZXQKKworR2VvZGV0aWNJbmZvcm1hdGlvbiA6Oj0gT0NURVQgU1RSSU5HIChTSVpFICgxMCkpCistLQlSZWZlcnMgdG8gQ2FsbGluZyBHZW9kZXRpYyBMb2NhdGlvbiBkZWZpbmVkIGluIFEuNzYzICgxOTk5KS4KKy0tCU9ubHkgdGhlIGRlc2NyaXB0aW9uIG9mIGFuIGVsbGlwc29pZCBwb2ludCB3aXRoIHVuY2VydGFpbnR5IGNpcmNsZQorLS0JYXMgc3BlY2lmaWVkIGluIFEuNzYzICgxOTk5KSBpcyBhbGxvd2VkIHRvIGJlIHVzZWQKKy0tCVRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgYWNjb3JkaW5nIHRvIFEuNzYzICgxOTk5KSBpcyBhcyBmb2xsb3dzOgorLS0JCVNjcmVlbmluZyBhbmQgcHJlc2VudGF0aW9uIGluZGljYXRvcnMJCTEgb2N0ZXQKKy0tCQlUeXBlIG9mIHNoYXBlIChlbGxpcHNvaWQgcG9pbnQgd2l0aCB1bmNlcnRhaW50eSBjaXJjbGUpCTEgb2N0ZXQKKy0tCQlEZWdyZWVzIG9mIExhdGl0dWRlCQkJCTMgb2N0ZXRzCistLQkJRGVncmVlcyBvZiBMb25naXR1ZGUJCQkJMyBvY3RldHMKKy0tCQlVbmNlcnRhaW50eSBjb2RlCQkJCTEgb2N0ZXQKKy0tCQlDb25maWRlbmNlCQkJCTEgb2N0ZXQKKworTG9jYXRpb25OdW1iZXIgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMi4uMTApKQorCS0tIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiBJVFUtVCBSZWMgUS43NjMKKworU3Vic2NyaWJlclN0YXRlIDo6PSBDSE9JQ0UgeworCWFzc3VtZWRJZGxlCVswXSBOVUxMLAorCWNhbWVsQnVzeQkJWzFdIE5VTEwsCisJbmV0RGV0Tm90UmVhY2hhYmxlCU5vdFJlYWNoYWJsZVJlYXNvbiwKKwlub3RQcm92aWRlZEZyb21WTFIJWzJdIE5VTEx9CisKK1BTLVN1YnNjcmliZXJTdGF0ZSA6Oj0gQ0hPSUNFIHsKKwlub3RQcm92aWRlZEZyb21TR1NOCVswXSBOVUxMLAorCXBzLURldGFjaGVkCVsxXSBOVUxMLAorCXBzLUF0dGFjaGVkTm90UmVhY2hhYmxlRm9yUGFnaW5nCVsyXSBOVUxMLAorCXBzLUF0dGFjaGVkUmVhY2hhYmxlRm9yUGFnaW5nCVszXSBOVUxMLAorCXBzLVBEUC1BY3RpdmVOb3RSZWFjaGFibGVGb3JQYWdpbmcJWzRdIFBEUC1Db250ZXh0SW5mb0xpc3QsCisJcHMtUERQLUFjdGl2ZVJlYWNoYWJsZUZvclBhZ2luZwlbNV0gUERQLUNvbnRleHRJbmZvTGlzdCwKKwluZXREZXROb3RSZWFjaGFibGUJTm90UmVhY2hhYmxlUmVhc29uIH0KKworUERQLUNvbnRleHRJbmZvTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZQRFAtQ29udGV4dHMpIE9GCisJCQkJUERQLUNvbnRleHRJbmZvCisKK1BEUC1Db250ZXh0SW5mbyA6Oj0gU0VRVUVOQ0UgeworCXBkcC1Db250ZXh0SWRlbnRpZmllcglbMF0gQ29udGV4dElkLAorCXBkcC1Db250ZXh0QWN0aXZlCVsxXSBOVUxMCQlPUFRJT05BTCwKKwlwZHAtVHlwZQkJWzJdIFBEUC1UeXBlLAorCXBkcC1BZGRyZXNzCVszXSBQRFAtQWRkcmVzcwlPUFRJT05BTCwKKwlhcG4tU3Vic2NyaWJlZAlbNF0gQVBOCQlPUFRJT05BTCwKKwlhcG4tSW5Vc2UJCVs1XSBBUE4JCU9QVElPTkFMLAorCW5zYXBpCQlbNl0gTlNBUEkJCU9QVElPTkFMLAorCXRyYW5zYWN0aW9uSWQJWzddIFRyYW5zYWN0aW9uSWQJT1BUSU9OQUwsCisJdGVpZC1Gb3JHbkFuZEdwCVs4XSBURUlECQlPUFRJT05BTCwKKwl0ZWlkLUZvckl1CVs5XSBURUlECQlPUFRJT05BTCwKKwlnZ3NuLUFkZHJlc3MJWzEwXSBHU04tQWRkcmVzcyAJT1BUSU9OQUwsCisJcW9zLVN1YnNjcmliZWQJWzExXSBFeHQtUW9TLVN1YnNjcmliZWQJT1BUSU9OQUwsCisJcW9zLVJlcXVlc3RlZAlbMTJdIEV4dC1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTCwKKwlxb3MtTmVnb3RpYXRlZAlbMTNdIEV4dC1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTCwKKwljaGFyZ2luZ0lkCVsxNF0gR1BSU0NoYXJnaW5nSUQJT1BUSU9OQUwsCisJY2hhcmdpbmdDaGFyYWN0ZXJpc3RpY3MJWzE1XSBDaGFyZ2luZ0NoYXJhY3RlcmlzdGljcwlPUFRJT05BTCwKKwlybmMtQWRkcmVzcwlbMTZdIEdTTi1BZGRyZXNzCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbMTddIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4sCisJcW9zMi1TdWJzY3JpYmVkCVsxOF0gRXh0Mi1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTCwKKwktLSBxb3MyLVN1YnNjcmliZWQgbWF5IGJlIHByZXNlbnQgb25seSBpZiBxb3MtU3Vic2NyaWJlZCBpcyBwcmVzZW50LgorCXFvczItUmVxdWVzdGVkCVsxOV0gRXh0Mi1Rb1MtU3Vic2NyaWJlZAlPUFRJT05BTCwKKwktLSBxb3MyLVJlcXVlc3RlZCBtYXkgYmUgcHJlc2VudCBvbmx5IGlmIHFvcy1SZXF1ZXN0ZWQgaXMgcHJlc2VudC4KKwlxb3MyLU5lZ290aWF0ZWQJWzIwXSBFeHQyLVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMLAorCS0tIHFvczItTmVnb3RpYXRlZCBtYXkgYmUgcHJlc2VudCBvbmx5IGlmIHFvcy1OZWdvdGlhdGVkIGlzIHByZXNlbnQuCisJCXFvczMtU3Vic2NyaWJlZAlbMjFdIEV4dDMtUW9TLVN1YnNjcmliZWQJT1BUSU9OQUwsCisJLS0gcW9zMy1TdWJzY3JpYmVkIG1heSBiZSBwcmVzZW50IG9ubHkgaWYgcW9zMi1TdWJzY3JpYmVkIGlzIHByZXNlbnQuCisJcW9zMy1SZXF1ZXN0ZWQJWzIyXSBFeHQzLVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMLAorCS0tIHFvczMtUmVxdWVzdGVkIG1heSBiZSBwcmVzZW50IG9ubHkgaWYgcW9zMi1SZXF1ZXN0ZWQgaXMgcHJlc2VudC4KKwlxb3MzLU5lZ290aWF0ZWQJWzIzXSBFeHQzLVFvUy1TdWJzY3JpYmVkCU9QVElPTkFMCisJLS0gcW9zMy1OZWdvdGlhdGVkIG1heSBiZSBwcmVzZW50IG9ubHkgaWYgcW9zMi1OZWdvdGlhdGVkIGlzIHByZXNlbnQuCit9CisKK05TQVBJIDo6PSBJTlRFR0VSICgwLi4xNSkKKy0tCVRoaXMgdHlwZSBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBOZXR3b3JrIGxheWVyIFNlcnZpY2UgQWNjZXNzIFBvaW50CisKK1RyYW5zYWN0aW9uSWQgOjo9IE9DVEVUIFNUUklORyAoU0laRSAoMS4uMikpCistLQlUaGlzIHR5cGUgY2FycmllcyB0aGUgdmFsdWUgcGFydCBvZiB0aGUgdHJhbnNhY3Rpb24gaWRlbnRpZmllciB3aGljaCBpcyB1c2VkIGluIHRoZSAKKy0tCXNlc3Npb24gbWFuYWdlbWVudCBtZXNzYWdlcyBvbiB0aGUgYWNjZXNzIGludGVyZmFjZS4gVGhlIGVuY29kaW5nIGlzIGRlZmluZWQgaW4gCistLQkzR1BQIFRTIDI0LjAwOAorCitURUlEIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDQpKQorLS0JVGhpcyB0eXBlIGNhcnJpZXMgdGhlIHZhbHVlIHBhcnQgb2YgdGhlIFR1bm5lbCBFbmRwb2ludCBJZGVudGlmaWVyIHdoaWNoIGlzIHVzZWQgdG8gCistLQlkaXN0aW5ndWlzaCBiZXR3ZWVuIGRpZmZlcmVudCB0dW5uZWxzIGJldHdlZW4gdGhlIHNhbWUgcGFpciBvZiBlbnRpdGllcyB3aGljaCBjb21tdW5pY2F0ZSAKKy0tCXVzaW5nIHRoZSBHUFJTIFR1bm5lbGxpbmcgUHJvdG9jb2wgVGhlIGVuY29kaW5nIGlzIGRlZmluZWQgaW4gM0dQUCBUUyAyOS4wNjAuCisKK0dQUlNDaGFyZ2luZ0lEIDo6PSBPQ1RFVCBTVFJJTkcgKFNJWkUgKDQpKQorLS0JVGhlIENoYXJnaW5nIElEIGlzIGEgdW5pcXVlIGZvdXIgb2N0ZXQgdmFsdWUgZ2VuZXJhdGVkIGJ5IHRoZSBHR1NOIHdoZW4gCistLQlhIFBEUCBDb250ZXh0IGlzIGFjdGl2YXRlZC4gQSBDaGFyZ2luZyBJRCBpcyBnZW5lcmF0ZWQgZm9yIGVhY2ggYWN0aXZhdGVkIGNvbnRleHQuCistLQlUaGUgZW5jb2RpbmcgaXMgZGVmaW5lZCBpbiAzR1BQIFRTIDI5LjA2MC4KKworTm90UmVhY2hhYmxlUmVhc29uIDo6PSBFTlVNRVJBVEVEIHsKKwltc1B1cmdlZCAoMCksCisJaW1zaURldGFjaGVkICgxKSwKKwlyZXN0cmljdGVkQXJlYSAoMiksCisJbm90UmVnaXN0ZXJlZCAoMyl9CisKKy0tIGFueSB0aW1lIGludGVycm9nYXRpb24gaW5mbyB0eXBlcworCitBbnlUaW1lSW50ZXJyb2dhdGlvbkFyZyA6Oj0gU0VRVUVOQ0UgeworCXN1YnNjcmliZXJJZGVudGl0eQlbMF0gU3Vic2NyaWJlcklkZW50aXR5LAorCXJlcXVlc3RlZEluZm8JWzFdIFJlcXVlc3RlZEluZm8sCisJZ3NtU0NGLUFkZHJlc3MJWzNdIElTRE4tQWRkcmVzc1N0cmluZywKKwlleHRlbnNpb25Db250YWluZXIJWzJdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK0FueVRpbWVJbnRlcnJvZ2F0aW9uUmVzIDo6PSBTRVFVRU5DRSB7CisJc3Vic2NyaWJlckluZm8JU3Vic2NyaWJlckluZm8sCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKKy0tIGFueSB0aW1lIGluZm9ybWF0aW9uIGhhbmRsaW5nIHR5cGVzCisKK0FueVRpbWVTdWJzY3JpcHRpb25JbnRlcnJvZ2F0aW9uQXJnIDo6PSBTRVFVRU5DRSB7CisJc3Vic2NyaWJlcklkZW50aXR5CVswXSBTdWJzY3JpYmVySWRlbnRpdHksCisJcmVxdWVzdGVkU3Vic2NyaXB0aW9uSW5mbwlbMV0gUmVxdWVzdGVkU3Vic2NyaXB0aW9uSW5mbywKKwlnc21TQ0YtQWRkcmVzcwlbMl0gSVNETi1BZGRyZXNzU3RyaW5nLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbM10gRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCWxvbmdGVE4tU3VwcG9ydGVkCVs0XQlOVUxMCQlPUFRJT05BTCwKKwkuLi59CisKK0FueVRpbWVTdWJzY3JpcHRpb25JbnRlcnJvZ2F0aW9uUmVzIDo6PSBTRVFVRU5DRSB7CisJY2FsbEZvcndhcmRpbmdEYXRhCVsxXSBDYWxsRm9yd2FyZGluZ0RhdGEJT1BUSU9OQUwsCisJY2FsbEJhcnJpbmdEYXRhCVsyXSBDYWxsQmFycmluZ0RhdGEJT1BUSU9OQUwsCisJb2RiLUluZm8JCVszXSBPREItSW5mbwlPUFRJT05BTCwKKwljYW1lbC1TdWJzY3JpcHRpb25JbmZvCVs0XSBDQU1FTC1TdWJzY3JpcHRpb25JbmZvCU9QVElPTkFMLAorCXN1cHBvcnRlZFZMUi1DQU1FTC1QaGFzZXMJWzVdIFN1cHBvcnRlZENhbWVsUGhhc2VzCU9QVElPTkFMLAorCXN1cHBvcnRlZFNHU04tQ0FNRUwtUGhhc2VzCVs2XSBTdXBwb3J0ZWRDYW1lbFBoYXNlcwlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJWzddIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4gLAorCW9mZmVyZWRDYW1lbDRDU0lzSW5WTFIJWzhdIE9mZmVyZWRDYW1lbDRDU0lzCU9QVElPTkFMLAorCW9mZmVyZWRDYW1lbDRDU0lzSW5TR1NOCVs5XSBPZmZlcmVkQ2FtZWw0Q1NJcwlPUFRJT05BTCwKKwltc2lzZG4tQlMtTGlzdAlbMTBdIE1TSVNETi1CUy1MaXN0CU9QVElPTkFMIH0KKworUmVxdWVzdGVkU3Vic2NyaXB0aW9uSW5mbyA6Oj0gU0VRVUVOQ0UgeworCXJlcXVlc3RlZFNTLUluZm8JWzFdIFNTLUZvckJTLUNvZGUJT1BUSU9OQUwsCisJb2RiCQkJWzJdIE5VTEwJCU9QVElPTkFMLAorCXJlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8JWzNdIFJlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8JCU9QVElPTkFMLAorCXN1cHBvcnRlZFZMUi1DQU1FTC1QaGFzZXMJWzRdIE5VTEwJCU9QVElPTkFMLAorCXN1cHBvcnRlZFNHU04tQ0FNRUwtUGhhc2VzCVs1XSBOVUxMCQlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJWzZdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4sCisJYWRkaXRpb25hbFJlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8KKwkJCQlbN10gQWRkaXRpb25hbFJlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8KKwkJCQkJCQlPUFRJT05BTCwKKwltc2lzZG4tQlMtTGlzdAlbOF0gTlVMTAkJT1BUSU9OQUwgfQorCitNU0lTRE4tQlMtTGlzdCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4ubWF4TnVtT2ZNU0lTRE4pIE9GCisJCQkJTVNJU0ROLUJTCisKK21heE51bU9mTVNJU0ROICBJTlRFR0VSIDo6PSA1MAorCisKK01TSVNETi1CUyA6Oj0gU0VRVUVOQ0UgeworCW1zaXNkbgkJCUlTRE4tQWRkcmVzc1N0cmluZywJCisJYmFzaWNTZXJ2aWNlTGlzdAlbMF0JQmFzaWNTZXJ2aWNlTGlzdAlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJWzFdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK1JlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8gOjo9IEVOVU1FUkFURUQgeworCW8tQ1NJCQkoMCksCisJdC1DU0kJCSgxKSwKKwl2dC1DU0kJCSgyKSwKKwl0aWYtQ1NJCQkoMyksCisJZ3Bycy1DU0kJCSg0KSwKKwltby1zbXMtQ1NJCSg1KSwKKwlzcy1DU0kJCSg2KSwKKwltLUNTSQkJKDcpLAorCWQtY3NpCQkoOCl9CisKK0FkZGl0aW9uYWxSZXF1ZXN0ZWRDQU1FTC1TdWJzY3JpcHRpb25JbmZvIDo6PSBFTlVNRVJBVEVEIHsKKwltdC1zbXMtQ1NJCSgwKSwKKwltZy1jc2kJCSgxKSwKKwlvLUlNLUNTSSAJCSgyKSwKKwlkLUlNLUNTSQkJKDMpLAorCXZ0LUlNLUNTSQkgCSg0KSwKKwkuLi59CistLQlleGNlcHRpb24gaGFuZGxpbmc6IHVua25vd24gdmFsdWVzIHNoYWxsIGJlIGRpc2NhcmRlZCBieSB0aGUgcmVjZWl2ZXIuCisKK0NhbGxGb3J3YXJkaW5nRGF0YSA6Oj0gU0VRVUVOQ0UgeworCWZvcndhcmRpbmdGZWF0dXJlTGlzdAlFeHQtRm9yd0ZlYXR1cmVMaXN0LAorCW5vdGlmaWNhdGlvblRvQ1NFCU5VTEwJCQlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJWzBdIEV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK0NhbGxCYXJyaW5nRGF0YSA6Oj0gU0VRVUVOQ0UgeworCWNhbGxCYXJyaW5nRmVhdHVyZUxpc3QJRXh0LUNhbGxCYXJGZWF0dXJlTGlzdCwKKwlwYXNzd29yZAkJUGFzc3dvcmQJCU9QVElPTkFMLAorCXdyb25nUGFzc3dvcmRBdHRlbXB0c0NvdW50ZXIJV3JvbmdQYXNzd29yZEF0dGVtcHRzQ291bnRlcglPUFRJT05BTCwKKwlub3RpZmljYXRpb25Ub0NTRQlOVUxMCQkJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK1dyb25nUGFzc3dvcmRBdHRlbXB0c0NvdW50ZXIgOjo9IElOVEVHRVIgKDAuLjQpCisKK09EQi1JbmZvIDo6PSBTRVFVRU5DRSB7CisJb2RiLURhdGEJCU9EQi1EYXRhLAorCW5vdGlmaWNhdGlvblRvQ1NFCU5VTEwJCQlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLn0KKworQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbyA6Oj0gU0VRVUVOQ0UgeworCW8tQ1NJCQlbMF0JTy1DU0kJT1BUSU9OQUwsCisJby1CY3NtQ2FtZWxURFAtQ3JpdGVyaWFMaXN0CVsxXQlPLUJjc21DYW1lbFREUENyaXRlcmlhTGlzdAlPUFRJT05BTCwgCisJZC1DU0kJCVsyXQlELUNTSQlPUFRJT05BTCwKKwl0LUNTSQkJWzNdCVQtQ1NJCU9QVElPTkFMLAorCXQtQkNTTS1DQU1FTC1URFAtQ3JpdGVyaWFMaXN0CVs0XQlULUJDU00tQ0FNRUwtVERQLUNyaXRlcmlhTGlzdAlPUFRJT05BTCwKKwl2dC1DU0kJCVs1XQlULUNTSQlPUFRJT05BTCwKKwl2dC1CQ1NNLUNBTUVMLVREUC1Dcml0ZXJpYUxpc3QJWzZdCVQtQkNTTS1DQU1FTC1URFAtQ3JpdGVyaWFMaXN0CU9QVElPTkFMLAorCXRpZi1DU0kJCVs3XQlOVUxMCQlPUFRJT05BTCwKKwl0aWYtQ1NJLU5vdGlmaWNhdGlvblRvQ1NFCVs4XQlOVUxMCQlPUFRJT05BTCwKKwlncHJzLUNTSQkJWzldCUdQUlMtQ1NJCU9QVElPTkFMLAorCW1vLXNtcy1DU0kJWzEwXQlTTVMtQ1NJCU9QVElPTkFMLAorCXNzLUNTSQkJWzExXQlTUy1DU0kJT1BUSU9OQUwsCisJbS1DU0kJCVsxMl0JTS1DU0kJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsxM10JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiwKKwlzcGVjaWZpY0NTSURlbGV0ZWRMaXN0CVsxNF0JU3BlY2lmaWNDU0ktV2l0aGRyYXcJT1BUSU9OQUwsCisJbXQtc21zLUNTSQlbMTVdCVNNUy1DU0kJT1BUSU9OQUwsCisJbXQtc21zQ0FNRUxURFAtQ3JpdGVyaWFMaXN0CVsxNl0JTVQtc21zQ0FNRUxURFAtQ3JpdGVyaWFMaXN0CU9QVElPTkFMLAorCW1nLWNzaQkJWzE3XQlNRy1DU0kJT1BUSU9OQUwsCisJby1JTS1DU0kJCVsxOF0gTy1DU0kJT1BUSU9OQUwsCisJby1JTS1CY3NtQ2FtZWxURFAtQ3JpdGVyaWFMaXN0CVsxOV0gTy1CY3NtQ2FtZWxURFBDcml0ZXJpYUxpc3QJT1BUSU9OQUwsCisJZC1JTS1DU0kJCVsyMF0gRC1DU0kJT1BUSU9OQUwsCisJdnQtSU0tQ1NJCQlbMjFdIFQtQ1NJCU9QVElPTkFMLAorCXZ0LUlNLUJDU00tQ0FNRUwtVERQLUNyaXRlcmlhTGlzdAlbMjJdCVQtQkNTTS1DQU1FTC1URFAtQ3JpdGVyaWFMaXN0CU9QVElPTkFMCisJfQorCitBbnlUaW1lTW9kaWZpY2F0aW9uQXJnIDo6PSBTRVFVRU5DRSB7CisJc3Vic2NyaWJlcklkZW50aXR5CVswXQlTdWJzY3JpYmVySWRlbnRpdHksCisJZ3NtU0NGLUFkZHJlc3MJWzFdCUlTRE4tQWRkcmVzc1N0cmluZywKKwltb2RpZmljYXRpb25SZXF1ZXN0Rm9yLUNGLUluZm8JWzJdCU1vZGlmaWNhdGlvblJlcXVlc3RGb3ItQ0YtSW5mbyBPUFRJT05BTCwKKwltb2RpZmljYXRpb25SZXF1ZXN0Rm9yLUNCLUluZm8JWzNdCU1vZGlmaWNhdGlvblJlcXVlc3RGb3ItQ0ItSW5mbyBPUFRJT05BTCwKKwltb2RpZmljYXRpb25SZXF1ZXN0Rm9yLUNTSQlbNF0JTW9kaWZpY2F0aW9uUmVxdWVzdEZvci1DU0kJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVs1XQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJbG9uZ0ZUTi1TdXBwb3J0ZWQJWzZdCU5VTEwJCU9QVElPTkFMLAorCS4uLiwKKwltb2RpZmljYXRpb25SZXF1ZXN0Rm9yLU9EQi1kYXRhCVs3XQlNb2RpZmljYXRpb25SZXF1ZXN0Rm9yLU9EQi1kYXRhIE9QVElPTkFMLAorCW1vZGlmaWNhdGlvblJlcXVlc3RGb3ItSVAtU00tR1ctRGF0YQlbOF0JTW9kaWZpY2F0aW9uUmVxdWVzdEZvci1JUC1TTS1HVy1EYXRhIE9QVElPTkFMIH0KKworQW55VGltZU1vZGlmaWNhdGlvblJlcyA6Oj0gU0VRVUVOQ0UgeworCXNzLUluZm9Gb3ItQ1NFCVswXQlFeHQtU1MtSW5mb0Zvci1DU0UJT1BUSU9OQUwsCisJY2FtZWwtU3Vic2NyaXB0aW9uSW5mbwlbMV0JQ0FNRUwtU3Vic2NyaXB0aW9uSW5mbwlPUFRJT05BTCwKKwlleHRlbnNpb25Db250YWluZXIJWzJdCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi4sCisJb2RiLUluZm8JCVszXQlPREItSW5mbwlPUFRJT05BTCB9CisKK01vZGlmaWNhdGlvblJlcXVlc3RGb3ItQ0YtSW5mbyA6Oj0gU0VRVUVOQ0UgeworCXNzLUNvZGUJCVswXQlTUy1Db2RlLAorCWJhc2ljU2VydmljZQlbMV0JRXh0LUJhc2ljU2VydmljZUNvZGUJT1BUSU9OQUwsCisJc3MtU3RhdHVzCQlbMl0JRXh0LVNTLVN0YXR1cwlPUFRJT05BTCwKKwlmb3J3YXJkZWRUb051bWJlcglbM10JQWRkcmVzc1N0cmluZwlPUFRJT05BTCwKKwlmb3J3YXJkZWRUb1N1YmFkZHJlc3MJWzRdCUlTRE4tU3ViYWRkcmVzc1N0cmluZwlPUFRJT05BTCwKKwlub1JlcGx5Q29uZGl0aW9uVGltZQlbNV0JRXh0LU5vUmVwQ29uZFRpbWUJT1BUSU9OQUwsCisJbW9kaWZ5Tm90aWZpY2F0aW9uVG9DU0UJWzZdCU1vZGlmaWNhdGlvbkluc3RydWN0aW9uCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbN10JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLn0KKworTW9kaWZpY2F0aW9uUmVxdWVzdEZvci1DQi1JbmZvIDo6PSBTRVFVRU5DRSB7CisJc3MtQ29kZQkJWzBdCVNTLUNvZGUsCisJYmFzaWNTZXJ2aWNlCVsxXQlFeHQtQmFzaWNTZXJ2aWNlQ29kZQlPUFRJT05BTCwKKwlzcy1TdGF0dXMJCVsyXQlFeHQtU1MtU3RhdHVzCU9QVElPTkFMLAorCXBhc3N3b3JkCQlbM10JUGFzc3dvcmQJT1BUSU9OQUwsCisJd3JvbmdQYXNzd29yZEF0dGVtcHRzQ291bnRlcglbNF0JV3JvbmdQYXNzd29yZEF0dGVtcHRzQ291bnRlcglPUFRJT05BTCwKKwltb2RpZnlOb3RpZmljYXRpb25Ub0NTRQlbNV0JTW9kaWZpY2F0aW9uSW5zdHJ1Y3Rpb24JT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVs2XQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4ufQorCitNb2RpZmljYXRpb25SZXF1ZXN0Rm9yLU9EQi1kYXRhIDo6PSBTRVFVRU5DRSB7CisJb2RiLWRhdGEJCVswXQlPREItRGF0YQlPUFRJT05BTCwKKwltb2RpZnlOb3RpZmljYXRpb25Ub0NTRQlbMV0JTW9kaWZpY2F0aW9uSW5zdHJ1Y3Rpb24JT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsyXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4ufQorCitNb2RpZmljYXRpb25SZXF1ZXN0Rm9yLUNTSSA6Oj0gU0VRVUVOQ0UgeworCXJlcXVlc3RlZENhbWVsLVN1YnNjcmlwdGlvbkluZm8JWzBdCVJlcXVlc3RlZENBTUVMLVN1YnNjcmlwdGlvbkluZm8sCisJbW9kaWZ5Tm90aWZpY2F0aW9uVG9DU0UJWzFdCU1vZGlmaWNhdGlvbkluc3RydWN0aW9uCU9QVElPTkFMLAorCW1vZGlmeUNTSS1TdGF0ZQlbMl0JTW9kaWZpY2F0aW9uSW5zdHJ1Y3Rpb24JT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVszXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4uLAorCWFkZGl0aW9uYWxSZXF1ZXN0ZWRDQU1FTC1TdWJzY3JpcHRpb25JbmZvCisJCQkJWzRdIEFkZGl0aW9uYWxSZXF1ZXN0ZWRDQU1FTC1TdWJzY3JpcHRpb25JbmZvCisJCQkJCQkJT1BUSU9OQUwgfQorLS0gcmVxdWVzdGVkQ2FtZWwtU3Vic2NyaXB0aW9uSW5mbyBzaGFsbCBiZSBkaXNjYXJkZWQgaWYKKy0tIGFkZGl0aW9uYWxSZXF1ZXN0ZWRDQU1FTC1TdWJzY3JpcHRpb25JbmZvIGlzIHJlY2VpdmVkCisKK01vZGlmaWNhdGlvblJlcXVlc3RGb3ItSVAtU00tR1ctRGF0YSA6Oj0gU0VRVUVOQ0UgeworCW1vZGlmeVJlZ2lzdHJhdGlvblN0YXR1cwlbMF0JTW9kaWZpY2F0aW9uSW5zdHJ1Y3Rpb24JT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVsxXQlFeHRlbnNpb25Db250YWluZXIJT1BUSU9OQUwsCisJLi4ufQorCitNb2RpZmljYXRpb25JbnN0cnVjdGlvbiA6Oj0gRU5VTUVSQVRFRCB7CisJZGVhY3RpdmF0ZQkoMCksCisJYWN0aXZhdGUJCSgxKX0KKworLS0gc3Vic2NyaWJlciBkYXRhIG1vZGlmaWNhdGlvbiBub3RpZmljYXRpb24gdHlwZXMKKworTm90ZVN1YnNjcmliZXJEYXRhTW9kaWZpZWRBcmcgOjo9IFNFUVVFTkNFIHsKKwlpbXNpCQkJSU1TSSwKKwltc2lzZG4JCUlTRE4tQWRkcmVzc1N0cmluZywKKwlmb3J3YXJkaW5nSW5mb0Zvci1DU0UJWzBdIEV4dC1Gb3J3YXJkaW5nSW5mb0Zvci1DU0UJT1BUSU9OQUwsCisJY2FsbEJhcnJpbmdJbmZvRm9yLUNTRQlbMV0gRXh0LUNhbGxCYXJyaW5nSW5mb0Zvci1DU0UJT1BUSU9OQUwsCisJb2RiLUluZm8JCVsyXSBPREItSW5mbwlPUFRJT05BTCwKKwljYW1lbC1TdWJzY3JpcHRpb25JbmZvCVszXSBDQU1FTC1TdWJzY3JpcHRpb25JbmZvCU9QVElPTkFMLAorCWFsbEluZm9ybWF0aW9uU2VudAlbNF0gTlVMTAkJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKK05vdGVTdWJzY3JpYmVyRGF0YU1vZGlmaWVkUmVzIDo6PSBTRVFVRU5DRSB7CisJZXh0ZW5zaW9uQ29udGFpbmVyCUV4dGVuc2lvbkNvbnRhaW5lcglPUFRJT05BTCwKKwkuLi59CisKKy0tIG1vYmlsaXR5IG1hbmFnZW1lbnQgZXZlbnQgbm90aWZpY2F0aW9vbiBpbmZvIHR5cGVzCisKK05vdGVNTS1FdmVudEFyZzo6PSBTRVFVRU5DRSB7CisJc2VydmljZUtleQlTZXJ2aWNlS2V5LAorCWV2ZW50TWV0CQlbMF0JTU0tQ29kZSwKKwlpbXNpCQkJWzFdCUlNU0ksCisJbXNpc2RuCQlbMl0JSVNETi1BZGRyZXNzU3RyaW5nLAorCWxvY2F0aW9uSW5mb3JtYXRpb24JWzNdCUxvY2F0aW9uSW5mb3JtYXRpb24JT1BUSU9OQUwsCisJc3VwcG9ydGVkQ0FNRUxQaGFzZXMJWzVdCVN1cHBvcnRlZENhbWVsUGhhc2VzCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbNl0JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLiwKKwlsb2NhdGlvbkluZm9ybWF0aW9uR1BSUwlbN10JTG9jYXRpb25JbmZvcm1hdGlvbkdQUlMJT1BUSU9OQUwsCisJb2ZmZXJlZENhbWVsNEZ1bmN0aW9uYWxpdGllcwlbOF0gT2ZmZXJlZENhbWVsNEZ1bmN0aW9uYWxpdGllcwlPUFRJT05BTAorfQorCitOb3RlTU0tRXZlbnRSZXMgOjo9IFNFUVVFTkNFIHsKKwlleHRlbnNpb25Db250YWluZXIJRXh0ZW5zaW9uQ29udGFpbmVyIAlPUFRJT05BTCwKKwkuLi59CisKK0V4dC1TUy1JbmZvRm9yLUNTRSA6Oj0gQ0hPSUNFIHsKKwlmb3J3YXJkaW5nSW5mb0Zvci1DU0UJWzBdIEV4dC1Gb3J3YXJkaW5nSW5mb0Zvci1DU0UsCisJY2FsbEJhcnJpbmdJbmZvRm9yLUNTRQlbMV0gRXh0LUNhbGxCYXJyaW5nSW5mb0Zvci1DU0UKKwl9CisKK0V4dC1Gb3J3YXJkaW5nSW5mb0Zvci1DU0UgOjo9IFNFUVVFTkNFIHsKKwlzcy1Db2RlCQlbMF0JU1MtQ29kZSwKKwlmb3J3YXJkaW5nRmVhdHVyZUxpc3QJWzFdCUV4dC1Gb3J3RmVhdHVyZUxpc3QsCisJbm90aWZpY2F0aW9uVG9DU0UJWzJdCU5VTEwJCU9QVElPTkFMLAorCWV4dGVuc2lvbkNvbnRhaW5lcglbM10JRXh0ZW5zaW9uQ29udGFpbmVyCU9QVElPTkFMLAorCS4uLn0KKworRXh0LUNhbGxCYXJyaW5nSW5mb0Zvci1DU0UgOjo9IFNFUVVFTkNFIHsKKwlzcy1Db2RlCQlbMF0JU1MtQ29kZSwKKwljYWxsQmFycmluZ0ZlYXR1cmVMaXN0CVsxXQlFeHQtQ2FsbEJhckZlYXR1cmVMaXN0LAorCXBhc3N3b3JkCQlbMl0JUGFzc3dvcmQJT1BUSU9OQUwsCisJd3JvbmdQYXNzd29yZEF0dGVtcHRzQ291bnRlcglbM10JV3JvbmdQYXNzd29yZEF0dGVtcHRzQ291bnRlcglPUFRJT05BTCwKKwlub3RpZmljYXRpb25Ub0NTRQlbNF0JTlVMTAkJT1BUSU9OQUwsCisJZXh0ZW5zaW9uQ29udGFpbmVyCVs1XQlFeHRlbnNpb25Db250YWluZXIgCU9QVElPTkFMLAorCS4uLn0KKworRU5ECisK