ZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJfaGFsX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKaW5kZXggNDhhZmY1NS4uZmM4YmI0OSAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKQEAgLTEwNCw2ICsxMDQsMTIgQEAKICNpZiBkZWZpbmVkKFNUTTMySDcpCiAjZGVmaW5lIEFEQ19DSEFOTkVMX1ZCQVRfRElWNCAgICAgICAgICAgQURDX0NIQU5ORUxfVkJBVAogI2VuZGlmIC8qIFNUTTMySDcgKi8KKworI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgQURDX1NBTVBMRVRJTUVfNUNZQ0xFICAgICAgICAgICBBRENfU0FNUExFVElNRV81Q1lDTEVTCisjZGVmaW5lIEFEQ19TQU1QTEVUSU1FXzM5MUNZQ0xFU181ICAgICAgQURDX1NBTVBMRVRJTUVfMzkxQ1lDTEVTCisjZGVmaW5lIEFEQzRfU0FNUExFVElNRV8xNjBDWUNMRVNfNSAgICAgQURDNF9TQU1QTEVUSU1FXzgxNENZQ0xFU181CisjZW5kaWYgLyogU1RNMzJVNSAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTIyNyw2ICsyMzMsNyBAQAogICAqLwogI2RlZmluZSBIQUxfQ1JDX0lucHV0X0RhdGFfUmV2ZXJzZSAgIEhBTF9DUkNFeF9JbnB1dF9EYXRhX1JldmVyc2UgICAgLyohPCBBbGlhc2VkIHRvIEhBTF9DUkNFeF9JbnB1dF9EYXRhX1JldmVyc2UgZm9yIGludGVyIFNUTTMyIHNlcmllcyBjb21wYXRpYmlsaXR5ICAqLwogI2RlZmluZSBIQUxfQ1JDX091dHB1dF9EYXRhX1JldmVyc2UgIEhBTF9DUkNFeF9PdXRwdXRfRGF0YV9SZXZlcnNlICAgLyohPCBBbGlhc2VkIHRvIEhBTF9DUkNFeF9PdXRwdXRfRGF0YV9SZXZlcnNlIGZvciBpbnRlciBTVE0zMiBzZXJpZXMgY29tcGF0aWJpbGl0eSAqLworCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDEwLDYgKzQxNywxMCBAQAogI2RlZmluZSBEQUNfVFJJR0dFUl9MUDJfT1VUICAgICAgICAgICAgICAgICAgICAgICAgREFDX1RSSUdHRVJfTFBUSU0yX09VVAogCiAjZW5kaWYgLyogU1RNMzJINyAqLworCisjaWYgZGVmaW5lZChTVE0zMlU1KQorI2RlZmluZSBHUERNQTFfUkVRVUVTVF9EQ01JICAgICAgICAgICAgICAgICAgICAgICAgR1BETUExX1JFUVVFU1RfRENNSV9QU1NJCisjZW5kaWYgLyogU1RNMzJVNSAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTY1Nyw2ICs2NjgsMTAgQEAKICNpZiBkZWZpbmVkKFNUTTMyVTUpCiAjZGVmaW5lIEdQSU9fQUYwX1JUQ181MEh6ICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQUYwX1JUQ181MEhaCiAjZW5kaWYgLyogU1RNMzJVNSAqLworI2lmIGRlZmluZWQoU1RNMzJVNSkKKyNkZWZpbmUgR1BJT19BRjBfUzJEU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjBfU1JEU1RPUAorI2RlZmluZSBHUElPX0FGMTFfTFBHUElPICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX0FGMTFfTFBHUElPMQorI2VuZGlmIC8qIFNUTTMyVTUgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xNjkwLDYgKzE3MDUsNzkgQEAKIAogI2RlZmluZSBQV1JfTU9ERV9FVlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFdSX1BWRF9NT0RFX05PUk1BTAogCisjaWYgZGVmaW5lZCAoU1RNMzJVNSkKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0UxX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTNfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0UzX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0U0X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFNF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFNV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTVfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTZfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0U2X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0U3X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFN19TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFOF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRThfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTlfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0U5X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX1BBR0UxMF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNMV9QQUdFMTBfU1RPUAorI2RlZmluZSBQV1JfU1JBTTFfUEFHRTExX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU0xX1BBR0UxMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMV9QQUdFMTJfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfU1JBTTFfUEFHRTEyX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0xX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgIFBXUl9TUkFNMV9GVUxMX1NUT1AKKworI2RlZmluZSBQV1JfU1JBTTJfUEFHRTFfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0yX1BBR0UxX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0yX1BBR0UyX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNMl9QQUdFMl9TVE9QCisjZGVmaW5lIFBXUl9TUkFNMl9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgICBQV1JfU1JBTTJfRlVMTF9TVE9QCisKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0UxX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTNfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0UzX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0U0X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFNF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFNV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTVfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTZfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0U2X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0U3X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFN19TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFOF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRThfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTlfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0U5X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0UxMF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFMTBfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfUEFHRTExX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU0zX1BBR0UxMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNM19QQUdFMTJfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfU1JBTTNfUEFHRTEyX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU0zX1BBR0UxM19TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNM19QQUdFMTNfU1RPUAorI2RlZmluZSBQV1JfU1JBTTNfRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgUFdSX1NSQU0zX0ZVTExfU1RPUAorCisjZGVmaW5lIFBXUl9TUkFNNF9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgICBQV1JfU1JBTTRfRlVMTF9TVE9QCisKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0UxX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFMl9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTJfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTNfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0UzX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0U0X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFNF9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFNV9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTVfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTZfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0U2X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0U3X1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFN19TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFOF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRThfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTlfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0U5X1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0UxMF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFMTBfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfUEFHRTExX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX1NSQU01X1BBR0UxMV9TVE9QCisjZGVmaW5lIFBXUl9TUkFNNV9QQUdFMTJfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfU1JBTTVfUEFHRTEyX1NUT1AKKyNkZWZpbmUgUFdSX1NSQU01X1BBR0UxM19TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgIFBXUl9TUkFNNV9QQUdFMTNfU1RPUAorI2RlZmluZSBQV1JfU1JBTTVfRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgUFdSX1NSQU01X0ZVTExfU1RPUAorCisjZGVmaW5lIFBXUl9JQ0FDSEVfRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfSUNBQ0hFX0ZVTExfU1RPUAorI2RlZmluZSBQV1JfRENBQ0hFMV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICAgUFdSX0RDQUNIRTFfRlVMTF9TVE9QCisjZGVmaW5lIFBXUl9EQ0FDSEUyX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgICBQV1JfRENBQ0hFMl9GVUxMX1NUT1AKKyNkZWZpbmUgUFdSX0RNQTJEUkFNX0ZVTExfU1RPUF9SRVRFTlRJT04gICAgICAgICAgICAgIFBXUl9ETUEyRFJBTV9GVUxMX1NUT1AKKyNkZWZpbmUgUFdSX1BFUklQSFJBTV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgIFBXUl9QRVJJUEhSQU1fRlVMTF9TVE9QCisjZGVmaW5lIFBXUl9QS0EzMlJBTV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICAgICBQV1JfUEtBMzJSQU1fRlVMTF9TVE9QCisjZGVmaW5lIFBXUl9HUkFQSElDUFJBTV9GVUxMX1NUT1BfUkVURU5USU9OICAgICAgICAgICBQV1JfR1JBUEhJQ1BSQU1fRlVMTF9TVE9QCisjZGVmaW5lIFBXUl9EU0lSQU1fRlVMTF9TVE9QX1JFVEVOVElPTiAgICAgICAgICAgICAgICBQV1JfRFNJUkFNX0ZVTExfU1RPUAorCisjZGVmaW5lIFBXUl9TUkFNMl9QQUdFMV9TVEFOREJZX1JFVEVOVElPTiAgICAgICAgICAgICBQV1JfU1JBTTJfUEFHRTFfU1RBTkRCWQorI2RlZmluZSBQV1JfU1JBTTJfUEFHRTJfU1RBTkRCWV9SRVRFTlRJT04gICAgICAgICAgICAgUFdSX1NSQU0yX1BBR0UyX1NUQU5EQlkKKyNkZWZpbmUgUFdSX1NSQU0yX0ZVTExfU1RBTkRCWV9SRVRFTlRJT04gICAgICAgICAgICAgIFBXUl9TUkFNMl9GVUxMX1NUQU5EQlkKKworI2RlZmluZSBQV1JfU1JBTTFfRlVMTF9SVU5fUkVURU5USU9OICAgICAgICAgICAgICAgICAgUFdSX1NSQU0xX0ZVTExfUlVOCisjZGVmaW5lIFBXUl9TUkFNMl9GVUxMX1JVTl9SRVRFTlRJT04gICAgICAgICAgICAgICAgICBQV1JfU1JBTTJfRlVMTF9SVU4KKyNkZWZpbmUgUFdSX1NSQU0zX0ZVTExfUlVOX1JFVEVOVElPTiAgICAgICAgICAgICAgICAgIFBXUl9TUkFNM19GVUxMX1JVTgorI2RlZmluZSBQV1JfU1JBTTRfRlVMTF9SVU5fUkVURU5USU9OICAgICAgICAgICAgICAgICAgUFdSX1NSQU00X0ZVTExfUlVOCisjZGVmaW5lIFBXUl9TUkFNNV9GVUxMX1JVTl9SRVRFTlRJT04gICAgICAgICAgICAgICAgICBQV1JfU1JBTTVfRlVMTF9SVU4KKworI2RlZmluZSBQV1JfQUxMX1JBTV9SVU5fUkVURU5USU9OX01BU0sgICAgICAgICAgICAgICAgUFdSX0FMTF9SQU1fUlVOX01BU0sKKyNlbmRpZgorCiAvKioKICAgKiBAfQogICovCkBAIC0zNDU4LDcgKzM1NDYsMTAgQEAKICNkZWZpbmUgX19IQUxfUkNDX0FEQzFfSVNfQ0xLX0VOQUJMRUQgICAgICAgX19IQUxfUkNDX0FEQzEyX0lTX0NMS19FTkFCTEVECiAjZGVmaW5lIF9fSEFMX1JDQ19BREMxX0lTX0NMS19ESVNBQkxFRCAgICAgIF9fSEFMX1JDQ19BREMxMl9JU19DTEtfRElTQUJMRUQKICNkZWZpbmUgX19IQUxfUkNDX0FEQzFfRk9SQ0VfUkVTRVQgICAgICAgICAgX19IQUxfUkNDX0FEQzEyX0ZPUkNFX1JFU0VUCi0jZGVmaW5lIF9fSEFMX1JDQ19BREMxX1JFTEVBU0VfUkVTRVQgICAgICAgX19IQUxfUkNDX0FEQzEyX1JFTEVBU0VfUkVTRVQKKyNkZWZpbmUgX19IQUxfUkNDX0FEQzFfUkVMRUFTRV9SRVNFVCAgICAgICAgX19IQUxfUkNDX0FEQzEyX1JFTEVBU0VfUkVTRVQKKyNkZWZpbmUgX19IQUxfUkNDX0FEQzFfQ0xLX1NMRUVQX0VOQUJMRSAgICAgX19IQUxfUkNDX0FEQzEyX0NMS19TTEVFUF9FTkFCTEUKKyNkZWZpbmUgX19IQUxfUkNDX0FEQzFfQ0xLX1NMRUVQX0RJU0FCTEUgICAgX19IQUxfUkNDX0FEQzEyX0NMS19TTEVFUF9ESVNBQkxFCisjZGVmaW5lIF9fSEFMX1JDQ19HRVRfQ0xLNDhfU09VUkNFICAgICAgICAgIF9fSEFMX1JDQ19HRVRfSUNMS19TT1VSQ0UKICNlbmRpZgogCiAvKioKQEAgLTM1NDEsNyArMzYzMiw3IEBACiAjZGVmaW5lIFNEX09DUl9DSURfQ1NEX09WRVJXUklFVEUgICBTRF9PQ1JfQ0lEX0NTRF9PVkVSV1JJVEUKICNkZWZpbmUgU0RfQ01EX1NEX0FQUF9TVEFVUyAgICAgICAgIFNEX0NNRF9TRF9BUFBfU1RBVFVTCiAKLSNpZiAhZGVmaW5lZChTVE0zMkYxKSAmJiAhZGVmaW5lZChTVE0zMkYyKSAmJiAhZGVmaW5lZChTVE0zMkY0KSAmJiAhZGVmaW5lZChTVE0zMkwxKQorI2lmICFkZWZpbmVkKFNUTTMyRjEpICYmICFkZWZpbmVkKFNUTTMyRjIpICYmICFkZWZpbmVkKFNUTTMyRjQpICYmICFkZWZpbmVkKFNUTTMyRjcpICYmICFkZWZpbmVkKFNUTTMyTDEpCiAjZGVmaW5lIGVNTUNfSElHSF9WT0xUQUdFX1JBTkdFICAgICBFTU1DX0hJR0hfVk9MVEFHRV9SQU5HRQogI2RlZmluZSBlTU1DX0RVQUxfVk9MVEFHRV9SQU5HRSAgICAgRU1NQ19EVUFMX1ZPTFRBR0VfUkFOR0UKICNkZWZpbmUgZU1NQ19MT1dfVk9MVEFHRV9SQU5HRSAgICAgIEVNTUNfTE9XX1ZPTFRBR0VfUkFOR0UKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfaGFsX2Nhbi5oIGIvSW5jL3N0bTMybDR4eF9oYWxfY2FuLmgKaW5kZXggYjAyZDE4Yi4uNDEyMTMxOCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfY2FuLmgKKysrIGIvSW5jL3N0bTMybDR4eF9oYWxfY2FuLmgKQEAgLTEwMiwyMSArMTAyLDI1IEBACiB7CiAgIHVpbnQzMl90IEZpbHRlcklkSGlnaDsgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGZpbHRlciBpZGVudGlmaWNhdGlvbiBudW1iZXIgKE1TQnMgZm9yIGEgMzItYml0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCBmaXJzdCBvbmUgZm9yIGEgMTYtYml0IGNvbmZpZ3VyYXRpb24pLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMDAwIGFuZCBNYXhfRGF0YSA9IDB4RkZGRi4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluX0RhdGEgPSAweDAwMDAgYW5kIE1heF9EYXRhID0gMHhGRkZGLiAqLwogCiAgIHVpbnQzMl90IEZpbHRlcklkTG93OyAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGZpbHRlciBpZGVudGlmaWNhdGlvbiBudW1iZXIgKExTQnMgZm9yIGEgMzItYml0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLCBzZWNvbmQgb25lIGZvciBhIDE2LWJpdCBjb25maWd1cmF0aW9uKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAwMCBhbmQgTWF4X0RhdGEgPSAweEZGRkYuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbl9EYXRhID0gMHgwMDAwIGFuZCBNYXhfRGF0YSA9IDB4RkZGRi4gKi8KIAogICB1aW50MzJfdCBGaWx0ZXJNYXNrSWRIaWdoOyAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBmaWx0ZXIgbWFzayBudW1iZXIgb3IgaWRlbnRpZmljYXRpb24gbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBtb2RlIChNU0JzIGZvciBhIDMyLWJpdCBjb25maWd1cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Qgb25lIGZvciBhIDE2LWJpdCBjb25maWd1cmF0aW9uKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAwMCBhbmQgTWF4X0RhdGEgPSAweEZGRkYuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbl9EYXRhID0gMHgwMDAwIGFuZCBNYXhfRGF0YSA9IDB4RkZGRi4gKi8KIAogICB1aW50MzJfdCBGaWx0ZXJNYXNrSWRMb3c7ICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBmaWx0ZXIgbWFzayBudW1iZXIgb3IgaWRlbnRpZmljYXRpb24gbnVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBtb2RlIChMU0JzIGZvciBhIDMyLWJpdCBjb25maWd1cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kIG9uZSBmb3IgYSAxNi1iaXQgY29uZmlndXJhdGlvbikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwMDAgYW5kIE1heF9EYXRhID0gMHhGRkZGLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5fRGF0YSA9IDB4MDAwMCBhbmQgTWF4X0RhdGEgPSAweEZGRkYuICovCiAKICAgdWludDMyX3QgRmlsdGVyRklGT0Fzc2lnbm1lbnQ7ICAvKiE8IFNwZWNpZmllcyB0aGUgRklGTyAoMCBvciAxVSkgd2hpY2ggd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgZmlsdGVyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBDQU5fZmlsdGVyX0ZJRk8gKi8KQEAgLTI5NCwxMSArMjk4LDExIEBACiAjZGVmaW5lIEhBTF9DQU5fRVJST1JfUlhfRk9WMCAgICAgICAgICgweDAwMDAwMjAwVSkgIC8qITwgUnggRklGTzAgb3ZlcnJ1biBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1JYX0ZPVjEgICAgICAgICAoMHgwMDAwMDQwMFUpICAvKiE8IFJ4IEZJRk8xIG92ZXJydW4gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSEFMX0NBTl9FUlJPUl9UWF9BTFNUMCAgICAgICAgKDB4MDAwMDA4MDBVKSAgLyohPCBUeE1haWxib3ggMCB0cmFuc21pdCBmYWlsdXJlIGR1ZSB0byBhcmJpdHJhdGlvbiBsb3N0ICovCi0jZGVmaW5lIEhBTF9DQU5fRVJST1JfVFhfVEVSUjAgICAgICAgICgweDAwMDAxMDAwVSkgIC8qITwgVHhNYWlsYm94IDAgdHJhbnNtaXQgZmFpbHVyZSBkdWUgdG8gdHJhbnNtaXQgZXJyb3IgICAgKi8KKyNkZWZpbmUgSEFMX0NBTl9FUlJPUl9UWF9URVJSMCAgICAgICAgKDB4MDAwMDEwMDBVKSAgLyohPCBUeE1haWxib3ggMCB0cmFuc21pdCBmYWlsdXJlIGR1ZSB0byB0cmFuc21pdCBlcnJvciAgICovCiAjZGVmaW5lIEhBTF9DQU5fRVJST1JfVFhfQUxTVDEgICAgICAgICgweDAwMDAyMDAwVSkgIC8qITwgVHhNYWlsYm94IDEgdHJhbnNtaXQgZmFpbHVyZSBkdWUgdG8gYXJiaXRyYXRpb24gbG9zdCAqLwotI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1RYX1RFUlIxICAgICAgICAoMHgwMDAwNDAwMFUpICAvKiE8IFR4TWFpbGJveCAxIHRyYW5zbWl0IGZhaWx1cmUgZHVlIHRvIHRyYW5zbWl0IGVycm9yICAgICovCisjZGVmaW5lIEhBTF9DQU5fRVJST1JfVFhfVEVSUjEgICAgICAgICgweDAwMDA0MDAwVSkgIC8qITwgVHhNYWlsYm94IDEgdHJhbnNtaXQgZmFpbHVyZSBkdWUgdG8gdHJhbnNtaXQgZXJyb3IgICAqLwogI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1RYX0FMU1QyICAgICAgICAoMHgwMDAwODAwMFUpICAvKiE8IFR4TWFpbGJveCAyIHRyYW5zbWl0IGZhaWx1cmUgZHVlIHRvIGFyYml0cmF0aW9uIGxvc3QgKi8KLSNkZWZpbmUgSEFMX0NBTl9FUlJPUl9UWF9URVJSMiAgICAgICAgKDB4MDAwMTAwMDBVKSAgLyohPCBUeE1haWxib3ggMiB0cmFuc21pdCBmYWlsdXJlIGR1ZSB0byB0cmFuc21pdCBlcnJvciAgICAqLworI2RlZmluZSBIQUxfQ0FOX0VSUk9SX1RYX1RFUlIyICAgICAgICAoMHgwMDAxMDAwMFUpICAvKiE8IFR4TWFpbGJveCAyIHRyYW5zbWl0IGZhaWx1cmUgZHVlIHRvIHRyYW5zbWl0IGVycm9yICAgKi8KICNkZWZpbmUgSEFMX0NBTl9FUlJPUl9USU1FT1VUICAgICAgICAgKDB4MDAwMjAwMDBVKSAgLyohPCBUaW1lb3V0IGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9DQU5fRVJST1JfTk9UX0lOSVRJQUxJWkVEICgweDAwMDQwMDAwVSkgIC8qITwgUGVyaXBoZXJhbCBub3QgaW5pdGlhbGl6ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfQ0FOX0VSUk9SX05PVF9SRUFEWSAgICAgICAoMHgwMDA4MDAwMFUpICAvKiE8IFBlcmlwaGVyYWwgbm90IHJlYWR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTMyOSw3ICszMzMsOCBAQAogI2RlZmluZSBDQU5fTU9ERV9OT1JNQUwgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTm9ybWFsIG1vZGUgICAqLwogI2RlZmluZSBDQU5fTU9ERV9MT09QQkFDSyAgICAgICAgICAgKCh1aW50MzJfdClDQU5fQlRSX0xCS00pICAgICAgICAgICAgICAgICAgIC8qITwgTG9vcGJhY2sgbW9kZSAqLwogI2RlZmluZSBDQU5fTU9ERV9TSUxFTlQgICAgICAgICAgICAgKCh1aW50MzJfdClDQU5fQlRSX1NJTE0pICAgICAgICAgICAgICAgICAgIC8qITwgU2lsZW50IG1vZGUgICAqLwotI2RlZmluZSBDQU5fTU9ERV9TSUxFTlRfTE9PUEJBQ0sgICAgKCh1aW50MzJfdCkoQ0FOX0JUUl9MQktNIHwgQ0FOX0JUUl9TSUxNKSkgIC8qITwgTG9vcGJhY2sgY29tYmluZWQgd2l0aCBzaWxlbnQgbW9kZSAqLworI2RlZmluZSBDQU5fTU9ERV9TSUxFTlRfTE9PUEJBQ0sgICAgKCh1aW50MzJfdCkoQ0FOX0JUUl9MQktNIHwgQ0FOX0JUUl9TSUxNKSkgIC8qITwgTG9vcGJhY2sgY29tYmluZWQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lsZW50IG1vZGUgICAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTY0NCw3ICs2NDksOCBAQAogCiAjaWYgVVNFX0hBTF9DQU5fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEKIC8qIENhbGxiYWNrcyBSZWdpc3Rlci9VblJlZ2lzdGVyIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfQ0FOX1JlZ2lzdGVyQ2FsbGJhY2soQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIEhBTF9DQU5fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgdm9pZCAoKiBwQ2FsbGJhY2spKENBTl9IYW5kbGVUeXBlRGVmICpfaGNhbikpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NBTl9SZWdpc3RlckNhbGxiYWNrKENBTl9IYW5kbGVUeXBlRGVmICpoY2FuLCBIQUxfQ0FOX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiBwQ2FsbGJhY2spKENBTl9IYW5kbGVUeXBlRGVmICpfaGNhbikpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NBTl9VblJlZ2lzdGVyQ2FsbGJhY2soQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIEhBTF9DQU5fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7CiAKICNlbmRpZiAvKiAoVVNFX0hBTF9DQU5fUkVHSVNURVJfQ0FMTEJBQ0tTKSAqLwpAQCAtNjU4LDcgKzY2NCw3IEBACiAgKi8KIAogLyogQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9DQU5fQ29uZmlnRmlsdGVyKENBTl9IYW5kbGVUeXBlRGVmICpoY2FuLCBDQU5fRmlsdGVyVHlwZURlZiAqc0ZpbHRlckNvbmZpZyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfQ0FOX0NvbmZpZ0ZpbHRlcihDQU5fSGFuZGxlVHlwZURlZiAqaGNhbiwgY29uc3QgQ0FOX0ZpbHRlclR5cGVEZWYgKnNGaWx0ZXJDb25maWcpOwogCiAvKioKICAqIEB9CkBAIC02NzQsMTQgKzY4MCwxNiBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NBTl9TdG9wKENBTl9IYW5kbGVUeXBlRGVmICpoY2FuKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9DQU5fUmVxdWVzdFNsZWVwKENBTl9IYW5kbGVUeXBlRGVmICpoY2FuKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9DQU5fV2FrZVVwKENBTl9IYW5kbGVUeXBlRGVmICpoY2FuKTsKLXVpbnQzMl90IEhBTF9DQU5fSXNTbGVlcEFjdGl2ZShDQU5fSGFuZGxlVHlwZURlZiAqaGNhbik7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfQ0FOX0FkZFR4TWVzc2FnZShDQU5fSGFuZGxlVHlwZURlZiAqaGNhbiwgQ0FOX1R4SGVhZGVyVHlwZURlZiAqcEhlYWRlciwgdWludDhfdCBhRGF0YVtdLCB1aW50MzJfdCAqcFR4TWFpbGJveCk7Cit1aW50MzJfdCBIQUxfQ0FOX0lzU2xlZXBBY3RpdmUoY29uc3QgQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4pOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NBTl9BZGRUeE1lc3NhZ2UoQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIGNvbnN0IENBTl9UeEhlYWRlclR5cGVEZWYgKnBIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IGFEYXRhW10sIHVpbnQzMl90ICpwVHhNYWlsYm94KTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9DQU5fQWJvcnRUeFJlcXVlc3QoQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIHVpbnQzMl90IFR4TWFpbGJveGVzKTsKLXVpbnQzMl90IEhBTF9DQU5fR2V0VHhNYWlsYm94ZXNGcmVlTGV2ZWwoQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4pOwotdWludDMyX3QgSEFMX0NBTl9Jc1R4TWVzc2FnZVBlbmRpbmcoQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIHVpbnQzMl90IFR4TWFpbGJveGVzKTsKLXVpbnQzMl90IEhBTF9DQU5fR2V0VHhUaW1lc3RhbXAoQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIHVpbnQzMl90IFR4TWFpbGJveCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfQ0FOX0dldFJ4TWVzc2FnZShDQU5fSGFuZGxlVHlwZURlZiAqaGNhbiwgdWludDMyX3QgUnhGaWZvLCBDQU5fUnhIZWFkZXJUeXBlRGVmICpwSGVhZGVyLCB1aW50OF90IGFEYXRhW10pOwotdWludDMyX3QgSEFMX0NBTl9HZXRSeEZpZm9GaWxsTGV2ZWwoQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIHVpbnQzMl90IFJ4Rmlmbyk7Cit1aW50MzJfdCBIQUxfQ0FOX0dldFR4TWFpbGJveGVzRnJlZUxldmVsKGNvbnN0IENBTl9IYW5kbGVUeXBlRGVmICpoY2FuKTsKK3VpbnQzMl90IEhBTF9DQU5fSXNUeE1lc3NhZ2VQZW5kaW5nKGNvbnN0IENBTl9IYW5kbGVUeXBlRGVmICpoY2FuLCB1aW50MzJfdCBUeE1haWxib3hlcyk7Cit1aW50MzJfdCBIQUxfQ0FOX0dldFR4VGltZXN0YW1wKGNvbnN0IENBTl9IYW5kbGVUeXBlRGVmICpoY2FuLCB1aW50MzJfdCBUeE1haWxib3gpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NBTl9HZXRSeE1lc3NhZ2UoQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIHVpbnQzMl90IFJ4RmlmbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTl9SeEhlYWRlclR5cGVEZWYgKnBIZWFkZXIsIHVpbnQ4X3QgYURhdGFbXSk7Cit1aW50MzJfdCBIQUxfQ0FOX0dldFJ4Rmlmb0ZpbGxMZXZlbChjb25zdCBDQU5fSGFuZGxlVHlwZURlZiAqaGNhbiwgdWludDMyX3QgUnhGaWZvKTsKIAogLyoqCiAgKiBAfQpAQCAtNzI5LDggKzczNyw4IEBACiAgKiBAewogICovCiAvKiBQZXJpcGhlcmFsIFN0YXRlIGFuZCBFcnJvciBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX0NBTl9TdGF0ZVR5cGVEZWYgSEFMX0NBTl9HZXRTdGF0ZShDQU5fSGFuZGxlVHlwZURlZiAqaGNhbik7Ci11aW50MzJfdCBIQUxfQ0FOX0dldEVycm9yKENBTl9IYW5kbGVUeXBlRGVmICpoY2FuKTsKK0hBTF9DQU5fU3RhdGVUeXBlRGVmIEhBTF9DQU5fR2V0U3RhdGUoY29uc3QgQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4pOwordWludDMyX3QgSEFMX0NBTl9HZXRFcnJvcihjb25zdCBDQU5fSGFuZGxlVHlwZURlZiAqaGNhbik7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfQ0FOX1Jlc2V0RXJyb3IoQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4pOwogCiAvKioKQEAgLTgwOCw3ICs4MTYsOCBAQAogI2RlZmluZSBJU19DQU5fVFhfTUFJTEJPWChUUkFOU01JVE1BSUxCT1gpICgoKFRSQU5TTUlUTUFJTEJPWCkgPT0gQ0FOX1RYX01BSUxCT1gwICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSQU5TTUlUTUFJTEJPWCkgPT0gQ0FOX1RYX01BSUxCT1gxICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSQU5TTUlUTUFJTEJPWCkgPT0gQ0FOX1RYX01BSUxCT1gyICkpCi0jZGVmaW5lIElTX0NBTl9UWF9NQUlMQk9YX0xJU1QoVFJBTlNNSVRNQUlMQk9YKSAoKFRSQU5TTUlUTUFJTEJPWCkgPD0gKENBTl9UWF9NQUlMQk9YMCB8IENBTl9UWF9NQUlMQk9YMSB8IENBTl9UWF9NQUlMQk9YMikpCisjZGVmaW5lIElTX0NBTl9UWF9NQUlMQk9YX0xJU1QoVFJBTlNNSVRNQUlMQk9YKSAoKFRSQU5TTUlUTUFJTEJPWCkgPD0gKENBTl9UWF9NQUlMQk9YMCB8IENBTl9UWF9NQUlMQk9YMSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FOX1RYX01BSUxCT1gyKSkKICNkZWZpbmUgSVNfQ0FOX1NURElEKFNURElEKSAgICgoU1RESUQpIDw9IDB4N0ZGVSkKICNkZWZpbmUgSVNfQ0FOX0VYVElEKEVYVElEKSAgICgoRVhUSUQpIDw9IDB4MUZGRkZGRkZVKQogI2RlZmluZSBJU19DQU5fRExDKERMQykgICAgICAgKChETEMpIDw9IDhVKQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfZGZzZG0uaCBiL0luYy9zdG0zMmw0eHhfaGFsX2Rmc2RtLmgKaW5kZXggMTFiZWRhYS4uODM3N2Q1NiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfZGZzZG0uaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF9kZnNkbS5oCkBAIC02Myw3ICs2Myw3IEBACiB7CiAgIEZ1bmN0aW9uYWxTdGF0ZSBBY3RpdmF0aW9uOyAvKiE8IE91dHB1dCBjbG9jayBlbmFibGUvZGlzYWJsZSAqLwogICB1aW50MzJfdCAgICAgICAgU2VsZWN0aW9uOyAgLyohPCBPdXRwdXQgY2xvY2sgaXMgc3lzdGVtIGNsb2NrIG9yIGF1ZGlvIGNsb2NrLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERGU0RNX0NoYW5uZWxfT3V0cHV0Q2xvY2sgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBERlNETV9DaGFubmVsX091cHV0Q2xvY2sgKi8KICAgdWludDMyX3QgICAgICAgIERpdmlkZXI7ICAgIC8qITwgT3V0cHV0IGNsb2NrIGRpdmlkZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDIgYW5kIE1heF9EYXRhID0gMjU2ICovCiB9IERGU0RNX0NoYW5uZWxfT3V0cHV0Q2xvY2tUeXBlRGVmOwpAQCAtMzA3LDcgKzMwNyw3IEBACiAgICogQHsKICAgKi8KIAotLyoqIEBkZWZncm91cCBERlNETV9DaGFubmVsX091dHB1dENsb2NrIERGU0RNIGNoYW5uZWwgb3V0cHV0IGNsb2NrIHNlbGVjdGlvbgorLyoqIEBkZWZncm91cCBERlNETV9DaGFubmVsX091cHV0Q2xvY2sgREZTRE0gY2hhbm5lbCBvdXRwdXQgY2xvY2sgc2VsZWN0aW9uCiAgICogQHsKICAgKi8KICNkZWZpbmUgREZTRE1fQ0hBTk5FTF9PVVRQVVRfQ0xPQ0tfU1lTVEVNICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgIC8qITwgU291cmNlIGZvciBvdXRwdXQgY2xvY2sgaXMgc3lzdGVtIGNsb2NrICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF9mbGFzaC5oIGIvSW5jL3N0bTMybDR4eF9oYWxfZmxhc2guaAppbmRleCA2NjNhOTJkLi43M2IwY2U1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2hhbF9mbGFzaC5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX2ZsYXNoLmgKQEAgLTgyLDcgKzgyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBGTEFTSF9PQl9VU0VSX0lXREdfU1RPUCwgQHJlZiBGTEFTSF9PQl9VU0VSX0lXREdfU1RBTkRCWSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHJlZiBGTEFTSF9PQl9VU0VSX1dXREdfU1csIEByZWYgRkxBU0hfT0JfVVNFUl9CRkIyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAcmVmIEZMQVNIX09CX1VTRVJfRFVBTEJBTkssIEByZWYgRkxBU0hfT0JfVVNFUl9uQk9PVDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEByZWYgRkxBU0hfT0JfVVNFUl9TUkFNMl9QRSBhbmQgQHJlZiBGTEFTSF9PQl9VU0VSX1NSQU0yX1JTVCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAcmVmIEZMQVNIX09CX1VTRVJfU1JBTTJfUEUsIEByZWYgRkxBU0hfT0JfVVNFUl9TUkFNMl9SU1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEByZWYgRkxBU0hfT0JfVVNFUl9uU1dCT09UMCBhbmQgQHJlZiBGTEFTSF9PQl9VU0VSX25CT09UMCAqLwogICB1aW50MzJfdCBQQ1JPUENvbmZpZzsgICAgLyohPCBDb25maWd1cmF0aW9uIG9mIHRoZSBQQ1JPUCAodXNlZCBmb3IgT1BUSU9OQllURV9QQ1JPUCkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBjb21iaW5hdGlvbiBvZiBAcmVmIEZMQVNIX0JhbmtzIChleGNlcHQgRkxBU0hfQkFOS19CT1RIKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgQHJlZiBGTEFTSF9PQl9QQ1JPUF9SRFAgKi8KQEAgLTQyNyw3ICs0MjgsNyBAQAogICAgIGRlZmluZWQgKFNUTTMyTDQ0Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NDN4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNDUxeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQ1Mnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0NjJ4eCkgfHwgXAogICAgIGRlZmluZWQgKFNUTTMyTDQ5Nnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0QTZ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRRNXh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UjV4eCkgfHwgXAogICAgIGRlZmluZWQgKFNUTTMyTDRSN3h4KSB8fCBkZWZpbmVkIChTVE0zMkw0Ujl4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFM1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRTN3h4KSB8fCBkZWZpbmVkIChTVE0zMkw0Uzl4eCkKLS8qKiBAZGVmZ3JvdXAgT0JfVVNFUl9uU1dCT09UMCBGTEFTSCBPcHRpb24gQnl0ZXMgVXNlciBTb2Z0d2FyZSBCT09UMAorLyoqIEBkZWZncm91cCBGTEFTSF9PQl9VU0VSX25TV0JPT1QwIEZMQVNIIE9wdGlvbiBCeXRlcyBVc2VyIFNvZnR3YXJlIEJPT1QwCiAgICogQHsKICAgKi8KICNkZWZpbmUgT0JfQk9PVDBfRlJPTV9PQiAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMCkgICAgICAgICAgICAgICAgLyohPCBCT09UMCB0YWtlbiBmcm9tIHRoZSBvcHRpb24gYml0IG5CT09UMCAqLwpAQCAtNDM2LDcgKzQzNyw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBPQl9VU0VSX25CT09UMCBGTEFTSCBPcHRpb24gQnl0ZXMgVXNlciBuQk9PVDAgb3B0aW9uIGJpdAorLyoqIEBkZWZncm91cCBGTEFTSF9PQl9VU0VSX25CT09UMCBGTEFTSCBPcHRpb24gQnl0ZXMgVXNlciBuQk9PVDAgb3B0aW9uIGJpdAogICAqIEB7CiAgICovCiAjZGVmaW5lIE9CX0JPT1QwX1JFU0VUICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDApICAgICAgICAgICAgICAgIC8qITwgbkJPT1QwID0gMCAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfaTJjLmggYi9JbmMvc3RtMzJsNHh4X2hhbF9pMmMuaAppbmRleCBmMjkxMDQ4Li43NmM2NDA0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2hhbF9pMmMuaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF9pMmMuaApAQCAtMjE3LDYgKzIxNywxMCBAQAogCiAgIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgIEFkZHJFdmVudENvdW50OyAvKiE8IEkyQyBBZGRyZXNzIEV2ZW50IGNvdW50ZXIgICAgICAgICAgICAgICAgICovCiAKKyAgX19JTyB1aW50MzJfdCAgICAgICAgICAgICAgRGV2YWRkcmVzczsgICAgIC8qITwgSTJDIFRhcmdldCBkZXZpY2UgYWRkcmVzcyAgICAgICAgICAgICAgICAgKi8KKworICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICBNZW1hZGRyZXNzOyAgICAgLyohPCBJMkMgVGFyZ2V0IG1lbW9yeSBhZGRyZXNzICAgICAgICAgICAgICAgICAqLworCiAjaWYgKFVTRV9IQUxfSTJDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICB2b2lkICgqIE1hc3RlclR4Q3BsdENhbGxiYWNrKShzdHJ1Y3QgX19JMkNfSGFuZGxlVHlwZURlZiAqaGkyYyk7CiAgIC8qITwgSTJDIE1hc3RlciBUeCBUcmFuc2ZlciBjb21wbGV0ZWQgY2FsbGJhY2sgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfaGFsX2lyZGEuaCBiL0luYy9zdG0zMmw0eHhfaGFsX2lyZGEuaAppbmRleCA5ZWMxYjc2Li4xZTk4YjNmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2hhbF9pcmRhLmgKKysrIGIvSW5jL3N0bTMybDR4eF9oYWxfaXJkYS5oCkBAIC04NzksOCArODc5LDggQEAKICAgKi8KIAogLyogUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3IgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9JUkRBX1N0YXRlVHlwZURlZiBIQUxfSVJEQV9HZXRTdGF0ZShJUkRBX0hhbmRsZVR5cGVEZWYgKmhpcmRhKTsKLXVpbnQzMl90ICAgICAgICAgICAgICBIQUxfSVJEQV9HZXRFcnJvcihJUkRBX0hhbmRsZVR5cGVEZWYgKmhpcmRhKTsKK0hBTF9JUkRBX1N0YXRlVHlwZURlZiBIQUxfSVJEQV9HZXRTdGF0ZShjb25zdCBJUkRBX0hhbmRsZVR5cGVEZWYgKmhpcmRhKTsKK3VpbnQzMl90ICAgICAgICAgICAgICBIQUxfSVJEQV9HZXRFcnJvcihjb25zdCBJUkRBX0hhbmRsZVR5cGVEZWYgKmhpcmRhKTsKIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfaGFsX2xwdGltLmggYi9JbmMvc3RtMzJsNHh4X2hhbF9scHRpbS5oCmluZGV4IDljZTZlZjIuLjNlNjY5NTkgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfaGFsX2xwdGltLmgKKysrIGIvSW5jL3N0bTMybDR4eF9oYWxfbHB0aW0uaApAQCAtNjA1LDcgKzYwNSw2IEBACiAjZGVmaW5lIF9fSEFMX0xQVElNX0xQVElNMV9FWFRJX0RJU0FCTEVfSVQoKSAgICAgICAgICAgKEVYVEktPklNUjJcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICY9IH4oTFBUSU1fRVhUSV9MSU5FX0xQVElNMSkpCiAKLQogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIExQVElNMSBFWFRJIGxpbmUgaW4gZXZlbnQgbW9kZS4KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTYzMiw3ICs2MzEsNiBAQAogI2RlZmluZSBfX0hBTF9MUFRJTV9MUFRJTTJfRVhUSV9ESVNBQkxFX0lUKCkgICAgICAgICAgIChFWFRJLT5JTVIyXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmPSB+KExQVElNX0VYVElfTElORV9MUFRJTTIpKQogCi0KIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBMUFRJTTIgRVhUSSBsaW5lIGluIGV2ZW50IG1vZGUuCiAgICogQHJldHZhbCBOb25lCkBAIC03MzEsOSArNzI5LDkgQEAKICAgKiBAewogICAqLwogLyogUmVhZGluZyBvcGVyYXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXVpbnQzMl90IEhBTF9MUFRJTV9SZWFkQ291bnRlcihMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pOwotdWludDMyX3QgSEFMX0xQVElNX1JlYWRBdXRvUmVsb2FkKExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7Ci11aW50MzJfdCBIQUxfTFBUSU1fUmVhZENvbXBhcmUoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKTsKK3VpbnQzMl90IEhBTF9MUFRJTV9SZWFkQ291bnRlcihjb25zdCBMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pOwordWludDMyX3QgSEFMX0xQVElNX1JlYWRBdXRvUmVsb2FkKGNvbnN0IExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSk7Cit1aW50MzJfdCBIQUxfTFBUSU1fUmVhZENvbXBhcmUoY29uc3QgTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKTsKIC8qKgogICAqIEB9CiAgICovCkBAIC04NjYsMTEgKzg2NCwxMyBAQAogI2RlZmluZSBJU19MUFRJTV9DT1VOVEVSX1NPVVJDRShfX1NPVVJDRV9fKSAgICAgKCgoX19TT1VSQ0VfXykgPT0gTFBUSU1fQ09VTlRFUlNPVVJDRV9JTlRFUk5BTCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gTFBUSU1fQ09VTlRFUlNPVVJDRV9FWFRFUk5BTCkpCiAKLSNkZWZpbmUgSVNfTFBUSU1fQVVUT1JFTE9BRChfX0FVVE9SRUxPQURfXykgICAgICgoX19BVVRPUkVMT0FEX18pIDw9IDB4MDAwMEZGRkZVTCkKKyNkZWZpbmUgSVNfTFBUSU1fQVVUT1JFTE9BRChfX0FVVE9SRUxPQURfXykgICAgICgoMHgwMDAwMDAwMVVMIDw9IChfX0FVVE9SRUxPQURfXykpICYmXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19BVVRPUkVMT0FEX18pIDw9IDB4MDAwMEZGRkZVTCkpCiAKICNkZWZpbmUgSVNfTFBUSU1fQ09NUEFSRShfX0NPTVBBUkVfXykgICAgICAgICAgICgoX19DT01QQVJFX18pIDw9IDB4MDAwMEZGRkZVTCkKIAotI2RlZmluZSBJU19MUFRJTV9QRVJJT0QoX19QRVJJT0RfXykgICAgICAgICAgICAgKChfX1BFUklPRF9fKSA8PSAweDAwMDBGRkZGVUwpCisjZGVmaW5lIElTX0xQVElNX1BFUklPRChfX1BFUklPRF9fKSAgICAgICAgICAgICAoKDB4MDAwMDAwMDFVTCA8PSAoX19QRVJJT0RfXykpICYmXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QRVJJT0RfXykgPD0gMHgwMDAwRkZGRlVMKSkKIAogI2RlZmluZSBJU19MUFRJTV9QVUxTRShfX1BVTFNFX18pICAgICAgICAgICAgICAgKChfX1BVTFNFX18pIDw9IDB4MDAwMEZGRkZVTCkKIApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfbHRkYy5oIGIvSW5jL3N0bTMybDR4eF9oYWxfbHRkYy5oCmluZGV4IDhiMmI5NDYuLjFlYTRhNjMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfaGFsX2x0ZGMuaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF9sdGRjLmgKQEAgLTYsMTMgKzYsMTIgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCi0gICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgorICAqIENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLAotICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKLSAgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6Ci0gICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKKyAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF9sdGRjX2V4LmggYi9JbmMvc3RtMzJsNHh4X2hhbF9sdGRjX2V4LmgKaW5kZXggOTY1ZmI0Yy4uNzFkYTZjOCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfbHRkY19leC5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX2x0ZGNfZXguaApAQCAtNiwxMyArNiwxMiBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KLSAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CisgICogQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCi0gICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQotICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKLSAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQorICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfaGFsX3BjZC5oIGIvSW5jL3N0bTMybDR4eF9oYWxfcGNkLmgKaW5kZXggNWM5ZGI2Yi4uNGQzZTJhZiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfcGNkLmgKKysrIGIvSW5jL3N0bTMybDR4eF9oYWxfcGNkLmgKQEAgLTEyMCw2ICsxMjAsNyBAQAogICB1aW50MzJfdCAgICAgICAgICAgICAgICBTZXR1cFsxMl07ICAgLyohPCBTZXR1cCBwYWNrZXQgYnVmZmVyICAgICAgICAgICAgICAgKi8KICAgUENEX0xQTV9TdGF0ZVR5cGVEZWYgICAgTFBNX1N0YXRlOyAgIC8qITwgTFBNIFN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIEJFU0w7CisgIHVpbnQzMl90ICAgICAgICAgICAgICAgIEZyYW1lTnVtYmVyOyAvKiE8IFN0b3JlIEN1cnJlbnQgRnJhbWUgbnVtYmVyICAgICAgICAqLwogCiAKICAgdWludDMyX3QgbHBtX2FjdGl2ZTsgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgdGhlIExpbmsgUG93ZXIgTWFuYWdlbWVudCAuCkBAIC0yOTUsMTIgKzI5NiwxMCBAQAogICAqIEB9CiAgICovCiAKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUENEX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1JlZ2lzdGVyQ2FsbGJhY2soUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIEhBTF9QQ0RfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUENEX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOwogCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1VuUmVnaXN0ZXJDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QQ0RfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1VuUmVnaXN0ZXJDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgSEFMX1BDRF9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKIAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckRhdGFPdXRTdGFnZUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfRGF0YU91dFN0YWdlQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CkBAIC0zMjIsMTQgKzMyMSwxMCBAQAogCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX1VuUmVnaXN0ZXJJc29JbkluY3BsdENhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckJjZENhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfQmNkQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7Ci0KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJCY2RDYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgcFBDRF9CY2RDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfVW5SZWdpc3RlckJjZENhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9SZWdpc3RlckxwbUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQQ0RfTHBtQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7Ci0KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfUmVnaXN0ZXJMcG1DYWxsYmFjayhQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgcFBDRF9McG1DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfVW5SZWdpc3RlckxwbUNhbGxiYWNrKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkKTsKICNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIC8qKgpAQCAtMzY4LDE2ICszNjMsMTAgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRGV2Q29ubmVjdChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0RldkRpc2Nvbm5lY3QoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9TZXRBZGRyZXNzKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGFkZHJlc3MpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9PcGVuKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgZXBfbXBzLCB1aW50OF90IGVwX3R5cGUpOwotCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX09wZW4oUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkciwgdWludDE2X3QgZXBfbXBzLCB1aW50OF90IGVwX3R5cGUpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9DbG9zZShQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfUmVjZWl2ZShQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKnBCdWYsIHVpbnQzMl90IGxlbik7Ci0KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfVHJhbnNtaXQoUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcEJ1ZiwgdWludDMyX3QgbGVuKTsKLQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9SZWNlaXZlKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIsIHVpbnQ4X3QgKnBCdWYsIHVpbnQzMl90IGxlbik7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX1RyYW5zbWl0KFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIsIHVpbnQ4X3QgKnBCdWYsIHVpbnQzMl90IGxlbik7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUENEX0VQX1NldFN0YWxsKFBDRF9IYW5kbGVUeXBlRGVmICpocGNkLCB1aW50OF90IGVwX2FkZHIpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BDRF9FUF9DbHJTdGFsbChQQ0RfSGFuZGxlVHlwZURlZiAqaHBjZCwgdWludDhfdCBlcF9hZGRyKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QQ0RfRVBfRmx1c2goUENEX0hhbmRsZVR5cGVEZWYgKmhwY2QsIHVpbnQ4X3QgZXBfYWRkcik7CkBAIC00OTYsOCArNDg1LDggQEAKICNkZWZpbmUgVVNCX0NOVFJYX0JMU0laRSAgICAgICAgICAgICAgICAgICAgICAoMHgxVSA8PCAxNSkKIAogLyogU2V0RU5EUE9JTlQgKi8KLSNkZWZpbmUgUENEX1NFVF9FTkRQT0lOVChVU0J4LCBiRXBOdW0sIHdSZWdWYWx1ZSkgICgqKF9fSU8gdWludDE2X3QgKilcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCYoVVNCeCktPkVQMFIgKyAoKGJFcE51bSkgKiAyVSkpID0gKHVpbnQxNl90KSh3UmVnVmFsdWUpKQorI2RlZmluZSBQQ0RfU0VUX0VORFBPSU5UKFVTQngsIGJFcE51bSwgd1JlZ1ZhbHVlKSBcCisgICgqKF9fSU8gdWludDE2X3QgKikoJihVU0J4KS0+RVAwUiArICgoYkVwTnVtKSAqIDJVKSkgPSAodWludDE2X3QpKHdSZWdWYWx1ZSkpCiAKIC8qIEdldEVORFBPSU5UICovCiAjZGVmaW5lIFBDRF9HRVRfRU5EUE9JTlQoVVNCeCwgYkVwTnVtKSAgICAgICAgICAgICAoKihfX0lPIHVpbnQxNl90ICopKCYoVVNCeCktPkVQMFIgKyAoKGJFcE51bSkgKiAyVSkpKQpAQCAtNTEyLDggKzUwMSw5IEBACiAgICogQHBhcmFtICB3VHlwZSBFbmRwb2ludCBUeXBlLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBQQ0RfU0VUX0VQVFlQRShVU0J4LCBiRXBOdW0sIHdUeXBlKSAoUENEX1NFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pLCAoKFBDRF9HRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgVVNCX0VQX1RfTUFTSykgfCAod1R5cGUpIHwgVVNCX0VQX0NUUl9UWCB8IFVTQl9FUF9DVFJfUlgpKSkKKyNkZWZpbmUgUENEX1NFVF9FUFRZUEUoVVNCeCwgYkVwTnVtLCB3VHlwZSkgXAorICAoUENEX1NFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pLCBcCisgICAgICAgICAgICAgICAgICAgICgoUENEX0dFVF9FTkRQT0lOVCgoVVNCeCksIChiRXBOdW0pKSAmIFVTQl9FUF9UX01BU0spIHwgKHdUeXBlKSB8IFVTQl9FUF9DVFJfVFggfCBVU0JfRVBfQ1RSX1JYKSkpCiAKIAogLyoqCkBAIC04MDMsMTEgKzc5MywxMyBAQAogICAqLwogI2RlZmluZSBQQ0RfR0VUX0VQX0FERFJFU1MoVVNCeCwgYkVwTnVtKSAoKHVpbnQ4X3QpKFBDRF9HRVRfRU5EUE9JTlQoKFVTQngpLCAoYkVwTnVtKSkgJiBVU0JfRVBBRERSX0ZJRUxEKSkKIAotI2RlZmluZSBQQ0RfRVBfVFhfQ05UKFVTQngsIGJFcE51bSkgKCh1aW50MTZfdCAqKSgoKCh1aW50MzJfdCkoVVNCeCktPkJUQUJMRVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICgodWludDMyX3QpKGJFcE51bSkgKiA4VSkgKyAyVSkgKiBQTUFfQUNDRVNTKSArICgodWludDMyX3QpKFVTQngpICsgMHg0MDBVKSkpCisjZGVmaW5lIFBDRF9FUF9UWF9DTlQoVVNCeCwgYkVwTnVtKSBcCisgICgodWludDE2X3QgKikoKCgodWludDMyX3QpKFVTQngpLT5CVEFCTEUgKyBcCisgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KShiRXBOdW0pICogOFUpICsgMlUpICogUE1BX0FDQ0VTUykgKyAoKHVpbnQzMl90KShVU0J4KSArIDB4NDAwVSkpKQogCi0jZGVmaW5lIFBDRF9FUF9SWF9DTlQoVVNCeCwgYkVwTnVtKSAoKHVpbnQxNl90ICopKCgoKHVpbnQzMl90KShVU0J4KS0+QlRBQkxFXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKCh1aW50MzJfdCkoYkVwTnVtKSAqIDhVKSArIDZVKSAqIFBNQV9BQ0NFU1MpICsgKCh1aW50MzJfdCkoVVNCeCkgKyAweDQwMFUpKSkKKyNkZWZpbmUgUENEX0VQX1JYX0NOVChVU0J4LCBiRXBOdW0pIFwKKyAgKCh1aW50MTZfdCAqKSgoKCh1aW50MzJfdCkoVVNCeCktPkJUQUJMRSArIFwKKyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpKGJFcE51bSkgKiA4VSkgKyA2VSkgKiBQTUFfQUNDRVNTKSArICgodWludDMyX3QpKFVTQngpICsgMHg0MDBVKSkpCiAKIAogLyoqCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2hhbF9zbWFydGNhcmQuaCBiL0luYy9zdG0zMmw0eHhfaGFsX3NtYXJ0Y2FyZC5oCmluZGV4IDUyMjM5YWEuLjliZTk0MTkgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfaGFsX3NtYXJ0Y2FyZC5oCisrKyBiL0luYy9zdG0zMmw0eHhfaGFsX3NtYXJ0Y2FyZC5oCkBAIC0xMjUxLDggKzEyNTEsOCBAQAogICAqIEB7CiAgICovCiAKLUhBTF9TTUFSVENBUkRfU3RhdGVUeXBlRGVmIEhBTF9TTUFSVENBUkRfR2V0U3RhdGUoU01BUlRDQVJEX0hhbmRsZVR5cGVEZWYgKmhzbWFydGNhcmQpOwotdWludDMyX3QgICAgICAgICAgICAgICAgICAgSEFMX1NNQVJUQ0FSRF9HZXRFcnJvcihTTUFSVENBUkRfSGFuZGxlVHlwZURlZiAqaHNtYXJ0Y2FyZCk7CitIQUxfU01BUlRDQVJEX1N0YXRlVHlwZURlZiBIQUxfU01BUlRDQVJEX0dldFN0YXRlKGNvbnN0IFNNQVJUQ0FSRF9IYW5kbGVUeXBlRGVmICpoc21hcnRjYXJkKTsKK3VpbnQzMl90ICAgICAgICAgICAgICAgICAgIEhBTF9TTUFSVENBUkRfR2V0RXJyb3IoY29uc3QgU01BUlRDQVJEX0hhbmRsZVR5cGVEZWYgKmhzbWFydGNhcmQpOwogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfdGltLmggYi9JbmMvc3RtMzJsNHh4X2hhbF90aW0uaAppbmRleCBhMTc2OGVkLi40ZDVhYjQ0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2hhbF90aW0uaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF90aW0uaApAQCAtNzM2LDYgKzczNiwxNSBAQAogICAqIEB9CiAgICovCiAKKy8qKiBAZGVmZ3JvdXAgVElNX0NDX0RNQV9SZXF1ZXN0IENDeCBETUEgcmVxdWVzdCBzZWxlY3Rpb24KKyAgKiBAeworICAqLworI2RlZmluZSBUSU1fQ0NETUFSRVFVRVNUX0NDICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENDeCBETUEgcmVxdWVzdCBzZW50IHdoZW4gY2FwdHVyZSBvciBjb21wYXJlIG1hdGNoIGV2ZW50IG9jY3VycyAqLworI2RlZmluZSBUSU1fQ0NETUFSRVFVRVNUX1VQREFURSAgICAgICAgICAgICBUSU1fQ1IyX0NDRFMgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENDeCBETUEgcmVxdWVzdHMgc2VudCB3aGVuIHVwZGF0ZSBldmVudCBvY2N1cnMgKi8KKy8qKgorICAqIEB9CisgICovCisKIC8qKiBAZGVmZ3JvdXAgVElNX0ZsYWdfZGVmaW5pdGlvbiBUSU0gRmxhZyBEZWZpbml0aW9uCiAgICogQHsKICAgKi8KQEAgLTc3NiwxNiArNzg1LDE2IEBACiAvKiogQGRlZmdyb3VwIFRJTV9DbG9ja19Tb3VyY2UgVElNIENsb2NrIFNvdXJjZQogICAqIEB7CiAgICovCi0jZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMiAgICBUSU1fU01DUl9FVFBTXzEgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDIgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9JTlRFUk5BTCAgICBUSU1fU01DUl9FVFBTXzAgICAgICAvKiE8IEludGVybmFsIGNsb2NrIHNvdXJjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMSAgICBUSU1fVFNfRVRSRiAgICAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDEgKEVUUkYpICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMiAgICBUSU1fU01DUl9FVFBTXzEgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDIgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9USTFFRCAgICAgICBUSU1fVFNfVEkxRl9FRCAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDEgKFRUSTFGUDEgKyBlZGdlIGRldGVjdC4pICovCisjZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9USTEgICAgICAgICBUSU1fVFNfVEkxRlAxICAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDEgKFRUSTFGUDEpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9USTIgICAgICAgICBUSU1fVFNfVEkyRlAyICAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDEgKFRUSTJGUDIpICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9JVFIwICAgICAgICBUSU1fVFNfSVRSMCAgICAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDEgKElUUjApICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9JVFIxICAgICAgICBUSU1fVFNfSVRSMSAgICAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDEgKElUUjEpICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9JVFIyICAgICAgICBUSU1fVFNfSVRSMiAgICAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDEgKElUUjIpICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9JVFIzICAgICAgICBUSU1fVFNfSVRSMyAgICAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDEgKElUUjMpICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9USTFFRCAgICAgICBUSU1fVFNfVEkxRl9FRCAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDEgKFRUSTFGUDEgKyBlZGdlIGRldGVjdC4pICovCi0jZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9USTEgICAgICAgICBUSU1fVFNfVEkxRlAxICAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDEgKFRUSTFGUDEpICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9USTIgICAgICAgICBUSU1fVFNfVEkyRlAyICAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDEgKFRUSTJGUDIpICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRJTV9DTE9DS1NPVVJDRV9FVFJNT0RFMSAgICBUSU1fVFNfRVRSRiAgICAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNvdXJjZSBtb2RlIDEgKEVUUkYpICAgICAgICAgICAgICAgICAgICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTY5OCw2ICsxNzA3LDE3IEBACiAgICAgVElNX1NFVF9DQVBUVVJFUE9MQVJJVFkoKF9fSEFORExFX18pLCAoX19DSEFOTkVMX18pLCAoX19QT0xBUklUWV9fKSk7IFwKICAgfXdoaWxlKDApCiAKKy8qKiBAYnJpZWYgIFNlbGVjdCB0aGUgQ2FwdHVyZS9jb21wYXJlIERNQSByZXF1ZXN0IHNvdXJjZS4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBUSU0gSGFuZGxlLgorICAqIEBwYXJhbSAgX19DQ0RNQV9fIHNwZWNpZmllcyBDYXB0dXJlL2NvbXBhcmUgRE1BIHJlcXVlc3Qgc291cmNlCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NDRE1BUkVRVUVTVF9DQzogQ0N4IERNQSByZXF1ZXN0IGdlbmVyYXRlZCBvbiBDYXB0dXJlL0NvbXBhcmUgZXZlbnQKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NDRE1BUkVRVUVTVF9VUERBVEU6IENDeCBETUEgcmVxdWVzdCBnZW5lcmF0ZWQgb24gVXBkYXRlIGV2ZW50CisgICogQHJldHZhbCBOb25lCisgICovCisjZGVmaW5lIF9fSEFMX1RJTV9TRUxFQ1RfQ0NETUFSRVFVRVNUKF9fSEFORExFX18sIF9fQ0NETUFfXykgICAgXAorICBNT0RJRllfUkVHKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMiwgVElNX0NSMl9DQ0RTLCAoX19DQ0RNQV9fKSkKKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTE3NTgsNyArMTc3OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IFRJTV9DT1VOVEVSTU9ERV9DRU5URVJBTElHTkVEMykpCiAKICNkZWZpbmUgSVNfVElNX1VJRlJFTUFQX01PREUoX19NT0RFX18pICAgICAoKChfX01PREVfXykgPT0gVElNX1VJRlJFTUFQX0RJU0FCTEUpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gVElNX1VJRlJFTUFQX0VOQUxFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gVElNX1VJRlJFTUFQX0VOQUJMRSkpCiAKICNkZWZpbmUgSVNfVElNX0NMT0NLRElWSVNJT05fRElWKF9fRElWX18pICAoKChfX0RJVl9fKSA9PSBUSU1fQ0xPQ0tESVZJU0lPTl9ESVYxKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19ESVZfXykgPT0gVElNX0NMT0NLRElWSVNJT05fRElWMikgfHwgXApAQCAtMTgxOCwyMCArMTgzOCwyMyBAQAogI2RlZmluZSBJU19USU1fT1BNX0NIQU5ORUxTKF9fQ0hBTk5FTF9fKSAgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpKQogCisjZGVmaW5lIElTX1RJTV9QRVJJT0QoX19IQU5ETEVfXywgX19QRVJJT0RfXykgXAorICAoKElTX1RJTV8zMkJfQ09VTlRFUl9JTlNUQU5DRSgoKF9fSEFORExFX18pLT5JbnN0YW5jZSkpID09IDBVKSA/ICgoKF9fUEVSSU9EX18pID4gMFUpICYmICgoX19QRVJJT0RfXykgPD0gMHgwMDAwRkZGRlUpKSA6ICgoX19QRVJJT0RfXykgPiAwVSkpCisKICNkZWZpbmUgSVNfVElNX0NPTVBMRU1FTlRBUllfQ0hBTk5FTFMoX19DSEFOTkVMX18pICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpKQogCiAjZGVmaW5lIElTX1RJTV9DTE9DS1NPVVJDRShfX0NMT0NLX18pICgoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lOVEVSTkFMKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0VUUk1PREUxKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0VUUk1PREUyKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lUUjApICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lUUjEpICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lUUjIpICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0lUUjMpICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX1RJMUVEKSAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX1RJMSkgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX1RJMikgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQ0xPQ0tfXykgPT0gVElNX0NMT0NLU09VUkNFX0VUUk1PREUxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMCkgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMSkgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMikgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTE9DS19fKSA9PSBUSU1fQ0xPQ0tTT1VSQ0VfSVRSMykpCiAKICNkZWZpbmUgSVNfVElNX0NMT0NLUE9MQVJJVFkoX19QT0xBUklUWV9fKSAoKChfX1BPTEFSSVRZX18pID09IFRJTV9DTE9DS1BPTEFSSVRZX0lOVkVSVEVEKSAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT0xBUklUWV9fKSA9PSBUSU1fQ0xPQ0tQT0xBUklUWV9OT05JTlZFUlRFRCkgfHwgXApAQCAtMTk0MCwxMyArMTk2MywxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBUSU1fT0NNT0RFX1JFVFJJR0VSUkFCTEVfT1BNMSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBUSU1fT0NNT0RFX1JFVFJJR0VSUkFCTEVfT1BNMikpCiAKLSNkZWZpbmUgSVNfVElNX1RSSUdHRVJfU0VMRUNUSU9OKF9fU0VMRUNUSU9OX18pICgoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIwKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjIpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIzKSB8fCBcCisjZGVmaW5lIElTX1RJTV9UUklHR0VSX1NFTEVDVElPTihfX1NFTEVDVElPTl9fKSAoKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMCkgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0lUUjEpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIyKSAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfSVRSMykgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX1RJMUZfRUQpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19USTFGUDEpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19USTJGUDIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19USTFGUDEpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NFTEVDVElPTl9fKSA9PSBUSU1fVFNfVEkyRlAyKSAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TRUxFQ1RJT05fXykgPT0gVElNX1RTX0VUUkYpKQogCiAjZGVmaW5lIElTX1RJTV9JTlRFUk5BTF9UUklHR0VSRVZFTlRfU0VMRUNUSU9OKF9fU0VMRUNUSU9OX18pICgoKF9fU0VMRUNUSU9OX18pID09IFRJTV9UU19JVFIwKSB8fCBcCkBAIC0yMTExLDcgKzIxMzQsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9CYXNlX1N0YXJ0X0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fQmFzZV9TdG9wX0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKIC8qIE5vbi1CbG9ja2luZyBtb2RlOiBETUEgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fQmFzZV9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90ICpwRGF0YSwgdWludDE2X3QgTGVuZ3RoKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fQmFzZV9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIGNvbnN0IHVpbnQzMl90ICpwRGF0YSwgdWludDE2X3QgTGVuZ3RoKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fQmFzZV9TdG9wX0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CiAvKioKICAgKiBAfQpAQCAtMjEzMyw3ICsyMTU2LDggQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT0NfU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9PQ19TdG9wX0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKTsKIC8qIE5vbi1CbG9ja2luZyBtb2RlOiBETUEgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT0NfU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCAqcERhdGEsIHVpbnQxNl90IExlbmd0aCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX09DX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCwgY29uc3QgdWludDMyX3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTGVuZ3RoKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fT0NfU3RvcF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpOwogLyoqCiAgICogQH0KQEAgLTIxNTUsNyArMjE3OSw4IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX1BXTV9TdGFydF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX1BXTV9TdG9wX0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKTsKIC8qIE5vbi1CbG9ja2luZyBtb2RlOiBETUEgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fUFdNX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgKnBEYXRhLCB1aW50MTZfdCBMZW5ndGgpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9QV01fU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCBjb25zdCB1aW50MzJfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTGVuZ3RoKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fUFdNX1N0b3BfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKTsKIC8qKgogICAqIEB9CkBAIC0yMjQwLDIxICsyMjY1LDI1IEBACiAgICogQHsKICAgKi8KIC8qIENvbnRyb2wgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX09DX0NvbmZpZ0NoYW5uZWwoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIFRJTV9PQ19Jbml0VHlwZURlZiAqc0NvbmZpZywgdWludDMyX3QgQ2hhbm5lbCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX1BXTV9Db25maWdDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBUSU1fT0NfSW5pdFR5cGVEZWYgKnNDb25maWcsIHVpbnQzMl90IENoYW5uZWwpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9JQ19Db25maWdDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBUSU1fSUNfSW5pdFR5cGVEZWYgKnNDb25maWcsIHVpbnQzMl90IENoYW5uZWwpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9PQ19Db25maWdDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBjb25zdCBUSU1fT0NfSW5pdFR5cGVEZWYgKnNDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQ2hhbm5lbCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX1BXTV9Db25maWdDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBjb25zdCBUSU1fT0NfSW5pdFR5cGVEZWYgKnNDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IENoYW5uZWwpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9JQ19Db25maWdDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBjb25zdCBUSU1fSUNfSW5pdFR5cGVEZWYgKnNDb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQ2hhbm5lbCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX09uZVB1bHNlX0NvbmZpZ0NoYW5uZWwoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIFRJTV9PbmVQdWxzZV9Jbml0VHlwZURlZiAqc0NvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBPdXRwdXRDaGFubmVsLCAgdWludDMyX3QgSW5wdXRDaGFubmVsKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fQ29uZmlnT0NyZWZDbGVhcihUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgVElNX0NsZWFySW5wdXRDb25maWdUeXBlRGVmICpzQ2xlYXJJbnB1dENvbmZpZywKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fQ29uZmlnT0NyZWZDbGVhcihUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSU1fQ2xlYXJJbnB1dENvbmZpZ1R5cGVEZWYgKnNDbGVhcklucHV0Q29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IENoYW5uZWwpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9Db25maWdDbG9ja1NvdXJjZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgVElNX0Nsb2NrQ29uZmlnVHlwZURlZiAqc0Nsb2NrU291cmNlQ29uZmlnKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fQ29uZmlnQ2xvY2tTb3VyY2UoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIGNvbnN0IFRJTV9DbG9ja0NvbmZpZ1R5cGVEZWYgKnNDbG9ja1NvdXJjZUNvbmZpZyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0NvbmZpZ1RJMUlucHV0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBUSTFfU2VsZWN0aW9uKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fU2xhdmVDb25maWdTeW5jaHJvKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBUSU1fU2xhdmVDb25maWdUeXBlRGVmICpzU2xhdmVDb25maWcpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm9fSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIFRJTV9TbGF2ZUNvbmZpZ1R5cGVEZWYgKnNTbGF2ZUNvbmZpZyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX1NsYXZlQ29uZmlnU3luY2hybyhUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgY29uc3QgVElNX1NsYXZlQ29uZmlnVHlwZURlZiAqc1NsYXZlQ29uZmlnKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fU2xhdmVDb25maWdTeW5jaHJvX0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBjb25zdCBUSU1fU2xhdmVDb25maWdUeXBlRGVmICpzU2xhdmVDb25maWcpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9Xcml0ZVN0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBCdXJzdEJhc2VBZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgICpCdXJzdEJ1ZmZlciwgdWludDMyX3QgIEJ1cnN0TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsIGNvbnN0IHVpbnQzMl90ICAqQnVyc3RCdWZmZXIsIHVpbnQzMl90ICBCdXJzdExlbmd0aCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X011bHRpV3JpdGVTdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RCYXNlQWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgKkJ1cnN0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjLCBjb25zdCB1aW50MzJfdCAqQnVyc3RCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdXJzdExlbmd0aCwgIHVpbnQzMl90IERhdGFMZW5ndGgpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9Xcml0ZVN0b3AoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X1JlYWRTdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RCYXNlQWRkcmVzcywKQEAgLTIyNjQsNyArMjI5Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICBCdXJzdExlbmd0aCwgdWludDMyX3QgIERhdGFMZW5ndGgpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdF9SZWFkU3RvcChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fR2VuZXJhdGVFdmVudChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgRXZlbnRTb3VyY2UpOwotdWludDMyX3QgSEFMX1RJTV9SZWFkQ2FwdHVyZWRWYWx1ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCk7Cit1aW50MzJfdCBIQUxfVElNX1JlYWRDYXB0dXJlZFZhbHVlKGNvbnN0IFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKTsKIC8qKgogICAqIEB9CiAgICovCkBAIC0yMzAxLDE3ICsyMzMwLDE3IEBACiAgICogQHsKICAgKi8KIC8qIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNX0Jhc2VfR2V0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOwotSEFMX1RJTV9TdGF0ZVR5cGVEZWYgSEFMX1RJTV9PQ19HZXRTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7Ci1IQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNX1BXTV9HZXRTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7Ci1IQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNX0lDX0dldFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKLUhBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fT25lUHVsc2VfR2V0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOwotSEFMX1RJTV9TdGF0ZVR5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX0dldFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKK0hBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fQmFzZV9HZXRTdGF0ZShjb25zdCBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CitIQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNX09DX0dldFN0YXRlKGNvbnN0IFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKK0hBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fUFdNX0dldFN0YXRlKGNvbnN0IFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKK0hBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fSUNfR2V0U3RhdGUoY29uc3QgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOworSEFMX1RJTV9TdGF0ZVR5cGVEZWYgSEFMX1RJTV9PbmVQdWxzZV9HZXRTdGF0ZShjb25zdCBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CitIQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNX0VuY29kZXJfR2V0U3RhdGUoY29uc3QgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOwogCiAvKiBQZXJpcGhlcmFsIENoYW5uZWwgc3RhdGUgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfVElNX0FjdGl2ZUNoYW5uZWwgSEFMX1RJTV9HZXRBY3RpdmVDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKLUhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBIQUxfVElNX0dldENoYW5uZWxTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIHVpbnQzMl90IENoYW5uZWwpOwotSEFMX1RJTV9ETUFCdXJzdFN0YXRlVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOworSEFMX1RJTV9BY3RpdmVDaGFubmVsIEhBTF9USU1fR2V0QWN0aXZlQ2hhbm5lbChjb25zdCBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CitIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgSEFMX1RJTV9HZXRDaGFubmVsU3RhdGUoY29uc3QgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICB1aW50MzJfdCBDaGFubmVsKTsKK0hBTF9USU1fRE1BQnVyc3RTdGF0ZVR5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdFN0YXRlKGNvbnN0IFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKIC8qKgogICAqIEB9CiAgICovCkBAIC0yMzI1LDkgKzIzNTQsOSBAQAogLyoqIEBkZWZncm91cCBUSU1fUHJpdmF0ZV9GdW5jdGlvbnMgVElNIFByaXZhdGUgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KLXZvaWQgVElNX0Jhc2VfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBUSU1fQmFzZV9Jbml0VHlwZURlZiAqU3RydWN0dXJlKTsKK3ZvaWQgVElNX0Jhc2VfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBjb25zdCBUSU1fQmFzZV9Jbml0VHlwZURlZiAqU3RydWN0dXJlKTsKIHZvaWQgVElNX1RJMV9TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IFRJTV9JQ1BvbGFyaXR5LCB1aW50MzJfdCBUSU1fSUNTZWxlY3Rpb24sIHVpbnQzMl90IFRJTV9JQ0ZpbHRlcik7Ci12b2lkIFRJTV9PQzJfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBUSU1fT0NfSW5pdFR5cGVEZWYgKk9DX0NvbmZpZyk7Cit2b2lkIFRJTV9PQzJfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBjb25zdCBUSU1fT0NfSW5pdFR5cGVEZWYgKk9DX0NvbmZpZyk7CiB2b2lkIFRJTV9FVFJfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBUSU1fRXh0VFJHUHJlc2NhbGVyLAogICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUSU1fRXh0VFJHUG9sYXJpdHksIHVpbnQzMl90IEV4dFRSR0ZpbHRlcik7CiAKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfaGFsX3RpbV9leC5oIGIvSW5jL3N0bTMybDR4eF9oYWxfdGltX2V4LmgKaW5kZXggYTViYTNhNS4uNzMwYTM3ZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfdGltX2V4LmgKKysrIGIvSW5jL3N0bTMybDR4eF9oYWxfdGltX2V4LmgKQEAgLTI4NCw3ICsyODQsNyBAQAogICAqIEB7CiAgICovCiAvKiAgVGltZXIgSGFsbCBTZW5zb3IgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0hhbGxTZW5zb3JfSW5pdChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgVElNX0hhbGxTZW5zb3JfSW5pdFR5cGVEZWYgKnNDb25maWcpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0hhbGxTZW5zb3JfSW5pdChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgY29uc3QgVElNX0hhbGxTZW5zb3JfSW5pdFR5cGVEZWYgKnNDb25maWcpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0hhbGxTZW5zb3JfRGVJbml0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKIAogdm9pZCBIQUxfVElNRXhfSGFsbFNlbnNvcl9Nc3BJbml0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKQEAgLTMxNyw3ICszMTcsOCBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X09DTl9TdG9wX0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKTsKIAogLyogTm9uLUJsb2NraW5nIG1vZGU6IERNQSAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X09DTl9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90ICpwRGF0YSwgdWludDE2X3QgTGVuZ3RoKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9PQ05fU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCBjb25zdCB1aW50MzJfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBMZW5ndGgpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X09DTl9TdG9wX0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCk7CiAvKioKICAgKiBAfQpAQCAtMzM2LDcgKzMzNyw4IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfUFdNTl9TdGFydF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfUFdNTl9TdG9wX0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKTsKIC8qIE5vbi1CbG9ja2luZyBtb2RlOiBETUEgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9QV01OX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgKnBEYXRhLCB1aW50MTZfdCBMZW5ndGgpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X1BXTU5fU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCBjb25zdCB1aW50MzJfdCAqcERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTGVuZ3RoKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9QV01OX1N0b3BfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKTsKIC8qKgogICAqIEB9CkBAIC0zNzAsMTEgKzM3MiwxMSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0NvbmZpZ0NvbW11dEV2ZW50X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgIElucHV0VHJpZ2dlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgIENvbW11dGF0aW9uU291cmNlKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9NYXN0ZXJDb25maWdTeW5jaHJvbml6YXRpb24oVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTV9NYXN0ZXJDb25maWdUeXBlRGVmICpzTWFzdGVyQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVElNX01hc3RlckNvbmZpZ1R5cGVEZWYgKnNNYXN0ZXJDb25maWcpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0NvbmZpZ0JyZWFrRGVhZFRpbWUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fQnJlYWtEZWFkVGltZUNvbmZpZ1R5cGVEZWYgKnNCcmVha0RlYWRUaW1lQ29uZmlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJTV9CcmVha0RlYWRUaW1lQ29uZmlnVHlwZURlZiAqc0JyZWFrRGVhZFRpbWVDb25maWcpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0NvbmZpZ0JyZWFrSW5wdXQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJyZWFrSW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FeF9CcmVha0lucHV0Q29uZmlnVHlwZURlZiAqc0JyZWFrSW5wdXRDb25maWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVElNRXhfQnJlYWtJbnB1dENvbmZpZ1R5cGVEZWYgKnNCcmVha0lucHV0Q29uZmlnKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9Hcm91cENoYW5uZWw1KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVscyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfUmVtYXBDb25maWcoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IFJlbWFwKTsKIC8qKgpAQCAtMzk5LDggKzQwMSw4IEBACiAgICogQHsKICAgKi8KIC8qIEV4dGVuZGVkIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNRXhfSGFsbFNlbnNvcl9HZXRTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7Ci1IQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgSEFMX1RJTUV4X0dldENoYW5uZWxOU3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICB1aW50MzJfdCBDaGFubmVsTik7CitIQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNRXhfSGFsbFNlbnNvcl9HZXRTdGF0ZShjb25zdCBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CitIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgSEFMX1RJTUV4X0dldENoYW5uZWxOU3RhdGUoY29uc3QgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICB1aW50MzJfdCBDaGFubmVsTik7CiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfdWFydC5oIGIvSW5jL3N0bTMybDR4eF9oYWxfdWFydC5oCmluZGV4IGFmNDc0NjguLmQwZDJjNWMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfaGFsX3VhcnQuaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF91YXJ0LmgKQEAgLTE3MjksOCArMTcyOSw4IEBACiAgICovCiAKIC8qIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX1VBUlRfU3RhdGVUeXBlRGVmIEhBTF9VQVJUX0dldFN0YXRlKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQpOwotdWludDMyX3QgICAgICAgICAgICAgIEhBTF9VQVJUX0dldEVycm9yKFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQpOworSEFMX1VBUlRfU3RhdGVUeXBlRGVmIEhBTF9VQVJUX0dldFN0YXRlKGNvbnN0IFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQpOwordWludDMyX3QgICAgICAgICAgICAgIEhBTF9VQVJUX0dldEVycm9yKGNvbnN0IFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQpOwogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9oYWxfdXNhcnQuaCBiL0luYy9zdG0zMmw0eHhfaGFsX3VzYXJ0LmgKaW5kZXggNDA2NDc2NC4uMDM3ZDAwMyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9oYWxfdXNhcnQuaAorKysgYi9JbmMvc3RtMzJsNHh4X2hhbF91c2FydC5oCkBAIC05MDMsNyArOTAzLDggQEAKICAgKi8KIAogLyogSU8gb3BlcmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9VU0FSVF9UcmFuc21pdChVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQsIGNvbnN0IHVpbnQ4X3QgKnBUeERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VTQVJUX1RyYW5zbWl0KFVTQVJUX0hhbmRsZVR5cGVEZWYgKmh1c2FydCwgY29uc3QgdWludDhfdCAqcFR4RGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9VU0FSVF9SZWNlaXZlKFVTQVJUX0hhbmRsZVR5cGVEZWYgKmh1c2FydCwgdWludDhfdCAqcFJ4RGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVVNBUlRfVHJhbnNtaXRSZWNlaXZlKFVTQVJUX0hhbmRsZVR5cGVEZWYgKmh1c2FydCwgY29uc3QgdWludDhfdCAqcFR4RGF0YSwgdWludDhfdCAqcFJ4RGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCk7CkBAIC05NDAsOCArOTQxLDggQEAKICAgKi8KIAogLyogUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3IgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUhBTF9VU0FSVF9TdGF0ZVR5cGVEZWYgSEFMX1VTQVJUX0dldFN0YXRlKFVTQVJUX0hhbmRsZVR5cGVEZWYgKmh1c2FydCk7Ci11aW50MzJfdCAgICAgICAgICAgICAgIEhBTF9VU0FSVF9HZXRFcnJvcihVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQpOworSEFMX1VTQVJUX1N0YXRlVHlwZURlZiBIQUxfVVNBUlRfR2V0U3RhdGUoY29uc3QgVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0KTsKK3VpbnQzMl90ICAgICAgICAgICAgICAgSEFMX1VTQVJUX0dldEVycm9yKGNvbnN0IFVTQVJUX0hhbmRsZVR5cGVEZWYgKmh1c2FydCk7CiAKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2xsX2FkYy5oIGIvSW5jL3N0bTMybDR4eF9sbF9hZGMuaAppbmRleCBjNWVmYTFkLi5mOGUzZTJkIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2xsX2FkYy5oCisrKyBiL0luYy9zdG0zMmw0eHhfbGxfYWRjLmgKQEAgLTEzNjAsNiArMTM2MCw3IEBACiAvKiBwYXJhbWV0ZXIgInRTVEFSVCIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogVW5pdDogdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTExfQURDX0RFTEFZX1RFTVBTRU5TT1JfU1RBQl9VUyAgICAgICAgKDEyMFVMKSAgLyohPCBEZWxheSBmb3IgdGVtcGVyYXR1cmUgc2Vuc29yIHN0YWJpbGl6YXRpb24gdGltZSAqLworI2RlZmluZSBMTF9BRENfREVMQVlfVEVNUFNFTlNPUl9CVUZGRVJfU1RBQl9VUyAoIDE1VUwpICAvKiE8IERlbGF5IGZvciB0ZW1wZXJhdHVyZSBzZW5zb3IgYnVmZmVyIHN0YWJpbGl6YXRpb24gdGltZSAoc3RhcnRpbmcgZnJvbSBBREMgZW5hYmxlLCByZWZlciB0byBAcmVmIExMX0FEQ19FbmFibGUoKSkgKi8KIAogLyogRGVsYXkgcmVxdWlyZWQgYmV0d2VlbiBBREMgZW5kIG9mIGNhbGlicmF0aW9uIGFuZCBBREMgZW5hYmxlLiAgICAgICAgICAgICAgKi8KIC8qIE5vdGU6IE9uIHRoaXMgU1RNMzIgc2VyaWVzLCBhIG1pbmltdW0gbnVtYmVyIG9mIEFEQyBjbG9jayBjeWNsZXMgICAgICAgICAgICovCkBAIC0yNDg2LDcgKzI0ODcsOCBAQAogICAqICAgICAgICAgdGVtcGVyYXR1cmUgc2Vuc29yIHN0YWJpbGl6YXRpb24gdGltZS4KICAgKiAgICAgICAgIFJlZmVyIHRvIGRldmljZSBkYXRhc2hlZXQuCiAgICogICAgICAgICBSZWZlciB0byBsaXRlcmFsIEByZWYgTExfQURDX0RFTEFZX1ZSRUZJTlRfU1RBQl9VUy4KLSAgKiAgICAgICAgIFJlZmVyIHRvIGxpdGVyYWwgQHJlZiBMTF9BRENfREVMQVlfVEVNUFNFTlNPUl9TVEFCX1VTLgorICAqICAgICAgICAgUmVmZXIgdG8gbGl0ZXJhbHMgQHJlZiBMTF9BRENfREVMQVlfVEVNUFNFTlNPUl9TVEFCX1VTLCAKKyAgKiAgICAgICAgIEByZWYgTExfQURDX0RFTEFZX1RFTVBTRU5TT1JfQlVGRkVSX1NUQUJfVVMuCiAgICogQG5vdGUgICBBREMgaW50ZXJuYWwgY2hhbm5lbCBzYW1wbGluZyB0aW1lIGNvbnN0cmFpbnQ6CiAgICogICAgICAgICBGb3IgQURDIGNvbnZlcnNpb24gb2YgaW50ZXJuYWwgY2hhbm5lbHMsCiAgICogICAgICAgICBhIHNhbXBsaW5nIHRpbWUgbWluaW11bSB2YWx1ZSBpcyByZXF1aXJlZC4KQEAgLTI1MjEsNyArMjUyMyw4IEBACiAgICogICAgICAgICB0ZW1wZXJhdHVyZSBzZW5zb3Igc3RhYmlsaXphdGlvbiB0aW1lLgogICAqICAgICAgICAgUmVmZXIgdG8gZGV2aWNlIGRhdGFzaGVldC4KICAgKiAgICAgICAgIFJlZmVyIHRvIGxpdGVyYWwgQHJlZiBMTF9BRENfREVMQVlfVlJFRklOVF9TVEFCX1VTLgotICAqICAgICAgICAgUmVmZXIgdG8gbGl0ZXJhbCBAcmVmIExMX0FEQ19ERUxBWV9URU1QU0VOU09SX1NUQUJfVVMuCisgICogICAgICAgICBSZWZlciB0byBsaXRlcmFscyBAcmVmIExMX0FEQ19ERUxBWV9URU1QU0VOU09SX1NUQUJfVVMsIAorICAqICAgICAgICAgQHJlZiBMTF9BRENfREVMQVlfVEVNUFNFTlNPUl9CVUZGRVJfU1RBQl9VUy4KICAgKiBAbm90ZSAgIEFEQyBpbnRlcm5hbCBjaGFubmVsIHNhbXBsaW5nIHRpbWUgY29uc3RyYWludDoKICAgKiAgICAgICAgIEZvciBBREMgY29udmVyc2lvbiBvZiBpbnRlcm5hbCBjaGFubmVscywKICAgKiAgICAgICAgIGEgc2FtcGxpbmcgdGltZSBtaW5pbXVtIHZhbHVlIGlzIHJlcXVpcmVkLgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9sbF9mbWMuaCBiL0luYy9zdG0zMmw0eHhfbGxfZm1jLmgKaW5kZXggNWJlMDI5Mi4uOWYwNWRjZCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9sbF9mbWMuaAorKysgYi9JbmMvc3RtMzJsNHh4X2xsX2ZtYy5oCkBAIC01MDYsMTMgKzUwNiwxMyBAQAogICAqIEB9CiAgICovCiAKLSNpZiBkZWZpbmVkKEZNQ19CQ1IxX1dGRElTKSAgCisjaWYgZGVmaW5lZChGTUNfQkNSMV9XRkRJUykKIC8qKiBAZGVmZ3JvdXAgRk1DX1dyaXRlX0ZJRk8gRk1DIFdyaXRlIEZJRk8KICAgKiBAewogICAqLwogI2RlZmluZSBGTUNfV1JJVEVfRklGT19ESVNBQkxFICAgICAgICAgICAgICAgICAgRk1DX0JDUjFfV0ZESVMKICNkZWZpbmUgRk1DX1dSSVRFX0ZJRk9fRU5BQkxFICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKLSAjZW5kaWYgLyogRk1DX0JDUjFfV0ZESVMgKi8KKyNlbmRpZiAvKiBGTUNfQkNSMV9XRkRJUyAqLwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmw0eHhfbGxfbHB0aW0uaCBiL0luYy9zdG0zMmw0eHhfbGxfbHB0aW0uaAppbmRleCA2ZDkyZGIxLi5iYWU3NWRkIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2xsX2xwdGltLmgKKysrIGIvSW5jL3N0bTMybDR4eF9sbF9scHRpbS5oCkBAIC0zNDEsNyArMzQxLDcgQEAKIAogRXJyb3JTdGF0dXMgTExfTFBUSU1fRGVJbml0KExQVElNX1R5cGVEZWYgKkxQVElNeCk7CiB2b2lkIExMX0xQVElNX1N0cnVjdEluaXQoTExfTFBUSU1fSW5pdFR5cGVEZWYgKkxQVElNX0luaXRTdHJ1Y3QpOwotRXJyb3JTdGF0dXMgTExfTFBUSU1fSW5pdChMUFRJTV9UeXBlRGVmICpMUFRJTXgsIExMX0xQVElNX0luaXRUeXBlRGVmICpMUFRJTV9Jbml0U3RydWN0KTsKK0Vycm9yU3RhdHVzIExMX0xQVElNX0luaXQoTFBUSU1fVHlwZURlZiAqTFBUSU14LCBjb25zdCBMTF9MUFRJTV9Jbml0VHlwZURlZiAqTFBUSU1fSW5pdFN0cnVjdCk7CiB2b2lkIExMX0xQVElNX0Rpc2FibGUoTFBUSU1fVHlwZURlZiAqTFBUSU14KTsKIC8qKgogICAqIEB9CkBAIC0zNzEsNyArMzcxLDcgQEAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWQoTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZChjb25zdCBMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CiAgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPkNSLCBMUFRJTV9DUl9FTkFCTEUpID09IExQVElNX0NSX0VOQUJMRSkgPyAxVUwgOiAwVUwpKTsKIH0KQEAgLTQyNSw3ICs0MjUsNyBAQAogICAqIEBwYXJhbSAgTFBUSU14IExvdy1Qb3dlciBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZFJlc2V0QWZ0ZXJSZWFkKExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWRSZXNldEFmdGVyUmVhZChjb25zdCBMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CiAgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPkNSLCBMUFRJTV9DUl9SU1RBUkUpID09IExQVElNX0NSX1JTVEFSRSkgPyAxVUwgOiAwVUwpKTsKIH0KQEAgLTQ3MSw3ICs0NzEsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVElNX1VQREFURV9NT0RFX0lNTUVESUFURQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVElNX1VQREFURV9NT0RFX0VORE9GUEVSSU9ECiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fR2V0VXBkYXRlTW9kZShMUFRJTV9UeXBlRGVmICpMUFRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fR2V0VXBkYXRlTW9kZShjb25zdCBMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKExQVElNeC0+Q0ZHUiwgTFBUSU1fQ0ZHUl9QUkVMT0FEKSk7CiB9CkBAIC00ODYsNyArNDg2LDcgQEAKICAgKiBAbm90ZSBhdXRvcmVsb2FkIHZhbHVlIGJlIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiB0aGUgY29tcGFyZSB2YWx1ZS4KICAgKiBAcm10b2xsIEFSUiAgICAgICAgICBBUlIgICAgICAgICAgIExMX0xQVElNX1NldEF1dG9SZWxvYWQKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcGFyYW0gIEF1dG9SZWxvYWQgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGRkYKKyAgKiBAcGFyYW0gIEF1dG9SZWxvYWQgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwMDEgYW5kIE1heF9EYXRhPTB4RkZGRgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTFBUSU1fU2V0QXV0b1JlbG9hZChMUFRJTV9UeXBlRGVmICpMUFRJTXgsIHVpbnQzMl90IEF1dG9SZWxvYWQpCkBAIC00OTgsOSArNDk4LDkgQEAKICAgKiBAYnJpZWYgIEdldCBhY3R1YWwgYXV0byByZWxvYWQgdmFsdWUKICAgKiBAcm10b2xsIEFSUiAgICAgICAgICBBUlIgICAgICAgICAgIExMX0xQVElNX0dldEF1dG9SZWxvYWQKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIEF1dG9SZWxvYWQgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGRkYKKyAgKiBAcmV0dmFsIEF1dG9SZWxvYWQgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwMDEgYW5kIE1heF9EYXRhPTB4RkZGRgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0dldEF1dG9SZWxvYWQoTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0dldEF1dG9SZWxvYWQoY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFRJTXgtPkFSUiwgTFBUSU1fQVJSX0FSUikpOwogfQpAQCAtNTI1LDcgKzUyNSw3IEBACiAgICogQHBhcmFtICBMUFRJTXggTG93LVBvd2VyIFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBSZXBldGl0aW9uIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMCBhbmQgTWF4X0RhdGE9MHhGRgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0dldFJlcGV0aXRpb24oTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0dldFJlcGV0aXRpb24oY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFRJTXgtPlJDUiwgTFBUSU1fUkNSX1JFUCkpOwogfQpAQCAtNTUzLDcgKzU1Myw3IEBACiAgICogQHBhcmFtICBMUFRJTXggTG93LVBvd2VyIFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBDb21wYXJlVmFsdWUgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGRkYKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9HZXRDb21wYXJlKExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9HZXRDb21wYXJlKGNvbnN0IExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoTFBUSU14LT5DTVAsIExQVElNX0NNUF9DTVApKTsKIH0KQEAgLTU2OCw3ICs1NjgsNyBAQAogICAqIEBwYXJhbSAgTFBUSU14IExvdy1Qb3dlciBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgQ291bnRlciB2YWx1ZQogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0dldENvdW50ZXIoTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0dldENvdW50ZXIoY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFRJTXgtPkNOVCwgTFBUSU1fQ05UX0NOVCkpOwogfQpAQCAtNTk2LDcgKzU5Niw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBUSU1fQ09VTlRFUl9NT0RFX0lOVEVSTkFMCiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBUSU1fQ09VTlRFUl9NT0RFX0VYVEVSTkFMCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fR2V0Q291bnRlck1vZGUoTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0dldENvdW50ZXJNb2RlKGNvbnN0IExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoTFBUSU14LT5DRkdSLCBMUFRJTV9DRkdSX0NPVU5UTU9ERSkpOwogfQpAQCAtNjQ1LDcgKzY0NSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBUSU1fT1VUUFVUX1dBVkVGT1JNX1BXTQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVElNX09VVFBVVF9XQVZFRk9STV9TRVRPTkNFCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fR2V0V2F2ZWZvcm0oTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0dldFdhdmVmb3JtKGNvbnN0IExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoTFBUSU14LT5DRkdSLCBMUFRJTV9DRkdSX1dBVkUpKTsKIH0KQEAgLTY3Miw3ICs2NzIsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVElNX09VVFBVVF9QT0xBUklUWV9SRUdVTEFSCiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBUSU1fT1VUUFVUX1BPTEFSSVRZX0lOVkVSU0UKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9HZXRQb2xhcml0eShMUFRJTV9UeXBlRGVmICpMUFRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fR2V0UG9sYXJpdHkoY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFRJTXgtPkNGR1IsIExQVElNX0NGR1JfV0FWUE9MKSk7CiB9CkBAIC03MTYsNyArNzE2LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFRJTV9QUkVTQ0FMRVJfRElWNjQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFRJTV9QUkVTQ0FMRVJfRElWMTI4CiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fR2V0UHJlc2NhbGVyKExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9HZXRQcmVzY2FsZXIoY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFRJTXgtPkNGR1IsIExQVElNX0NGR1JfUFJFU0MpKTsKIH0KQEAgLTc5Niw3ICs3OTYsNyBAQAogICAqIEBwYXJhbSAgTFBUSU14IExvdy1Qb3dlciBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZFRpbWVvdXQoTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZFRpbWVvdXQoY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5DRkdSLCBMUFRJTV9DRkdSX1RJTU9VVCkgPT0gTFBUSU1fQ0ZHUl9USU1PVVQpID8gMVVMIDogMFVMKSk7CiB9CkBAIC04NjEsNyArODYxLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFRJTV9UUklHX1NPVVJDRV9DT01QMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVElNX1RSSUdfU09VUkNFX0NPTVAyCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fR2V0VHJpZ2dlclNvdXJjZShMUFRJTV9UeXBlRGVmICpMUFRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fR2V0VHJpZ2dlclNvdXJjZShjb25zdCBMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKExQVElNeC0+Q0ZHUiwgTFBUSU1fQ0ZHUl9UUklHU0VMKSk7CiB9CkBAIC04NzYsNyArODc2LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFRJTV9UUklHX0ZJTFRFUl80CiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBUSU1fVFJJR19GSUxURVJfOAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0dldFRyaWdnZXJGaWx0ZXIoTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0dldFRyaWdnZXJGaWx0ZXIoY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFRJTXgtPkNGR1IsIExQVElNX0NGR1JfVFJHRkxUKSk7CiB9CkBAIC04OTAsNyArODkwLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFRJTV9UUklHX1BPTEFSSVRZX0ZBTExJTkcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFRJTV9UUklHX1BPTEFSSVRZX1JJU0lOR19GQUxMSU5HCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fR2V0VHJpZ2dlclBvbGFyaXR5KExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9HZXRUcmlnZ2VyUG9sYXJpdHkoY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFRJTXgtPkNGR1IsIExQVElNX0NGR1JfVFJJR0VOKSk7CiB9CkBAIC05MjYsNyArOTI2LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFRJTV9DTEtfU09VUkNFX0lOVEVSTkFMCiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBUSU1fQ0xLX1NPVVJDRV9FWFRFUk5BTAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0dldENsb2NrU291cmNlKExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9HZXRDbG9ja1NvdXJjZShjb25zdCBMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKExQVElNeC0+Q0ZHUiwgTFBUSU1fQ0ZHUl9DS1NFTCkpOwogfQpAQCAtOTY4LDcgKzk2OCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBUSU1fQ0xLX1BPTEFSSVRZX0ZBTExJTkcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFRJTV9DTEtfUE9MQVJJVFlfUklTSU5HX0ZBTExJTkcKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9HZXRDbG9ja1BvbGFyaXR5KExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9HZXRDbG9ja1BvbGFyaXR5KGNvbnN0IExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoTFBUSU14LT5DRkdSLCBMUFRJTV9DRkdSX0NLUE9MKSk7CiB9CkBAIC05ODMsNyArOTgzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFRJTV9DTEtfRklMVEVSXzQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFRJTV9DTEtfRklMVEVSXzgKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9HZXRDbG9ja0ZpbHRlcihMUFRJTV9UeXBlRGVmICpMUFRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fR2V0Q2xvY2tGaWx0ZXIoY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFRJTXgtPkNGR1IsIExQVElNX0NGR1JfQ0tGTFQpKTsKIH0KQEAgLTEwMjEsNyArMTAyMSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBUSU1fRU5DT0RFUl9NT0RFX0ZBTExJTkcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFRJTV9FTkNPREVSX01PREVfUklTSU5HX0ZBTExJTkcKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9HZXRFbmNvZGVyTW9kZShMUFRJTV9UeXBlRGVmICpMUFRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fR2V0RW5jb2Rlck1vZGUoY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFRJTXgtPkNGR1IsIExQVElNX0NGR1JfQ0tQT0wpKTsKIH0KQEAgLTEwNjAsNyArMTA2MCw3IEBACiAgICogQHBhcmFtICBMUFRJTXggTG93LVBvd2VyIFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNFbmFibGVkRW5jb2Rlck1vZGUoTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZEVuY29kZXJNb2RlKGNvbnN0IExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKICAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+Q0ZHUiwgTFBUSU1fQ0ZHUl9FTkMpID09IExQVElNX0NGR1JfRU5DKSA/IDFVTCA6IDBVTCkpOwogfQpAQCAtMTA5MCw3ICsxMDkwLDcgQEAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQ01QTShMUFRJTV9UeXBlRGVmICpMUFRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNBY3RpdmVGbGFnX0NNUE0oY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9DTVBNKSA9PSBMUFRJTV9JU1JfQ01QTSkgPyAxVUwgOiAwVUwpKTsKIH0KQEAgLTExMTIsNyArMTExMiw3IEBACiAgICogQHBhcmFtICBMUFRJTXggTG93LVBvd2VyIFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNBY3RpdmVGbGFnX0FSUk0oTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzQWN0aXZlRmxhZ19BUlJNKGNvbnN0IExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKICAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfQVJSTSkgPT0gTFBUSU1fSVNSX0FSUk0pID8gMVVMIDogMFVMKSk7CiB9CkBAIC0xMTM0LDcgKzExMzQsNyBAQAogICAqIEBwYXJhbSAgTFBUSU14IExvdy1Qb3dlciBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzQWN0aXZlRmxhZ19FWFRUUklHKExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfRVhUVFJJRyhjb25zdCBMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CiAgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0VYVFRSSUcpID09IExQVElNX0lTUl9FWFRUUklHKSA/IDFVTCA6IDBVTCkpOwogfQpAQCAtMTE1Nyw3ICsxMTU3LDcgQEAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQ01QT0soTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzQWN0aXZlRmxhZ19DTVBPSyhjb25zdCBMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CiAgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0NNUE9LKSA9PSBMUFRJTV9JU1JfQ01QT0spID8gMVVMIDogMFVMKSk7CiB9CkBAIC0xMTgwLDcgKzExODAsNyBAQAogICAqIEBwYXJhbSAgTFBUSU14IExvdy1Qb3dlciBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzQWN0aXZlRmxhZ19BUlJPSyhMUFRJTV9UeXBlRGVmICpMUFRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNBY3RpdmVGbGFnX0FSUk9LKGNvbnN0IExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKICAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfQVJST0spID09IExQVElNX0lTUl9BUlJPSykgPyAxVUwgOiAwVUwpKTsKIH0KQEAgLTEyMDMsNyArMTIwMyw3IEBACiAgICogQHBhcmFtICBMUFRJTXggTG93LVBvd2VyIFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNBY3RpdmVGbGFnX1VQKExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfVVAoY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9VUCkgPT0gTFBUSU1fSVNSX1VQKSA/IDFVTCA6IDBVTCkpOwogfQpAQCAtMTIyNiw3ICsxMjI2LDcgQEAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfRE9XTihMUFRJTV9UeXBlRGVmICpMUFRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNBY3RpdmVGbGFnX0RPV04oY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9ET1dOKSA9PSBMUFRJTV9JU1JfRE9XTikgPyAxVUwgOiAwVUwpKTsKIH0KQEAgLTEyNTAsNyArMTI1MCw3IEBACiAgICogQHBhcmFtICBMUFRJTXggTG93LVBvd2VyIFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNBY3RpdmVGbGFnX1JFUE9LKExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfUkVQT0soY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX1JFUE9LKSA9PSAoTFBUSU1fSVNSX1JFUE9LKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTI3Miw3ICsxMjcyLDcgQEAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfVUUoTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzQWN0aXZlRmxhZ19VRShjb25zdCBMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfVUUpID09IChMUFRJTV9JU1JfVUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xMzE0LDcgKzEzMTQsNyBAQAogICAqIEBwYXJhbSAgTFBUSU14IExvdy1Qb3dlciBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0NNUE0oTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0NNUE0oY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9DTVBNSUUpID09IExQVElNX0lFUl9DTVBNSUUpID8gMVVMIDogMFVMKSk7CiB9CkBAIC0xMzQ3LDcgKzEzNDcsNyBAQAogICAqIEBwYXJhbSAgTFBUSU14IExvdy1Qb3dlciBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0FSUk0oTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0FSUk0oY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9BUlJNSUUpID09IExQVElNX0lFUl9BUlJNSUUpID8gMVVMIDogMFVMKSk7CiB9CkBAIC0xMzgwLDcgKzEzODAsNyBAQAogICAqIEBwYXJhbSAgTFBUSU14IExvdy1Qb3dlciBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0VYVFRSSUcoTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0VYVFRSSUcoY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9FWFRUUklHSUUpID09IExQVElNX0lFUl9FWFRUUklHSUUpID8gMVVMIDogMFVMKSk7CiB9CkBAIC0xNDEzLDcgKzE0MTMsNyBAQAogICAqIEBwYXJhbSAgTFBUSU14IExvdy1Qb3dlciBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0NNUE9LKExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWRJVF9DTVBPSyhjb25zdCBMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CiAgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0NNUE9LSUUpID09IExQVElNX0lFUl9DTVBPS0lFKSA/IDFVTCA6IDBVTCkpOwogfQpAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0FSUk9LKExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWRJVF9BUlJPSyhjb25zdCBMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CiAgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0FSUk9LSUUpID09IExQVElNX0lFUl9BUlJPS0lFKSA/IDFVTCA6IDBVTCkpOwogfQpAQCAtMTQ3OSw3ICsxNDc5LDcgQEAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX1VQKExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWRJVF9VUChjb25zdCBMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CiAgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX1VQSUUpID09IExQVElNX0lFUl9VUElFKSA/IDFVTCA6IDBVTCkpOwogfQpAQCAtMTUxMiw3ICsxNTEyLDcgQEAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0RPV04oTFBUSU1fVHlwZURlZiAqTFBUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0RPV04oY29uc3QgTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0RPV05JRSkgPT0gTFBUSU1fSUVSX0RPV05JRSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTU0Niw3ICsxNTQ2LDcgQEAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX1JFUE9LKExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWRJVF9SRVBPSyhjb25zdCBMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfUkVQT0tJRSkgPT0gKExQVElNX0lFUl9SRVBPS0lFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTU3OSw3ICsxNTc5LDcgQEAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKICAgKkAgcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX1VFKExQVElNX1R5cGVEZWYgKkxQVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWRJVF9VRShjb25zdCBMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfVUVJRSkgPT0gKExQVElNX0lFUl9VRUlFKSkgPyAxVUwgOiAwVUwpOwogfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9sbF9scHVhcnQuaCBiL0luYy9zdG0zMmw0eHhfbGxfbHB1YXJ0LmgKaW5kZXggZGRjYjI1OS4uYjI5MzA0NyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9sbF9scHVhcnQuaAorKysgYi9JbmMvc3RtMzJsNHh4X2xsX2xwdWFydC5oCkBAIC01NTksNyArNTU5LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZChVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWQoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IxLCBVU0FSVF9DUjFfVUUpID09IChVU0FSVF9DUjFfVUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC01OTMsNyArNTkzLDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZEZJRk8oVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNFbmFibGVkRklGTyhjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFVBUlR4LT5DUjEsIFVTQVJUX0NSMV9GSUZPRU4pID09IChVU0FSVF9DUjFfRklGT0VOKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNjI4LDcgKzYyOCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBVQVJUX0ZJRk9USFJFU0hPTERfN184CiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBVQVJUX0ZJRk9USFJFU0hPTERfOF84CiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldFRYRklGT1RocmVzaG9sZChVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9HZXRUWEZJRk9UaHJlc2hvbGQoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoTFBVQVJUeC0+Q1IzLCBVU0FSVF9DUjNfVFhGVENGRykgPj4gVVNBUlRfQ1IzX1RYRlRDRkdfUG9zKTsKIH0KQEAgLTY2Myw3ICs2NjMsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9GSUZPVEhSRVNIT0xEXzdfOAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9GSUZPVEhSRVNIT0xEXzhfOAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9HZXRSWEZJRk9UaHJlc2hvbGQoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0UlhGSUZPVGhyZXNob2xkKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKExQVUFSVHgtPkNSMywgVVNBUlRfQ1IzX1JYRlRDRkcpID4+IFVTQVJUX0NSM19SWEZUQ0ZHX1Bvcyk7CiB9CkBAIC03MjgsNyArNzI4LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZEluU3RvcE1vZGUoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNFbmFibGVkSW5TdG9wTW9kZShjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFVBUlR4LT5DUjEsIFVTQVJUX0NSMV9VRVNNKSA9PSAoVVNBUlRfQ1IxX1VFU00pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC03NjQsNyArNzY0LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQ2xvY2tFbmFibGVkSW5TdG9wTW9kZShVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0Nsb2NrRW5hYmxlZEluU3RvcE1vZGUoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IzLCBVU0FSVF9DUjNfVUNFU00pID09IChVU0FSVF9DUjNfVUNFU00pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC04NDMsNyArODQzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFVBUlRfRElSRUNUSU9OX1RYCiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBVQVJUX0RJUkVDVElPTl9UWF9SWAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9HZXRUcmFuc2ZlckRpcmVjdGlvbihVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9HZXRUcmFuc2ZlckRpcmVjdGlvbihjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFVBUlR4LT5DUjEsIFVTQVJUX0NSMV9SRSB8IFVTQVJUX0NSMV9URSkpOwogfQpAQCAtODc3LDcgKzg3Nyw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBVQVJUX1BBUklUWV9FVkVOCiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBVQVJUX1BBUklUWV9PREQKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0UGFyaXR5KFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldFBhcml0eShjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFVBUlR4LT5DUjEsIFVTQVJUX0NSMV9QUyB8IFVTQVJUX0NSMV9QQ0UpKTsKIH0KQEAgLTkwNCw3ICs5MDQsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9XQUtFVVBfSURMRUxJTkUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFVBUlRfV0FLRVVQX0FERFJFU1NNQVJLCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldFdha2VVcE1ldGhvZChVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9HZXRXYWtlVXBNZXRob2QoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoTFBVQVJUeC0+Q1IxLCBVU0FSVF9DUjFfV0FLRSkpOwogfQpAQCAtOTMzLDcgKzkzMyw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBVQVJUX0RBVEFXSURUSF84QgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9EQVRBV0lEVEhfOUIKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0RGF0YVdpZHRoKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldERhdGFXaWR0aChjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFVBUlR4LT5DUjEsIFVTQVJUX0NSMV9NKSk7CiB9CkBAIC05NjYsNyArOTY2LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZE11dGVNb2RlKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZE11dGVNb2RlKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVUFSVHgtPkNSMSwgVVNBUlRfQ1IxX01NRSkgPT0gKFVTQVJUX0NSMV9NTUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9QUkVTQ0FMRVJfRElWMTI4CiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBVQVJUX1BSRVNDQUxFUl9ESVYyNTYKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0UHJlc2NhbGVyKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldFByZXNjYWxlcihjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFVBUlR4LT5QUkVTQywgVVNBUlRfUFJFU0NfUFJFU0NBTEVSKSk7CiB9CkBAIC0xMDQyLDcgKzEwNDIsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9TVE9QQklUU18xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBVQVJUX1NUT1BCSVRTXzIKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0U3RvcEJpdHNMZW5ndGgoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0U3RvcEJpdHNMZW5ndGgoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoTFBVQVJUeC0+Q1IyLCBVU0FSVF9DUjJfU1RPUCkpOwogfQpAQCAtMTEwMCw3ICsxMTAwLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFVBUlRfVFhSWF9TVEFOREFSRAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9UWFJYX1NXQVBQRUQKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0VFhSWFN3YXAoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0VFhSWFN3YXAoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoTFBVQVJUeC0+Q1IyLCBVU0FSVF9DUjJfU1dBUCkpOwogfQpAQCAtMTEyNyw3ICsxMTI3LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFVBUlRfUlhQSU5fTEVWRUxfU1RBTkRBUkQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFVBUlRfUlhQSU5fTEVWRUxfSU5WRVJURUQKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0UlhQaW5MZXZlbChVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9HZXRSWFBpbkxldmVsKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKExQVUFSVHgtPkNSMiwgVVNBUlRfQ1IyX1JYSU5WKSk7CiB9CkBAIC0xMTU0LDcgKzExNTQsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9UWFBJTl9MRVZFTF9TVEFOREFSRAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9UWFBJTl9MRVZFTF9JTlZFUlRFRAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9HZXRUWFBpbkxldmVsKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldFRYUGluTGV2ZWwoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoTFBVQVJUeC0+Q1IyLCBVU0FSVF9DUjJfVFhJTlYpKTsKIH0KQEAgLTExODQsNyArMTE4NCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBVQVJUX0JJTkFSWV9MT0dJQ19QT1NJVElWRQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9CSU5BUllfTE9HSUNfTkVHQVRJVkUKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0QmluYXJ5RGF0YUxvZ2ljKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldEJpbmFyeURhdGFMb2dpYyhjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFVBUlR4LT5DUjIsIFVTQVJUX0NSMl9EQVRBSU5WKSk7CiB9CkBAIC0xMjE1LDcgKzEyMTUsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9CSVRPUkRFUl9MU0JGSVJTVAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9CSVRPUkRFUl9NU0JGSVJTVAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9HZXRUcmFuc2ZlckJpdE9yZGVyKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldFRyYW5zZmVyQml0T3JkZXIoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoTFBVQVJUeC0+Q1IyLCBVU0FSVF9DUjJfTVNCRklSU1QpKTsKIH0KQEAgLTEyNTksNyArMTI1OSw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgQWRkcmVzcyBvZiB0aGUgTFBVQVJUIG5vZGUgKFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9MjU1KQogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9HZXROb2RlQWRkcmVzcyhVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9HZXROb2RlQWRkcmVzcyhjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFVBUlR4LT5DUjIsIFVTQVJUX0NSMl9BREQpID4+IFVTQVJUX0NSMl9BRERfUG9zKTsKIH0KQEAgLTEyNzIsNyArMTI3Miw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBVQVJUX0FERFJFU1NfREVURUNUXzRCCiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBVQVJUX0FERFJFU1NfREVURUNUXzdCCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldE5vZGVBZGRyZXNzTGVuKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldE5vZGVBZGRyZXNzTGVuKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKExQVUFSVHgtPkNSMiwgVVNBUlRfQ1IyX0FERE03KSk7CiB9CkBAIC0xMzQ5LDcgKzEzNDksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9IV0NPTlRST0xfQ1RTCiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBVQVJUX0hXQ09OVFJPTF9SVFNfQ1RTCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldEhXRmxvd0N0cmwoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0SFdGbG93Q3RybChjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChMUFVBUlR4LT5DUjMsIFVTQVJUX0NSM19SVFNFIHwgVVNBUlRfQ1IzX0NUU0UpKTsKIH0KQEAgLTEzODIsNyArMTM4Miw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRPdmVycnVuRGV0ZWN0KFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZE92ZXJydW5EZXRlY3QoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IzLCBVU0FSVF9DUjNfT1ZSRElTKSAhPSBVU0FSVF9DUjNfT1ZSRElTKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNDExLDcgKzE0MTEsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9XQUtFVVBfT05fU1RBUlRCSVQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFVBUlRfV0FLRVVQX09OX1JYTkUKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0V0tVUFR5cGUoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0V0tVUFR5cGUoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoTFBVQVJUeC0+Q1IzLCBVU0FSVF9DUjNfV1VTKSk7CiB9CkBAIC0xNDkyLDkgKzE0OTIsOSBAQAogICAqIEByZXR2YWwgQmF1ZCBSYXRlCiAgICovCiAjaWYgZGVmaW5lZChVU0FSVF9QUkVTQ19QUkVTQ0FMRVIpCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldEJhdWRSYXRlKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgsIHVpbnQzMl90IFBlcmlwaENsaywgdWludDMyX3QgUHJlc2NhbGVyVmFsdWUpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldEJhdWRSYXRlKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgsIHVpbnQzMl90IFBlcmlwaENsaywgdWludDMyX3QgUHJlc2NhbGVyVmFsdWUpCiAjZWxzZQotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9HZXRCYXVkUmF0ZShVU0FSVF9UeXBlRGVmICpMUFVBUlR4LCB1aW50MzJfdCBQZXJpcGhDbGspCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0dldEJhdWRSYXRlKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgsIHVpbnQzMl90IFBlcmlwaENsaykKICNlbmRpZiAvKiBVU0FSVF9QUkVTQ19QUkVTQ0FMRVIgKi8KIHsKICAgdWludDMyX3QgbHB1YXJ0ZGl2OwpAQCAtMTU1Nyw3ICsxNTU3LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZEhhbGZEdXBsZXgoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNFbmFibGVkSGFsZkR1cGxleChjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFVBUlR4LT5DUjMsIFVTQVJUX0NSM19IRFNFTCkgPT0gKFVTQVJUX0NSM19IRFNFTCkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE1ODgsNyArMTU4OCw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgVGltZSB2YWx1ZSBleHByZXNzZWQgb24gNSBiaXRzIChbNDowXSBiaXRzKSA6IGMKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0REVEZWFzc2VydGlvblRpbWUoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0REVEZWFzc2VydGlvblRpbWUoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoTFBVQVJUeC0+Q1IxLCBVU0FSVF9DUjFfREVEVCkgPj4gVVNBUlRfQ1IxX0RFRFRfUG9zKTsKIH0KQEAgLTE2MTEsNyArMTYxMSw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgVGltZSB2YWx1ZSBleHByZXNzZWQgb24gNSBiaXRzIChbNDowXSBiaXRzKSA6IFRpbWUgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0wIGFuZCBNYXhfRGF0YT0zMQogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9HZXRERUFzc2VydGlvblRpbWUoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0REVBc3NlcnRpb25UaW1lKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKExQVUFSVHgtPkNSMSwgVVNBUlRfQ1IxX0RFQVQpID4+IFVTQVJUX0NSMV9ERUFUX1Bvcyk7CiB9CkBAIC0xNjQ0LDcgKzE2NDQsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNFbmFibGVkREVNb2RlKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZERFTW9kZShjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFVBUlR4LT5DUjMsIFVTQVJUX0NSM19ERU0pID09IChVU0FSVF9DUjNfREVNKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTY3MSw3ICsxNjcxLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFVBUlRfREVfUE9MQVJJVFlfSElHSAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVUFSVF9ERV9QT0xBUklUWV9MT1cKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0REVTaWduYWxQb2xhcml0eShVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9HZXRERVNpZ25hbFBvbGFyaXR5KGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKExQVUFSVHgtPkNSMywgVVNBUlRfQ1IzX0RFUCkpOwogfQpAQCAtMTY5MCw3ICsxNjkwLDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19QRShVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0FjdGl2ZUZsYWdfUEUoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+SVNSLCBVU0FSVF9JU1JfUEUpID09IChVU0FSVF9JU1JfUEUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNzAxLDcgKzE3MDEsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX0ZFKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19GRShjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFVBUlR4LT5JU1IsIFVTQVJUX0lTUl9GRSkgPT0gKFVTQVJUX0lTUl9GRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE3MTIsNyArMTcxMiw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0FjdGl2ZUZsYWdfTkUoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX05FKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVUFSVHgtPklTUiwgVVNBUlRfSVNSX05FKSA9PSAoVVNBUlRfSVNSX05FKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTcyMyw3ICsxNzIzLDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19PUkUoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX09SRShjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFVBUlR4LT5JU1IsIFVTQVJUX0lTUl9PUkUpID09IChVU0FSVF9JU1JfT1JFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTczNCw3ICsxNzM0LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19JRExFKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19JRExFKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVUFSVHgtPklTUiwgVVNBUlRfSVNSX0lETEUpID09IChVU0FSVF9JU1JfSURMRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE3NDksNyArMTc0OSw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0FjdGl2ZUZsYWdfUlhORV9SWEZORShVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0FjdGl2ZUZsYWdfUlhORV9SWEZORShjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFVBUlR4LT5JU1IsIFVTQVJUX0lTUl9SWE5FX1JYRk5FKSA9PSAoVVNBUlRfSVNSX1JYTkVfUlhGTkUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNzYwLDcgKzE3NjAsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX1JYTkUoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX1JYTkUoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+SVNSLCBVU0FSVF9JU1JfUlhORSkgPT0gKFVTQVJUX0lTUl9SWE5FKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTc3Miw3ICsxNzcyLDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19UQyhVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0FjdGl2ZUZsYWdfVEMoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+SVNSLCBVU0FSVF9JU1JfVEMpID09IChVU0FSVF9JU1JfVEMpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNzg3LDcgKzE3ODcsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX1RYRV9UWEZORihVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0FjdGl2ZUZsYWdfVFhFX1RYRk5GKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVUFSVHgtPklTUiwgVVNBUlRfSVNSX1RYRV9UWEZORikgPT0gKFVTQVJUX0lTUl9UWEVfVFhGTkYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNzk4LDcgKzE3OTgsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX1RYRShVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0FjdGl2ZUZsYWdfVFhFKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVUFSVHgtPklTUiwgVVNBUlRfSVNSX1RYRSkgPT0gKFVTQVJUX0lTUl9UWEUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xODEwLDcgKzE4MTAsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX25DVFMoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX25DVFMoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+SVNSLCBVU0FSVF9JU1JfQ1RTSUYpID09IChVU0FSVF9JU1JfQ1RTSUYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xODIxLDcgKzE4MjEsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX0NUUyhVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0FjdGl2ZUZsYWdfQ1RTKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVUFSVHgtPklTUiwgVVNBUlRfSVNSX0NUUykgPT0gKFVTQVJUX0lTUl9DVFMpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xODMyLDcgKzE4MzIsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX0JVU1koVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX0JVU1koY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+SVNSLCBVU0FSVF9JU1JfQlVTWSkgPT0gKFVTQVJUX0lTUl9CVVNZKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTg0Myw3ICsxODQzLDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19DTShVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0FjdGl2ZUZsYWdfQ00oY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+SVNSLCBVU0FSVF9JU1JfQ01GKSA9PSAoVVNBUlRfSVNSX0NNRikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE4NTQsNyArMTg1NCw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0FjdGl2ZUZsYWdfU0JLKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19TQksoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+SVNSLCBVU0FSVF9JU1JfU0JLRikgPT0gKFVTQVJUX0lTUl9TQktGKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTg2NSw3ICsxODY1LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19SV1UoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX1JXVShjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFVBUlR4LT5JU1IsIFVTQVJUX0lTUl9SV1UpID09IChVU0FSVF9JU1JfUldVKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTg3Niw3ICsxODc2LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19XS1VQKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19XS1VQKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVUFSVHgtPklTUiwgVVNBUlRfSVNSX1dVRikgPT0gKFVTQVJUX0lTUl9XVUYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xODg3LDcgKzE4ODcsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX1RFQUNLKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19URUFDSyhjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFVBUlR4LT5JU1IsIFVTQVJUX0lTUl9URUFDSykgPT0gKFVTQVJUX0lTUl9URUFDSykpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE4OTgsNyArMTg5OCw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0FjdGl2ZUZsYWdfUkVBQ0soVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX1JFQUNLKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVUFSVHgtPklTUiwgVVNBUlRfSVNSX1JFQUNLKSA9PSAoVVNBUlRfSVNSX1JFQUNLKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTkxMCw3ICsxOTEwLDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19UWEZFKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19UWEZFKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVUFSVHgtPklTUiwgVVNBUlRfSVNSX1RYRkUpID09IChVU0FSVF9JU1JfVFhGRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE5MjEsNyArMTkyMSw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0FjdGl2ZUZsYWdfUlhGRihVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0FjdGl2ZUZsYWdfUlhGRihjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFVBUlR4LT5JU1IsIFVTQVJUX0lTUl9SWEZGKSA9PSAoVVNBUlRfSVNSX1JYRkYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xOTMyLDcgKzE5MzIsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX1RYRlQoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNBY3RpdmVGbGFnX1RYRlQoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+SVNSLCBVU0FSVF9JU1JfVFhGVCkgPT0gKFVTQVJUX0lTUl9UWEZUKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTk0Myw3ICsxOTQzLDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19SWEZUKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzQWN0aXZlRmxhZ19SWEZUKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVUFSVHgtPklTUiwgVVNBUlRfSVNSX1JYRlQpID09IChVU0FSVF9JU1JfUlhGVCkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTI0MzIsNyArMjQzMiw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRJVF9JRExFKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZElUX0lETEUoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IxLCBVU0FSVF9DUjFfSURMRUlFKSA9PSAoVVNBUlRfQ1IxX0lETEVJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTI0NDcsNyArMjQ0Nyw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRJVF9SWE5FX1JYRk5FKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZElUX1JYTkVfUlhGTkUoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IxLCBVU0FSVF9DUjFfUlhORUlFX1JYRk5FSUUpID09IChVU0FSVF9DUjFfUlhORUlFX1JYRk5FSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0yNDU5LDcgKzI0NTksNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNFbmFibGVkSVRfUlhORShVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRJVF9SWE5FKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVUFSVHgtPkNSMSwgVVNBUlRfQ1IxX1JYTkVJRSkgPT0gKFVTQVJUX0NSMV9SWE5FSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0yNDcxLDcgKzI0NzEsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNFbmFibGVkSVRfVEMoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNFbmFibGVkSVRfVEMoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IxLCBVU0FSVF9DUjFfVENJRSkgPT0gKFVTQVJUX0NSMV9UQ0lFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjQ4Niw3ICsyNDg2LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZElUX1RYRV9UWEZORihVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRJVF9UWEVfVFhGTkYoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IxLCBVU0FSVF9DUjFfVFhFSUVfVFhGTkZJRSkgPT0gKFVTQVJUX0NSMV9UWEVJRV9UWEZORklFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjQ5OCw3ICsyNDk4LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZElUX1RYRShVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRJVF9UWEUoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IxLCBVU0FSVF9DUjFfVFhFSUUpID09IChVU0FSVF9DUjFfVFhFSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0yNTEwLDcgKzI1MTAsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNFbmFibGVkSVRfUEUoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNFbmFibGVkSVRfUEUoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IxLCBVU0FSVF9DUjFfUEVJRSkgPT0gKFVTQVJUX0NSMV9QRUlFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjUyMSw3ICsyNTIxLDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZElUX0NNKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZElUX0NNKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVUFSVHgtPkNSMSwgVVNBUlRfQ1IxX0NNSUUpID09IChVU0FSVF9DUjFfQ01JRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTI1MzMsNyArMjUzMyw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRJVF9UWEZFKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZElUX1RYRkUoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IxLCBVU0FSVF9DUjFfVFhGRUlFKSA9PSAoVVNBUlRfQ1IxX1RYRkVJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTI1NDQsNyArMjU0NCw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRJVF9SWEZGKFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZElUX1JYRkYoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IxLCBVU0FSVF9DUjFfUlhGRklFKSA9PSAoVVNBUlRfQ1IxX1JYRkZJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTI1NTYsNyArMjU1Niw3IEBACiAgICogQHBhcmFtICBMUFVBUlR4IExQVUFSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRJVF9FUlJPUihVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRJVF9FUlJPUihjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFVBUlR4LT5DUjMsIFVTQVJUX0NSM19FSUUpID09IChVU0FSVF9DUjNfRUlFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjU2Nyw3ICsyNTY3LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZElUX0NUUyhVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRJVF9DVFMoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IzLCBVU0FSVF9DUjNfQ1RTSUUpID09IChVU0FSVF9DUjNfQ1RTSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0yNTc4LDcgKzI1NzgsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNFbmFibGVkSVRfV0tVUChVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRJVF9XS1VQKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKExQVUFSVHgtPkNSMywgVVNBUlRfQ1IzX1dVRklFKSA9PSAoVVNBUlRfQ1IzX1dVRklFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjU5MCw3ICsyNTkwLDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZElUX1RYRlQoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNFbmFibGVkSVRfVFhGVChjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFVBUlR4LT5DUjMsIFVTQVJUX0NSM19UWEZUSUUpID09IChVU0FSVF9DUjNfVFhGVElFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjYwMSw3ICsyNjAxLDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZElUX1JYRlQoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfSXNFbmFibGVkSVRfUlhGVChjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChMUFVBUlR4LT5DUjMsIFVTQVJUX0NSM19SWEZUSUUpID09IChVU0FSVF9DUjNfUlhGVElFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjY0Myw3ICsyNjQzLDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZERNQVJlcV9SWChVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRETUFSZXFfUlgoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IzLCBVU0FSVF9DUjNfRE1BUikgPT0gKFVTQVJUX0NSM19ETUFSKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjY3Niw3ICsyNjc2LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZERNQVJlcV9UWChVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRETUFSZXFfVFgoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IzLCBVU0FSVF9DUjNfRE1BVCkgPT0gKFVTQVJUX0NSM19ETUFUKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjcwOSw3ICsyNzA5LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0lzRW5hYmxlZERNQURlYWN0T25SeEVycihVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9Jc0VuYWJsZWRETUFEZWFjdE9uUnhFcnIoY29uc3QgVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoTFBVQVJUeC0+Q1IzLCBVU0FSVF9DUjNfRERSRSkgPT0gKFVTQVJUX0NSM19ERFJFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjcyNCw3ICsyNzI0LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9MUFVBUlRfRE1BX1JFR19EQVRBX1JFQ0VJVkUKICAgKiBAcmV0dmFsIEFkZHJlc3Mgb2YgZGF0YSByZWdpc3RlcgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9ETUFfR2V0UmVnQWRkcihVU0FSVF9UeXBlRGVmICpMUFVBUlR4LCB1aW50MzJfdCBEaXJlY3Rpb24pCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBVQVJUX0RNQV9HZXRSZWdBZGRyKGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgsIHVpbnQzMl90IERpcmVjdGlvbikKIHsKICAgdWludDMyX3QgZGF0YV9yZWdfYWRkcjsKIApAQCAtMjc1Niw3ICsyNzU2LDcgQEAKICAgKiBAcGFyYW0gIExQVUFSVHggTFBVQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBUaW1lIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMCBhbmQgTWF4X0RhdGE9MHhGRgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgTExfTFBVQVJUX1JlY2VpdmVEYXRhOChVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgTExfTFBVQVJUX1JlY2VpdmVEYXRhOChjb25zdCBVU0FSVF9UeXBlRGVmICpMUFVBUlR4KQogewogICByZXR1cm4gKHVpbnQ4X3QpKFJFQURfQklUKExQVUFSVHgtPlJEUiwgVVNBUlRfUkRSX1JEUikgJiAweEZGVSk7CiB9CkBAIC0yNzY3LDcgKzI3NjcsNyBAQAogICAqIEBwYXJhbSAgTFBVQVJUeCBMUFVBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFRpbWUgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weDFGRgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IExMX0xQVUFSVF9SZWNlaXZlRGF0YTkoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MTZfdCBMTF9MUFVBUlRfUmVjZWl2ZURhdGE5KGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIHJldHVybiAodWludDE2X3QpKFJFQURfQklUKExQVUFSVHgtPlJEUiwgVVNBUlRfUkRSX1JEUikpOwogfQpAQCAtMjg1MSw4ICsyODUxLDggQEAKIC8qKiBAZGVmZ3JvdXAgTFBVQVJUX0xMX0VGX0luaXQgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwogICAqIEB7CiAgICovCi1FcnJvclN0YXR1cyBMTF9MUFVBUlRfRGVJbml0KFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpOwotRXJyb3JTdGF0dXMgTExfTFBVQVJUX0luaXQoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCwgTExfTFBVQVJUX0luaXRUeXBlRGVmICpMUFVBUlRfSW5pdFN0cnVjdCk7CitFcnJvclN0YXR1cyBMTF9MUFVBUlRfRGVJbml0KGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpOworRXJyb3JTdGF0dXMgTExfTFBVQVJUX0luaXQoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCwgY29uc3QgTExfTFBVQVJUX0luaXRUeXBlRGVmICpMUFVBUlRfSW5pdFN0cnVjdCk7CiB2b2lkICAgICAgICBMTF9MUFVBUlRfU3RydWN0SW5pdChMTF9MUFVBUlRfSW5pdFR5cGVEZWYgKkxQVUFSVF9Jbml0U3RydWN0KTsKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJsNHh4X2xsX3RpbS5oIGIvSW5jL3N0bTMybDR4eF9sbF90aW0uaAppbmRleCAyNzUzNzE0Li5mNmUyZTk2IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJsNHh4X2xsX3RpbS5oCisrKyBiL0luYy9zdG0zMmw0eHhfbGxfdGltLmgKQEAgLTE1MDUsNyArMTUwNSw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZENvdW50ZXIoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZENvdW50ZXIoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFRJTXgtPkNSMSwgVElNX0NSMV9DRU4pID09IChUSU1fQ1IxX0NFTikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE1MzgsNyArMTUzOCw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBJbnZlcnRlZCBzdGF0ZSBvZiBiaXQgKDAgb3IgMSkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZFVwZGF0ZUV2ZW50KFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0VuYWJsZWRVcGRhdGVFdmVudChjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+Q1IxLCBUSU1fQ1IxX1VESVMpID09ICh1aW50MzJfdClSRVNFVCkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTU3Miw3ICsxNTcyLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fVVBEQVRFU09VUkNFX1JFR1VMQVIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fVVBEQVRFU09VUkNFX0NPVU5URVIKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fR2V0VXBkYXRlU291cmNlKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9HZXRVcGRhdGVTb3VyY2UoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFRJTXgtPkNSMSwgVElNX0NSMV9VUlMpKTsKIH0KQEAgLTE1OTksNyArMTU5OSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX09ORVBVTFNFTU9ERV9TSU5HTEUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fT05FUFVMU0VNT0RFX1JFUEVUSVRJVkUKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fR2V0T25lUHVsc2VNb2RlKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9HZXRPbmVQdWxzZU1vZGUoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFRJTXgtPkNSMSwgVElNX0NSMV9PUE0pKTsKIH0KQEAgLTE2NDMsNyArMTY0Myw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0NPVU5URVJNT0RFX0NFTlRFUl9ET1dOCiAgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0NPVU5URVJNT0RFX0NFTlRFUl9VUF9ET1dOCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0dldENvdW50ZXJNb2RlKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9HZXRDb3VudGVyTW9kZShjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgdWludDMyX3QgY291bnRlcl9tb2RlOwogCkBAIC0xNjg1LDcgKzE2ODUsNyBAQAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0VuYWJsZWRBUlJQcmVsb2FkKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0VuYWJsZWRBUlJQcmVsb2FkKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5DUjEsIFRJTV9DUjFfQVJQRSkgPT0gKFRJTV9DUjFfQVJQRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE3MjIsNyArMTcyMiw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0NMT0NLRElWSVNJT05fRElWMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9DTE9DS0RJVklTSU9OX0RJVjQKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fR2V0Q2xvY2tEaXZpc2lvbihUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fR2V0Q2xvY2tEaXZpc2lvbihjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoVElNeC0+Q1IxLCBUSU1fQ1IxX0NLRCkpOwogfQpAQCAtMTc0OSw3ICsxNzQ5LDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIENvdW50ZXIgdmFsdWUgKGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9MHhGRkZGIG9yIDB4RkZGRkZGRkYpCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0dldENvdW50ZXIoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0dldENvdW50ZXIoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKFRJTXgtPkNOVCkpOwogfQpAQCAtMTc2Miw3ICsxNzYyLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fQ09VTlRFUkRJUkVDVElPTl9VUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9DT1VOVEVSRElSRUNUSU9OX0RPV04KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fR2V0RGlyZWN0aW9uKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9HZXREaXJlY3Rpb24oY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFRJTXgtPkNSMSwgVElNX0NSMV9ESVIpKTsKIH0KQEAgLTE3ODksNyArMTc4OSw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCAgUHJlc2NhbGVyIHZhbHVlIGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9NjU1MzUKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fR2V0UHJlc2NhbGVyKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9HZXRQcmVzY2FsZXIoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKFRJTXgtPlBTQykpOwogfQpAQCAtMTgxOCw3ICsxODE4LDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIEF1dG8tcmVsb2FkIHZhbHVlCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0dldEF1dG9SZWxvYWQoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0dldEF1dG9SZWxvYWQoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKFRJTXgtPkFSUikpOwogfQpAQCAtMTg0Niw3ICsxODQ2LDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFJlcGV0aXRpb24gY291bnRlciB2YWx1ZQogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9HZXRSZXBldGl0aW9uQ291bnRlcihUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fR2V0UmVwZXRpdGlvbkNvdW50ZXIoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKFRJTXgtPlJDUikpOwogfQpAQCAtMTg4MCw3ICsxODgwLDcgQEAKICAgKiBAcGFyYW0gIENvdW50ZXIgQ291bnRlciB2YWx1ZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0FjdGl2ZVVJRkNQWSh1aW50MzJfdCBDb3VudGVyKQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0FjdGl2ZVVJRkNQWShjb25zdCB1aW50MzJfdCBDb3VudGVyKQogewogICByZXR1cm4gKCgoQ291bnRlciAmIFRJTV9DTlRfVUlGQ1BZKSA9PSAoVElNX0NOVF9VSUZDUFkpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xOTU5LDcgKzE5NTksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9DQ0RNQVJFUVVFU1RfQ0MKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fQ0NETUFSRVFVRVNUX1VQREFURQogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9DQ19HZXRETUFSZXFUcmlnZ2VyKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9DQ19HZXRETUFSZXFUcmlnZ2VyKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChUSU14LT5DUjIsIFRJTV9DUjJfQ0NEUykpOwogfQpAQCAtMjE5NCw3ICsyMTk0LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fT0NNT0RFX0FTU1lNRVRSSUNfUFdNMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9PQ01PREVfQVNTWU1FVFJJQ19QV00yCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldE1vZGUoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldE1vZGUoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CkBAIC0yMjYwLDcgKzIyNjAsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9PQ1BPTEFSSVRZX0hJR0gKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fT0NQT0xBUklUWV9MT1cKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fT0NfR2V0UG9sYXJpdHkoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldFBvbGFyaXR5KGNvbnN0IFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewogICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwogICByZXR1cm4gKFJFQURfQklUKFRJTXgtPkNDRVIsIChUSU1fQ0NFUl9DQzFQIDw8IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSkpID4+IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSk7CkBAIC0yMzI5LDcgKzIzMjksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1RJTV9PQ0lETEVTVEFURV9MT1cKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fT0NJRExFU1RBVEVfSElHSAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19HZXRJZGxlU3RhdGUoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldElkbGVTdGF0ZShjb25zdCBUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKICAgcmV0dXJuIChSRUFEX0JJVChUSU14LT5DUjIsIChUSU1fQ1IyX09JUzEgPDwgU0hJRlRfVEFCX09JU3hbaUNoYW5uZWxdKSkgPj4gU0hJRlRfVEFCX09JU3hbaUNoYW5uZWxdKTsKQEAgLTI2OTgsNyArMjY5OCw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBDb21wYXJlVmFsdWUgKGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9NjU1MzUpCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldENvbXBhcmVDSDEoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldENvbXBhcmVDSDEoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKFRJTXgtPkNDUjEpKTsKIH0KQEAgLTI3MTQsNyArMjcxNCw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBDb21wYXJlVmFsdWUgKGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9NjU1MzUpCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldENvbXBhcmVDSDIoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldENvbXBhcmVDSDIoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKFRJTXgtPkNDUjIpKTsKIH0KQEAgLTI3MzAsNyArMjczMCw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBDb21wYXJlVmFsdWUgKGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9NjU1MzUpCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldENvbXBhcmVDSDMoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldENvbXBhcmVDSDMoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKFRJTXgtPkNDUjMpKTsKIH0KQEAgLTI3NDYsNyArMjc0Niw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBDb21wYXJlVmFsdWUgKGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9NjU1MzUpCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldENvbXBhcmVDSDQoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldENvbXBhcmVDSDQoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKFRJTXgtPkNDUjQpKTsKIH0KQEAgLTI3NTksNyArMjc1OSw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBDb21wYXJlVmFsdWUgKGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9NjU1MzUpCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldENvbXBhcmVDSDUoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldENvbXBhcmVDSDUoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFRJTXgtPkNDUjUsIFRJTV9DQ1I1X0NDUjUpKTsKIH0KQEAgLTI3NzIsNyArMjc3Miw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBDb21wYXJlVmFsdWUgKGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9NjU1MzUpCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldENvbXBhcmVDSDYoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldENvbXBhcmVDSDYoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKFRJTXgtPkNDUjYpKTsKIH0KQEAgLTI4OTIsNyArMjg5Miw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0FDVElWRUlOUFVUX0lORElSRUNUVEkKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fQUNUSVZFSU5QVVRfVFJDCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0dldEFjdGl2ZUlucHV0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9JQ19HZXRBY3RpdmVJbnB1dChjb25zdCBUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKICAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKQEAgLTI5NDMsNyArMjk0Myw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0lDUFNDX0RJVjQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fSUNQU0NfRElWOAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9JQ19HZXRQcmVzY2FsZXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0dldFByZXNjYWxlcihjb25zdCBUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKICAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKQEAgLTMwMTgsNyArMzAxOCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0lDX0ZJTFRFUl9GRElWMzJfTjYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fSUNfRklMVEVSX0ZESVYzMl9OOAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9JQ19HZXRGaWx0ZXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0dldEZpbHRlcihjb25zdCBUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKICAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKQEAgLTMwNzUsNyArMzA3NSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVElNX0lDX1BPTEFSSVRZX0ZBTExJTkcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9USU1fSUNfUE9MQVJJVFlfQk9USEVER0UKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSUNfR2V0UG9sYXJpdHkoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0dldFBvbGFyaXR5KGNvbnN0IFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewogICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwogICByZXR1cm4gKFJFQURfQklUKFRJTXgtPkNDRVIsICgoVElNX0NDRVJfQ0MxTlAgfCBUSU1fQ0NFUl9DQzFQKSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pKSA+PgpAQCAtMzEzMiw3ICszMTMyLDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIENhcHR1cmVkVmFsdWUgKGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9NjU1MzUpCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0dldENhcHR1cmVDSDEoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0dldENhcHR1cmVDSDEoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKFRJTXgtPkNDUjEpKTsKIH0KQEAgLTMxNDgsNyArMzE0OCw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBDYXB0dXJlZFZhbHVlIChiZXR3ZWVuIE1pbl9EYXRhPTAgYW5kIE1heF9EYXRhPTY1NTM1KQogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9JQ19HZXRDYXB0dXJlQ0gyKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9JQ19HZXRDYXB0dXJlQ0gyKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX1JFRyhUSU14LT5DQ1IyKSk7CiB9CkBAIC0zMTY0LDcgKzMxNjQsNyBAQAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgQ2FwdHVyZWRWYWx1ZSAoYmV0d2VlbiBNaW5fRGF0YT0wIGFuZCBNYXhfRGF0YT02NTUzNSkKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSUNfR2V0Q2FwdHVyZUNIMyhUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSUNfR2V0Q2FwdHVyZUNIMyhjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9SRUcoVElNeC0+Q0NSMykpOwogfQpAQCAtMzE4MCw3ICszMTgwLDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIENhcHR1cmVkVmFsdWUgKGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9NjU1MzUpCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0dldENhcHR1cmVDSDQoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0dldENhcHR1cmVDSDQoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfUkVHKFRJTXgtPkNDUjQpKTsKIH0KQEAgLTMyMjcsNyArMzIyNyw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZEV4dGVybmFsQ2xvY2soVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZEV4dGVybmFsQ2xvY2soY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFRJTXgtPlNNQ1IsIFRJTV9TTUNSX0VDRSkgPT0gKFRJTV9TTUNSX0VDRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTM0MDcsNyArMzQwNyw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZE1hc3RlclNsYXZlTW9kZShUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNFbmFibGVkTWFzdGVyU2xhdmVNb2RlKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5TTUNSLCBUSU1fU01DUl9NU00pID09IChUSU1fU01DUl9NU00pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zNjUyLDcgKzM2NTIsNyBAQAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0VuYWJsZWRBdXRvbWF0aWNPdXRwdXQoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZEF1dG9tYXRpY091dHB1dChjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+QkRUUiwgVElNX0JEVFJfQU9FKSA9PSAoVElNX0JEVFJfQU9FKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzY5NSw3ICszNjk1LDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNFbmFibGVkQWxsT3V0cHV0cyhUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNFbmFibGVkQWxsT3V0cHV0cyhjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+QkRUUiwgVElNX0JEVFJfTU9FKSA9PSAoVElNX0JEVFJfTU9FKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDA5MCw3ICs0MDkwLDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNBY3RpdmVGbGFnX1VQREFURShUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNBY3RpdmVGbGFnX1VQREFURShjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+U1IsIFRJTV9TUl9VSUYpID09IChUSU1fU1JfVUlGKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDExMiw3ICs0MTEyLDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNBY3RpdmVGbGFnX0NDMShUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNBY3RpdmVGbGFnX0NDMShjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+U1IsIFRJTV9TUl9DQzFJRikgPT0gKFRJTV9TUl9DQzFJRikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQxMzQsNyArNDEzNCw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzQWN0aXZlRmxhZ19DQzIoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzQWN0aXZlRmxhZ19DQzIoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFRJTXgtPlNSLCBUSU1fU1JfQ0MySUYpID09IChUSU1fU1JfQ0MySUYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00MTU2LDcgKzQxNTYsNyBAQAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0FjdGl2ZUZsYWdfQ0MzKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0FjdGl2ZUZsYWdfQ0MzKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5TUiwgVElNX1NSX0NDM0lGKSA9PSAoVElNX1NSX0NDM0lGKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDE3OCw3ICs0MTc4LDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNBY3RpdmVGbGFnX0NDNChUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNBY3RpdmVGbGFnX0NDNChjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+U1IsIFRJTV9TUl9DQzRJRikgPT0gKFRJTV9TUl9DQzRJRikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQyMDAsNyArNDIwMCw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzQWN0aXZlRmxhZ19DQzUoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzQWN0aXZlRmxhZ19DQzUoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFRJTXgtPlNSLCBUSU1fU1JfQ0M1SUYpID09IChUSU1fU1JfQ0M1SUYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00MjIyLDcgKzQyMjIsNyBAQAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0FjdGl2ZUZsYWdfQ0M2KFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0FjdGl2ZUZsYWdfQ0M2KGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5TUiwgVElNX1NSX0NDNklGKSA9PSAoVElNX1NSX0NDNklGKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDI0NCw3ICs0MjQ0LDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNBY3RpdmVGbGFnX0NPTShUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNBY3RpdmVGbGFnX0NPTShjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+U1IsIFRJTV9TUl9DT01JRikgPT0gKFRJTV9TUl9DT01JRikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQyNjYsNyArNDI2Niw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzQWN0aXZlRmxhZ19UUklHKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0FjdGl2ZUZsYWdfVFJJRyhjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+U1IsIFRJTV9TUl9USUYpID09IChUSU1fU1JfVElGKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDI4OCw3ICs0Mjg4LDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNBY3RpdmVGbGFnX0JSSyhUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNBY3RpdmVGbGFnX0JSSyhjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+U1IsIFRJTV9TUl9CSUYpID09IChUSU1fU1JfQklGKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDMxMCw3ICs0MzEwLDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNBY3RpdmVGbGFnX0JSSzIoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzQWN0aXZlRmxhZ19CUksyKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5TUiwgVElNX1NSX0IySUYpID09IChUSU1fU1JfQjJJRikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQzMzMsNyArNDMzMyw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzQWN0aXZlRmxhZ19DQzFPVlIoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzQWN0aXZlRmxhZ19DQzFPVlIoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFRJTXgtPlNSLCBUSU1fU1JfQ0MxT0YpID09IChUSU1fU1JfQ0MxT0YpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00MzU2LDcgKzQzNTYsNyBAQAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0FjdGl2ZUZsYWdfQ0MyT1ZSKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0FjdGl2ZUZsYWdfQ0MyT1ZSKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5TUiwgVElNX1NSX0NDMk9GKSA9PSAoVElNX1NSX0NDMk9GKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDM3OSw3ICs0Mzc5LDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNBY3RpdmVGbGFnX0NDM09WUihUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNBY3RpdmVGbGFnX0NDM09WUihjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+U1IsIFRJTV9TUl9DQzNPRikgPT0gKFRJTV9TUl9DQzNPRikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQ0MDIsNyArNDQwMiw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzQWN0aXZlRmxhZ19DQzRPVlIoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzQWN0aXZlRmxhZ19DQzRPVlIoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFRJTXgtPlNSLCBUSU1fU1JfQ0M0T0YpID09IChUSU1fU1JfQ0M0T0YpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00NDI0LDcgKzQ0MjQsNyBAQAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0FjdGl2ZUZsYWdfU1lTQlJLKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0FjdGl2ZUZsYWdfU1lTQlJLKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5TUiwgVElNX1NSX1NCSUYpID09IChUSU1fU1JfU0JJRikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQ0NjQsNyArNDQ2NCw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZElUX1VQREFURShUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNFbmFibGVkSVRfVVBEQVRFKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5ESUVSLCBUSU1fRElFUl9VSUUpID09IChUSU1fRElFUl9VSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00NDk3LDcgKzQ0OTcsNyBAQAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0VuYWJsZWRJVF9DQzEoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZElUX0NDMShjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+RElFUiwgVElNX0RJRVJfQ0MxSUUpID09IChUSU1fRElFUl9DQzFJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQ1MzAsNyArNDUzMCw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZElUX0NDMihUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNFbmFibGVkSVRfQ0MyKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5ESUVSLCBUSU1fRElFUl9DQzJJRSkgPT0gKFRJTV9ESUVSX0NDMklFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDU2Myw3ICs0NTYzLDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNFbmFibGVkSVRfQ0MzKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0VuYWJsZWRJVF9DQzMoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFRJTXgtPkRJRVIsIFRJTV9ESUVSX0NDM0lFKSA9PSAoVElNX0RJRVJfQ0MzSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00NTk2LDcgKzQ1OTYsNyBAQAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0VuYWJsZWRJVF9DQzQoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZElUX0NDNChjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+RElFUiwgVElNX0RJRVJfQ0M0SUUpID09IChUSU1fRElFUl9DQzRJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQ2MjksNyArNDYyOSw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZElUX0NPTShUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNFbmFibGVkSVRfQ09NKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5ESUVSLCBUSU1fRElFUl9DT01JRSkgPT0gKFRJTV9ESUVSX0NPTUlFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDY2Miw3ICs0NjYyLDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNFbmFibGVkSVRfVFJJRyhUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNFbmFibGVkSVRfVFJJRyhjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+RElFUiwgVElNX0RJRVJfVElFKSA9PSAoVElNX0RJRVJfVElFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDY5NSw3ICs0Njk1LDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNFbmFibGVkSVRfQlJLKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0VuYWJsZWRJVF9CUksoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFRJTXgtPkRJRVIsIFRJTV9ESUVSX0JJRSkgPT0gKFRJTV9ESUVSX0JJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQ3MzUsNyArNDczNSw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZERNQVJlcV9VUERBVEUoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZERNQVJlcV9VUERBVEUoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFRJTXgtPkRJRVIsIFRJTV9ESUVSX1VERSkgPT0gKFRJTV9ESUVSX1VERSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQ3NjgsNyArNDc2OCw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZERNQVJlcV9DQzEoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZERNQVJlcV9DQzEoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFRJTXgtPkRJRVIsIFRJTV9ESUVSX0NDMURFKSA9PSAoVElNX0RJRVJfQ0MxREUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00ODAxLDcgKzQ4MDEsNyBAQAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0VuYWJsZWRETUFSZXFfQ0MyKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0VuYWJsZWRETUFSZXFfQ0MyKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5ESUVSLCBUSU1fRElFUl9DQzJERSkgPT0gKFRJTV9ESUVSX0NDMkRFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDgzNCw3ICs0ODM0LDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNFbmFibGVkRE1BUmVxX0NDMyhUSU1fVHlwZURlZiAqVElNeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNFbmFibGVkRE1BUmVxX0NDMyhjb25zdCBUSU1fVHlwZURlZiAqVElNeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVElNeC0+RElFUiwgVElNX0RJRVJfQ0MzREUpID09IChUSU1fRElFUl9DQzNERSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQ4NjcsNyArNDg2Nyw3IEBACiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZERNQVJlcV9DQzQoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZERNQVJlcV9DQzQoY29uc3QgVElNX1R5cGVEZWYgKlRJTXgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFRJTXgtPkRJRVIsIFRJTV9ESUVSX0NDNERFKSA9PSAoVElNX0RJRVJfQ0M0REUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00OTAwLDcgKzQ5MDAsNyBAQAogICAqIEBwYXJhbSAgVElNeCBUaW1lciBpbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0VuYWJsZWRETUFSZXFfQ09NKFRJTV9UeXBlRGVmICpUSU14KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9Jc0VuYWJsZWRETUFSZXFfQ09NKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5ESUVSLCBUSU1fRElFUl9DT01ERSkgPT0gKFRJTV9ESUVSX0NPTURFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDkzMyw3ICs0OTMzLDcgQEAKICAgKiBAcGFyYW0gIFRJTXggVGltZXIgaW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSXNFbmFibGVkRE1BUmVxX1RSSUcoVElNX1R5cGVEZWYgKlRJTXgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzRW5hYmxlZERNQVJlcV9UUklHKGNvbnN0IFRJTV9UeXBlRGVmICpUSU14KQogewogICByZXR1cm4gKChSRUFEX0JJVChUSU14LT5ESUVSLCBUSU1fRElFUl9UREUpID09IChUSU1fRElFUl9UREUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC01MDU1LDE3ICs1MDU1LDE3IEBACiAKIEVycm9yU3RhdHVzIExMX1RJTV9EZUluaXQoVElNX1R5cGVEZWYgKlRJTXgpOwogdm9pZCBMTF9USU1fU3RydWN0SW5pdChMTF9USU1fSW5pdFR5cGVEZWYgKlRJTV9Jbml0U3RydWN0KTsKLUVycm9yU3RhdHVzIExMX1RJTV9Jbml0KFRJTV9UeXBlRGVmICpUSU14LCBMTF9USU1fSW5pdFR5cGVEZWYgKlRJTV9Jbml0U3RydWN0KTsKK0Vycm9yU3RhdHVzIExMX1RJTV9Jbml0KFRJTV9UeXBlRGVmICpUSU14LCBjb25zdCBMTF9USU1fSW5pdFR5cGVEZWYgKlRJTV9Jbml0U3RydWN0KTsKIHZvaWQgTExfVElNX09DX1N0cnVjdEluaXQoTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NfSW5pdFN0cnVjdCk7Ci1FcnJvclN0YXR1cyBMTF9USU1fT0NfSW5pdChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NfSW5pdFN0cnVjdCk7CitFcnJvclN0YXR1cyBMTF9USU1fT0NfSW5pdChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgY29uc3QgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NfSW5pdFN0cnVjdCk7CiB2b2lkIExMX1RJTV9JQ19TdHJ1Y3RJbml0KExMX1RJTV9JQ19Jbml0VHlwZURlZiAqVElNX0lDSW5pdFN0cnVjdCk7Ci1FcnJvclN0YXR1cyBMTF9USU1fSUNfSW5pdChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgTExfVElNX0lDX0luaXRUeXBlRGVmICpUSU1fSUNfSW5pdFN0cnVjdCk7CitFcnJvclN0YXR1cyBMTF9USU1fSUNfSW5pdChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgY29uc3QgTExfVElNX0lDX0luaXRUeXBlRGVmICpUSU1fSUNfSW5pdFN0cnVjdCk7CiB2b2lkIExMX1RJTV9FTkNPREVSX1N0cnVjdEluaXQoTExfVElNX0VOQ09ERVJfSW5pdFR5cGVEZWYgKlRJTV9FbmNvZGVySW5pdFN0cnVjdCk7Ci1FcnJvclN0YXR1cyBMTF9USU1fRU5DT0RFUl9Jbml0KFRJTV9UeXBlRGVmICpUSU14LCBMTF9USU1fRU5DT0RFUl9Jbml0VHlwZURlZiAqVElNX0VuY29kZXJJbml0U3RydWN0KTsKK0Vycm9yU3RhdHVzIExMX1RJTV9FTkNPREVSX0luaXQoVElNX1R5cGVEZWYgKlRJTXgsIGNvbnN0IExMX1RJTV9FTkNPREVSX0luaXRUeXBlRGVmICpUSU1fRW5jb2RlckluaXRTdHJ1Y3QpOwogdm9pZCBMTF9USU1fSEFMTFNFTlNPUl9TdHJ1Y3RJbml0KExMX1RJTV9IQUxMU0VOU09SX0luaXRUeXBlRGVmICpUSU1fSGFsbFNlbnNvckluaXRTdHJ1Y3QpOwotRXJyb3JTdGF0dXMgTExfVElNX0hBTExTRU5TT1JfSW5pdChUSU1fVHlwZURlZiAqVElNeCwgTExfVElNX0hBTExTRU5TT1JfSW5pdFR5cGVEZWYgKlRJTV9IYWxsU2Vuc29ySW5pdFN0cnVjdCk7CitFcnJvclN0YXR1cyBMTF9USU1fSEFMTFNFTlNPUl9Jbml0KFRJTV9UeXBlRGVmICpUSU14LCBjb25zdCBMTF9USU1fSEFMTFNFTlNPUl9Jbml0VHlwZURlZiAqVElNX0hhbGxTZW5zb3JJbml0U3RydWN0KTsKIHZvaWQgTExfVElNX0JEVFJfU3RydWN0SW5pdChMTF9USU1fQkRUUl9Jbml0VHlwZURlZiAqVElNX0JEVFJJbml0U3RydWN0KTsKLUVycm9yU3RhdHVzIExMX1RJTV9CRFRSX0luaXQoVElNX1R5cGVEZWYgKlRJTXgsIExMX1RJTV9CRFRSX0luaXRUeXBlRGVmICpUSU1fQkRUUkluaXRTdHJ1Y3QpOworRXJyb3JTdGF0dXMgTExfVElNX0JEVFJfSW5pdChUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX0JEVFJfSW5pdFR5cGVEZWYgKlRJTV9CRFRSSW5pdFN0cnVjdCk7CiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9sbF91c2FydC5oIGIvSW5jL3N0bTMybDR4eF9sbF91c2FydC5oCmluZGV4IDA1YWE5MjYuLjY5MTc4ZWQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmw0eHhfbGxfdXNhcnQuaAorKysgYi9JbmMvc3RtMzJsNHh4X2xsX3VzYXJ0LmgKQEAgLTcwOSw3ICs3MDksNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWQoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPkNSMSwgVVNBUlRfQ1IxX1VFKSA9PSAoVVNBUlRfQ1IxX1VFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNzQ5LDcgKzc0OSw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRGSUZPKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRGSUZPKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5DUjEsIFVTQVJUX0NSMV9GSUZPRU4pID09IChVU0FSVF9DUjFfRklGT0VOKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNzg4LDcgKzc4OCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfRklGT1RIUkVTSE9MRF83XzgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9GSUZPVEhSRVNIT0xEXzhfOAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldFRYRklGT1RocmVzaG9sZChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0VFhGSUZPVGhyZXNob2xkKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoVVNBUlR4LT5DUjMsIFVTQVJUX0NSM19UWEZUQ0ZHKSA+PiBVU0FSVF9DUjNfVFhGVENGR19Qb3MpOwogfQpAQCAtODI3LDcgKzgyNyw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfRklGT1RIUkVTSE9MRF83XzgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9GSUZPVEhSRVNIT0xEXzhfOAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldFJYRklGT1RocmVzaG9sZChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0UlhGSUZPVGhyZXNob2xkKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoVVNBUlR4LT5DUjMsIFVTQVJUX0NSM19SWEZUQ0ZHKSA+PiBVU0FSVF9DUjNfUlhGVENGR19Qb3MpOwogfQpAQCAtODk5LDcgKzg5OSw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRJblN0b3BNb2RlKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRJblN0b3BNb2RlKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5DUjEsIFVTQVJUX0NSMV9VRVNNKSA9PSAoVVNBUlRfQ1IxX1VFU00pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC05MzUsNyArOTM1LDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQ2xvY2tFbmFibGVkSW5TdG9wTW9kZShVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNDbG9ja0VuYWJsZWRJblN0b3BNb2RlKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuIChSRUFEX0JJVChVU0FSVHgtPkNSMywgVVNBUlRfQ1IzX1VDRVNNKSA9PSAoVVNBUlRfQ1IzX1VDRVNNKSk7CiB9CkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX0RJUkVDVElPTl9UWAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX0RJUkVDVElPTl9UWF9SWAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldFRyYW5zZmVyRGlyZWN0aW9uKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRUcmFuc2ZlckRpcmVjdGlvbihjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IxLCBVU0FSVF9DUjFfUkUgfCBVU0FSVF9DUjFfVEUpKTsKIH0KQEAgLTEwNDgsNyArMTA0OCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfUEFSSVRZX0VWRU4KICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9QQVJJVFlfT0RECiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0UGFyaXR5KFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRQYXJpdHkoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChVU0FSVHgtPkNSMSwgVVNBUlRfQ1IxX1BTIHwgVVNBUlRfQ1IxX1BDRSkpOwogfQpAQCAtMTA3NSw3ICsxMDc1LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9XQUtFVVBfSURMRUxJTkUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9XQUtFVVBfQUREUkVTU01BUksKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRXYWtlVXBNZXRob2QoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldFdha2VVcE1ldGhvZChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IxLCBVU0FSVF9DUjFfV0FLRSkpOwogfQpAQCAtMTEwNiw3ICsxMTA2LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9EQVRBV0lEVEhfOEIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9EQVRBV0lEVEhfOUIKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXREYXRhV2lkdGgoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldERhdGFXaWR0aChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IxLCBVU0FSVF9DUjFfTSkpOwogfQpAQCAtMTEzOSw3ICsxMTM5LDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZE11dGVNb2RlKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRNdXRlTW9kZShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IxLCBVU0FSVF9DUjFfTU1FKSA9PSAoVVNBUlRfQ1IxX01NRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTExNjYsNyArMTE2Niw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfT1ZFUlNBTVBMSU5HXzE2CiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfT1ZFUlNBTVBMSU5HXzgKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRPdmVyU2FtcGxpbmcoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldE92ZXJTYW1wbGluZyhjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IxLCBVU0FSVF9DUjFfT1ZFUjgpKTsKIH0KQEAgLTExOTgsNyArMTE5OCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfTEFTVENMS1BVTFNFX05PX09VVFBVVAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX0xBU1RDTEtQVUxTRV9PVVRQVVQKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRMYXN0Q2xrUHVsc2VPdXRwdXQoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldExhc3RDbGtQdWxzZU91dHB1dChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IyLCBVU0FSVF9DUjJfTEJDTCkpOwogfQpAQCAtMTIyOSw3ICsxMjI5LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9QSEFTRV8xRURHRQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX1BIQVNFXzJFREdFCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0Q2xvY2tQaGFzZShVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0Q2xvY2tQaGFzZShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IyLCBVU0FSVF9DUjJfQ1BIQSkpOwogfQpAQCAtMTI2MCw3ICsxMjYwLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9QT0xBUklUWV9MT1cKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9QT0xBUklUWV9ISUdICiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0Q2xvY2tQb2xhcml0eShVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0Q2xvY2tQb2xhcml0eShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IyLCBVU0FSVF9DUjJfQ1BPTCkpOwogfQpAQCAtMTM0MCw3ICsxMzQwLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9QUkVTQ0FMRVJfRElWMTI4CiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfUFJFU0NBTEVSX0RJVjI1NgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldFByZXNjYWxlcihVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0UHJlc2NhbGVyKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoVVNBUlR4LT5QUkVTQywgVVNBUlRfUFJFU0NfUFJFU0NBTEVSKSk7CiB9CkBAIC0xMzgwLDcgKzEzODAsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkU0NMS091dHB1dChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkU0NMS091dHB1dChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IyLCBVU0FSVF9DUjJfQ0xLRU4pID09IChVU0FSVF9DUjJfQ0xLRU4pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNDExLDcgKzE0MTEsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX1NUT1BCSVRTXzFfNQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX1NUT1BCSVRTXzIKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRTdG9wQml0c0xlbmd0aChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0U3RvcEJpdHNMZW5ndGgoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChVU0FSVHgtPkNSMiwgVVNBUlRfQ1IyX1NUT1ApKTsKIH0KQEAgLTE0NzIsNyArMTQ3Miw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfVFhSWF9TVEFOREFSRAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX1RYUlhfU1dBUFBFRAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldFRYUlhTd2FwKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRUWFJYU3dhcChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IyLCBVU0FSVF9DUjJfU1dBUCkpOwogfQpAQCAtMTQ5OSw3ICsxNDk5LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9SWFBJTl9MRVZFTF9TVEFOREFSRAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX1JYUElOX0xFVkVMX0lOVkVSVEVECiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0UlhQaW5MZXZlbChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0UlhQaW5MZXZlbChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IyLCBVU0FSVF9DUjJfUlhJTlYpKTsKIH0KQEAgLTE1MjYsNyArMTUyNiw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfVFhQSU5fTEVWRUxfU1RBTkRBUkQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9UWFBJTl9MRVZFTF9JTlZFUlRFRAogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldFRYUGluTGV2ZWwoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldFRYUGluTGV2ZWwoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChVU0FSVHgtPkNSMiwgVVNBUlRfQ1IyX1RYSU5WKSk7CiB9CkBAIC0xNTU1LDcgKzE1NTUsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX0JJTkFSWV9MT0dJQ19QT1NJVElWRQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX0JJTkFSWV9MT0dJQ19ORUdBVElWRQogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldEJpbmFyeURhdGFMb2dpYyhVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0QmluYXJ5RGF0YUxvZ2ljKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoVVNBUlR4LT5DUjIsIFVTQVJUX0NSMl9EQVRBSU5WKSk7CiB9CkBAIC0xNTg2LDcgKzE1ODYsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX0JJVE9SREVSX0xTQkZJUlNUCiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfQklUT1JERVJfTVNCRklSU1QKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRUcmFuc2ZlckJpdE9yZGVyKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRUcmFuc2ZlckJpdE9yZGVyKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoVVNBUlR4LT5DUjIsIFVTQVJUX0NSMl9NU0JGSVJTVCkpOwogfQpAQCAtMTYyNSw3ICsxNjI1LDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZEF1dG9CYXVkKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRBdXRvQmF1ZChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IyLCBVU0FSVF9DUjJfQUJSRU4pID09IChVU0FSVF9DUjJfQUJSRU4pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNjkzLDcgKzE2OTMsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkUnhUaW1lb3V0KFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRSeFRpbWVvdXQoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPkNSMiwgVVNBUlRfQ1IyX1JUT0VOKSA9PSAoVVNBUlRfQ1IyX1JUT0VOKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTczNyw3ICsxNzM3LDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgQWRkcmVzcyBvZiB0aGUgVVNBUlQgbm9kZSAoVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0wIGFuZCBNYXhfRGF0YT0yNTUpCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0Tm9kZUFkZHJlc3MoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldE5vZGVBZGRyZXNzKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoVVNBUlR4LT5DUjIsIFVTQVJUX0NSMl9BREQpID4+IFVTQVJUX0NSMl9BRERfUG9zKTsKIH0KQEAgLTE3NTAsNyArMTc1MCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfQUREUkVTU19ERVRFQ1RfNEIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VU0FSVF9BRERSRVNTX0RFVEVDVF83QgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldE5vZGVBZGRyZXNzTGVuKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXROb2RlQWRkcmVzc0xlbihjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IyLCBVU0FSVF9DUjJfQURETTcpKTsKIH0KQEAgLTE4MzksNyArMTgzOSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfSFdDT05UUk9MX0NUUwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX0hXQ09OVFJPTF9SVFNfQ1RTCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0SFdGbG93Q3RybChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0SFdGbG93Q3RybChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IzLCBVU0FSVF9DUjNfUlRTRSB8IFVTQVJUX0NSM19DVFNFKSk7CiB9CkBAIC0xODcyLDcgKzE4NzIsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkT25lQml0U2FtcChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkT25lQml0U2FtcChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IzLCBVU0FSVF9DUjNfT05FQklUKSA9PSAoVVNBUlRfQ1IzX09ORUJJVCkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE5MDUsNyArMTkwNSw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRPdmVycnVuRGV0ZWN0KFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRPdmVycnVuRGV0ZWN0KGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5DUjMsIFVTQVJUX0NSM19PVlJESVMpICE9IFVTQVJUX0NSM19PVlJESVMpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE5MzgsNyArMTkzOCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfV0FLRVVQX09OX1NUQVJUQklUCiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfV0FLRVVQX09OX1JYTkUKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRXS1VQVHlwZShVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0V0tVUFR5cGUoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChVU0FSVHgtPkNSMywgVVNBUlRfQ1IzX1dVUykpOwogfQpAQCAtMjA0OCwxMCArMjA0OCwxMCBAQAogICAqIEByZXR2YWwgQmF1ZCBSYXRlCiAgICovCiAjaWYgZGVmaW5lZChVU0FSVF9QUkVTQ19QUkVTQ0FMRVIpCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0QmF1ZFJhdGUoVVNBUlRfVHlwZURlZiAqVVNBUlR4LCB1aW50MzJfdCBQZXJpcGhDbGssIHVpbnQzMl90IFByZXNjYWxlclZhbHVlLAorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldEJhdWRSYXRlKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCwgdWludDMyX3QgUGVyaXBoQ2xrLCB1aW50MzJfdCBQcmVzY2FsZXJWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBPdmVyU2FtcGxpbmcpCiAjZWxzZQotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldEJhdWRSYXRlKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCwgdWludDMyX3QgUGVyaXBoQ2xrLCB1aW50MzJfdCBPdmVyU2FtcGxpbmcpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0QmF1ZFJhdGUoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4LCB1aW50MzJfdCBQZXJpcGhDbGssIHVpbnQzMl90IE92ZXJTYW1wbGluZykKICNlbmRpZiAvKiBVU0FSVF9QUkVTQ19QUkVTQ0FMRVIgKi8KIHsKICAgdWludDMyX3QgdXNhcnRkaXY7CkBAIC0yMTEwLDcgKzIxMTAsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4MDBGRkZGRkYKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRSeFRpbWVvdXQoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldFJ4VGltZW91dChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+UlRPUiwgVVNBUlRfUlRPUl9SVE8pKTsKIH0KQEAgLTIxMzMsNyArMjEzMyw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMCBhbmQgTWF4X0RhdGE9MHhGRgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldEJsb2NrTGVuZ3RoKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRCbG9ja0xlbmd0aChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+UlRPUiwgVVNBUlRfUlRPUl9CTEVOKSA+PiBVU0FSVF9SVE9SX0JMRU5fUG9zKTsKIH0KQEAgLTIxODAsNyArMjE4MCw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRJcmRhKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRJcmRhKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5DUjMsIFVTQVJUX0NSM19JUkVOKSA9PSAoVVNBUlRfQ1IzX0lSRU4pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0yMjExLDcgKzIyMTEsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX0lSREFfUE9XRVJfTk9STUFMCiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfUEhBU0VfMkVER0UKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRJcmRhUG93ZXJNb2RlKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRJcmRhUG93ZXJNb2RlKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoVVNBUlR4LT5DUjMsIFVTQVJUX0NSM19JUkxQKSk7CiB9CkBAIC0yMjQwLDcgKzIyNDAsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBJcmRhIHByZXNjYWxlciB2YWx1ZSAoVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGKQogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldElyZGFQcmVzY2FsZXIoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldElyZGFQcmVzY2FsZXIoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChVU0FSVHgtPkdUUFIsIFVTQVJUX0dUUFJfUFNDKSk7CiB9CkBAIC0yMjg3LDcgKzIyODcsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkU21hcnRjYXJkTkFDSyhVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkU21hcnRjYXJkTkFDSyhjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IzLCBVU0FSVF9DUjNfTkFDSykgPT0gKFVTQVJUX0NSM19OQUNLKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjMyNiw3ICsyMzI2LDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZFNtYXJ0Y2FyZChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkU21hcnRjYXJkKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5DUjMsIFVTQVJUX0NSM19TQ0VOKSA9PSAoVVNBUlRfQ1IzX1NDRU4pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0yMzU4LDcgKzIzNTgsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTbWFydGNhcmQgQXV0by1SZXRyeSBDb3VudCB2YWx1ZSAoVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0wIGFuZCBNYXhfRGF0YT03KQogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldFNtYXJ0Y2FyZEF1dG9SZXRyeUNvdW50KFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRTbWFydGNhcmRBdXRvUmV0cnlDb3VudChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IzLCBVU0FSVF9DUjNfU0NBUkNOVCkgPj4gVVNBUlRfQ1IzX1NDQVJDTlRfUG9zKTsKIH0KQEAgLTIzODcsNyArMjM4Nyw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFNtYXJ0Y2FyZCBwcmVzY2FsZXIgdmFsdWUgKFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9MzEpCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0U21hcnRjYXJkUHJlc2NhbGVyKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRTbWFydGNhcmRQcmVzY2FsZXIoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChVU0FSVHgtPkdUUFIsIFVTQVJUX0dUUFJfUFNDKSk7CiB9CkBAIC0yNDE2LDcgKzI0MTYsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTbWFydGNhcmQgR3VhcmQgdGltZSB2YWx1ZSAoVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwIGFuZCBNYXhfRGF0YT0weEZGKQogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldFNtYXJ0Y2FyZEd1YXJkVGltZShVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0U21hcnRjYXJkR3VhcmRUaW1lKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoVVNBUlR4LT5HVFBSLCBVU0FSVF9HVFBSX0dUKSA+PiBVU0FSVF9HVFBSX0dUX1Bvcyk7CiB9CkBAIC0yNDYzLDcgKzI0NjMsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSGFsZkR1cGxleChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSGFsZkR1cGxleChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IzLCBVU0FSVF9DUjNfSERTRUwpID09IChVU0FSVF9DUjNfSERTRUwpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0yNTEwLDcgKzI1MTAsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkU1BJU2xhdmUoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZFNQSVNsYXZlKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5DUjIsIFVTQVJUX0NSMl9TTFZFTikgPT0gKFVTQVJUX0NSMl9TTFZFTikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTI1NTIsNyArMjU1Miw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRTUElTbGF2ZVNlbGVjdChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkU1BJU2xhdmVTZWxlY3QoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPkNSMiwgVVNBUlRfQ1IyX0RJU19OU1MpICE9IChVU0FSVF9DUjJfRElTX05TUykpID8gMVVMIDogMFVMKTsKIH0KQEAgLTI1OTIsNyArMjU5Miw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfTElOQlJFQUtfREVURUNUXzEwQgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX0xJTkJSRUFLX0RFVEVDVF8xMUIKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRMSU5CcmtEZXRlY3Rpb25MZW4oVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldExJTkJya0RldGVjdGlvbkxlbihjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IyLCBVU0FSVF9DUjJfTEJETCkpOwogfQpAQCAtMjYzMSw3ICsyNjMxLDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZExJTihVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkTElOKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5DUjIsIFVTQVJUX0NSMl9MSU5FTikgPT0gKFVTQVJUX0NSMl9MSU5FTikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTI2NjYsNyArMjY2Niw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFRpbWUgdmFsdWUgZXhwcmVzc2VkIG9uIDUgYml0cyAoWzQ6MF0gYml0cykgOiBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTAgYW5kIE1heF9EYXRhPTMxCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0REVEZWFzc2VydGlvblRpbWUoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldERFRGVhc3NlcnRpb25UaW1lKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoVVNBUlR4LT5DUjEsIFVTQVJUX0NSMV9ERURUKSA+PiBVU0FSVF9DUjFfREVEVF9Qb3MpOwogfQpAQCAtMjY5Myw3ICsyNjkzLDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgVGltZSB2YWx1ZSBleHByZXNzZWQgb24gNSBiaXRzIChbNDowXSBiaXRzKSA6IFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MCBhbmQgTWF4X0RhdGE9MzEKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9HZXRERUFzc2VydGlvblRpbWUoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldERFQXNzZXJ0aW9uVGltZShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFVTQVJUeC0+Q1IxLCBVU0FSVF9DUjFfREVBVCkgPj4gVVNBUlRfQ1IxX0RFQVRfUG9zKTsKIH0KQEAgLTI3MzIsNyArMjczMiw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRERU1vZGUoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZERFTW9kZShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IzLCBVU0FSVF9DUjNfREVNKSA9PSAoVVNBUlRfQ1IzX0RFTSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTI3NjMsNyArMjc2Myw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfREVfUE9MQVJJVFlfSElHSAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VTQVJUX0RFX1BPTEFSSVRZX0xPVwogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldERFU2lnbmFsUG9sYXJpdHkoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0dldERFU2lnbmFsUG9sYXJpdHkoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChVU0FSVHgtPkNSMywgVVNBUlRfQ1IzX0RFUCkpOwogfQpAQCAtMzA2Niw3ICszMDY2LDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19QRShVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1BFKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9QRSkgPT0gKFVTQVJUX0lTUl9QRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTMwNzcsNyArMzA3Nyw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfRkUoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19GRShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+SVNSLCBVU0FSVF9JU1JfRkUpID09IChVU0FSVF9JU1JfRkUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMDg4LDcgKzMwODgsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX05FKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfTkUoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPklTUiwgVVNBUlRfSVNSX05FKSA9PSAoVVNBUlRfSVNSX05FKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzA5OSw3ICszMDk5LDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19PUkUoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19PUkUoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPklTUiwgVVNBUlRfSVNSX09SRSkgPT0gKFVTQVJUX0lTUl9PUkUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMTEwLDcgKzMxMTAsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX0lETEUoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19JRExFKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9JRExFKSA9PSAoVVNBUlRfSVNSX0lETEUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMTI3LDcgKzMxMjcsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1JYTkVfUlhGTkUoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19SWE5FX1JYRk5FKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9SWE5FX1JYRk5FKSA9PSAoVVNBUlRfSVNSX1JYTkVfUlhGTkUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMTM5LDcgKzMxMzksNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1JYTkUoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19SWE5FKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9SWE5FKSA9PSAoVVNBUlRfSVNSX1JYTkUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMTUxLDcgKzMxNTEsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1RDKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfVEMoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPklTUiwgVVNBUlRfSVNSX1RDKSA9PSAoVVNBUlRfSVNSX1RDKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzE2OCw3ICszMTY4LDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19UWEVfVFhGTkYoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19UWEVfVFhGTkYoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPklTUiwgVVNBUlRfSVNSX1RYRV9UWEZORikgPT0gKFVTQVJUX0lTUl9UWEVfVFhGTkYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMTgwLDcgKzMxODAsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1RYRShVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1RYRShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+SVNSLCBVU0FSVF9JU1JfVFhFKSA9PSAoVVNBUlRfSVNSX1RYRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTMxOTQsNyArMzE5NCw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfTEJEKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfTEJEKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9MQkRGKSA9PSAoVVNBUlRfSVNSX0xCREYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMjA3LDcgKzMyMDcsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX25DVFMoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19uQ1RTKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9DVFNJRikgPT0gKFVTQVJUX0lTUl9DVFNJRikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTMyMjAsNyArMzIyMCw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfQ1RTKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfQ1RTKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9DVFMpID09IChVU0FSVF9JU1JfQ1RTKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzIzMSw3ICszMjMxLDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19SVE8oVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19SVE8oY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPklTUiwgVVNBUlRfSVNSX1JUT0YpID09IChVU0FSVF9JU1JfUlRPRikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTMyNDQsNyArMzI0NCw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfRU9CKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfRU9CKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9FT0JGKSA9PSAoVVNBUlRfSVNSX0VPQkYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMjU4LDcgKzMyNTgsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1VEUihVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1VEUihjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+SVNSLCBVU0FSVF9JU1JfVURSKSA9PSAoVVNBUlRfSVNSX1VEUikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTMyNzIsNyArMzI3Miw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfQUJSRShVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX0FCUkUoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPklTUiwgVVNBUlRfSVNSX0FCUkUpID09IChVU0FSVF9JU1JfQUJSRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTMyODUsNyArMzI4NSw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfQUJSKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfQUJSKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9BQlJGKSA9PSAoVVNBUlRfSVNSX0FCUkYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMjk2LDcgKzMyOTYsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX0JVU1koVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19CVVNZKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9CVVNZKSA9PSAoVVNBUlRfSVNSX0JVU1kpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMzA3LDcgKzMzMDcsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX0NNKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfQ00oY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPklTUiwgVVNBUlRfSVNSX0NNRikgPT0gKFVTQVJUX0lTUl9DTUYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMzE4LDcgKzMzMTgsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1NCSyhVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1NCSyhjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+SVNSLCBVU0FSVF9JU1JfU0JLRikgPT0gKFVTQVJUX0lTUl9TQktGKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzMyOSw3ICszMzI5LDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19SV1UoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19SV1UoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPklTUiwgVVNBUlRfSVNSX1JXVSkgPT0gKFVTQVJUX0lTUl9SV1UpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMzQyLDcgKzMzNDIsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1dLVVAoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19XS1VQKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9XVUYpID09IChVU0FSVF9JU1JfV1VGKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzM1Myw3ICszMzUzLDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19URUFDSyhVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1RFQUNLKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9URUFDSykgPT0gKFVTQVJUX0lTUl9URUFDSykpID8gMVVMIDogMFVMKTsKIH0KQEAgLTMzNjQsNyArMzM2NCw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfUkVBQ0soVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19SRUFDSyhjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+SVNSLCBVU0FSVF9JU1JfUkVBQ0spID09IChVU0FSVF9JU1JfUkVBQ0spKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMzc4LDcgKzMzNzgsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1RYRkUoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19UWEZFKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9UWEZFKSA9PSAoVVNBUlRfSVNSX1RYRkUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMzkxLDcgKzMzOTEsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1JYRkYoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19SWEZGKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5JU1IsIFVTQVJUX0lTUl9SWEZGKSA9PSAoVVNBUlRfSVNSX1JYRkYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zNDA1LDcgKzM0MDUsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1RDQkdUKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfVENCR1QoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPklTUiwgVVNBUlRfSVNSX1RDQkdUKSA9PSAoVVNBUlRfSVNSX1RDQkdUKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzQyMCw3ICszNDIwLDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19UWEZUKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfVFhGVChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+SVNSLCBVU0FSVF9JU1JfVFhGVCkgPT0gKFVTQVJUX0lTUl9UWEZUKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzQzMyw3ICszNDMzLDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzQWN0aXZlRmxhZ19SWEZUKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfUlhGVChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+SVNSLCBVU0FSVF9JU1JfUlhGVCkgPT0gKFVTQVJUX0lTUl9SWEZUKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDE0Nyw3ICs0MTQ3LDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX0lETEUoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX0lETEUoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPkNSMSwgVVNBUlRfQ1IxX0lETEVJRSkgPT0gKFVTQVJUX0NSMV9JRExFSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00MTY0LDcgKzQxNjQsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfUlhORV9SWEZORShVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfUlhORV9SWEZORShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IxLCBVU0FSVF9DUjFfUlhORUlFX1JYRk5FSUUpID09IChVU0FSVF9DUjFfUlhORUlFX1JYRk5FSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00MTc2LDcgKzQxNzYsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfUlhORShVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfUlhORShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IxLCBVU0FSVF9DUjFfUlhORUlFKSA9PSAoVVNBUlRfQ1IxX1JYTkVJRSkpID8gMVUgOiAwVSk7CiB9CkBAIC00MTg4LDcgKzQxODgsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfVEMoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX1RDKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5DUjEsIFVTQVJUX0NSMV9UQ0lFKSA9PSAoVVNBUlRfQ1IxX1RDSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00MjA1LDcgKzQyMDUsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfVFhFX1RYRk5GKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRJVF9UWEVfVFhGTkYoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPkNSMSwgVVNBUlRfQ1IxX1RYRUlFX1RYRk5GSUUpID09IChVU0FSVF9DUjFfVFhFSUVfVFhGTkZJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQyMTcsNyArNDIxNyw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRJVF9UWEUoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX1RYRShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IxLCBVU0FSVF9DUjFfVFhFSUUpID09IChVU0FSVF9DUjFfVFhFSUUpKSA/IDFVIDogMFUpOwogfQpAQCAtNDIyOSw3ICs0MjI5LDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX1BFKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRJVF9QRShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IxLCBVU0FSVF9DUjFfUEVJRSkgPT0gKFVTQVJUX0NSMV9QRUlFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDI0MCw3ICs0MjQwLDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX0NNKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRJVF9DTShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IxLCBVU0FSVF9DUjFfQ01JRSkgPT0gKFVTQVJUX0NSMV9DTUlFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDI1MSw3ICs0MjUxLDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX1JUTyhVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfUlRPKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5DUjEsIFVTQVJUX0NSMV9SVE9JRSkgPT0gKFVTQVJUX0NSMV9SVE9JRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQyNjQsNyArNDI2NCw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRJVF9FT0IoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX0VPQihjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IxLCBVU0FSVF9DUjFfRU9CSUUpID09IChVU0FSVF9DUjFfRU9CSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00Mjc4LDcgKzQyNzgsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfVFhGRShVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfVFhGRShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IxLCBVU0FSVF9DUjFfVFhGRUlFKSA9PSAoVVNBUlRfQ1IxX1RYRkVJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQyOTEsNyArNDI5MSw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRJVF9SWEZGKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRJVF9SWEZGKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5DUjEsIFVTQVJUX0NSMV9SWEZGSUUpID09IChVU0FSVF9DUjFfUlhGRklFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDMwNSw3ICs0MzA1LDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX0xCRChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfTEJEKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5DUjIsIFVTQVJUX0NSMl9MQkRJRSkgPT0gKFVTQVJUX0NSMl9MQkRJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQzMTYsNyArNDMxNiw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRJVF9FUlJPUihVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfRVJST1IoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPkNSMywgVVNBUlRfQ1IzX0VJRSkgPT0gKFVTQVJUX0NSM19FSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00MzI5LDcgKzQzMjksNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfQ1RTKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRJVF9DVFMoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPkNSMywgVVNBUlRfQ1IzX0NUU0lFKSA9PSAoVVNBUlRfQ1IzX0NUU0lFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDM0Miw3ICs0MzQyLDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX1dLVVAoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX1dLVVAoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPkNSMywgVVNBUlRfQ1IzX1dVRklFKSA9PSAoVVNBUlRfQ1IzX1dVRklFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDM1Niw3ICs0MzU2LDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX1RYRlQoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX1RYRlQoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPkNSMywgVVNBUlRfQ1IzX1RYRlRJRSkgPT0gKFVTQVJUX0NSM19UWEZUSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00MzcyLDcgKzQzNzIsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfVENCR1QoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZElUX1RDQkdUKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5DUjMsIFVTQVJUX0NSM19UQ0JHVElFKSA9PSAoVVNBUlRfQ1IzX1RDQkdUSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00Mzg3LDcgKzQzODcsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfUlhGVChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkSVRfUlhGVChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IzLCBVU0FSVF9DUjNfUlhGVElFKSA9PSAoVVNBUlRfQ1IzX1JYRlRJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQ0MjksNyArNDQyOSw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRETUFSZXFfUlgoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZERNQVJlcV9SWChjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAoKFJFQURfQklUKFVTQVJUeC0+Q1IzLCBVU0FSVF9DUjNfRE1BUikgPT0gKFVTQVJUX0NSM19ETUFSKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDQ2Miw3ICs0NDYyLDcgQEAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0lzRW5hYmxlZERNQVJlcV9UWChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkRE1BUmVxX1RYKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoVVNBUlR4LT5DUjMsIFVTQVJUX0NSM19ETUFUKSA9PSAoVVNBUlRfQ1IzX0RNQVQpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00NDk1LDcgKzQ0OTUsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfSXNFbmFibGVkRE1BRGVhY3RPblJ4RXJyKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCkKK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9VU0FSVF9Jc0VuYWJsZWRETUFEZWFjdE9uUnhFcnIoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKChSRUFEX0JJVChVU0FSVHgtPkNSMywgVVNBUlRfQ1IzX0REUkUpID09IChVU0FSVF9DUjNfRERSRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQ1MTAsNyArNDUxMCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVNBUlRfRE1BX1JFR19EQVRBX1JFQ0VJVkUKICAgKiBAcmV0dmFsIEFkZHJlc3Mgb2YgZGF0YSByZWdpc3RlcgogICAqLwotX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0RNQV9HZXRSZWdBZGRyKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCwgdWludDMyX3QgRGlyZWN0aW9uKQorX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0RNQV9HZXRSZWdBZGRyKGNvbnN0IFVTQVJUX1R5cGVEZWYgKlVTQVJUeCwgdWludDMyX3QgRGlyZWN0aW9uKQogewogICB1aW50MzJfdCBkYXRhX3JlZ19hZGRyOwogCkBAIC00NTQyLDcgKzQ1NDIsNyBAQAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAgYW5kIE1heF9EYXRhPTB4RkYKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50OF90IExMX1VTQVJUX1JlY2VpdmVEYXRhOChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBMTF9VU0FSVF9SZWNlaXZlRGF0YTgoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICByZXR1cm4gKHVpbnQ4X3QpKFJFQURfQklUKFVTQVJUeC0+UkRSLCBVU0FSVF9SRFJfUkRSKSAmIDB4RkZVKTsKIH0KQEAgLTQ1NTMsNyArNDU1Myw3IEBACiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKICAgKiBAcmV0dmFsIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMCBhbmQgTWF4X0RhdGE9MHgxRkYKICAgKi8KLV9fU1RBVElDX0lOTElORSB1aW50MTZfdCBMTF9VU0FSVF9SZWNlaXZlRGF0YTkoVVNBUlRfVHlwZURlZiAqVVNBUlR4KQorX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IExMX1VTQVJUX1JlY2VpdmVEYXRhOShjb25zdCBVU0FSVF9UeXBlRGVmICpVU0FSVHgpCiB7CiAgIHJldHVybiAodWludDE2X3QpKFJFQURfQklUKFVTQVJUeC0+UkRSLCBVU0FSVF9SRFJfUkRSKSk7CiB9CkBAIC00NjY5LDEwICs0NjY5LDEwIEBACiAvKiogQGRlZmdyb3VwIFVTQVJUX0xMX0VGX0luaXQgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwogICAqIEB7CiAgICovCi1FcnJvclN0YXR1cyBMTF9VU0FSVF9EZUluaXQoVVNBUlRfVHlwZURlZiAqVVNBUlR4KTsKLUVycm9yU3RhdHVzIExMX1VTQVJUX0luaXQoVVNBUlRfVHlwZURlZiAqVVNBUlR4LCBMTF9VU0FSVF9Jbml0VHlwZURlZiAqVVNBUlRfSW5pdFN0cnVjdCk7CitFcnJvclN0YXR1cyBMTF9VU0FSVF9EZUluaXQoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KTsKK0Vycm9yU3RhdHVzIExMX1VTQVJUX0luaXQoVVNBUlRfVHlwZURlZiAqVVNBUlR4LCBjb25zdCBMTF9VU0FSVF9Jbml0VHlwZURlZiAqVVNBUlRfSW5pdFN0cnVjdCk7CiB2b2lkICAgICAgICBMTF9VU0FSVF9TdHJ1Y3RJbml0KExMX1VTQVJUX0luaXRUeXBlRGVmICpVU0FSVF9Jbml0U3RydWN0KTsKLUVycm9yU3RhdHVzIExMX1VTQVJUX0Nsb2NrSW5pdChVU0FSVF9UeXBlRGVmICpVU0FSVHgsIExMX1VTQVJUX0Nsb2NrSW5pdFR5cGVEZWYgKlVTQVJUX0Nsb2NrSW5pdFN0cnVjdCk7CitFcnJvclN0YXR1cyBMTF9VU0FSVF9DbG9ja0luaXQoVVNBUlRfVHlwZURlZiAqVVNBUlR4LCBjb25zdCBMTF9VU0FSVF9DbG9ja0luaXRUeXBlRGVmICpVU0FSVF9DbG9ja0luaXRTdHJ1Y3QpOwogdm9pZCAgICAgICAgTExfVVNBUlRfQ2xvY2tTdHJ1Y3RJbml0KExMX1VTQVJUX0Nsb2NrSW5pdFR5cGVEZWYgKlVTQVJUX0Nsb2NrSW5pdFN0cnVjdCk7CiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMybDR4eF9sbF91c2IuaCBiL0luYy9zdG0zMmw0eHhfbGxfdXNiLmgKaW5kZXggOWQ3MWVkNS4uNTZlMzI3ZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMybDR4eF9sbF91c2IuaAorKysgYi9JbmMvc3RtMzJsNHh4X2xsX3VzYi5oCkBAIC0xMzEsNiArMTMxLDkgQEAKICAgdWludDhfdCAgIGlzX3N0YWxsOyAgICAgICAgICAgICAvKiE8IEVuZHBvaW50IHN0YWxsIGNvbmRpdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMCBhbmQgTWF4X0RhdGEgPSAxICAgICovCiAKKyAgdWludDhfdCAgIGlzX2lzb19pbmNvbXBsZXRlOyAgICAvKiE8IEVuZHBvaW50IGlzb2MgY29uZGl0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDEgICAgKi8KKwogICB1aW50OF90ICAgdHlwZTsgICAgICAgICAgICAgICAgIC8qITwgRW5kcG9pbnQgdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAcmVmIFVTQl9MTF9FUF9UeXBlICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTUzMiw2ICs1MzUsMTAgQEAKICNkZWZpbmUgRVBfQUREUl9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3VQogI2VuZGlmIC8qIGRlZmluZWQgKFVTQikgKi8KIAorI2lmbmRlZiBVU0JfRVBfUlhfU1RSWAorI2RlZmluZSBVU0JfRVBfUlhfU1RSWCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgzVSA8PCAxMikKKyNlbmRpZiAvKiBVU0JfRVBfUlhfU1RSWCAqLworCiAjaWZuZGVmIFVTRV9VU0JfRE9VQkxFX0JVRkZFUgogI2RlZmluZSBVU0VfVVNCX0RPVUJMRV9CVUZGRVIgICAgICAgICAgICAgICAgICAxVQogI2VuZGlmIC8qIFVTRV9VU0JfRE9VQkxFX0JVRkZFUiAqLwpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCmluZGV4IDdlZDA2NjguLmU5ZGM0MjYgMTAwNjQ0Ci0tLSBhL1JFQURNRS5tZAorKysgYi9SRUFETUUubWQKQEAgLTM4LDcgKzM4LDggQEAKIFRhZyB2MS4xMS4xIHwgVGFnIHYxLjYuMSB8IFRhZyB2NS40LjBfY200IHwgVGFnIHYxLjE1LjEgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IEhBTCB0YWcpCiBUYWcgdjEuMTIuMCB8IFRhZyB2MS43LjAgfCBUYWcgdjUuNi4wX2NtNCB8IFRhZyB2MS4xNi4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCBIQUwgdGFnKQogVGFnIHYxLjEzLjAgfCBUYWcgdjEuNy4xIHwgVGFnIHY1LjYuMF9jbTQgfCBUYWcgdjEuMTcuMCAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgSEFMIHRhZykKLVRhZyB2MS4xMy4xIHwgVGFnIHYxLjcuMiB8IFRhZyB2NS42LjBfY200IHwgVGFnIHYxLjE3LjEgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IEhBTCB0YWcpCitUYWcgdjEuMTMuMiB8IFRhZyB2MS43LjIgfCBUYWcgdjUuNi4wX2NtNCB8IFRhZyB2MS4xNy4xIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCBIQUwgdGFnKQorVGFnIHYxLjEzLjMgfCBUYWcgdjEuNy4yIHwgVGFnIHY1LjYuMF9jbTQgfCBUYWcgdjEuMTcuMiAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgSEFMIHRhZykKIAogRGV0YWlscyBhYm91dCB0aGUgY29udGVudCBvZiB0aGlzIHJlbGVhc2UgYXJlIGF2YWlsYWJsZSBpbiB0aGUgcmVsZWFzZSBub3RlIFtoZXJlXShodHRwczovL2h0bWxwcmV2aWV3LmdpdGh1Yi5pby8/aHR0cHM6Ly9naXRodWIuY29tL1NUTWljcm9lbGVjdHJvbmljcy9zdG0zMmw0eHhfaGFsX2RyaXZlci9ibG9iL21hc3Rlci9SZWxlYXNlX05vdGVzLmh0bWwpLiAKIApkaWZmIC0tZ2l0IGEvUmVsZWFzZV9Ob3Rlcy5odG1sIGIvUmVsZWFzZV9Ob3Rlcy5odG1sCmluZGV4IDVkMTJmYzAuLmZlMDM3ZWYgMTAwNjQ0Ci0tLSBhL1JlbGVhc2VfTm90ZXMuaHRtbAorKysgYi9SZWxlYXNlX05vdGVzLmh0bWwKQEAgLTUsMTEgKzUsMTQgQEAKICAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJwYW5kb2MiIC8+CiAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCB1c2VyLXNjYWxhYmxlPXllcyIgLz4KICAgPHRpdGxlPlJlbGVhc2UgTm90ZXMgZm9yIFNUTTMyTDR4eCBIQUwgRHJpdmVyczwvdGl0bGU+Ci0gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci0gICAgICBjb2Rle3doaXRlLXNwYWNlOiBwcmUtd3JhcDt9Ci0gICAgICBzcGFuLnNtYWxsY2Fwc3tmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHM7fQotICAgICAgc3Bhbi51bmRlcmxpbmV7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fQotICAgICAgZGl2LmNvbHVtbntkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHdpZHRoOiA1MCU7fQorICA8c3R5bGU+CisgICAgY29kZXt3aGl0ZS1zcGFjZTogcHJlLXdyYXA7fQorICAgIHNwYW4uc21hbGxjYXBze2ZvbnQtdmFyaWFudDogc21hbGwtY2Fwczt9CisgICAgc3Bhbi51bmRlcmxpbmV7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fQorICAgIGRpdi5jb2x1bW57ZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aWR0aDogNTAlO30KKyAgICBkaXYuaGFuZ2luZy1pbmRlbnR7bWFyZ2luLWxlZnQ6IDEuNWVtOyB0ZXh0LWluZGVudDogLTEuNWVtO30KKyAgICB1bC50YXNrLWxpc3R7bGlzdC1zdHlsZTogbm9uZTt9CisgICAgLmRpc3BsYXkubWF0aHtkaXNwbGF5OiBibG9jazsgdGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW46IDAuNXJlbSBhdXRvO30KICAgPC9zdHlsZT4KICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJfaHRtcmVzYy9taW5pLXN0XzIwMjAuY3NzIiAvPgogICA8IS0tW2lmIGx0IElFIDldPgpAQCAtMzgsMzggKzQxLDkzIEBACiA8bGk+RnVsbCBmZWF0dXJlcyBjb3ZlcmFnZSBvZiBhbGwgdGhlIHN1cHBvcnRlZCBwZXJpcGhlcmFsczwvbGk+CiA8L3VsPgogPC9kaXY+Ci08ZGl2IGNsYXNzPSJjb2wtc20tMTIgY29sLWxnLTgiPgotPGgxIGlkPSJ1cGRhdGUtaGlzdG9yeSI+VXBkYXRlIEhpc3Rvcnk8L2gxPgorPHNlY3Rpb24gaWQ9InVwZGF0ZS1oaXN0b3J5IiBjbGFzcz0iY29sLXNtLTEyIGNvbC1sZy04Ij4KKzxoMT5VcGRhdGUgSGlzdG9yeTwvaDE+CiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+Ci08aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMzEiIGNoZWNrZWQgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMzIiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xMy4yIC8gMjYtTm92ZW1iZXItMjAyMTwvbGFiZWw+Cis8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMzIiIGNoZWNrZWQgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMzIiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xMy4zIC8gMTUtQXByaWwtMjAyMjwvbGFiZWw+CiA8ZGl2PgogPGgyIGlkPSJtYWluLWNoYW5nZXMiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+Ci08bGk+TWFpbnRlbmFuY2UgcmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyPC9zdHJvbmc+IGRyaXZlcnMgdG8gaW5jbHVkZSBsYXRlc3QgY29ycmVjdGlvbnM8L2xpPgorPGxpPk1haW50ZW5hbmNlIHJlbGVhc2Ugb2YgPHN0cm9uZz5IQUwgYW5kIExvdyBMYXllcjwvc3Ryb25nPiBkcml2ZXJzIHRvIGZpeCBtYWlubHkgSEFMIE9TUEkgZHJpdmVyIGlzc3VlPC9saT4KKzxsaT5IQUwgY29kZSBxdWFsaXR5IGVuaGFuY2VtZW50IGZvciBNSVNSQS1DIFJ1bGUtOC4xMyBieSBhZGRpbmcgY29uc3QgcXVhbGlmaWVyczwvbGk+CiA8L3VsPgogPGgyIGlkPSJjb250ZW50cyI+Q29udGVudHM8L2gyPgogPHVsPgorPGxpPjxzdHJvbmc+SEFMIFJDQzwvc3Ryb25nPgorPHVsPgorPGxpPkZpeCBIQ0xLIHByZXNjYWxlciB1cGRhdGUgaW4gSEFMX1JDQ19DbG9ja0NvbmZpZygpIHRvIGF2b2lkIGlzc3VlIHdpdGggQ1BVIGNsb2NrIGJlaW5nIG91dCBvZiByYW5nZSB2ZXJzdXMgdGhlIEZsYXNoIGxhdGVuY3kuPC9saT4KKzxsaT5XYWl0IFBMTDFSRFkgdG8gYmUgb2ZmIGJlZm9yZSBjbGVhcmluZyBQTEwxIHNvdXJjZTwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgRkxBU0g8L3N0cm9uZz4KKzx1bD4KKzxsaT5Db21wbGV0ZSBkZXNjcmlwdGlvbiBvZiBVU0VSQ29uZmlnLCBtZW1iZXIgb2Ygc3RydWN0dXJlIEZMQVNIX09CUHJvZ3JhbUluaXRUeXBlRGVmLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgRVhUSTwvc3Ryb25nPgorPHVsPgorPGxpPkZpeCBFWFRJX0dQSU9HIGRlZmluZWQgdmFsdWUgaXNzdWUuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBEU0k8L3N0cm9uZz4KKzx1bD4KKzxsaT5VcGRhdGUgdG8gYWxpZ24gRFNJIFVMUFMgZW50cnkgYW5kIGV4aXQgc2VxdWVuY2VzIHdpdGggcmVmZXJlbmNlIG1hbnVhbC48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFML0xMIFRJTTwvc3Ryb25nPgorPHVsPgorPGxpPk1hbmFnZSBjb25maWd1cmF0aW9uIG9mIHRoZSBDYXB0dXJlL2NvbXBhcmUgRE1BIHJlcXVlc3Qgc291cmNlPC9saT4KKzxsaT5BZGQgcmVsYXRlZCBuZXcgZXhwb3J0ZWQgY29uc3RhbnRzIChUSU1fQ0NETUFSRVFVRVNUX0NDLCBUSU1fQ0NETUFSRVFVRVNUX1VQREFURSkuPC9saT4KKzxsaT5DcmVhdGUgYSBuZXcgbWFjcm8gX19IQUxfVElNX1NFTEVDVF9DQ0RNQVJFUVVFU1QoKSBhbGxvd2luZyB0byBwcm9ncmFtIHRoZSBUSU14X0NSMi5DQ0RTIGJpdGZpZWxkLjwvbGk+Cis8bGk+VXBkYXRlIF9fTExfVElNX0NBTENfUFNDKCkgbWFjcm8gdG8gcm91bmQgdXAgdGhlIGV2YWx1YXRlZCB2YWx1ZSB3aGVuIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIGRpdmlzaW9uIGlzIGdyZWF0ZXIgdGhhbiAwLjUuPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBMVERDPC9zdHJvbmc+Cis8dWw+Cis8bGk+VXBkYXRlIEhBTF9MVERDX0RlSW5pdCgpIHRvIGZpeCBNQ1UgSGFuZyB1cCBkdXJpbmcgTENEIHR1cm4gT0ZGLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgUVNQSTwvc3Ryb25nPgorPHVsPgorPGxpPlVwZGF0ZSBIQUxfUVNQSV9BYm9ydCgpIGFuZCBIQUxfUVNQSV9BYm9ydF9JVCgpIEFQSXMgdG8gY2hlY2sgb24gUVNQSSBCVVNZIGZsYWcgc3RhdHVzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFib3J0IHByb2NlZHVyZS48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIE9TUEk8L3N0cm9uZz4KKzx1bD4KKzxsaT5VcGRhdGUgSEFMX09TUElfSW5pdCgpIHRvIGZpeCBEZWxheUJsb2NrQnlwYXNzIHBhcmFtZXRlciBjb25maWd1cmF0aW9uIGlzc3VlLjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgSTJDPC9zdHJvbmc+Cis8dWw+Cis8bGk+VGltZW91dCBpc3N1ZSB1c2luZyBIQUwgTUVNIGludGVyZmFjZSB0aHJvdWdoIEZyZWVSVE9TPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBDQU48L3N0cm9uZz4KKzx1bD4KKzxsaT5SZW1vdmFsIG9mIG5ldmVyIHJlYWNoZWQgY29kZTwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgVVNCIE9URzwvc3Ryb25nPgorPHVsPgorPGxpPlBDRDogYWRkIGhhbmRsaW5nIG9mIFVTQiBPVVQgRW5kcG9pbnQgZGlzYWJsZSBpbnRlcnJ1cHQ8L2xpPgorPGxpPlBDRDogZml4IGRldmljZSBJTiBlbmRwb2ludCBpc29jIGluY29tcGxldGUgdHJhbnNmZXIgaW50ZXJydXB0IGhhbmRsaW5nPC9saT4KKzxsaT5QQ0Q6IGZpeCBVU0IgZGV2aWNlIElzb2MgT1VUIEVuZHBvaW50IGluY29tcGxldGUgdHJhbnNmZXIgaW50ZXJydXB0IGhhbmRsaW5nPC9saT4KKzxsaT5IQUw6IEhDRDogZml4IGhhbmRsaW5nIG9mIE9EREZSTSBiaXQgaW4gT1RHX0hDQ0hBUnggZm9yIElzb2Nocm9ub3VzIElOIHRyYW5zYWN0aW9uczwvbGk+Cis8bGk+SEFMOiBQQ0Q6IGFkZGVkIGZpeCB0byBjb3JyZWN0IHJlY2VpdmVkIHRyYW5zZmVyIGxlbmd0aCB3aXRoIFVTQiBETUEgYWN0aXZhdGVkPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBVU0IgRlM8L3N0cm9uZz4KKzx1bD4KKzxsaT5QQ0Q6IGFkZCBzdXBwb3J0aW5nIG11bHRpIHBhY2tldHMgdHJhbnNmZXIgb24gSW50ZXJydXB0IGVuZHBvaW50PC9saT4KKzxsaT5TZXQgRENEIHRpbWVvdXQgdG8gbWluaW11bSBvZiAzMDBtcyBiZWZvcmUgc3RhcnRpbmcgQkNEIHByaW1hcnkgZGV0ZWN0aW9uIHByb2Nlc3MuPC9saT4KKzxsaT5IQUw6IFBDRDogc29mdHdhcmUgY29ycmVjdGlvbiBhZGRlZCB0byBhdm9pZCB1bmV4cGVjdGVkIFNUQUxMIGNvbmRpdGlvbiBkdXJpbmcgRVAwIG11bHRpIHBhY2tldCBPVVQgdHJhbnNmZXIuPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29sbGFwc2UiPgorPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjMxIiAgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMzEiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xMy4yIC8gMjYtTm92ZW1iZXItMjAyMTwvbGFiZWw+Cis8ZGl2PgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzx1bD4KKzxsaT5NYWludGVuYW5jZSByZWxlYXNlIG9mIDxzdHJvbmc+SEFMIGFuZCBMb3cgTGF5ZXI8L3N0cm9uZz4gZHJpdmVycyB0byBpbmNsdWRlIGxhdGVzdCBjb3JyZWN0aW9uczwvbGk+Cis8L3VsPgorPGgyIGlkPSJjb250ZW50cy0xIj5Db250ZW50czwvaDI+Cis8dWw+CiA8bGk+PHN0cm9uZz5SQ0NfSEFMPC9zdHJvbmc+CiA8dWw+CiA8bGk+VXBkYXRlIElTX1JDQ19QRVJJUEhDTE9DSygpIG1hY3JvIGRlZmluaXRpb24gZGVwZW5kaW5nIG9uIHRhcmdldGVkIGRlcml2YXRpdmUuPC9saT4KIDxsaT5BZGQgbmV3IEhBTF9SQ0NfR2V0UmVzZXRTb3VyY2UoKSBBUEkgdG8gZ2V0IGFsbCByZXNldCBzb3VyY2VzIGFuZCBjbGVhciBmbGFncy48L2xpPgotPGxpPlVwZGF0ZSBQTEwgY2xvY2sgc291cmNlIGNvbmZpZ3VyYXRpb24gdG8gZml4IHdhcm5pbmdzIHdpdGggdGhlIEdDQyBjb21waWxlci48L2xpPgotPGxpPkFkZCBjaGVjayBvZiBQTEwgZW5hYmxlIGJpdCB3aGVuIGEgcGVyaXBoZXJhbCB1c2luZyBQUEwgUCBvciBQTEwgUS48L2xpPgotPGxpPkFkZCBuZXcgTEwgaW5saW5lIEFQSXMgdG8gY2hlY2sgc3BlY2lmaWMgUExMLCBQTExTQUkxIGFuZCBQTExTQUkyIGRvbWFpbnMgb3V0cHV0OgotPHVsPgotPGxpPkxMX1JDQ19QTExfSXNFbmFibGVkRG9tYWluX1NBSSgpPC9saT4KLTxsaT5MTF9SQ0NfUExMX0lzRW5hYmxlZERvbWFpbl80OE0oKTwvbGk+Ci08bGk+TExfUkNDX1BMTF9Jc0VuYWJsZWREb21haW5fU1lTKCk8L2xpPgotPGxpPkxMX1JDQ19QTExTQUkxX0lzRW5hYmxlZERvbWFpbl9TQUkoKTwvbGk+Ci08bGk+TExfUkNDX1BMTFNBSTFfSXNFbmFibGVkRG9tYWluXzQ4TSgpPC9saT4KLTxsaT5MTF9SQ0NfUExMU0FJMV9Jc0VuYWJsZWREb21haW5fQURDKCk8L2xpPgotPGxpPkxMX1JDQ19QTExTQUkyX0lzRW5hYmxlZERvbWFpbl9TQUkoKTwvbGk+Ci08bGk+TExfUkNDX1BMTFNBSTJfSXNFbmFibGVkRG9tYWluX0RTSSgpPC9saT4KLTxsaT5MTF9SQ0NfUExMU0FJMl9Jc0VuYWJsZWREb21haW5fTFREQygpPC9saT4KLTxsaT5MTF9SQ0NfUExMU0FJMl9Jc0VuYWJsZWREb21haW5fQURDKCk8L2xpPgotPC91bD48L2xpPgotPGxpPkZpeCBTQUkgY2xvY2sgc291cmNlIGRlZmluaXRpb24gd2hlbiBSQ0NfQ0NJUFIyX1NBSTFTRUwgYW5kIFJDQ19DQ0lQUjJfU0FJMlNFTCBhcmUgcHJlc2VudC48L2xpPgotPGxpPlVwZGF0ZSBJU19SQ0NfUEVSSVBIQ0xPQ0soKSBtYWNybyBkZWZpbml0aW9uIGRlcGVuZGluZyBvbiB0YXJnZXRlZCBkZXJpdmF0aXZlLjwvbGk+Cis8bGk+VXBkYXRlIFBMTCBjbG9jayBzb3VyY2UgY29uZmlndXJhdGlvbiB0byBmaXggd2FybmluZ3Mgd2l0aCB0aGUgR0NDIGNvbXBpbGVyPC9saT4KIDwvdWw+PC9saT4KIDxsaT48c3Ryb25nPkVYVElfSEFMPC9zdHJvbmc+CiA8dWw+CkBAIC05MiwxMCArMTUwLDYgQEAKIDxsaT5SZW1vdmUgdXNlbGVzcyBiaW5hcnkgbWFzay48L2xpPgogPGxpPlVwZGF0ZSBMTF9BREMgZHJpdmVyIHRvIHByZXZlbnQgdW51c2VkIGFyZ3VtZW50IGNvbXBpbGF0aW9uIHdhcm5pbmcuPC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPk9QQU1QX0hBTC9MTDwvc3Ryb25nPgotPHVsPgotPGxpPkxMX09QQU1QX1NldFRyaW1taW5nVmFsdWUoKS9MTF9PUEFNUF9HZXRUcmltbWluZ1ZhbHVlKCk6IHJlZGVmaW5pdGlvbiBvZiByZWdpc3RlcnMgYWRkcmVzcyBNVVNUIGJlIHZvbGF0aWxlIChfSU8pPC9saT4KLTwvdWw+PC9saT4KIDxsaT48c3Ryb25nPlJUQ19CS1BfSEFML0xMPC9zdHJvbmc+CiA8dWw+CiA8bGk+VXBkYXRlIF9fSEFMX1JUQ1/igKYoPHN0cm9uZz5IQU5ETEU8L3N0cm9uZz4sIOKApikgbWFjcm9zIHRvIGFjY2VzcyByZWdpc3RlcnMgdGhyb3VnaCAoPHN0cm9uZz5IQU5ETEU8L3N0cm9uZz4pLSZndDtJbnN0YW5jZSBwb2ludGVyIGFuZCBhdm9pZCAidW51c2VkIHZhcmlhYmxlIiB3YXJuaW5ncy48L2xpPgpAQCAtMTAzLDcgKzE1Nyw3IEBACiA8L3VsPjwvbGk+CiA8bGk+PHN0cm9uZz5DQU5fSEFMPC9zdHJvbmc+CiA8dWw+Ci08bGk+VXBkYXRlIEhBTF9DQU5fSW5pdCgpIEFQSSB0byBiZSBhbGlnbmVkIHdpdGggcmVmZXJlbmNlIG1hbnVhbCBhbmQgdG8gYXZvaWQgdGltZW91dCBlcnJvcjoKKzxsaT5VcGRhdGUgSEFMX0NBTl9Jbml0KCkgQVBJIHRvIGJlIGFsaWduZWQgd2l0aCByZWZlcmFuY2UgbWFudWFsIGFuZCB0byBhdm9pZCB0aW1lb3V0IGVycm9yOgogPHVsPgogPGxpPlVwZGF0ZSBDQU4gSW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdG8gc2V0ICJyZXF1ZXN0IGluaXRpYWxpemF0aW9uIiBiaXQgYmVmb3JlIGV4aXQgZnJvbSBzbGVlcCBtb2RlLjwvbGk+CiA8L3VsPjwvbGk+CkBAIC0xNzcsMjAgKzIzMSwxNSBAQAogPGxpPjxzdHJvbmc+RFNJX0hBTDwvc3Ryb25nPgogPHVsPgogPGxpPlVwZGF0ZSBIQUxfRFNJX1JlYWQoKSB0byBhdm9pZCBIQUxfVElNRU9VVCB3aGVuIGEgRFNJIHJlYWQgY29tbWFuZCBpcyBpc3N1ZWQgdG8gdGhlIHBhbmVsIGFuZCB0aGUgcmVhZCBkYXRhIGlzIG5vdCBjYXB0dXJlZCBieSB0aGUgRFNJIEhvc3Qgd2hpY2ggcmV0dXJucyBQYWNrZXQgU2l6ZSBFcnJvci48L2xpPgotPGxpPlVwZGF0ZSBIQUxfRFNJX0V4aXRVTFBNKCkgdG8gZm9yY2UgRFNJIHJlZnJlc2g8L2xpPgotPC91bD48L2xpPgotPGxpPjxzdHJvbmc+RENNSV9IQUw8L3N0cm9uZz4KLTx1bD4KLTxsaT5BZGQgY29uc3QgcXVhbGlmaWVyIGZvciByZWFkIG9ubHkgcG9pbnRlcnMuPC9saT4KIDwvdWw+PC9saT4KIDxsaT48c3Ryb25nPlRJTV9IQUw8L3N0cm9uZz4KIDx1bD4KLTxsaT5GaXggY29tcGlsYXRpb24gd2FybmluZ3Mgd2l0aCBNREstQVJNPC9saT4KKzxsaT5GaXggY29tcGlsYXRpb24gd2FybmluZ3Mgb24gTURLLUFSTTwvbGk+CiA8bGk+VXBkYXRlIEhBTF9USU1FeF9Db25maWdCcmVha0lucHV0IHRvIHVzZSBDTVNJUyBUSU0xX09SMl9CS0RGMUJLMEVfUG9zIGRlZmluaXRpb24gaW5zdGVhZCBvZiBpdHMgaGFyZCBjb2RlZCB2YWx1ZS48L2xpPgogPC91bD48L2xpPgotPGxpPjxzdHJvbmc+TFBUSU1fSEFMPC9zdHJvbmc+Uk5HCis8bGk+PHN0cm9uZz5MUFRJTV9IQUw8L3N0cm9uZz4KIDx1bD4KLTxsaT5BZGQgX19IQUxfTFBUSU1fUkVTRVRfQ09VTlRFUigpIGFuZCBfX0hBTF9MUFRJTV9SRVNFVF9DT1VOVEVSX0FGVEVSUkVBRCgpIG1hY3JvcyBtYW5hZ2luZyB0aGUgc3luY2hyb25vdXMvYXN5bmNocm9ub3VzIExQVElNIGNvdW50ZXIgcmVzZXQuPC9saT4KKzxsaT5BZGQgX19IQUxfTFBUSU1fUkVTRVRfQ09VTlRFUiBhbmQgX19IQUxfTFBUSU1fUkVTRVRfQ09VTlRFUl9BRlRFUlJFQUQgbWFjcm9zIG1hbmFnaW5nIHRoZSBzeW5jaHJvbm91cy9hc3luY2hyb25vdXMgTFBUSU0gY291bnRlciByZXNldC48L2xpPgogPGxpPkFkZCBjaGVjayBvbiBQUklNQVNLIHJlZ2lzdGVyIHRvIHByZXZlbnQgZnJvbSBlbmFibGluZyB1bndhbnRlZCBnbG9iYWwgaW50ZXJydXB0cyB3aXRoaW4gTFBUSU1fRGlzYWJsZSgpIGFuZCBMTF9MUFRJTV9EaXNhYmxlKCk8L2xpPgogPC91bD48L2xpPgogPGxpPjxzdHJvbmc+Tk9SX0hBTDwvc3Ryb25nPgpAQCAtMjAzLDMwICsyNTIsMTggQEAKIDx1bD4KIDxsaT5VcGRhdGUgU0VORF9PUF9DT05EIChDTUQxKSB0byBpbmRpY2F0ZSBhcyBhcmd1bWVudCB0aGF0IHRoZSBzZWN0b3IgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QuPC9saT4KIDwvdWw+PC9saT4KLTxsaT5BZGQgbmV3IEhBTF9NTUNfU2xlZXBEZXZpY2UoKSBBUEkgdG8gU3dpdGNoIGRldmljZSBmcm9tIFN0YW5kYnkgU3RhdGUgdG8gU2xlZXAgU3RhdGUuPC9saT4KLTxsaT5GaXggTU1DICZhbXA7IFNEIGNoYXB0ZXJzIGdlbmVyYXRpb24gZm9yIFBERiBVc2VyIE1hbnVhbDwvbGk+CiA8L3VsPjwvbGk+CiA8bGk+PHN0cm9uZz5QS0FfSEFMPC9zdHJvbmc+CiA8dWw+CiA8bGk+VXBkYXRlIHRvIGZpeCBNb250Z29tZXJ5IG11bHRpcGxpY2F0aW9uIGluIFBLQS48L2xpPgogPC91bD48L2xpPgotPGxpPjxzdHJvbmc+VVNCX0xML0hBTDwvc3Ryb25nPgorPGxpPjxzdHJvbmc+VVNCX0ZTX0hBTDwvc3Ryb25nPgogPHVsPgotPGxpPlVwZGF0ZSBpbiBVU0JfU2V0Q3VycmVudE1vZGUoKSBBUEkgdG8gaW1wcm92ZSByZXF1aXJlZCB3YWl0IHRpbWluZyB0byBjaGFuZ2UgY29yZSBtb2RlLjwvbGk+Ci08bGk+UmVtb3ZlIG5vbiByZXF1aXJlZCAyMDBtcyBkZWxheSBkdXJpbmcgaG9zdCBpbml0aWFsaXphdGlvbi48L2xpPgotPGxpPlVwZGF0ZSBVU0JfRmx1c2hSeEZpZm8oKSBhbmQgVVNCX0ZsdXNoVHhGaWZvKCkgQVBJcyBieSBhZGRpbmcgY2hlY2sgb24gQUhCIG1hc3RlciBJRExFIHN0YXRlIGJlZm9yZSBmbHVzaGluZyB0aGUgVVNCIEZJRk8uPC9saT4KLTxsaT5GaXggaXNvY2hyb25vdXMgdHJhbnNmZXIgaW4gZG91YmxlIGJ1ZmZlciBtb2RlLjwvbGk+Ci08bGk+VXBkYXRlIHRvIGF2b2lkIGNvbXBpbGVyIG9wdGltaXphdGlvbiBvbiBjb3VudCB2YXJpYWJsZSB1c2VkIGZvciBVU0IgSEFMIHRpbWVvdXQgbG9vcCBjaGVjay48L2xpPgotPGxpPkFkZCBtaXNzaW5nIHJlZ2lzdHJlcyBjYWxsYmFja3MgY2hlY2sgZm9yIEhBTF9IQ0RfSENfTm90aWZ5VVJCQ2hhbmdlX0NhbGxiYWNrKCkgQVBJLjwvbGk+Ci08bGk+QWRkIG5ldyBIQUxfUENEX1NldFRlc3RNb2RlKCkgQVBJIHRvIGhhbmRsZSBVU0IgZGV2aWNlIGhpZ2ggc3BlZWQgVGVzdCBtb2Rlcy48L2xpPgotPGxpPlVwZGF0ZSB0byBzZXQgU05BSyBmb3IgRVBzIG5vdCByZXF1aXJlZCBkdXJpbmcgZGV2aWNlIHJlc2V0LjwvbGk+Ci08bGk+QWRkIG5ldyBBUEkgSEFMX1BDRF9FUF9BYm9ydCgpIHRvIGFib3J0IGN1cnJlbnQgVVNCIGVuZHBvaW50IHRyYW5zZmVyLjwvbGk+Ci08bGk+Rm9vdHByaW50IG9wdGltaXphdGlvbiBpbiBjYXNlIFVTQiBkb3VibGUgYnVmZmVyIG1vZGUgbm90IHVzZWQsIGNvZGUgcHJvdGVjdGVkIHdpdGggbmV3IGRlZmluZSBVU0VfVVNCX0RPVUJMRV9CVUZGRVI8L2xpPgotPGxpPlVwZGF0ZSB0byBhdm9pZCBtdWx0aXBsZSByZWFkcyBvZiBVU0IgSVNSIHJlZ2lzdGVyPC9saT4KKzxsaT5IQUwgUENEOiBhZGQgZml4IHRyYW5zZmVyIGNvbXBsZXRlIGZvciBJTiBJbnRlcnJ1cHQgdHJhbnNhY3Rpb24gaW4gc2luZ2xlIGJ1ZmZlciBtb2RlPC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPlJOR19IQUw8L3N0cm9uZz4KKzxsaT48c3Ryb25nPlVTQl9PVEdfSEFMPC9zdHJvbmc+CiA8dWw+Ci08bGk+Rml4IFNlZWQgZXJyb3IgZHVlIHRvIGEgd3JvbmcgSFRDUiB2YWx1ZTwvbGk+Cis8bGk+QWRkIG5ldyBBUEkgSEFMX1BDRF9FUF9BYm9ydCgpIHRvIGFib3J0IGN1cnJlbnQgVVNCIGVuZHBvaW50IHRyYW5zZmVyLjwvbGk+CiA8L3VsPjwvbGk+CiA8bGk+PHN0cm9uZz5JV0RHX0hBTDwvc3Ryb25nPgogPHVsPgpAQCAtMjM5LDEyICsyNzYsMTIgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24zMCIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMzAiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xMy4xIC8gMjQtU2VwdGVtYmVyLTIwMjE8L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0yIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPlBhdGNoIHJlbGVhc2Ugb25seSBvZiAqKiBVU0IgSEFMIGFuZCBMb3cgTGF5ZXIqKiBkcml2ZXJzIHRvIGluY2x1ZGUgbGF0ZXN0IGNvcnJlY3Rpb25zPC9saT4KIDwvdWw+Ci08aDIgaWQ9ImNvbnRlbnRzLTEiPkNvbnRlbnRzPC9oMj4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxoMiBpZD0iY29udGVudHMtMiI+Q29udGVudHM8L2gyPgorPHA+PHN0cm9uZz48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3U+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxzdHJvbmc+SEFMIFVTQiBQQ0Q8L3N0cm9uZz4gZHJpdmVyCiA8dWw+CkBAIC0yNTYsNyArMjkzLDcgQEAKIDxsaT5PcHRpbWl6ZSBVU0IgSVJRIGhhbmRsZXIgYnkgcmVtb3ZpbmcgbXVsdGlwbGUgcmVhZHMgb24gVVNCIGludGVycnVwdCByZWdpc3RlcnM8L2xpPgogPC91bD48L2xpPgogPC91bD4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgorPHA+PHN0cm9uZz48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TEwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHN0cm9uZz5MTCBVU0I8L3N0cm9uZz4gZHJpdmVyCiA8dWw+CkBAIC0yNjgsNyArMzA1LDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24yOSIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMjkiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xMy4wIC8gMTEtRmVicnVhcnktMjAyMTwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMiI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTMiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+TWFpbnRlbmFuY2UgcmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyPC9zdHJvbmc+IGRyaXZlcnMgdG8gaW5jbHVkZSBsYXRlc3QgY29ycmVjdGlvbnMKIDx1bD4KQEAgLTI4OCw3ICszMjUsNyBAQAogPC91bD48L2xpPgogPC91bD48L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtMiI+Q29udGVudHM8L2gyPgorPGgyIGlkPSJjb250ZW50cy0zIj5Db250ZW50czwvaDI+CiA8aDMgaWQ9ImhhbGxsLWdlbmVyaWMtdXBkYXRlcyI+PHN0cm9uZz5IQUwvTEwgZ2VuZXJpYzwvc3Ryb25nPiB1cGRhdGVzPC9oMz4KIDx1bD4KIDxsaT5zdG0zMmw0eHhfaGFsX3RpbWViYXNlX3RpbV90ZW1wbGF0ZS5jCkBAIC00NTQsMTIgKzQ5MSwxMiBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjI4IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24yOCIgYXJpYS1oaWRkZW49InRydWUiPlYxLjEyLjAgLyAyNi1KdW5lLTIwMjA8L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTMiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy00Ij5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPk1haW50ZW5hbmNlIHJlbGVhc2Ugb2YgPHN0cm9uZz5IQUwgYW5kIExvdyBMYXllcjwvc3Ryb25nPiBkcml2ZXJzIHRvIGluY2x1ZGUgbGF0ZXN0IGNvcnJlY3Rpb25zPC9saT4KIDxsaT5VcGRhdGUgb2YgPHN0cm9uZz5IQUwgT1NQSTwvc3Ryb25nPiBkcml2ZXIgaW50cm9kdWNpbmcgPHN0cm9uZz5jb21wYXRpYmlsaXR5IGJyZWFrPC9zdHJvbmc+IHdpdGggcHJldmlvdXMgdmVyc2lvbnM8L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtMyI+Q29udGVudHM8L2gyPgorPGgyIGlkPSJjb250ZW50cy00Ij5Db250ZW50czwvaDI+CiA8aDMgaWQ9ImhhbGxsLWdlbmVyaWMtdXBkYXRlcy0xIj48c3Ryb25nPkhBTC9MTCBnZW5lcmljPC9zdHJvbmc+IHVwZGF0ZXM8L2gzPgogPHVsPgogPGxpPlJlbW92ZSB0aGUgdXNlIG9mIGtleXdvcmQgcmVnaXN0ZXIgaW4gSEFML0xMIGRyaXZlcnM8L2xpPgpAQCAtNjI0LDEyICs2NjEsMTIgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24yNyIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMjciIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xMS4xIC8gMDctRmVicnVhcnktMjAyMDwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtNCI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTUiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+UGF0Y2ggcmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyPC9zdHJvbmc+IGRyaXZlcnMgdG8gaW5jbHVkZSBsYXRlc3QgY29ycmVjdGlvbnM8L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtNCI+Q29udGVudHM8L2gyPgotPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgorPGgyIGlkPSJjb250ZW50cy01Ij5Db250ZW50czwvaDI+Cis8cD48c3Ryb25nPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHN0cm9uZz5IQUwgR1BJTzwvc3Ryb25nPiBkcml2ZXIKIDx1bD4KQEAgLTY1OCw3ICs2OTUsNyBAQAogPGxpPkNvcnJlY3QgTUlTUkEgQzoyMDEyLVJ1bGUtMi40IHdhcm5pbmcgaW4gc3RydWN0dXJlIF9fU01CVVNfSGFuZGxlVHlwZURlZiBkZWZpbml0aW9uPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+Ci08cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5MTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3U+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxzdHJvbmc+TEwgVVRJTFM8L3N0cm9uZz4gZHJpdmVyCiA8dWw+CkBAIC02NzEsNyArNzA4LDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24yNiIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMjYiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xMS4wIC8gMjItTm92ZW1iZXItMjAxOTwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtNSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTYiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+UmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyPC9zdHJvbmc+IGRyaXZlcnMgdG8gYWRkIHN1cHBvcnQgb2YgPHN0cm9uZz5TVE0zMkw0UDV4eC9TVE0zMkw0UTV4eDwvc3Ryb25nPiBkZXZpY2VzCiA8dWw+CkBAIC02ODEsOCArNzE4LDggQEAKIDwvbGk+CiA8bGk+Q29ycmVjdGlvbiBvZiBzZXZlcmFsIGlzc3VlcyBhcHBsaWNhYmxlIHRvIG90aGVyIGRldmljZXM8L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtNSI+Q29udGVudHM8L2gyPgotPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgorPGgyIGlkPSJjb250ZW50cy02Ij5Db250ZW50czwvaDI+Cis8cD48c3Ryb25nPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHN0cm9uZz5IQUw8L3N0cm9uZz4gZHJpdmVyCiA8dWw+CkBAIC02OTEsMTAgKzcyOCwxMCBAQAogPGxpPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5TWVNDRkdfQk9PVF9GTUM8L3NwYW4+PC9saT4KIDxsaT48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+U1lTQ0ZHX0JPT1RfT0NUT1BTUEkxPC9zcGFuPjwvbGk+CiA8bGk+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPlNZU0NGR19CT09UX09DVE9QU1BJMjwvc3Bhbj48L2xpPgotPGxpPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5fX0hBTF9TWVNDRkdfUkVNQVBNRU1PUllfRk1DKCk8L3NwYW4+PC9saT4KLTxsaT48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+X19IQUxfU1lTQ0ZHX1JFTUFQTUVNT1JZX09DVE9TUEkxKCk8L3NwYW4+PGJyIC8+Cis8bGk+W19fSEFMX1NZU0NGR19SRU1BUE1FTU9SWV9GTUMoKV17c3R5bGU94oCcZm9udC1zdHlsZTogaXRhbGljO+KAnX08L2xpPgorPGxpPltfX0hBTF9TWVNDRkdfUkVNQVBNRU1PUllfT0NUT1NQSTEoKV17c3R5bGU94oCcZm9udC1zdHlsZTogaXRhbGljO+KAnX08YnIgLz4KIDwvbGk+Ci08bGk+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPl9fSEFMX1NZU0NGR19SRU1BUE1FTU9SWV9PQ1RPU1BJMigpPC9zcGFuPjwvbGk+Cis8bGk+W19fSEFMX1NZU0NGR19SRU1BUE1FTU9SWV9PQ1RPU1BJMigpXXtzdHlsZT3igJxmb250LXN0eWxlOiBpdGFsaWM74oCdfTwvbGk+CiA8L3VsPjwvbGk+CiA8L3VsPjwvbGk+CiA8bGk+PHN0cm9uZz5IQUwgQURDPC9zdHJvbmc+IGRyaXZlcgpAQCAtNzI1LDcgKzc2Miw3IEBACiA8bGk+PHN0cm9uZz5IQUwgRkxBU0g8L3N0cm9uZz4gZHJpdmVyCiA8dWw+CiA8bGk+Q29ycmVjdCA8ZW0+RkxBU0hfRkxBR19TUl9FUlJPUlM8L2VtPiBhbmQgcmVtb3ZlIDxlbT5GTEFTSF9GTEFHX1BFTVBUWTwvZW0+IGNvbnN0YW50cyBkZWZpbml0aW9ucyBpbiBzdG0zMmw0eHhfaGFsX2ZsYXNoLmggZm9yIFNUTTMyTDQ5Nnh4L1NUTTMyTDRBNnh4IHNpbmNlIEZMQVNIX1NSIFBFTVBUWSBiaXQgaXMgbm90IGRlZmluZWQgZm9yIHRoZXNlIGRldmljZXM8L2xpPgotPGxpPlVwZGF0ZSBkZWNsYXJhdGlvbiBvZiBBUElzIDxlbT5IQUxfRkxBU0hFeF9FbmFibGVSdW5Qb3dlckRvd24oKTwvZW0+LCA8ZW0+SEFMX0ZMQVNIRXhfRGlzYWJsZVJ1blBvd2VyRG93bigpPC9lbT4gYW5kIDxlbT5IQUxfRkxBU0hFeF9PQl9EQmFua0NvbmZpZygpPC9lbT4gaW4gc3RtMzJsNHh4X2ZsYXNoX3JhbWZ1bmMuaCBhbmQgc3RtMzJsNHh4X2ZsYXNoX3JhbWZ1bmMuYyB0byBpbXBsZW1lbnQgbmV3IDxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5fX1JBTV9GVU5DPC9zcGFuPiBkZWZpbml0aW9uPC9saT4KKzxsaT5VcGRhdGUgZGVjbGFyYXRpb24gb2YgQVBJcyA8ZW0+SEFMX0ZMQVNIRXhfRW5hYmxlUnVuUG93ZXJEb3duKCk8L2VtPiwgPGVtPkhBTF9GTEFTSEV4X0Rpc2FibGVSdW5Qb3dlckRvd24oKTwvZW0+IGFuZCA8ZW0+SEFMX0ZMQVNIRXhfT0JfREJhbmtDb25maWcoKTwvZW0+IGluIHN0bTMybDR4eF9mbGFzaF9yYW1mdW5jLmggYW5kIHN0bTMybDR4eF9mbGFzaF9yYW1mdW5jLmMgdG8gaW1wbGVtZW50IG5ldyBbX19SQU1fRlVOQ117c3R5bGU94oCcZm9udC1zdHlsZTogaXRhbGljO+KAnX0gZGVmaW5pdGlvbjwvbGk+CiA8bGk+Q29ycmVjdCBBUEkgPGVtPkZMQVNIX1BhZ2VFcmFzZSgpPC9lbT4gaW4gc3RtMzJsNHh4X2hhbF9mbGFzaF9leC5jIHRvIG1ha2Ugc3VyZSBEQkFOSyBiaXQgb2YgRkxBU0hfT1BUUiByZWdpc3RlciBpcyB0ZXN0ZWQgYmVmb3JlIGEgcGFnZSBlcmFzdXJlIGZvciBTVE0zMkw0UDV4eC9TVE0zMkw0UTV4eCBkZXZpY2VzPC9saT4KIDwvdWw+PC9saT4KIDxsaT48c3Ryb25nPkhBTCBGTUM8L3N0cm9uZz4gZHJpdmVyCkBAIC03MzgsNyArNzc1LDcgQEAKIDwvdWw+PC9saT4KIDxsaT48c3Ryb25nPkhBTCBHRU5FUklDPC9zdHJvbmc+IGRyaXZlcgogPHVsPgotPGxpPkNvcnJlY3QgPHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPl9fUkFNX0ZVTkM8L3NwYW4+IGRlZmluZSBpbiBzdG0zMmw0eHhfaGFsX2RlZi5oIGluIG9yZGVyIG5vdCB0byBpbXBvc2UgZnVuY3Rpb24gdHlwZTwvbGk+Cis8bGk+Q29ycmVjdCBbX19SQU1fRlVOQ117c3R5bGU94oCcZm9udC1zdHlsZTogaXRhbGljO+KAnX0gZGVmaW5lIGluIHN0bTMybDR4eF9oYWxfZGVmLmggaW4gb3JkZXIgbm90IHRvIGltcG9zZSBmdW5jdGlvbiB0eXBlPC9saT4KIDwvdWw+PC9saT4KIDxsaT48c3Ryb25nPkhBTCBHUElPPC9zdHJvbmc+IGRyaXZlcgogPHVsPgpAQCAtODA4LDI1ICs4NDUsMjUgQEAKIDx1bD4KIDxsaT5BZGQgUFNTSSBwZXJpcGhlcmFsIHJlbGF0ZWQgbWFjcm9zCiA8dWw+Ci08bGk+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPl9fSEFMX1JDQ19QU1NJX0NMS19FTkFCTEUoKTwvc3Bhbj48YnIgLz4KKzxsaT5bX19IQUxfUkNDX1BTU0lfQ0xLX0VOQUJMRSgpXXtzdHlsZT3igJxmb250LXN0eWxlOiBpdGFsaWM74oCdfTxiciAvPgogPC9saT4KLTxsaT48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+X19IQUxfUkNDX1BTU0lfQ0xLX0RJU0FCTEUoKTwvc3Bhbj48YnIgLz4KKzxsaT5bX19IQUxfUkNDX1BTU0lfQ0xLX0RJU0FCTEUoKV17c3R5bGU94oCcZm9udC1zdHlsZTogaXRhbGljO+KAnX08YnIgLz4KIDwvbGk+Ci08bGk+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPl9fSEFMX1JDQ19QU1NJX0lTX0NMS19FTkFCTEVEKCk8L3NwYW4+PGJyIC8+Cis8bGk+W19fSEFMX1JDQ19QU1NJX0lTX0NMS19FTkFCTEVEKClde3N0eWxlPeKAnGZvbnQtc3R5bGU6IGl0YWxpYzvigJ19PGJyIC8+CiA8L2xpPgotPGxpPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5fX0hBTF9SQ0NfUFNTSV9JU19DTEtfRElTQUJMRUQoKTwvc3Bhbj48YnIgLz4KKzxsaT5bX19IQUxfUkNDX1BTU0lfSVNfQ0xLX0RJU0FCTEVEKClde3N0eWxlPeKAnGZvbnQtc3R5bGU6IGl0YWxpYzvigJ19PGJyIC8+CiA8L2xpPgotPGxpPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5fX0hBTF9SQ0NfUFNTSV9GT1JDRV9SRVNFVCgpPC9zcGFuPjxiciAvPgorPGxpPltfX0hBTF9SQ0NfUFNTSV9GT1JDRV9SRVNFVCgpXXtzdHlsZT3igJxmb250LXN0eWxlOiBpdGFsaWM74oCdfTxiciAvPgogPC9saT4KLTxsaT48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+X19IQUxfUkNDX1BTU0lfUkVMRUFTRV9SRVNFVCgpPC9zcGFuPjxiciAvPgorPGxpPltfX0hBTF9SQ0NfUFNTSV9SRUxFQVNFX1JFU0VUKClde3N0eWxlPeKAnGZvbnQtc3R5bGU6IGl0YWxpYzvigJ19PGJyIC8+CiA8L2xpPgotPGxpPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5fX0hBTF9SQ0NfUFNTSV9DTEtfU0xFRVBfRU5BQkxFKCk8L3NwYW4+PGJyIC8+Cis8bGk+W19fSEFMX1JDQ19QU1NJX0NMS19TTEVFUF9FTkFCTEUoKV17c3R5bGU94oCcZm9udC1zdHlsZTogaXRhbGljO+KAnX08YnIgLz4KIDwvbGk+Ci08bGk+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPl9fSEFMX1JDQ19QU1NJX0NMS19TTEVFUF9ESVNBQkxFKCk8L3NwYW4+PGJyIC8+Cis8bGk+W19fSEFMX1JDQ19QU1NJX0NMS19TTEVFUF9ESVNBQkxFKClde3N0eWxlPeKAnGZvbnQtc3R5bGU6IGl0YWxpYzvigJ19PGJyIC8+CiA8L2xpPgotPGxpPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5fX0hBTF9SQ0NfUFNTSV9JU19DTEtfU0xFRVBfRU5BQkxFRCgpPC9zcGFuPjxiciAvPgorPGxpPltfX0hBTF9SQ0NfUFNTSV9JU19DTEtfU0xFRVBfRU5BQkxFRCgpXXtzdHlsZT3igJxmb250LXN0eWxlOiBpdGFsaWM74oCdfTxiciAvPgogPC9saT4KLTxsaT48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+X19IQUxfUkNDX1BTU0lfSVNfQ0xLX1NMRUVQX0RJU0FCTEVEKCk8L3NwYW4+PGJyIC8+Cis8bGk+W19fSEFMX1JDQ19QU1NJX0lTX0NMS19TTEVFUF9ESVNBQkxFRCgpXXtzdHlsZT3igJxmb250LXN0eWxlOiBpdGFsaWM74oCdfTxiciAvPgogPC9saT4KIDwvdWw+PC9saT4KIDxsaT5BZGQgPGVtPkhBTF9SQ0NFeF9PQ1RPU1BJRGVsYXlDb25maWcoKTwvZW0+IEFQSSB0byBtYW5hZ2UgUkNDX0RMWUNGR1IgcmVnaXN0ZXIgdG8gY29uZmlndXJlIE9DVE9TUEkgaW5zdGFuY2VzIERRUyBkZWxheXMuIEFwcGxpY2FibGUgb25seSB0byBTVE0zMkw0UDV4eC9TVE0zMkw0UTV4eCBhbmQgU1RNMzJMNFJ4L1NUTTMyTDRTeCBkZXZpY2VzLjwvbGk+CkBAIC04MzcsMTAgKzg3NCwxMCBAQAogPC91bD48L2xpPgogPGxpPkFkZCB0aGUgZm9sbG93aW5nIG1hY3JvcyB0byB0ZXN0IHdoZXRoZXIgb3Igbm90IE9jdG9TUEkgY2xvY2tzIGFyZSBlbmFibGVkCiA8dWw+Ci08bGk+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPl9fSEFMX1JDQ19PU1BJMV9JU19DTEtfRU5BQkxFRCgpPC9zcGFuPjwvbGk+Ci08bGk+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPl9fSEFMX1JDQ19PU1BJMl9JU19DTEtfRU5BQkxFRCgpPC9zcGFuPjwvbGk+Ci08bGk+PHNwYW4gc3R5bGU9ImZvbnQtc3R5bGU6IGl0YWxpYzsiPl9fSEFMX1JDQ19PU1BJMV9JU19DTEtfRElTQUJMRUQoKTwvc3Bhbj48L2xpPgotPGxpPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5fX0hBTF9SQ0NfT1NQSTJfSVNfQ0xLX0RJU0FCTEVEKCk8L3NwYW4+PGJyIC8+Cis8bGk+W19fSEFMX1JDQ19PU1BJMV9JU19DTEtfRU5BQkxFRCgpXXtzdHlsZT3igJxmb250LXN0eWxlOiBpdGFsaWM74oCdfTwvbGk+Cis8bGk+W19fSEFMX1JDQ19PU1BJMl9JU19DTEtfRU5BQkxFRCgpXXtzdHlsZT3igJxmb250LXN0eWxlOiBpdGFsaWM74oCdfTwvbGk+Cis8bGk+W19fSEFMX1JDQ19PU1BJMV9JU19DTEtfRElTQUJMRUQoKV17c3R5bGU94oCcZm9udC1zdHlsZTogaXRhbGljO+KAnX08L2xpPgorPGxpPltfX0hBTF9SQ0NfT1NQSTJfSVNfQ0xLX0RJU0FCTEVEKClde3N0eWxlPeKAnGZvbnQtc3R5bGU6IGl0YWxpYzvigJ19PGJyIC8+CiA8L2xpPgogPC91bD48L2xpPgogPGxpPkNvcnJlY3QgTUlTUkEgQzoyMDEyLVJ1bGUtMjEuMSB3YXJuaW5nIGluIHVwZGF0aW5nIHRoZSBkZWZpbmVzIGNyZWF0ZWQgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIGluIHN0bTMybDR4eF9oYWxfcmNjLmggYW5kIHN0bTMybDR4eF9oYWxfcmNjX2V4Lmg8L2xpPgpAQCAtODkzLDE1ICs5MzAsMTUgQEAKIDwvdWw+PC9saT4KIDxsaT5BZGQgbWFjcm9zIHRvIGZvcmNlIGEgY29udGludW91cyBjb3B5IG9mIHRoZSB1cGRhdGUgaW50ZXJydXB0IGZsYWcgKFVJRikgaW50byB0aGUgdGltZXIgY291bnRlciByZWdpc3RlciAoYml0IDMxKQogPHVsPgotPGxpPjxzcGFuIHN0eWxlPSJmb250LXN0eWxlOiBpdGFsaWM7Ij5fX0hBTF9USU1fVUlGUkVNQVBfRU5BQkxFKCk8L3NwYW4+PC9saT4KLTxsaT48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+X19IQUxfVElNX1VJRlJFTUFQX0RJU0FCTEUoKTwvc3Bhbj48YnIgLz4KKzxsaT5bX19IQUxfVElNX1VJRlJFTUFQX0VOQUJMRSgpXXtzdHlsZT3igJxmb250LXN0eWxlOiBpdGFsaWM74oCdfTwvbGk+Cis8bGk+W19fSEFMX1RJTV9VSUZSRU1BUF9ESVNBQkxFKClde3N0eWxlPeKAnGZvbnQtc3R5bGU6IGl0YWxpYzvigJ19PGJyIC8+CiA8L2xpPgogPC91bD48L2xpPgotPGxpPkFkZCA8c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+X19IQUxfVElNX0dFVF9VSUZDUFkoKTwvc3Bhbj4gbWFjcm8gdG8gcmV0cmlldmUgdXBkYXRlIGludGVycnVwdCBmbGFnIChVSUYpIGNvcHkgc3RhdHVzPC9saT4KKzxsaT5BZGQgW19fSEFMX1RJTV9HRVRfVUlGQ1BZKClde3N0eWxlPeKAnGZvbnQtc3R5bGU6IGl0YWxpYzvigJ19IG1hY3JvIHRvIHJldHJpZXZlIHVwZGF0ZSBpbnRlcnJ1cHQgZmxhZyAoVUlGKSBjb3B5IHN0YXR1czwvbGk+CiA8bGk+QWRkIG1hY3JvcyB0byBtYW5hZ2UgZmFzdCBtb2RlIGZvciBhIGdpdmVuIGNoYW5uZWwKIDx1bD4KLTxsaT48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+X19IQUxfVElNX0VOQUJMRV9PQ3hGQVNUKCk8L3NwYW4+PC9saT4KLTxsaT48c3BhbiBzdHlsZT0iZm9udC1zdHlsZTogaXRhbGljOyI+X19IQUxfVElNX0RJU0FCTEVfT0N4RkFTVCgpPC9zcGFuPjwvbGk+Cis8bGk+W19fSEFMX1RJTV9FTkFCTEVfT0N4RkFTVCgpXXtzdHlsZT3igJxmb250LXN0eWxlOiBpdGFsaWM74oCdfTwvbGk+Cis8bGk+W19fSEFMX1RJTV9ESVNBQkxFX09DeEZBU1QoKV17c3R5bGU94oCcZm9udC1zdHlsZTogaXRhbGljO+KAnX08L2xpPgogPC91bD48L2xpPgogPC91bD48L2xpPgogPGxpPjxzdHJvbmc+SEFMIFVBUlQ8L3N0cm9uZz4gZHJpdmVyCkBAIC05MjUsNyArOTYyLDcgQEAKIDxsaT5VcGRhdGUgPGVtPlVTQVJUX1NldENvbmZpZygpPC9lbT4gdG8gcmVtb3ZlIGZ1bmN0aW9ucyBhcyBhcmd1bWVudCBvdXQgb2YgbWFjcm9zPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+Ci08cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5MTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3U+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxzdHJvbmc+TEwgQURDPC9zdHJvbmc+IGRyaXZlcgogPHVsPgpAQCAtOTkyLDcgKzEwMjksNyBAQAogPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+PC9saT4KLTxsaT5Db3JyZWN0IDxlbT5MTF9SVENfU0NSX0FMUkFGPC9lbT4gY29uc3RhbnQgbWlzc3BlbGxpbmc8L2xpPgorPGxpPkNvcnJlY3QgPGVtPkxMX1JUQ19TQ1JfQUxSQUY8L2VtPiBjb25zdGFudCBtaXNwZWxsaW5nPC9saT4KIDwvdWw+PC9saT4KIDxsaT48c3Ryb25nPkxMIFRJTTwvc3Ryb25nPiBkcml2ZXIKIDx1bD4KQEAgLTEwMjEsMTIgKzEwNTgsMTIgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24yMiIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMjIiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xMC4wIC8gMDMtQXByaWwtMjAxOTwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtNiI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTciPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+RGVsaXZlcnkgb2YgdGhlIG5ldyBIQUwgTU1DIGRyaXZlcjwvbGk+CiA8L3VsPgotPGgyIGlkPSJjb250ZW50cy02Ij5Db250ZW50czwvaDI+Ci08cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvc3Bhbj48L3N0cm9uZz48L3A+Cis8aDIgaWQ9ImNvbnRlbnRzLTciPkNvbnRlbnRzPC9oMj4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC91Pjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48c3Ryb25nPkhBTCBBREM8L3N0cm9uZz4gZHJpdmVyCiA8dWw+CkBAIC0xMTY3LDcgKzEyMDQsNyBAQAogPHVsPgogPGxpPkNvcnJlY3QgTUlTUkEgQzoyMDEyIFJ1bGUtMi40IHdhcm5pbmcgaW4gc3RydWN0dXJlIF9fUVNQSV9IYW5kbGVUeXBlRGVmIGRlZmluaXRpb248L2xpPgogPGxpPlJlbW92ZSB0aGUgY29tcGlsYXRpb24gc3dpdGNoZXMgcmVsYXRlZCB0byBRVUFEU1BJMSBhbmQgUVVBRFNQSTIgYXMgYWxsIFNUTTMyIGZhbWlsaWVzIGhhdmUgb25seSBvbmUgaW5zdGFuY2UgY2FsbGVkIFFVQURTUEk8L2xpPgotPGxpPkZpeCBIQUxfUVNQSV9USU1FT1VUX0RFRkFVTFRfVkFMVUUgbWlzc3BlbGxpbmc8L2xpPgorPGxpPkZpeCBIQUxfUVNQSV9USU1FT1VUX0RFRkFVTFRfVkFMVUUgbWlzcGVsbGluZzwvbGk+CiA8L3VsPjwvbGk+CiA8bGk+PHN0cm9uZz5IQUwgUkNDPC9zdHJvbmc+IGRyaXZlcgogPHVsPgpAQCAtMTIzMiw3ICsxMjY5LDcgQEAKIDxsaT5VcGRhdGUgVVNBUlRfUnhJU1JfOEJJVCgpLCBVU0FSVF9SeElTUl8xNkJJVCgpLCBVU0FSVF9SeElTUl84QklUX0ZJRk9FTigpIGFuZCBVU0FSVF9SeElTUl8xNkJJVF9GSUZPRU4oKSB0byBlbnN1cmUgVFhGVCBpbnRlcnJ1cHQgaXMgaGFuZGxlZCBpbiBhbGwgY2FzZXM8L2xpPgogPC91bD48L2xpPgogPC91bD4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgorPHA+PHN0cm9uZz48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TEwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHN0cm9uZz5MTCBBREM8L3N0cm9uZz4gZHJpdmVyCiA8dWw+CkBAIC0xMzEzLDE0ICsxMzUwLDE0IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMjEiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjIxIiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuOS4wIC8gMjctSnVseS0yMDE4PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy03Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtOCI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5SZWxlYXNlIG9mwqA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyIGRyaXZlcnM8L3N0cm9uZz4gdG8gYWRkIHN1cHBvcnQgb2YgPHN0cm9uZz5TVE0zMkw0MTJ4eC9TVE0zMkw0MjJ4eDwvc3Ryb25nPjwvbGk+CiA8bGk+U3VwZXJzZXQgZmVhdHVyZXMgZGV2aWNlIFNUTTMyTDQyMnh4IEFQSSBVc2VyIE1hbnVhbCBhdmFpbGFibGUgKFNUTTMyTDQyMnh4X1VzZXJfTWFudWFsLmNobSnCoMKgPC9saT4KIDxsaT5NSVNSQSBDOjIwMTIgY29ycmVjdGlvbnM8L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtNyI+Q29udGVudHM8L2gyPgotPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgorPGgyIGlkPSJjb250ZW50cy04Ij5Db250ZW50czwvaDI+Cis8cD48c3Ryb25nPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8cD5NSVNSQSBDOjIwMTIgY29ycmVjdGlvbnMgbGlzdGVkIGhlcmVhZnRlciBhcmUgYXBwbGljYWJsZSB0byBMTCBkcml2ZXIgYXMgd2VsbC48L3A+CiA8dWw+CiA8bGk+PHA+PHN0cm9uZz5IQUwgQURDPC9zdHJvbmc+IGRyaXZlcsKgPC9wPgpAQCAtMTM0NSw3ICsxMzgyLDcgQEAKIDxsaT5DbGFyaWZ5IGNvbW1lbnRzIGluIEhBTF9BRENfQW5hbG9nV0RHQ29uZmlnIGZvciBhbmFsb2cgd2F0Y2hkb2cgdGhyZXNob2xkcyBjaGVja3Mgd2hlbiBvdmVyc2FtcGxpbmcgaXMgZW5hYmxlZDwvbGk+CiA8L3VsPjwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+PHN0cm9uZz5IQUwgQ0FOPC9zdHJvbmc+IGRyaXZlcsKgCis8bGk+PHA+PHN0cm9uZz5IQUwgQ0FOPC9zdHJvbmc+IGRyaXZlcsKgPC9wPgogPHVsPgogPGxpPkNvcnJlY3TCoE1JU1JBIEM6MjAxMiB3YXJuaW5ncyByZXBvcnRlZCBieSBydWxlcyAyLjJfYywgMTAuMywgMTAuNF9hLCAxMC42LCAxMi4yLCAxMy4zLCAxMy41LCAxNS43LCAxNy43LCAxOC4xX2I8L2xpPgogPGxpPnN0bTMybDR4eF9oYWxfY2FuLmMswqBzdG0zMmw0eHhfaGFsX2Nhbi5oCkBAIC0xMzU4LDcgKzEzOTUsNyBAQAogPGxpPlVwZGF0ZSBIQUxfQ0FOX1N0b3AoKSB0byByZXNldCBhbnkgcHJldmlvdXMgc2xlZXAgbW9kZSByZXF1ZXN0IHRvIGF2b2lkIG1haW50YWluaW5nIHRoZSBzbGVlcCBtb2RlIHJlcXVlc3QgYWN0aXZlIGF0IG5leHQgSEFMX0NBTl9TdGFydCgpPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkhBTCBDT01QPC9zdHJvbmc+IGRyaXZlcgorPGxpPjxwPjxzdHJvbmc+SEFMIENPTVA8L3N0cm9uZz4gZHJpdmVyPC9wPgogPHVsPgogPGxpPkNvcnJlY3TCoE1JU1JBIEM6MjAxMiB3YXJuaW5ncyByZXBvcnRlZCBieSBydWxlcyAxMC4xLCAxMC4zLCAxMC40LCAxMy41PC9saT4KIDxsaT5zdG0zMmw0eHhfaGFsX2NvbXAuYwpAQCAtMTM2Niw0NCArMTQwMyw0NCBAQAogPGxpPkNoYW5nZSBvZsKgdGltZS1vdXQgZHVyYXRpb24gY29tcHV0YXRpb24gd2hlbiBleHByZXNzZWQgaW4gbWljcm9zZWNvbmRzIHRvIG1hbmFnZSBsb3cgc3lzdGVtIGNsb2NrIGZyZXF1ZW5jaWVzPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkhBTCBDUkM8L3N0cm9uZz4gZHJpdmVyCis8bGk+PHA+PHN0cm9uZz5IQUwgQ1JDPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT5Db3JyZWN0wqBNSVNSQSBDOjIwMTIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgcnVsZXMgMTAuMywgMTIuMSwgMTIuMjwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+PHN0cm9uZz5IQUwgQ1JZUDwvc3Ryb25nPiBkcml2ZXIKKzxsaT48cD48c3Ryb25nPkhBTCBDUllQPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT5Db3JyZWN0wqBNSVNSQSBDOjIwMTIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgcnVsZXMgMi4yX2MsIDguMTMsIDEwLjMsIDEwLjQsIDEwLjYsIDEwLjcsIDEwLjgsIDEyLjEsIDEzLjUsIDE1LjcsIDE3LjcsIDE4LjQ8L2xpPgogPGxpPnN0bTMybDR4eF9oYWxfY3J5cF9leC5jOiBDb2RlU29uYXIgd2FybmluZyBjb3JyZWN0aW9uPC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkhBTCBEQUM8L3N0cm9uZz4gZHJpdmVyCis8bGk+PHA+PHN0cm9uZz5IQUwgREFDPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT5Db3JyZWN0wqBNSVNSQSBDOjIwMTJ3YXJuaW5nczwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+PHN0cm9uZz5IQUwgRENNSTwvc3Ryb25nPiBkcml2ZXIKKzxsaT48cD48c3Ryb25nPkhBTCBEQ01JPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT5Db3JyZWN0wqBNSVNSQSBDOjIwMTIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgcnVsZXMgMi4yX2MsIDguNCwgMTAuNF9hLCAxMi4xLCAxNy43LCAxOC40PC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkhBTCBETUE8L3N0cm9uZz4gZHJpdmVyCis8bGk+PHA+PHN0cm9uZz5IQUwgRE1BPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT5Db3JyZWN0wqBNSVNSQSBDOjIwMTIgd2FybmluZ3M8L2xpPgogPC91bD48L2xpPgotPGxpPjxzdHJvbmc+SEFMIERTSTwvc3Ryb25nPiBkcml2ZXIKKzxsaT48cD48c3Ryb25nPkhBTCBEU0k8L3N0cm9uZz4gZHJpdmVyPC9wPgogPHVsPgogPGxpPnN0bTMybDR4eF9oYWxfZHNpLmg6IGFkZCBfX0hBTF9EU0lfUkVTRVRfSEFORExFX1NUQVRFKCkgbWFjcm88L2xpPgogPC91bD48L2xpPgotPGxpPjxzdHJvbmc+SEFMIEVYVEk8L3N0cm9uZz4gZHJpdmVyIDxzdHJvbmc+KE5FVyk8L3N0cm9uZz4KKzxsaT48cD48c3Ryb25nPkhBTCBFWFRJPC9zdHJvbmc+IGRyaXZlciA8c3Ryb25nPihORVcpPC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPk5ldyBzdG0zMmw0eHhfaGFsX2V4dGkuaCBhbmQgc3RtMzJsNHh4X2hhbF9leHRpLmMgZmlsZXPCoCAoZHJpdmVyIGVuYWJsZWQgd2l0aCBIQUxfRVhUSV9NT0RVTEVfRU5BQkxFRCBpbiBzdG0zMmw0eHhfaGFsX2NvbmYuaCBmaWxlKTwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+PHN0cm9uZz5IQUwgRklSRVdBTEw8L3N0cm9uZz4gZHJpdmVyCis8bGk+PHA+PHN0cm9uZz5IQUwgRklSRVdBTEw8L3N0cm9uZz4gZHJpdmVyPC9wPgogPHVsPgogPGxpPkNvcnJlY3TCoE1JU1JBIEM6MjAxMiB3YXJuaW5ncyByZXBvcnRlZCBieSBydWxlc8KgMTAuNDwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+PHN0cm9uZz5IQUwgR1BJTzwvc3Ryb25nPiBkcml2ZXIKKzxsaT48cD48c3Ryb25nPkhBTCBHUElPPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT5Db3JyZWN0wqBNSVNSQSBDOjIwMTIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgcnVsZXMgMTAuMywgMjEuMTwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+PHN0cm9uZz5IQUwgSEFTSDwvc3Ryb25nPiBkcml2ZXIKKzxsaT48cD48c3Ryb25nPkhBTCBIQVNIPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT5Db3JyZWN0wqBNSVNSQSBDOjIwMTIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgcnVsZXMgMS4zX2ssIDIuMl9jLCA5LjFfZiwgMTAuMywgMTIuMSwgMTMuNF9iLCAxMy41LCAxNS43LCAxNy43LCAyMS4xPC9saT4KIDxsaT5zdG0zMmw0eHhfaGFsX2hhc2guYzrCoApAQCAtMTQxMywzMCArMTQ1MCwzMCBAQAogPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkhBTCBJMkM8L3N0cm9uZz4gZHJpdmVyCis8bGk+PHA+PHN0cm9uZz5IQUwgSTJDPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT5Db3JyZWN0wqBNSVNSQSBDOjIwMTIgd2FybmluZ3M8L2xpPgogPGxpPnN0bTMybDR4eF9oYWxfaTJjLmM6IHJlbW92ZSBleHRyYSBkZWZpbml0aW9uIG9mIEkyQ19HRVRfRE1BX1JFTUFJTl9EQVRBKCkgbWFjcm88YnIgLz4KIDwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+PHN0cm9uZz5IQUwgSVJEQTwvc3Ryb25nPiBkcml2ZXIKKzxsaT48cD48c3Ryb25nPkhBTCBJUkRBPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT5Db3JyZWN0wqBNSVNSQSBDOjIwMTIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgcnVsZXMgMi4xLCAyLjJfYywgMi40LCAyLjMsIDguOV9hLCAxMC4zLCAxMC40X2EsIDEwLjUsIDEwLjYsIDEwLjcsIDExLjMsIDEzLjMsIDEzLjUsIDE1LjcsIDE3LjcsIDE3LjgsIDE4LjQsIDIxLjE8L2xpPgogPC91bD48L2xpPgotPGxpPjxzdHJvbmc+SEFMIElXREc8L3N0cm9uZz4gZHJpdmVyCis8bGk+PHA+PHN0cm9uZz5IQUwgSVdERzwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+CiA8bGk+Q29ycmVjdMKgTUlTUkEgQzoyMDEyIHdhcm5pbmdzIHJlcG9ydGVkIGJ5IHJ1bGVzwqAyLjcsIDEwLjMsIDEwLjRfYTwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+PHN0cm9uZz5IQUwgTFBUSU08L3N0cm9uZz4gZHJpdmVyCis8bGk+PHA+PHN0cm9uZz5IQUwgTFBUSU08L3N0cm9uZz4gZHJpdmVyPC9wPgogPHVsPgogPGxpPkFkZCByZXBldGl0aW9uIGNvdW50ZXIgbWFuYWdlbWVudCBmb3IgU1RNMzJMNDEyeHgvTDQyMnh4IGRldmljZXM8L2xpPgogPGxpPk5ldyBmaWVsZCBSZXBldGl0aW9uQ291bnRlciBhZGRlZCBpbiBMUFRJTV9Jbml0VHlwZURlZiBzdHJ1Y3R1cmU8L2xpPgogPC91bD48L2xpPgotPGxpPjxzdHJvbmc+SEFMIE9TUEk8L3N0cm9uZz4gZHJpdmVyCis8bGk+PHA+PHN0cm9uZz5IQUwgT1NQSTwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+CiA8bGk+c3RtMzJsNHh4X2hhbF9vc3BpLmg6IHVwZGF0ZSBtZW1vcnkgdHlwZSBkZWZpbml0aW9uIHRvIHN1cHBvcnQgbmV3IG9jdGFsIFBTUkFNIGZyb20gQVBNZW1vcnk8L2xpPgogPC91bD48L2xpPgotPGxpPjxzdHJvbmc+SEFMIE9QQU1QPC9zdHJvbmc+IGRyaXZlcgorPGxpPjxwPjxzdHJvbmc+SEFMIE9QQU1QPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT5Db3JyZWN0wqBNSVNSQSBDOjIwMTIgd2FybmluZ3M8L2xpPgogPC91bD48L2xpPgpAQCAtMTQ4MSw3ICsxNTE4LDcgQEAKIDxsaT5Db3JyZWN0wqBNSVNSQSBDOjIwMTIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgcnVsZSAxMC40X2EsIDEwLjYsIDEyLjI8L2xpPgogPC91bD48L2xpPgogPC91bD4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIERyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgorPHA+PHN0cm9uZz48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TEwgRHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHA+PHN0cm9uZz5MTCBBREM8L3N0cm9uZz4gZHJpdmVyPC9wPgogPHVsPgpAQCAtMTUwNSw3ICsxNTQyLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xOSIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMTkiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS44LjMgLyAyMi1NYXktMjAxODwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtOCI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTkiPk1haW4gQ2hhbmdlczwvaDI+CiA8cD5NYWludGVuYW5jZSBSZWxlYXNlIG9mIDxzdHJvbmc+SEFMIGFuZCBMb3cgTGF5ZXIgZHJpdmVyczwvc3Ryb25nPjwvcD4KIDxwPjxzdHJvbmc+QWRkIHN1cHBvcnQgb2YgSEFMIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBmZWF0dXJlPC9zdHJvbmc+PC9wPgogPHVsPgpAQCAtMTUxNSw4ICsxNTUyLDggQEAKIDxsaT48cD5PbmNlIGVuYWJsZWQsIHRoZSB1c2VyIGFwcGxpY2F0aW9uIG1heSByZXNvcnQgdG8gSEFMX1BQUF9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgc3BlY2lmaWMgY2FsbGJhY2sgZnVuY3Rpb24ocykgYW5kIHVucmVnaXN0ZXIgaXQodGhlbSkgd2l0aCBIQUxfUFBQX1VuUmVnaXN0ZXJDYWxsYmFjaygpLjwvcD48L2xpPgogPC91bD4KIDxwPk1JU1JBIEM6MjAxMiBjb3JyZWN0aW9uczwvcD4KLTxoMiBpZD0iY29udGVudHMtOCI+Q29udGVudHM8L2gyPgotPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgorPGgyIGlkPSJjb250ZW50cy05Ij5Db250ZW50czwvaDI+Cis8cD48c3Ryb25nPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHA+PHN0cm9uZz5IQUwgZ2VuZXJpYzwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+CkBAIC0xNTI2LDcgKzE1NjMsNyBAQAogPC91bD48L2xpPgogPGxpPjxwPjxzdHJvbmc+SEFMIEFEQzwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+Ci08bGk+Rml4IHRvIGVuYWJsZSBBREMgaW50ZXJuYWwgY2hhbm5lbHMgKFZyZWZJbnQsIHRlbXBlcmF0dXJlIHNlbnNvciBhbmQgVmJhdCkgd2l0aG91dCBiZWluZyB0b28gcmVzdHJpY3RpdmU8L2xpPgorPGxpPjxwPkZpeCB0byBlbmFibGUgQURDIGludGVybmFsIGNoYW5uZWxzIChWcmVmSW50LCB0ZW1wZXJhdHVyZSBzZW5zb3IgYW5kIFZiYXQpIHdpdGhvdXQgYmVpbmcgdG9vIHJlc3RyaWN0aXZlPC9wPjwvbGk+CiA8bGk+PHA+VXBkYXRlIGludGVybmFsIEFEQyBjYWxpYnJhdGlvbiB0aW1lb3V0IHZhbHVlPC9wPjwvbGk+CiA8bGk+PHA+QWRkIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBmZWF0dXJlPC9wPgogPHVsPgpAQCAtMTc0MywxMSArMTc4MCwxMSBAQAogPGxpPkFkZCBjYWxsYmFjayBpZGVudGlmaWVycyBpbiBIQUxfU01CVVNfQ2FsbGJhY2tJRFR5cGVEZWYgZW51bWVyYXRlZCB0eXBlZGVmPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkhBTCBTRDwvc3Ryb25nPiBkcml2ZXIKKzxsaT48cD48c3Ryb25nPkhBTCBTRDwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+Ci08bGk+Rml4IERNQSB3cml0ZSBpc3N1ZTwvbGk+Ci08bGk+Rml4IHRvIHNlbmQgdGhlICJTdG9wIHRyYW5zZmVyIiBjb21tYW5kIG9ubHkgaW4gY2FzZSBvZiBtdWx0aXBsZSByZWFkIG9yIHdyaXRlIG9wZXJhdGlvbnM8YnIgLz4KLTwvbGk+Cis8bGk+PHA+Rml4IERNQSB3cml0ZSBpc3N1ZTwvcD48L2xpPgorPGxpPjxwPkZpeCB0byBzZW5kIHRoZSAiU3RvcCB0cmFuc2ZlciIgY29tbWFuZCBvbmx5IGluIGNhc2Ugb2YgbXVsdGlwbGUgcmVhZCBvciB3cml0ZSBvcGVyYXRpb25zPGJyIC8+Cis8L3A+PC9saT4KIDxsaT48cD5GaXggdHlwbyBpbiBGaWxlRm9ybWF0R3JvdXAgZmllbGQgb2YgSEFMX1NEX0NhcmRDU0RUeXBlZGVmPC9wPjwvbGk+CiA8bGk+PHA+QWRkIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBmZWF0dXJlPC9wPgogPHVsPgpAQCAtMTgyOCw3ICsxODY1LDcgQEAKIDwvdWw+PC9saT4KIDwvdWw+PC9saT4KIDwvdWw+Ci08cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5MTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3U+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxwPjxzdHJvbmc+TEwgQURDPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KQEAgLTE4NjMsMTIgKzE5MDAsMTIgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xIiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuOC4yIC8gMjItRGVjZW1iZXItMjAxNzwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtOSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEwIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPk1haW50ZW5hbmNlIFJlbGVhc2Ugb2YgPHN0cm9uZz5IQUwgYW5kIExvdyBMYXllciBkcml2ZXJzPC9zdHJvbmc+PC9saT4KIDwvdWw+Ci08aDIgaWQ9ImNvbnRlbnRzLTkiPkNvbnRlbnRzPC9oMj4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxoMiBpZD0iY29udGVudHMtMTAiPkNvbnRlbnRzPC9oMj4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC91Pjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48c3Ryb25nPkhBTCBDQU48L3N0cm9uZz4gZHJpdmVyPC9saT4KIDwvdWw+CkBAIC0xODgwLDEzICsxOTE3LDEzIEBACiA8cD5GaWVsZHMgb2YgQ0FOX0luaXRUeXBlRGVmIHN0cnVjdHVyZSBhcmUgcmVuYW1lZCDCoDwvcD4KIDx1bD4KIDxsaT48cD5TSlcgdG8gU3luY0p1bXBXaWR0aCwgQlMxIHRvIFRpbWVTZWcxLCBCUzIgdG8gVGltZVNlZzIsIFRUQ00gdG8gVGltZVRyaWdnZXJlZE1vZGUsIEFCT00gdG8gQXV0b0J1c09mZiwgQVdVTSB0byBBdXRvV2FrZVVwLCBOQVJUIHRvIEF1dG9SZXRyYW5zbWlzc2lvbiAoaW52ZXJzZWQpLCBSRkxNIHRvIFJlY2VpdmVGaWZvTG9ja2VkIGFuZCBUWEZQIHRvIFRyYW5zbWl0Rmlmb1ByaW9yaXR5PC9wPjwvbGk+Ci08bGk+SEFMX0NBTl9Jbml0KCkgaXMgc3BsaXQgaW50byBib3RoIEhBTF9DQU5fSW5pdCgpIGFuZCBIQUxfQ0FOX1N0YXJ0KCk8L2xpPgotPGxpPkhBTF9DQU5fVHJhbnNtaXQoKSBpcyByZXBsYWNlZCBieSBIQUxfQ0FOX0FkZFR4TWVzc2FnZSgpIHRvIHBsYWNlIFR4IHJlcXVlc3QsIHRoZW4gSEFMX0NBTl9HZXRUeE1haWxib3hlc0ZyZWVMZXZlbCgpIGZvciBwb2xsaW5nIHVudGlsIGNvbXBsZXRpb248L2xpPgotPGxpPkhBTF9DQU5fVHJhbnNtaXRfSVQoKSBpcyByZXBsYWNlZCBieSBIQUxfQ0FOX0FjdGl2YXRlTm90aWZpY2F0aW9uKCkgdG8gZW5hYmxlIHRyYW5zbWlzc2lvbiB3aXRoIGludGVycnVwdCBtb2RlLCB0aGVuIEhBTF9DQU5fQWRkVHhNZXNzYWdlKCkgdG8gcGxhY2UgVHggcmVxdWVzdDwvbGk+Ci08bGk+SEFMX0NBTl9SZWNlaXZlKCkgaXMgcmVwbGFjZWQgYnkgSEFMX0NBTl9HZXRSeEZpZm9GaWxsTGV2ZWwoKSBmb3IgcG9sbGluZyB1bnRpbCByZWNlcHRpb24sIHRoZW4gSEFMX0NBTl9HZXRSeE1lc3NhZ2UoKSB0byBnZXQgUnggbWVzc2FnZTwvbGk+Ci08bGk+SEFMX0NBTl9SZWNlaXZlX0lUKCkgaXMgcmVwbGFjZWQgYnkgSEFMX0NBTl9BY3RpdmF0ZU5vdGlmaWNhdGlvbigpIHRvIGVuYWJsZSByZWNlcHRpb24gd2l0aCBpbnRlcnJ1cHQgbW9kZSwgdGhlbiBIQUxfQ0FOX0dldFJ4TWVzc2FnZSgpIGluIHRoZSByZWNlaXZlIGNhbGxiYWNrIHRvIGdldCBSeCBtZXNzYWdlPC9saT4KLTxsaT5IQUxfQ0FOX1NsZWVwKCkgaXMgcmVuYW1lZCB0byBIQUxfQ0FOX1JlcXVlc3RTbGVlcCgpPC9saT4KLTxsaT5IQUxfQ0FOX1R4Q3BsdENhbGxiYWNrKCkgaXMgc3BsaXQgaW50byBIQUxfQ0FOX1R4TWFpbGJveDBDb21wbGV0ZUNhbGxiYWNrKCksIEhBTF9DQU5fVHhNYWlsYm94MUNvbXBsZXRlQ2FsbGJhY2soKSBhbmQgSEFMX0NBTl9UeE1haWxib3gyQ29tcGxldGVDYWxsYmFjaygpPC9saT4KKzxsaT48cD5IQUxfQ0FOX0luaXQoKSBpcyBzcGxpdCBpbnRvIGJvdGggSEFMX0NBTl9Jbml0KCkgYW5kIEhBTF9DQU5fU3RhcnQoKTwvcD48L2xpPgorPGxpPjxwPkhBTF9DQU5fVHJhbnNtaXQoKSBpcyByZXBsYWNlZCBieSBIQUxfQ0FOX0FkZFR4TWVzc2FnZSgpIHRvIHBsYWNlIFR4IHJlcXVlc3QsIHRoZW4gSEFMX0NBTl9HZXRUeE1haWxib3hlc0ZyZWVMZXZlbCgpIGZvciBwb2xsaW5nIHVudGlsIGNvbXBsZXRpb248L3A+PC9saT4KKzxsaT48cD5IQUxfQ0FOX1RyYW5zbWl0X0lUKCkgaXMgcmVwbGFjZWQgYnkgSEFMX0NBTl9BY3RpdmF0ZU5vdGlmaWNhdGlvbigpIHRvIGVuYWJsZSB0cmFuc21pc3Npb24gd2l0aCBpbnRlcnJ1cHQgbW9kZSwgdGhlbiBIQUxfQ0FOX0FkZFR4TWVzc2FnZSgpIHRvIHBsYWNlIFR4IHJlcXVlc3Q8L3A+PC9saT4KKzxsaT48cD5IQUxfQ0FOX1JlY2VpdmUoKSBpcyByZXBsYWNlZCBieSBIQUxfQ0FOX0dldFJ4Rmlmb0ZpbGxMZXZlbCgpIGZvciBwb2xsaW5nIHVudGlsIHJlY2VwdGlvbiwgdGhlbiBIQUxfQ0FOX0dldFJ4TWVzc2FnZSgpIHRvIGdldCBSeCBtZXNzYWdlPC9wPjwvbGk+Cis8bGk+PHA+SEFMX0NBTl9SZWNlaXZlX0lUKCkgaXMgcmVwbGFjZWQgYnkgSEFMX0NBTl9BY3RpdmF0ZU5vdGlmaWNhdGlvbigpIHRvIGVuYWJsZSByZWNlcHRpb24gd2l0aCBpbnRlcnJ1cHQgbW9kZSwgdGhlbiBIQUxfQ0FOX0dldFJ4TWVzc2FnZSgpIGluIHRoZSByZWNlaXZlIGNhbGxiYWNrIHRvIGdldCBSeCBtZXNzYWdlPC9wPjwvbGk+Cis8bGk+PHA+SEFMX0NBTl9TbGVlcCgpIGlzIHJlbmFtZWQgdG8gSEFMX0NBTl9SZXF1ZXN0U2xlZXAoKTwvcD48L2xpPgorPGxpPjxwPkhBTF9DQU5fVHhDcGx0Q2FsbGJhY2soKSBpcyBzcGxpdCBpbnRvIEhBTF9DQU5fVHhNYWlsYm94MENvbXBsZXRlQ2FsbGJhY2soKSwgSEFMX0NBTl9UeE1haWxib3gxQ29tcGxldGVDYWxsYmFjaygpIGFuZCBIQUxfQ0FOX1R4TWFpbGJveDJDb21wbGV0ZUNhbGxiYWNrKCk8L3A+PC9saT4KIDxsaT48cD5IQUxfQ0FOX1J4Q3BsdENhbGxiYWNrKCkgaXMgc3BsaXQgaW50byBIQUxfQ0FOX1J4RmlmbzBNc2dQZW5kaW5nQ2FsbGJhY2soKSBhbmTCoEhBTF9DQU5fUnhGaWZvMU1zZ1BlbmRpbmdDYWxsYmFjaygpPC9wPjwvbGk+CiA8L3VsPgogPHA+TW9yZSBjb21wbGV0ZSAiaG93IHRvIHVzZSB0aGUgbmV3IGRyaXZlciIgaXMgZGV0YWlsZWQgaW4gdGhlIGRyaXZlciBoZWFkZXIgc2VjdGlvbiBpdHNlbGYuPC9wPgpAQCAtMTkyMyw3ICsxOTYwLDcgQEAKIDxsaT5GaXggTUlTUkEgQy0yMDA0IHJ1bGUgMTAuNsKgKCdVJyBzdWZmaXgpPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+Ci08cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5MTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3U+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxwPjxzdHJvbmc+TEwgQ1JDPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KQEAgLTE5NDUsMTIgKzE5ODIsMTIgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb241IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb241IiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuOC4xIC8gMTMtT2N0b2Jlci0yMDE3PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0xMCI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTExIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPk1haW50ZW5hbmNlIFJlbGVhc2Ugb2YgPHN0cm9uZz5IQUwgYW5kIExvdyBMYXllciBkcml2ZXJzPC9zdHJvbmc+PC9saT4KIDwvdWw+Ci08aDIgaWQ9ImNvbnRlbnRzLTEwIj5Db250ZW50czwvaDI+Ci08cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvc3Bhbj48L3N0cm9uZz48L3A+Cis8aDIgaWQ9ImNvbnRlbnRzLTExIj5Db250ZW50czwvaDI+Cis8cD48c3Ryb25nPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHA+PHN0cm9uZz5IQUzCoGdlbmVyaWM8L3N0cm9uZz4gZHJpdmVyPC9wPgogPHVsPgpAQCAtMjAwMSw3ICsyMDM4LDcgQEAKIDxsaT5GaXggUkRfV1JOIGJpdCBtYW5hZ2VtZW50IGluIGNhc2Ugb2YgU01CVVNfTk9fU1RBUlRTVE9QIHJlcXVlc3Q8L2xpPgogPC91bD48L2xpPgogPC91bD4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgorPHA+PHN0cm9uZz48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TEwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHA+KipMTERBQ8KgZHJpdmVyPC9wPgogPHVsPgpAQCAtMjAyNiwxOSArMjA2MywxOCBAQAogPC9kaXY+CiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uNiIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uNiIgYXJpYS1oaWRkZW49InRydWUiPlYxLjguMCAvIDI1LUF1Z3VzdC0yMDE3PC9sYWJlbD4KLTxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0xMSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEyIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPjxwPlJlbGVhc2Ugb2YgPHN0cm9uZz5IQUwgYW5kIExvdyBMYXllciBkcml2ZXJzPC9zdHJvbmc+IHRvIGFkZCBzdXBwb3J0IG9mIDxzdHJvbmc+U1RNMzJMNFI1eHgvU1RNMzJMNFI3eHgvU1RNMzJMNFI5eHgvU1RNMzJMNFM1eHgvU1RNMzJMNFM3eHgvU1RNMzJMNFM5eHg8L3N0cm9uZz4gZGV2aWNlczwvcD48L2xpPgogPGxpPjxwPk5ldyBPY3RvU1BJLCBEU0ksIExUREMsIEdGWE1NVSBwZXJpcGhlcmFscyBzdXBwb3J0ZWQgaW4gPHN0cm9uZz5uZXcgSEFMIE9TUEksIEhBTCBEU0ksIEhBTCBMVERDPC9zdHJvbmc+IGFuZCA8c3Ryb25nPkhBTCBHRlhNTVU8L3N0cm9uZz4gZHJpdmVyczwvcD48L2xpPgogPGxpPjxwPlN1cGVyc2V0IGZlYXR1cmVzIGRldmljZSBTVE0zMkw0Uzl4eCBBUEkgVXNlciBNYW51YWwgYXZhaWxhYmxlIChTVE0zMkw0Uzl4eF9Vc2VyX01hbnVhbC5jaG0pwqDCoDwvcD48L2xpPgogPC91bD4KIDxwPsKgwqDCoCAjIyBDb250ZW50czwvcD4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC91Pjwvc3Ryb25nPjwvcD4KIDx1bD4KLTxsaT48c3Ryb25nPkhBTCBEU0k8L3N0cm9uZz4gZHJpdmVyIDxzdHJvbmc+KE5FVyk8L3N0cm9uZz46IHN0bTMybDR4eF9oYWxfZHNpLmgvLmMgZmlsZXM8L2xpPgotPGxpPjxzdHJvbmc+SEFMIEdGWE1NVTwvc3Ryb25nPiBkcml2ZXIgPHN0cm9uZz4oTkVXKTwvc3Ryb25nPjpzdG0zMmw0eHhfaGFsX2dmeG1tdS5oLy5jIGZpbGVzPC9saT4KLTxsaT48c3Ryb25nPkhBTCBMVERDPC9zdHJvbmc+IGRyaXZlciA8c3Ryb25nPihORVcpPC9zdHJvbmc+OnN0bTMybDR4eF9oYWxfbHRkYy5oLy5jIGFuZCBleHRlbnNpb24gc3RtMzJsNHh4X2hhbF9sdGRjX2V4LmgvLmMgZmlsZXM8L2xpPgorPGxpPjxwPjxzdHJvbmc+SEFMIERTSTwvc3Ryb25nPiBkcml2ZXIgPHN0cm9uZz4oTkVXKTwvc3Ryb25nPjogc3RtMzJsNHh4X2hhbF9kc2kuaC8uYyBmaWxlczwvcD48L2xpPgorPGxpPjxwPjxzdHJvbmc+SEFMIEdGWE1NVTwvc3Ryb25nPiBkcml2ZXIgPHN0cm9uZz4oTkVXKTwvc3Ryb25nPjpzdG0zMmw0eHhfaGFsX2dmeG1tdS5oLy5jIGZpbGVzPC9wPjwvbGk+Cis8bGk+PHA+PHN0cm9uZz5IQUwgTFREQzwvc3Ryb25nPiBkcml2ZXIgPHN0cm9uZz4oTkVXKTwvc3Ryb25nPjpzdG0zMmw0eHhfaGFsX2x0ZGMuaC8uYyBhbmQgZXh0ZW5zaW9uIHN0bTMybDR4eF9oYWxfbHRkY19leC5oLy5jIGZpbGVzPC9wPjwvbGk+CiA8bGk+PHA+PHN0cm9uZz5IQUwgT1NQSTwvc3Ryb25nPiBkcml2ZXIgPHN0cm9uZz4oTkVXKTwvc3Ryb25nPjpzdG0zMmw0eHhfaGFsX29zcGkuaC8uYyBmaWxlczwvcD48L2xpPgogPGxpPjxwPjxzdHJvbmc+SEFMwqBnZW5lcmljPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KQEAgLTIwNjUsOSArMjEwMSw5IEBACiA8dWw+CiA8bGk+PHA+Rml4IERNQU1VWCBzeW5jaHJvbml6YXRpb24gc2lnbmFsIGNvbmZpZ3VyYXRpb24gaW4gSEFMX0RNQUV4X0NvbmZpZ011eFN5bmMoKTwvcD48L2xpPgogPGxpPjxwPlN1cHBvcnQgb2YgRE1BTVVYMSBwZXJpcGhlcmFsIHZpYSBuZXcgRE1BIEV4dGVuc2lvbiBBUElzPC9wPjwvbGk+Ci08bGk+SEFMX0RNQUV4X0NvbmZpZ011eFJlcXVlc3RHZW5lcmF0b3IoKTwvbGk+Ci08bGk+SEFMX0RNQUV4X0VuYWJsZU11eFJlcXVlc3RHZW5lcmF0b3IoKSwgSEFMX0RNQUV4X0Rpc2FibGVNdXhSZXF1ZXN0R2VuZXJhdG9yKCk8L2xpPgotPGxpPkhBTF9ETUFFeF9Db25maWdNdXhTeW5jKCk8L2xpPgorPGxpPjxwPkhBTF9ETUFFeF9Db25maWdNdXhSZXF1ZXN0R2VuZXJhdG9yKCk8L3A+PC9saT4KKzxsaT48cD5IQUxfRE1BRXhfRW5hYmxlTXV4UmVxdWVzdEdlbmVyYXRvcigpLCBIQUxfRE1BRXhfRGlzYWJsZU11eFJlcXVlc3RHZW5lcmF0b3IoKTwvcD48L2xpPgorPGxpPjxwPkhBTF9ETUFFeF9Db25maWdNdXhTeW5jKCk8L3A+PC9saT4KIDxsaT48cD5IQUxfRE1BRXhfTVVYX0lSUUhhbmRsZXIoKTwvcD48L2xpPgogPC91bD48L2xpPgogPGxpPjxwPjxzdHJvbmc+SEFMIERGU0RNPC9zdHJvbmc+IGRyaXZlciBleHRlbnNpb24gKG5ldyBzdG0zMmw0eHhfaGFsX2Rmc2RtX2V4LmgvLmMpPC9wPgpAQCAtMjExNSwxMCArMjE1MSwxMCBAQAogPC91bD48L2xpPgogPGxpPjxwPjxzdHJvbmc+SEFMIFJDQzwvc3Ryb25nPiBkcml2ZXLCoDwvcD4KIDx1bD4KLTxsaT5BZGQgY2xvY2sgbWFuYWdlbWVudCBvZiBuZXcgcGVyaXBoZXJhbHM6IERTSSwgR0ZYTU1VLCBMVERDLCBPU1BJMSwgT1NQSTIsIE9TUElNPC9saT4KLTxsaT5BZGQgT2N0b1NQSSBwZXJpcGhlcmFscyBjbG9jayBzb3VyY2UgZnJlcXVlbmN5IGNvbXB1dGF0aW9uIGluIEhBTF9SQ0NFeF9HZXRQZXJpcGhDTEtGcmVxKCk8L2xpPgotPGxpPkZpeCBpc3N1ZSB3aXRoIG1haW4gUExMIGRpdmlkZXIgTSB2YWx1ZSB0byBhbGxvdyAxIHRvIDE2IHZhbHVlIHJhbmdlIG9uwqBTVE0zMkw0UngvU1RNMzJMNFN4IGRldmljZXM8L2xpPgotPGxpPkZpeCBTRE1NQzEgY2xvY2sgc291cmNlIHNlbGVjdGlvbiBwb3NzaWJpbGl0aWVzIGluIEhBTF9SQ0NFeF9QZXJpcGhDTEtDb25maWcoKSwgX19IQUxfUkNDX1NETU1DMV9DT05GSUcoKSBhbmQgX19IQUxfUkNDX0dFVF9TRE1NQzFfU09VUkNFKCk8L2xpPgorPGxpPjxwPkFkZCBjbG9jayBtYW5hZ2VtZW50IG9mIG5ldyBwZXJpcGhlcmFsczogRFNJLCBHRlhNTVUsIExUREMsIE9TUEkxLCBPU1BJMiwgT1NQSU08L3A+PC9saT4KKzxsaT48cD5BZGQgT2N0b1NQSSBwZXJpcGhlcmFscyBjbG9jayBzb3VyY2UgZnJlcXVlbmN5IGNvbXB1dGF0aW9uIGluIEhBTF9SQ0NFeF9HZXRQZXJpcGhDTEtGcmVxKCk8L3A+PC9saT4KKzxsaT48cD5GaXggaXNzdWUgd2l0aCBtYWluIFBMTCBkaXZpZGVyIE0gdmFsdWUgdG8gYWxsb3cgMSB0byAxNiB2YWx1ZSByYW5nZSBvbsKgU1RNMzJMNFJ4L1NUTTMyTDRTeCBkZXZpY2VzPC9wPjwvbGk+Cis8bGk+PHA+Rml4IFNETU1DMSBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uIHBvc3NpYmlsaXRpZXMgaW4gSEFMX1JDQ0V4X1BlcmlwaENMS0NvbmZpZygpLCBfX0hBTF9SQ0NfU0RNTUMxX0NPTkZJRygpIGFuZCBfX0hBTF9SQ0NfR0VUX1NETU1DMV9TT1VSQ0UoKTwvcD48L2xpPgogPGxpPjxwPkZpeCBIQUxfUkNDRXhfR2V0UGVyaXBoQ0xLRnJlcSgpIHRvIHRha2UgaW50byBhY2NvdW50IFBMTFNBSTEgYW5kIFBMTFNBSTIgZGl2aWRlciBNIHZhbHVlcyAoMSB0byAxNiByYW5nZSkgb24gU1RNMzJMNFJ4L1NUTTMyTDRTeCBkZXZpY2VzPC9wPjwvbGk+CiA8bGk+PHA+QWRkIHVuZGVyc2hvb3Qvb3ZlcnNob290IG1hbmFnZW1lbnQgaW4gSEFMX1JDQ19DbG9ja0NvbmZpZygpIHdoZW4gc3dpdGNoaW5nIHRvL2Zyb20gc3lzdGVtIGNsb2NrIGZyb20gbWFpbiBQTEwgYWJvdmUgODBNaHo8L3A+PC9saT4KIDwvdWw+PC9saT4KQEAgLTIxNTEsMTEgKzIxODcsMTEgQEAKIDxsaT48cD48c3Ryb25nPkhBTCBTTUJVUzwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+CiA8bGk+QWRkIEFuYWxvZyBhbmQgZGlnaXRhbCBmaWx0ZXIgY29uZmlndXJhdGlvbiBBUElzOiBIQUxfU01CVVNfQ29uZmlnQW5hbG9nRmlsdGVyKCkgYW5kIEhBTF9TTUJVU19Db25maWdEaWdpdGFsRmlsdGVyKCnCoDwvbGk+Ci08bGk+QWRkIGVycm9yIG1hbmFnZW1lbnQgaWYgb2NjdXJyaW5nIGR1cmluZyBTVE9QIHByb2Nlc3M8L2xpPgorPGxpPkFkZCBlcnJvciBtYW5hZ2VtZW50IGlmIG9jY3VyaW5nIGR1cmluZyBTVE9QIHByb2Nlc3M8L2xpPgogPC91bD48L2xpPgogPGxpPjxwPjxzdHJvbmc+SEFMIFNQSTwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+Ci08bGk+QWRkIGNvbnRyb2wgb2YgUlhGSUZPIGVtcHR5IGF0IGVuZCBvZiB0cmFuc21pc3NpbmcgaW4gTWFzdGVyIHRyYW5zbWlzc2lvbiAyIGxpbmVzIG1vZGU8L2xpPgorPGxpPkFkZCBjb250cm9sIG9mIFJYRklGTyBlbXR5IGF0IGVuZCBvZiB0cmFuc21pc3NpbmcgaW4gTWFzdGVyIHRyYW5zbWlzc2lvbiAyIGxpbmVzIG1vZGU8L2xpPgogPC91bD48L2xpPgogPGxpPjxwPjxzdHJvbmc+SEFMIFNXUE1JPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KQEAgLTIxNzAsOSArMjIwNiw5IEBACiA8L3VsPjwvbGk+CiA8bGk+PHA+PHN0cm9uZz5IQUwgVUFSVDwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+Ci08bGk+QWRkIENsb2NrIFByZXNjYWxlciBtYW5hZ2VtZW50IGZvcsKgU1RNMzJMNFJ4L1NUTTMyTDRTeCBkZXZpY2VzIG9ubHk8L2xpPgotPGxpPlVBUlRfSW5pdFR5cGVEZWYgc3RydWN0dXJlIHVwZGF0ZSB0byBhZGQgQ2xvY2tQcmVzY2FsZXIgcGFyYW1ldGVyPGJyIC8+Ci08L2xpPgorPGxpPjxwPkFkZCBDbG9jayBQcmVzY2FsZXIgbWFuYWdlbWVudCBmb3LCoFNUTTMyTDRSeC9TVE0zMkw0U3ggZGV2aWNlcyBvbmx5PC9wPjwvbGk+Cis8bGk+PHA+VUFSVF9Jbml0VHlwZURlZiBzdHJ1Y3R1cmUgdXBkYXRlIHRvIGFkZCBDbG9ja1ByZXNjYWxlciBwYXJhbWV0ZXI8YnIgLz4KKzwvcD48L2xpPgogPGxpPjxwPkFkZCBGSUZPIG1vZGUgbWFuYWdlbWVudMKgZm9ywqBTVE0zMkw0UngvU1RNMzJMNFN4IGRldmljZXMgb25seTwvcD48L2xpPgogPGxpPjxwPm5ldyBIQUxfVUFSVEV4X0VuYWJsZUZpZm9Nb2RlKCksIEhBTF9VQVJURXhfRGlzYWJsZUZpZm9Nb2RlKCksIEhBTF9VQVJURXhfU2V0VHhGaWZvVGhyZXNob2xkKCksIEhBTF9VQVJURXhfU2V0UnhGaWZvVGhyZXNob2xkKCksIEhBTF9VQVJURXhfUnhGaWZvRnVsbENhbGxiYWNrKCkgYW5kIEhBTF9VQVJURXhfVHhGaWZvRW1wdHlDYWxsYmFjayBBUElzPC9wPjwvbGk+CiA8bGk+PHA+QWRkIFNQSSBTbGF2ZSBtb2RlIG1hbmFnZW1lbnTCoGZvcsKgU1RNMzJMNFJ4L1NUTTMyTDRTeCBkZXZpY2VzIG9ubHk8L3A+PC9saT4KQEAgLTIxODEsMTUgKzIyMTcsMTUgQEAKIDxsaT48cD48c3Ryb25nPkhBTCBVU0FSVDwvc3Ryb25nPiBkcml2ZXIgKG5ldyBzdG0zMmw0eHhfaGFsX3VzYXJ0X2V4LmMpPC9wPgogPHVsPgogPGxpPjxwPkFkZCBDbG9jayBQcmVzY2FsZXIgbWFuYWdlbWVudCBmb3LCoFNUTTMyTDRSeC9TVE0zMkw0U3ggZGV2aWNlcyBvbmx5PC9wPjwvbGk+Ci08bGk+VVNBUlRfSW5pdFR5cGVEZWYgc3RydWN0dXJlIHVwZGF0ZSB0byBhZGQgQ2xvY2tQcmVzY2FsZXIgcGFyYW1ldGVyPGJyIC8+Ci08L2xpPgorPGxpPjxwPlVTQVJUX0luaXRUeXBlRGVmIHN0cnVjdHVyZSB1cGRhdGUgdG8gYWRkIENsb2NrUHJlc2NhbGVyIHBhcmFtZXRlcjxiciAvPgorPC9wPjwvbGk+CiA8bGk+PHA+QWRkIEZJRk8gbW9kZSBtYW5hZ2VtZW50wqBmb3LCoFNUTTMyTDRSeC9TVE0zMkw0U3ggZGV2aWNlcyBvbmx5PC9wPjwvbGk+CiA8bGk+PHA+bmV3IEhBTF9VU0FSVEV4X0VuYWJsZUZpZm9Nb2RlKCksIEhBTF9VU0FSVEV4X0Rpc2FibGVGaWZvTW9kZSgpLCBIQUxfVVNBUlRFeF9TZXRUeEZpZm9UaHJlc2hvbGQoKSwgSEFMX1VTQVJURXhfU2V0UnhGaWZvVGhyZXNob2xkKCksIEhBTF9VU0FSVEV4X1J4Rmlmb0Z1bGxDYWxsYmFjaygpIGFuZCBIQUxfVVNBUlRFeF9UeEZpZm9FbXB0eUNhbGxiYWNrIEFQSXM8L3A+PC9saT4KIDxsaT48cD5BZGQgU1BJIFNsYXZlIG1vZGUgbWFuYWdlbWVudMKgZm9ywqBTVE0zMkw0UngvU1RNMzJMNFN4IGRldmljZXMgb25seTwvcD48L2xpPgogPGxpPjxwPm5ldyBIQUxfVVNBUlRFeF9FbmFibGVTbGF2ZU1vZGUoKSwgSEFMX1VTQVJURXhfRGlzYWJsZVNsYXZlTW9kZSgpIGFuZCBIQUxfVVNBUlRFeF9Db25maWdOU1MoKTwvcD48L2xpPgogPC91bD48L2xpPgogPC91bD4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgorPHA+PHN0cm9uZz48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TEwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8cD48c3Ryb25nPkxMIERNQU1VWDwvc3Ryb25nPiBkcml2ZXIgPHN0cm9uZz4oTkVXKTwvc3Ryb25nPjogc3RtMzJsNHh4X2xsX2RtYW11eC5oPC9wPgogPHA+PHN0cm9uZz5BbGwgTEw8L3N0cm9uZz4gZHJpdmVycyB1cGRhdGUgdG8gcmVtb3ZlIHVzYWdlIG9mIENNU0lTIFBPU0lUSU9OX1ZBTCgpIG1hY3JvIGFuZCByZXNvcnQgdG8geHhfUG9zIHBvc2l0aW9uIGJpdCBkZWZpbml0aW9uPC9wPgogPHVsPgpAQCAtMjIyNyw3ICsyMjYzLDcgQEAKIDxsaT48cD5MTF9QV1JfRW5hYmxlU1JBTTNSZXRlbnRpb24oKSwgTExfUFdSX0Rpc2FibGVTUkFNM1JldGVudGlvbigpIGFuZCBMTF9QV1JfSXNFbmFibGVkU1JBTTNSZXRlbnRpb24oKTwvcD48L2xpPgogPGxpPjxwPkFkZCB2b2x0YWdlIHJhbmdlIDEgYm9vc3QgbW9kZSBBUElzPC9wPjwvbGk+CiA8bGk+PHA+TExfUFdSX0VuYWJsZVJhbmdlMUJvb3N0TW9kZSgpLCBMTF9QV1JfRGlzYWJsZVJhbmdlMUJvb3N0TW9kZSgpIGFuZCBMTF9QV1JfSXNFbmFibGVkUmFuZ2UxQm9vc3RNb2RlKCk8L3A+PC9saT4KLTxsaT48cD5Gb3IgY29tcGF0aWJpbGl0eSBwdXJwb3NlIGFjcm9zcyBTVE0zMiBzZXJpZXMsIHJlbmFtZSBMTF9QV1JfSXNBY3RpdmVGbGFnX1ZPU0YoKSB0byBMTF9QV1JfSXNBY3RpdmVGbGFnX1ZPUygpPC9wPjwvbGk+Cis8bGk+PHA+Rm9yIGNvbXBhdGliaWxpdHkgcHVycG9zZSBhY2Nyb3NzIFNUTTMyIHNlcmllcywgcmVuYW1lIExMX1BXUl9Jc0FjdGl2ZUZsYWdfVk9TRigpIHRvIExMX1BXUl9Jc0FjdGl2ZUZsYWdfVk9TKCk8L3A+PC9saT4KIDxsaT48cD5BZGQgRFNJIHBpbnMgcHVsbC1kb3duIG1hbmFnZW1lbnQ8L3A+PC9saT4KIDxsaT48cD5uZXcgTExfUFdSX0VuYWJsZURTSVBpbnNQREFjdGl2YXRpb24oKSwgTExfUFdSX0Rpc2FibGVEU0lQaW5zUERBY3RpdmF0aW9uKCkgYW5kIExMX1BXUl9Jc0VuYWJsZWREU0lQaW5zUERBY3RpdmF0aW9uIEFQSXM8L3A+PC9saT4KIDwvdWw+PC9saT4KQEAgLTIyODAsMTYgKzIzMTYsMTUgQEAKIDwvdWw+PC9saT4KIDwvdWw+CiA8L2Rpdj4KLTwvZGl2PgogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjciIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjciIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS43LjIgLyAxNi1KdW5lLTIwMTc8L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEyIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTMiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+TWFpbnRlbmFuY2UgUmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyIGRyaXZlcnM8L3N0cm9uZz48L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtMTEiPkNvbnRlbnRzPC9oMj4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxoMiBpZD0iY29udGVudHMtMTIiPkNvbnRlbnRzPC9oMj4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC91Pjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48cD48c3Ryb25nPkhBTCBDQU48L3N0cm9uZz4gZHJpdmVyPC9wPgogPHVsPgpAQCAtMjI5OSw3ICsyMzM0LDcgQEAKIDx1bD4KIDxsaT5VcGRhdGUgb2YgSEFMX0NSQ0V4X1BvbHlub21pYWxfU2V0KCkgdG8gcmV0dXJuIGFuIGVycm9yIHdoZW4gYSBub24tc3VwcG9ydGVkIHBvbHlub21pYWwgbGVuZ3RoIGlzIHBhc3NlZCBhcyBwYXJhbWV0ZXI8L2xpPgogPC91bD48L2xpPgotPGxpPjxzdHJvbmc+SEFMIENSWVA8L3N0cm9uZz4gZHJpdmVyCis8bGk+PHA+PHN0cm9uZz5IQUwgQ1JZUDwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+CiA8bGk+VXBkYXRlIHplcm8gcGFkZGluZyBtYW5hZ2VtZW50IHdpdGggcmVzcGVjdCB0byBkYXRhIHR5cGU8L2xpPgogPGxpPlBoYXNlIHNldHRpbmcgYW5kIGNvbW1lbnRzIGNvcnJlY3Rpb24gaW4gY2FzZSBvZiBwYXlsb2FkIHBoYXNlIHN1c3BlbnNpb248L2xpPgpAQCAtMjMyMCw3ICsyMzU1LDcgQEAKIDxsaT5VcGRhdGUgb2YgY29udGV4dCBzd2FwIG1lY2hhbmlzbSBpbXBsZW1lbnRlZCBpbiBIQUxfSEFTSF9ETUFGZWVkX1Byb2Nlc3NTdXNwZW5kKCkgd2hlbiBpbnB1dCBkYXRhIGFyZSBmZWQgdG8gdGhlIElQIGJ5IERNQTwvbGk+CiA8L3VsPjwvbGk+CiA8L3VsPgotPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TEwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvc3Bhbj48L3N0cm9uZz48L3A+Cis8cD48c3Ryb25nPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5MTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC91Pjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48cD48c3Ryb25nPkxMIFJDQzwvc3Ryb25nPjwvcD4KIDx1bD4KQEAgLTIzNDAsMTIgKzIzNzUsMTIgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb244IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb244IiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuNy4xIC8gMjEtQXByaWwtMjAxNzwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMTMiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0xNCI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5NYWludGVuYW5jZSBSZWxlYXNlIG9mIDxzdHJvbmc+SEFMIGFuZCBMb3cgTGF5ZXIgZHJpdmVyczwvc3Ryb25nPjwvbGk+CiA8L3VsPgotPGgyIGlkPSJjb250ZW50cy0xMiI+Q29udGVudHM8L2gyPgotPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgorPGgyIGlkPSJjb250ZW50cy0xMyI+Q29udGVudHM8L2gyPgorPHA+PHN0cm9uZz48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3U+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxwPjxzdHJvbmc+SEFMwqBnZW5lcmljPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KQEAgLTIzNjgsNyArMjQwMyw3IEBACiA8bGk+QWRkIHdhaXQgZm9yIHN5bmNocm9uaXphdGlvbiBpbiBIQUxfUlRDX0luaXQoKSB0byBpbnN1cmUgUlRDIHRpbWUgaW5pdGlhbGl6YXRpb27CoDwvbGk+CiA8L3VsPjwvbGk+CiA8L3VsPgotPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TEwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvc3Bhbj48L3N0cm9uZz48L3A+Cis8cD48c3Ryb25nPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5MTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC91Pjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48cD48c3Ryb25nPkxMIEFEQzwvc3Ryb25nPjwvcD4KIDx1bD4KQEAgLTIzODQsNyArMjQxOSw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uOSIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uOSIgYXJpYS1oaWRkZW49InRydWUiPlYxLjcuMCAvIDE3LUZlYnJ1YXJ5LTIwMTc8L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTE0Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTUiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+UmVsZWFzZSBvZiA8c3Ryb25nPkhBTCBhbmQgTG93IExheWVyIGRyaXZlcnM8L3N0cm9uZz4gdG8gYWRkIHN1cHBvcnQgb2YgPHN0cm9uZz5TVE0zMkw0OTZ4eC9TVE0zMkw0QTZ4eDwvc3Ryb25nPiBkZXZpY2VzPC9saT4KIDxsaT5OZXcgRENNSSwgRE1BMkQsIEhBU0ggcGVyaXBoZXJhbHMgc3VwcG9ydGVkIGluIDxzdHJvbmc+bmV3IEhBTCBEQ01JLCBIQUwgJmFtcDsgTEwgRE1BMkQgYW5kIEhBTCBIQVNIPC9zdHJvbmc+IGRyaXZlcnM8L2xpPgpAQCAtMjM5Myw4ICsyNDI4LDggQEAKIDxsaT5TdXBlcnNldCBmZWF0dXJlcyBkZXZpY2UgU1RNMzJMNEE2eHggQVBJIFVzZXIgTWFudWFsIGF2YWlsYWJsZSAoU1RNMzJMNEE2eHhfVXNlcl9NYW51YWwuY2htKcKgPGJyIC8+CiA8L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtMTMiPkNvbnRlbnRzPC9oMj4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxoMiBpZD0iY29udGVudHMtMTQiPkNvbnRlbnRzPC9oMj4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC91Pjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48c3Ryb25nPkhBTCBEQ01JPC9zdHJvbmc+IGRyaXZlciA8c3Ryb25nPihORVcpPC9zdHJvbmc+OsKgc3RtMzJsNHh4X2hhbF9kY21pLmgvLmMgZmlsZXM8L2xpPgogPGxpPjxzdHJvbmc+SEFMIERNQTJEPC9zdHJvbmc+IGRyaXZlciA8c3Ryb25nPihORVcpPC9zdHJvbmc+OsKgc3RtMzJsNHh4X2hhbF9kbWEyZC5oLy5jIGZpbGVzPC9saT4KQEAgLTI0MTYsOCArMjQ1MSw4IEBACiA8bGk+PHA+PHN0cm9uZz5IQUwgZ2VuZXJpYzwvc3Ryb25nPiB1cGRhdGU8L3A+CiA8dWw+CiA8bGk+PHA+c3RtMzJsNHh4X2hhbF9jb25mX3RlbXBsYXRlLmggdXBkYXRlZCBmb3IgbmV3IEhBTCBEQ01JLCBIQUwgRE1BMkQgYW5kIEhBTCBIQVNIPC9wPjwvbGk+Ci08bGk+I2RlZmluZSBIQUxfRENNSV9NT0RVTEVfRU5BQkxFRDwvbGk+Ci08bGk+I2RlZmluZSBIQUxfRE1BMkRfTU9EVUxFX0VOQUJMRUQ8L2xpPgorPGxpPjxwPiNkZWZpbmUgSEFMX0RDTUlfTU9EVUxFX0VOQUJMRUQ8L3A+PC9saT4KKzxsaT48cD4jZGVmaW5lIEhBTF9ETUEyRF9NT0RVTEVfRU5BQkxFRDwvcD48L2xpPgogPGxpPjxwPiNkZWZpbmUgSEFMX0hBU0hfTU9EVUxFX0VOQUJMRUQ8L3A+PC9saT4KIDxsaT48cD5IQUxfRGVsYXkoKSB1cGRhdGVkIHRvIGd1YXJhbnRlZSBtaW5pbXVtIGRlbGF5PC9wPjwvbGk+CiA8L3VsPjwvbGk+CkBAIC0yNDY0LDcgKzI0OTksNyBAQAogPGxpPkZpeCBwZXJpcGhlcmFsIGNsb2NrIG1hbmFnZW1lbnQgc2VxdWVuY2UgaW4gSEFMX1NXUE1JX0luaXQoKTwvbGk+CiA8L3VsPjwvbGk+CiA8L3VsPgotPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TEwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvc3Bhbj48L3N0cm9uZz48L3A+Cis8cD48c3Ryb25nPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5MTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC91Pjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48cD48c3Ryb25nPkxMIERNQTJEPC9zdHJvbmc+wqBkcml2ZXIgPHN0cm9uZz4oTkVXKTwvc3Ryb25nPjwvcD48L2xpPgogPGxpPjxwPjxzdHJvbmc+TEwgQlVTPC9zdHJvbmc+PC9wPgpAQCAtMjQ3Myw3ICsyNTA4LDcgQEAKIDwvdWw+PC9saT4KIDxsaT48cD48c3Ryb25nPkxMIFBXUjwvc3Ryb25nPjwvcD4KIDx1bD4KLTxsaT5Gb3IgY29tcGF0aWJpbGl0eSBwdXJwb3NlIGFjcm9zcyBTVE0zMiBzZXJpZXMsIHJlbmFtZSBMTF9QV1JfSXNBY3RpdmVGbGFnX1ZPU0YoKSB0byBMTF9QV1JfSXNBY3RpdmVGbGFnX1ZPUygpPC9saT4KKzxsaT5Gb3IgY29tcGF0aWJpbGl0eSBwdXJwb3NlIGFjY3Jvc3MgU1RNMzIgc2VyaWVzLCByZW5hbWUgTExfUFdSX0lzQWN0aXZlRmxhZ19WT1NGKCkgdG8gTExfUFdSX0lzQWN0aXZlRmxhZ19WT1MoKTwvbGk+CiA8L3VsPjwvbGk+CiA8bGk+PHA+PHN0cm9uZz5MTCBSQ0M8L3N0cm9uZz48L3A+CiA8dWw+CkBAIC0yNDkzLDEzICsyNTI4LDEzIEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMTAiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjEwIiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuNi4wIC8gMjgtT2N0b2Jlci0yMDE2PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0xNSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTE2Ij5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPlJlbGVhc2Ugb2YgPHN0cm9uZz5IQUwgYW5kIExvdyBMYXllciBkcml2ZXJzPC9zdHJvbmc+IHRvIGFkZCBzdXBwb3J0IG9mIDxzdHJvbmc+U1RNMzJMNDUxeHgvU1RNMzJMNDUyeHgvU1RNMzJMNDYyeHg8L3N0cm9uZz4gZGV2aWNlczwvbGk+CiA8bGk+U3VwZXJzZXQgZmVhdHVyZXMgZGV2aWNlIFNUTTMyTDQ2Mnh4IEFQSSBVc2VyIE1hbnVhbCBhdmFpbGFibGUgKFNUTTMyTDQ2Mnh4X1VzZXJfTWFudWFsLmNobSk8L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtMTQiPkNvbnRlbnRzPC9oMj4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxoMiBpZD0iY29udGVudHMtMTUiPkNvbnRlbnRzPC9oMj4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC91Pjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48cD48c3Ryb25nPkhBTCBDUllQPC9zdHJvbmc+wqBkcml2ZXI8L3A+CiA8dWw+CkBAIC0yNTMyLDcgKzI1NjcsNyBAQAogPGxpPkhBTCBBREMsIEhBTCBDUkMsIEhBTCBDUllQLCBIQUwgSTJDLCBIQUwgSVJEQSwgSEFMIFNNQVJUQ0FSRCwgSEFMIFNNQlVTLCBIQUwgT1BBTVAsIEhBTCBSVEMsIEhBTCBVQVJULCBIQUwgVVNBUlQ8L2xpPgogPC91bD48L2xpPgogPC91bD4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgorPHA+PHN0cm9uZz48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TEwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHA+PHN0cm9uZz5MTCBJMkM8L3N0cm9uZz4gZHJpdmVyPC9wPgogPHVsPgpAQCAtMjU0NSw3ICsyNTgwLDcgQEAKIDxsaT48cD48c3Ryb25nPkxMIFRJTTwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+CiA8bGk+PHA+TmV3IEFQSXMgdG8gaW5zdXJlIEJEVFIgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gaW4gYSBzaW5nbGUgd3JpdGUgb3BlcmF0aW9uwqA8L3A+PC9saT4KLTxsaT5MTF9USU1fQkRUUl9TdHJ1Y3RJbml0KCk8L2xpPgorPGxpPjxwPkxMX1RJTV9CRFRSX1N0cnVjdEluaXQoKTwvcD48L2xpPgogPGxpPjxwPkxMX1RJTV9CRFRSX0luaXQoKTwvcD48L2xpPgogPC91bD48L2xpPgogPGxpPjxwPjxzdHJvbmc+TEwgVVRJTFM8L3N0cm9uZz4gZHJpdmVyPC9wPgpAQCAtMjU1Nyw5ICsyNTkyLDggQEAKIDwvZGl2PgogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjExIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xMSIgYXJpYS1oaWRkZW49InRydWUiPlYxLjUuMiAvIDEyLVNlcHRlbWJlci0yMDE2PC9sYWJlbD4KLTxkaXY+Ci08aDIgaWQ9ImNvbnRlbnRzLTE1Ij5Db250ZW50czwvaDI+Ci08cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvc3Bhbj48L3N0cm9uZz48L3A+Cis8aDIgaWQ9ImNvbnRlbnRzLTE2Ij5Db250ZW50czwvaDI+Cis8cD48c3Ryb25nPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHA+PHN0cm9uZz5IQUwgQURDPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KQEAgLTI2MTIsNyArMjY0Niw3IEBACiA8bGk+PHA+PHN0cm9uZz5IQUwgU1BJPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT48cD5VU0VfU1BJX0NSQ2NvbXBpbGF0aW9uIGRlZmluZSBhZGRlZCB0byBwcm92aWRlIHRoZSBtZWFuIHRvIG9wdGltaXplIHRoZSBIQUwgU1BJIGRyaXZlciB3aGVuIENSQyBmZWF0dXJlIGlzIG5vdCB1c2VkICh3aGVuIENSQyBpcyB1c2VkLCBhcHBsaWNhdGlvbiBtdXN0IGJlIGNoYW5nZWQgdG8gc2V0IFVTRV9TUElfQ1JDIGluIHN0bTMybDR4eF9oYWxfY29uZi5oIChzZWUgSW5jXHN0bTMybDR4eF9oYWxfY29uZl90ZW1wbGF0ZS5oKSk8L3A+PC9saT4KLTxsaT5BZGQgdHJhbnNmZXIgYWJvcnQgZnVuY3Rpb25zIGFuZCBhc3NvY2lhdGVkIGNhbGxiYWNrcyBpbiBpbnRlcnJ1cHQgbW9kZQorPGxpPjxwPkFkZCB0cmFuc2ZlciBhYm9ydCBmdW5jdGlvbnMgYW5kIGFzc29jaWF0ZWQgY2FsbGJhY2tzIGluIGludGVycnVwdCBtb2RlPC9wPgogPHVsPgogPGxpPkhBTF9TUElfQWJvcnQoKTwvbGk+CiA8bGk+SEFMX1NQSV9BYm9ydF9JVCgpPC9saT4KQEAgLTI2MjUsMjAgKzI2NTksMjAgQEAKIDwvdWw+PC9saT4KIDxsaT48cD48c3Ryb25nPkhBTCBVQVJUPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KLTxsaT5OZXcgQVBJcyB0byBhYm9ydMKgVUFSVCB0cmFuc2ZlciB3aXRoIGFzc29jaWF0ZWQgY2FsbGJhY2tzIGFkZGVkwqAKKzxsaT5OZXcgQVBJcyB0byBhYm9ydMKgVUFSVCB0cmFuZmVyIHdpdGggYXNzb2NpYXRlZCBjYWxsYmFja3MgYWRkZWTCoAogPHVsPgogPGxpPkhBTF9VQVJUX0Fib3J0KCksIEhBTF9VQVJUX0Fib3J0VHJhbnNtaXQoKSwgSEFMX1VBUlRfQWJvcnRSZWNlaXZlKCksIEhBTF9VQVJUX0Fib3J0X0lUKCksIEhBTF9VQVJUX0Fib3J0VHJhbnNtaXRfSVQoKSwgSEFMX1VBUlRfQWJvcnRSZWNlaXZlX0lUKCksIEhBTF9VQVJUX0Fib3J0Q3BsdENhbGxiYWNrKCksIEhBTF9VQVJUX0Fib3J0VHJhbnNtaXRDcGx0Q2FsbGJhY2soKSBhbmQgSEFMX1VBUlRfQWJvcnRSZWNlaXZlQ3BsdENhbGxiYWNrKCk8L2xpPgogPC91bD48L2xpPgogPC91bD48L2xpPgogPGxpPjxwPjxzdHJvbmc+SEFMwqBVU0FSVDwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+Ci08bGk+PHA+TmV3IEFQSXMgdG8gYWJvcnTCoFVTQVJUIHRyYW5zZmVyIHdpdGggYXNzb2NpYXRlZCBjYWxsYmFja3MgYWRkZWQ8L3A+Cis8bGk+PHA+TmV3IEFQSXMgdG8gYWJvcnTCoFVTQVJUIHRyYW5mZXIgd2l0aCBhc3NvY2lhdGVkIGNhbGxiYWNrcyBhZGRlZDwvcD4KIDx1bD4KIDxsaT5IQUxfVVNBUlRfQWJvcnQoKSwgSEFMX1VTQVJUX0Fib3J0X0lUKCkgYW5kIEhBTF9VU0FSVF9BYm9ydENwbHRDYWxsYmFjaygpPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+PC9saT4KIDwvdWw+Ci08cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5MTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3U+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxwPjxzdHJvbmc+TEwgQ09NUDwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+CkBAIC0yNjQ2LDEyICsyNjgwLDEwIEBACiA8L3VsPjwvbGk+CiA8L3VsPgogPC9kaXY+Ci08L2Rpdj4KIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xMiIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMTIiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS41LjEgLyAzMS1NYXktMjAxNjwvbGFiZWw+Ci08ZGl2PgotPGgyIGlkPSJjb250ZW50cy0xNiI+Q29udGVudHM8L2gyPgotPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgorPGgyIGlkPSJjb250ZW50cy0xNyI+Q29udGVudHM8L2gyPgorPHA+PHN0cm9uZz48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+SEFMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3U+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxwPjxzdHJvbmc+SEFMIEFEQzwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+CkBAIC0yNjYyLDcgKzI2OTQsNyBAQAogPGxpPkhBTF9DUkNfRGVJbml0KCkgcmVzZXRzIENSQ19JRFIgcmVnaXN0ZXIgdG8gcmVzZXQgdmFsdWU8L2xpPgogPC91bD48L2xpPgogPC91bD4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3NwYW4+PC9zdHJvbmc+PC9wPgorPHA+PHN0cm9uZz48dT48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TEwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHN0cm9uZz5MTCBCVVM8L3N0cm9uZz4gZHJpdmVyCiA8dWw+CkBAIC0yNjc0LDE2ICsyNzA2LDE1IEBACiA8L3VsPjwvbGk+CiA8L3VsPgogPC9kaXY+Ci08L2Rpdj4KIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xMyIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMTMiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS41LjAgLyAyOS1BcHJpbC0yMDE2PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0xNiI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTE3Ij5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPk1haW50ZW5hbmNlIFJlbGVhc2Ugb2YgPHN0cm9uZz5IQUwgYW5kIExvdyBMYXllciBkcml2ZXJzPC9zdHJvbmc+PC9saT4KIDwvdWw+Ci08aDIgaWQ9ImNvbnRlbnRzLTE3Ij5Db250ZW50czwvaDI+Ci08cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvc3Bhbj48L3N0cm9uZz48L3A+Cis8aDIgaWQ9ImNvbnRlbnRzLTE4Ij5Db250ZW50czwvaDI+Cis8cD48c3Ryb25nPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8cD5FbmhhbmNlIEhBTCBkZWxheSBhbmQgdGltZWJhc2UgaW1wbGVtZW50YXRpb248L3A+CiA8dWw+CiA8bGk+QWRkIG5ldyBkcml2ZXIgc3RtMzJsNHh4X2hhbF90aW1lYmFzZV90aW1fdGVtcGxhdGUuYyB3aGljaCBvdmVycmlkZXMgdGhlIG5hdGl2ZSBIQUwgdGltZSBiYXNlIGZ1bmN0aW9ucyAoZGVmaW5lZCBhcyB3ZWFrKSB0byB1c2UgdGhlIFRJTSBwZXJpcGhlcmFsIGFzIHRpbWUgYmFzZSB0aWNrIHNvdXJjZS7CoEZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIHVzYWdlIG9mIHRoaXMgZHJpdmVyLCBwbGVhc2UgcmVmZXIgdG8gSEFMXEhBTF9UaW1lQmFzZSBleGFtcGxlIGFuZCBGcmVlUlRPUy1iYXNlZCBhcHBsaWNhdGlvbnM8L2xpPgpAQCAtMjY5Niw3ICsyNzI3LDcgQEAKIDxsaT48cD5SQ0NfUExMU0FJMUluaXRUeXBlRGVmIGluY2x1ZGVzIFBMTFNBSTFTb3VyY2UgYW5kIFBMTFNBSTFNIG5ldyBmaWVsZHM8L3A+PC9saT4KIDxsaT48cD5SQ0NfUExMU0FJMkluaXRUeXBlRGVmIGluY2x1ZGVzIFBMTFNBSTJTb3VyY2UgYW5kIFBMTFNBSTJNIG5ldyBmaWVsZHM8L3A+PC9saT4KIDxsaT48cD5BZGQgbWlzc2luZyBSVEMgY2xvY2sgc291cmNlIGRlZmluaXRpb24gUkNDX1JUQ0NMS1NPVVJDRV9OT19DTEs8L3A+PC9saT4KLTxsaT5ERlNETSByZW5hbWluZyB0byBERlNETTHCoChwcmV2aW91cyBkZWZpbml0aW9ucyBwcmVzZXJ2ZWQgZm9yIGxlZ2FjeSBjb21wYXRpYmlsaXR5KQorPGxpPjxwPkRGU0RNIHJlbmFtaW5nIHRvIERGU0RNMcKgKHByZXZpb3VzIGRlZmluaXRpb25zIHByZXNlcnZlZCBmb3IgbGVnYWN5IGNvbXBhdGliaWxpdHkpPC9wPgogPHVsPgogPGxpPkFsbCBtYWNyb3MgX19IQUxfUkNDX0RGU0RNX3h4eCgpIHJlbmFtZWQgdG/CoF9fSEFMX1JDQ19ERlNETTFfeHh4KCk8L2xpPgogPGxpPkRmc2RtQ2xvY2tTZWxlY3Rpb24gZmllbGQgb2YgUkNDX1BlcmlwaENMS0luaXRUeXBlRGVmIHJlbmFtZWQgdG8gRGZzZG0xQ2xvY2tTZWxlY3Rpb248L2xpPgpAQCAtMjcxMiw3ICsyNzQzLDcgQEAKIDxsaT48cD48c3Ryb25nPkhBTCBJMkM8L3N0cm9uZz4gZHJpdmVyPC9wPgogPHVsPgogPGxpPjxwPlVwZGF0ZSB0byBhdm9pZCB3YWl0aW5nIG9uwqBTVE9QRi9CVEYvQUYgZmxhZyB1bmRlciBETUEgSVNSIGJ5IHVzaW5nIHRoZcKgUFBQIGVuZCBvZiB0cmFuc2ZlciBpbnRlcnJ1cHQgaW4gdGhlIERNQSB0cmFuc2ZlciBwcm9jZXNzLsKgVGhpcyByZXF1aXJlcyB0aGUgZm9sbG93aW5nIHVwZGF0ZXMgb27CoHVzZXIgYXBwbGljYXRpb246PC9wPjwvbGk+Ci08bGk+Q29uZmlndXJlIGFuZCBlbmFibGUgdGhlIEkyQ3ggSVJRIGluIEhBTF9JMkNfTXNwSW5pdCgpIGZ1bmN0aW9uPC9saT4KKzxsaT48cD5Db25maWd1cmUgYW5kIGVuYWJsZSB0aGUgSTJDeCBJUlEgaW4gSEFMX0kyQ19Nc3BJbml0KCkgZnVuY3Rpb248L3A+PC9saT4KIDxsaT48cD5JbsKgc3RtMzJsNHh4X2l0LmMgZmlsZSwgSTJDeF9JUlFIYW5kbGVyKCkgZnVuY3Rpb246wqBhZGQgYSBjYWxsIHRvIEhBTF9JMkNfSVJRSGFuZGxlcigpIGZ1bmN0aW9uPC9wPjwvbGk+CiA8L3VsPjwvbGk+CiA8bGk+PHA+PHN0cm9uZz5IQUzCoFVBUlQvVVNBUlQ8L3N0cm9uZz4gZHJpdmVyczwvcD4KQEAgLTI3NDAsOSArMjc3MSw5IEBACiA8L3VsPjwvbGk+CiA8bGk+PHA+PHN0cm9uZz5IQUwgUVNQSTwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+Ci08bGk+QWRkIFFTUEkgZXJyb3IgbWFuYWdlbWVudCBkdXJpbmcgRE1BIHByb2Nlc3M8L2xpPgotPGxpPkltcHJvdmUgdGhlIERNQSB0cmFuc21pdCBwcm9jZXNzIGJ5wqB1c2luZyBRU1BJIFRDIGludGVycnVwdCBpbnN0ZWFkIG9mIHdhaXRpbmcgb24gVEMgZmxhZyB1bmRlciBETUEgSVNSPC9saT4KLTxsaT5UaGVzZSB0d28gaW1wcm92ZW1lbnRzIHJlcXVpcmUgdGhlIGZvbGxvd2luZyB1cGRhdGVzIG9uwqB1c2VyIGFwcGxpY2F0aW9uOgorPGxpPjxwPkFkZCBRU1BJIGVycm9yIG1hbmFnZW1lbnQgZHVyaW5nIERNQSBwcm9jZXNzPC9wPjwvbGk+Cis8bGk+PHA+SW1wcm92ZSB0aGUgRE1BIHRyYW5zbWl0IHByb2Nlc3MgYnnCoHVzaW5nIFFTUEkgVEMgaW50ZXJydXB0IGluc3RlYWQgb2Ygd2FpdGluZyBvbiBUQyBmbGFnIHVuZGVyIERNQSBJU1I8L3A+PC9saT4KKzxsaT48cD5UaGVzZSB0d28gaW1wcm92ZW1lbnRzIHJlcXVpcmUgdGhlIGZvbGxvd2luZyB1cGRhdGVzIG9uwqB1c2VyIGFwcGxpY2F0aW9uOjwvcD4KIDx1bD4KIDxsaT5Db25maWd1cmUgYW5kIGVuYWJsZSB0aGUgUVNQScKgSVJRIGluIEhBTF9RU1BJX01zcEluaXQoKSBmdW5jdGlvbjwvbGk+CiA8bGk+SW7CoHN0bTMybDR4eF9pdC5jIGZpbGUswqBRU1BJX0lSUUhhbmRsZXIoKSBmdW5jdGlvbjrCoGFkZCBhIGNhbGwgdG8gSEFMX1FTUElfSVJRSGFuZGxlcigpIGZ1bmN0aW9uPC9saT4KQEAgLTI3NTMsMTEgKzI3ODQsMTEgQEAKIDxsaT5BZGQgbmV3IGNhbGxiYWNrIEhBTF9RU1BJX0Fib3J0Q3BsdENhbGxiYWNrKCkgdG8gaW5mb3JtIHVzZXIgYXQgdGhlIGVuZCBvZiBhYm9ydCBwcm9jZXNzPC9saT4KIDxsaT5BIG5ldyB2YWx1ZSBvZiBTdGF0ZSBpbiB0aGUgSEFMX1FTUElfU3RhdGVUeXBlRGVmIHByb3ZpZGVzIHRoZSBjdXJyZW50IHN0YXRlIGR1cmluZyB0aGUgYWJvcnQgcGhhc2U8L2xpPgogPC91bD48L2xpPgotPGxpPlBvbGxpbmcgbWFuYWdlbWVudCB1cGRhdGU6Cis8bGk+PHA+UG9sbGluZyBtYW5hZ2VtZW50IHVwZGF0ZTo8L3A+CiA8dWw+CiA8bGk+VGhlIHVzZXIgVGltZW91dCB2YWx1ZSBtdXN0IGJlIGVzdGltYXRlZCBmb3IgdGhlIG92ZXJhbGwgcHJvY2VzcyBkdXJhdGlvbjwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+Rml4IHdyb25nIGRhdGEgc2l6ZSBtYW5hZ2VtZW50IGluIEhBTF9RU1BJX1JlY2VpdmVfRE1BKCkKKzxsaT48cD5GaXggd3JvbmcgZGF0YSBzaXplIG1hbmFnZW1lbnQgaW4gSEFMX1FTUElfUmVjZWl2ZV9ETUEoKTwvcD4KIDx1bD4KIDxsaT5OZXcgQVBJIEhBTF9RU1BJX1NldEZpZm9UaHJlc2hvbGQoKSBhbmQgSEFMX1FTUElfR2V0Rmlmb1RocmVzaG9sZCgpPC9saT4KIDwvdWw+PC9saT4KQEAgLTI3ODcsMTQgKzI4MTgsMTQgQEAKIDxsaT48cD48c3Ryb25nPkhBTCBETUE8L3N0cm9uZz4gZHJpdmVyPC9wPgogPHVsPgogPGxpPjxwPkdsb2JhbCBkcml2ZXIgY29kZSBvcHRpbWl6YXRpb24gdG8gcmVkdWNlIG1lbW9yeSBmb290cHJpbnTCoDwvcD48L2xpPgotPGxpPk5ldyBBUElzIEhBTF9ETUFfUmVnaXN0ZXJDYWxsYmFjaygpIGFuZCBIQUxfRE1BX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyL3VucmVnaXN0ZXIgdGhlIGRpZmZlcmVudCBwb3NzaWJsZSBjYWxsYmFja3MgaWRlbnRpZmllZCBieSBlbnVtIHR5cGVkZWYgSEFMX0RNQV9DYWxsYmFja0lEVHlwZURlZjwvbGk+Ci08bGk+TmV3IEFQSSBIQUxfRE1BX0Fib3J0X0lUKCkgdG8gYWJvcnQgRE1BIHRyYW5zZmVyIGluIG5vbi1ibG9ja2luZyBtb2RlIGZvcsKgaW50ZXJydXB0IGNvbnRleHQ8L2xpPgotPGxpPlRoZSBuZXcgcmVnaXN0ZXJlZCBBYm9ydCBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiBETUEgdHJhbnNmZXIgYWJvcnRpb24gaXMgY29tcGxldGVkPC9saT4KLTxsaT5BZGQgbmV3IEVycm9yIENvZGVzOiBIQUxfRE1BX0VSUk9SX05PX1hGRVIgYW5kIEhBTF9ETUFfRVJST1JfTk9UX1NVUFBPUlRFRDwvbGk+Cis8bGk+PHA+TmV3IEFQSXMgSEFMX0RNQV9SZWdpc3RlckNhbGxiYWNrKCkgYW5kIEhBTF9ETUFfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIvdW5yZWdpc3RlciB0aGUgZGlmZmVyZW50IHBvc3NpYmxlIGNhbGxiYWNrcyBpZGVudGlmaWVkIGJ5IGVudW0gdHlwZWRlZiBIQUxfRE1BX0NhbGxiYWNrSURUeXBlRGVmPC9wPjwvbGk+Cis8bGk+PHA+TmV3IEFQSSBIQUxfRE1BX0Fib3J0X0lUKCkgdG8gYWJvcnQgRE1BIHRyYW5zZmVyIGluIG5vbi1ibG9ja2luZyBtb2RlIGZvcsKgaW50ZXJydXB0IGNvbnRleHQ8L3A+PC9saT4KKzxsaT48cD5UaGUgbmV3IHJlZ2lzdGVyZWQgQWJvcnQgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gRE1BIHRyYW5zZmVyIGFib3J0aW9uIGlzIGNvbXBsZXRlZDwvcD48L2xpPgorPGxpPjxwPkFkZCBuZXcgRXJyb3IgQ29kZXM6IEhBTF9ETUFfRVJST1JfTk9fWEZFUiBhbmQgSEFMX0RNQV9FUlJPUl9OT1RfU1VQUE9SVEVEPC9wPjwvbGk+CiA8bGk+PHA+QWRkIF9fSEFMX0RNQV9HRVRfQ09VTlRFUigpIG1hY3JvPGJyIC8+CiA8L3A+PC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkhBTCBDT01QPC9zdHJvbmc+IGRyaXZlcgorPGxpPjxwPjxzdHJvbmc+SEFMIENPTVA8L3N0cm9uZz4gZHJpdmVyPC9wPgogPHVsPgogPGxpPkVYVEkgY29uZmlndXJhdGlvbiBkb25lIGluIEhBTF9DT01QX0luaXQoKSBiYXNlZCBvbiBUcmlnZ2VyTW9kZSBmaWVsZCBvZiBDT01QX0luaXRUeXBlRGVmIHN0cnVjdHVyZTsgSEFMX0NPTVBfU3RhcnQoKS9IQUxfQ09NUF9TdG9wKCkgQVBJcyBhcmUgc3VmZmljaWVudCB0byBzdGFydCBhbmQgc3RvcCBjb21wYXJhdG9ycyAoSEFMX0NPTVBfU3RhcnRfSVQoKSBhbmQgSEFMX0NPTVBfU3RvcF9JVCgpIGFyZSBwcmVzZXJ2ZWQgZm9yIGxlZ2FjeSBjb21wYXRpYmlsaXR5KTwvbGk+CiA8bGk+QWRkIGNvbXBhcmF0b3Igc3RhcnR1cCB0aW1lIGFuZCBzY2FsZXIgYnJpZGdlwqBzdGFiaWxpemF0aW9uIHRpbWUgaW4gSEFMX0NPTVBfSW5pdCgpPC9saT4KQEAgLTI4MTUsNyArMjg0Niw3IEBACiA8bGk+Q09NUF9CTEFOS0lOR1NSQ0VfTk9ORSByZW5hbWVkIHRvIENPTVBfQkxBTktJTkdTUkNfTk9ORTwvbGk+CiA8L3VsPjwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+PHN0cm9uZz5IQUwgQ1JZUDwvc3Ryb25nPiBkcml2ZXIKKzxsaT48cD48c3Ryb25nPkhBTCBDUllQPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT5Tb2Z0d2FyZSB3b3JrYXJvdW5kIGZvciBBRVMgaXNzdWUgb24gR0NNIGVuY3J5cHRpb24gd2l0aCBwYXlsb2FkIGxlbmd0aCBub3QgYSBtdWx0aXBsZSBvZiAxMjggYml0czwvbGk+CiA8bGk+QWRkIHN1cHBvcnQgb2YgcGF5bG9hZCBsZW5ndGggbm90IG11bHRpcGxlIG9mIDMyIGJpdHM8YnIgLz4KQEAgLTI4MzAsNyArMjg2MSw3IEBACiA8L2xpPgogPC91bD48L2xpPgogPC91bD48L2xpPgotPGxpPjxzdHJvbmc+SEFMIEhDRDwvc3Ryb25nPiBkcml2ZXIKKzxsaT48cD48c3Ryb25nPkhBTCBIQ0Q8L3N0cm9uZz4gZHJpdmVyPC9wPgogPHVsPgogPGxpPkNsZWFyIE5BQ0sgZmxhZyBiZWZvcmUgcmUtZW5hYmxpbmcgdGhlIGNoYW5uZWwgZm9yIG5ldyBJTiByZXF1ZXN0PC9saT4KIDwvdWw+PC9saT4KQEAgLTI4NjIsMTggKzI4OTMsMTggQEAKIDxsaT5VcGRhdGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgaW7CoHZvbHRhZ2UgY2xhc3MgQjwvbGk+CiA8L3VsPjwvbGk+CiA8L3VsPgotPHA+PHN0cm9uZz48c3BhbiBjbGFzcz0idW5kZXJsaW5lIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogVmVyZGFuYTsgY29sb3I6IGJsYWNrOyI+TEwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvc3Bhbj48L3N0cm9uZz48L3A+Cis8cD48c3Ryb25nPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5MTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC91Pjwvc3Ryb25nPjwvcD4KIDx1bD4KLTxsaT48c3Ryb25nPkxMIEFEQzwvc3Ryb25nPiBkcml2ZXIKKzxsaT48cD48c3Ryb25nPkxMIEFEQzwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+CiA8bGk+Rml4IGluamVjdGVkIGNvbnZlcnNpb24gY29uZmlndXJhdGlvbiB3aXRoIFNXIHN0YXJ0IGluIExMX0FEQ19JTkpfQ29uZmlnUXVldWVDb250ZXh0KCk8L2xpPgogPC91bD48L2xpPgotPGxpPjxzdHJvbmc+TEwgQlVTPC9zdHJvbmc+IGRyaXZlcgorPGxpPjxwPjxzdHJvbmc+TEwgQlVTPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT5ERlNETSByZW5hbWluZyB0byBERlNETTHCoChwcmV2aW91cyBkZWZpbml0aW9ucyBwcmVzZXJ2ZWQgZm9yIGxlZ2FjeSBjb21wYXRpYmlsaXR5KTwvbGk+CiA8bGk+TExfQVBCMl9HUlAxX1BFUklQSF9ERlNETSByZW5hbWVkIHRvIExMX0FQQjJfR1JQMV9QRVJJUEhfREZTRE0xPC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkxMIENPTVA8L3N0cm9uZz4gZHJpdmVyCis8bGk+PHA+PHN0cm9uZz5MTCBDT01QPC9zdHJvbmc+IGRyaXZlcjwvcD4KIDx1bD4KIDxsaT5XaW5kb3cgbW9kZSByZW5hbWluZyB0byBoaWdobGlnaHQgQ29tcGFyYXRvciBpbnN0YW5jZXMgY29ubmVjdGlvbsKgKHByZXZpb3VzIGRlZmluaXRpb25zIHByZXNlcnZlZCBmb3IgbGVnYWN5IGNvbXBhdGliaWxpdHkpPC9saT4KIDxsaT5MTF9DT01QX1dJTkRPV01PREVfRU5BQkxFIHJlbmFtZWQgdG8gTExfQ09NUF9XSU5ET1dNT0RFX0NPTVAxX0lOUFVUX1BMVVNfQ09NTU9OPGJyIC8+CkBAIC0yODg2LDcgKzI5MTcsNyBAQAogPGxpPkxMX0NPTVBfQkxBTktJTkdTUkNFX1RJTThPQzUgcmVuYW1lZCB0byBMTF9DT01QX0JMQU5LSU5HU1JDX1RJTThfT0M1X0NPTVAyPC9saT4KIDxsaT5MTF9DT01QX0JMQU5LSU5HU1JDRV9USU0xNU9DMSByZW5hbWVkIHRvIExMX0NPTVBfQkxBTktJTkdTUkNfVElNMTVfT0MxX0NPTVAyPC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkxMIEkyQzwvc3Ryb25nPiBkcml2ZXIKKzxsaT48cD48c3Ryb25nPkxMIEkyQzwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+CiA8bGk+QWRkwqBTTUJ1cyBmZWF0dXJlIHN1cHBvcnQKIDx1bD4KQEAgLTI5MDIsNyArMjkzMyw3IEBACiA8bGk+TmV3IEFQSXMgTExfSTJDX0dlbmVyYXRlU3RvcENvbmRpdGlvbigpLCBMX0kyQ19HZW5lcmF0ZVN0YXJ0Q29uZGl0aW9uKCk8L2xpPgogPGxpPk5ldyBBUElzIExMX0kyQ19FbmFibGVBdXRvMTBCaXRSZWFkKCksIExMX0kyQ19EaXNhYmxlQXV0bzEwQml0UmVhZCgpIGFuZCBMTF9JMkNfSXNFbmFibGVkQXV0bzEwQml0UmVhZCgpPC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkxMIFBXUjwvc3Ryb25nPiBkcml2ZXIKKzxsaT48cD48c3Ryb25nPkxMIFBXUjwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+CiA8bGk+TmV3IEFQSXMgTExfUFdSX0VudGVyTG93UG93ZXJSdW5Nb2RlKCkgYW5kIExMX1BXUl9FeGl0TG93UG93ZXJSdW5Nb2RlKCk8L2xpPgogPC91bD48L2xpPgpAQCAtMjkxNSw3ICsyOTQ2LDcgQEAKIDwvdWw+PC9saT4KIDxsaT48cD48c3Ryb25nPkxMIFNZU1RFTTwvc3Ryb25nPiBkcml2ZXI8L3A+PC9saT4KIDxsaT48cD5OZXcgQVBJIExMX0ZMQVNIX0lzUHJlZmV0Y2hFbmFibGVkKCk8L3A+PC9saT4KLTxsaT48c3Ryb25nPkxMIFRJTTwvc3Ryb25nPiBkcml2ZXIKKzxsaT48cD48c3Ryb25nPkxMIFRJTTwvc3Ryb25nPiBkcml2ZXI8L3A+CiA8dWw+CiA8bGk+REZTRE0gcmVuYW1pbmcgdG8gREZTRE0xwqAocHJldmlvdXMgZGVmaW5pdGlvbnMgcHJlc2VydmVkIGZvciBsZWdhY3kgY29tcGF0aWJpbGl0eSk8L2xpPgogPGxpPkxMX1RJTV9CS0lOX1NPVVJDRV9ERkJLIHJlbmFtZWQgdG8gTExfVElNX0JLSU5fU09VUkNFX0RGMUJLPC9saT4KQEAgLTI5MjgsNyArMjk1OSw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMTQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjE0IiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuNC4wIC8gMjYtRmVicnVhcnktMjAxNjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMTciPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0xOCI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5SZWxlYXNlIG9mIDxzdHJvbmc+SEFMIGFuZCBMb3cgTGF5ZXIgZHJpdmVyczwvc3Ryb25nPiB0byBhZGQgc3VwcG9ydCBvZiA8c3Ryb25nPlNUTTMyTDQzMXh4L1NUTTMyTDQzMnh4L1NUTTMyTDQzM3h4L1NUTTMyTDQ0Mnh4L1NUTTMyTDQ0M3h4PC9zdHJvbmc+IGRldmljZXM8L2xpPgogPGxpPjxzdHJvbmc+TG93IExheWVyIGRyaXZlciBpbml0aWFsaXphdGlvbi9kZS1pbml0aWFsaXphdGlvbiBBUElzPC9zdHJvbmc+wqBhcHBsaWNhYmxlIHRvIGFsbCBTVE0zMkw0eHggZGV2aWNlczwvbGk+CkBAIC0yOTM2LDE0ICsyOTY3LDE0IEBACiA8bGk+U3VwZXJzZXQgZmVhdHVyZXMgZGV2aWNlIFNUTTMyTDQ0M3h4IEFQSSBVc2VyIE1hbnVhbCBhdmFpbGFibGUgKFNUTTMyTDQ0M3h4X1VzZXJfTWFudWFsLmNobSnCoDxiciAvPgogPC9saT4KIDwvdWw+Ci08aDIgaWQ9ImNvbnRlbnRzLTE4Ij5Db250ZW50czwvaDI+Ci08cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvc3Bhbj48L3N0cm9uZz48L3A+Cis8aDIgaWQ9ImNvbnRlbnRzLTE5Ij5Db250ZW50czwvaDI+Cis8cD48c3Ryb25nPjx1PjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5IQUwgZHJpdmVycyBjaGFuZ2VzPC9zcGFuPjwvdT48L3N0cm9uZz48L3A+CiA8dWw+CiA8bGk+PHA+PHN0cm9uZz5IQUw8L3N0cm9uZz4gZ2VuZXJpYyB1cGRhdGU8L3A+CiA8dWw+CiA8bGk+QWRkIGRlZmF1bHQgSFNJNDhfVkFMVUUgaW4gc3RtMzJsNHh4X2hhbF9jb25mX3RlbXBsYXRlPC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkhBTCBDUllQPC9zdHJvbmc+IHVwZGF0ZQorPGxpPjxwPjxzdHJvbmc+SEFMIENSWVA8L3N0cm9uZz4gdXBkYXRlPC9wPgogPHVsPgogPGxpPk5ldyBlcnJvciBjb2RlIEhBTF9DUllQX0JVU1lfRVJST1IgdG8gcmVqZWN0IG5ldyByZXF1ZXN0IHdoaWxlIG9uZ29pbmcgcHJvY2Vzc2luZzwvbGk+CiA8L3VsPjwvbGk+CkBAIC0yOTUyLDEzICsyOTgzLDEzIEBACiA8bGk+SW1wcm92ZW1lbnQgb2YgYmF1ZCByYXRlIGNvbXB1dGF0aW9uIGF0IGluaXRpYWxpemF0aW9uPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+Ci08cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5MTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3U+PC9zdHJvbmc+PC9wPgogPHVsPgotPGxpPk5ldyBDIGZpbGVzIHJlcXVpcmluZyB0byB1c2UgVVNFX0ZVTExfTExfRFJJVkVSIGNvbXBpbGF0aW9uIHN3aXRjaCBpbiB1c2VyIHByb2plY3QgdG8gYmVuZWZpdCBmcm9tIG5ldyBBUElzCis8bGk+PHA+TmV3IEMgZmlsZXMgcmVxdWlyaW5nIHRvIHVzZSBVU0VfRlVMTF9MTF9EUklWRVIgY29tcGlsYXRpb24gc3dpdGNoIGluIHVzZXIgcHJvamVjdCB0byBiZW5lZml0IGZyb20gbmV3IEFQSXM8L3A+CiA8dWw+CiA8bGk+c3RtMzJsNHh4X2xsX2Nycy5jPC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkxMIEJVUzwvc3Ryb25nPiB1cGRhdGUKKzxsaT48cD48c3Ryb25nPkxMIEJVUzwvc3Ryb25nPiB1cGRhdGU8L3A+CiA8dWw+CiA8bGk+QWRkIHJlYWQtYmFjayByZWdpc3RlciBvbiBjbG9jayBlbmFibGUgZnVuY3Rpb25zIHRvwqB0YWtlIGludG8gYWNjb3VudCBhbnkgZGVsYXkgb24gYnVzPC9saT4KIDwvdWw+PC9saT4KQEAgLTI5NzcsNyArMzAwOCw3IEBACiA8bGk+TExfQURDX09WU19EQVRBX1NISUZUX3h4eCByZW5hbWVkIHRvwqBMTF9BRENfT1ZTX1NISUZUX3h4eDwvbGk+CiA8L3VsPjwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+PHN0cm9uZz5MTCBEQUM8L3N0cm9uZz4gdXBkYXRlCis8bGk+PHA+PHN0cm9uZz5MTCBEQUM8L3N0cm9uZz4gdXBkYXRlPC9wPgogPHVsPgogPGxpPjxwPlRyaWdnZXIgc291cmNlcyByZW5hbWluZzo8L3A+CiA8dWw+CkBAIC0yOTg2LDExICszMDE3LDExIEBACiA8bGk+TExfREFDX1RSSUdHRVJfRVhUX0lUOSByZW5hbWVkIHRvIExMX0RBQ19UUklHX0VYVF9FWFRJX0xJTkU5PC9saT4KIDwvdWw+PC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkxMIExQVUFSVDwvc3Ryb25nPiB1cGRhdGUKKzxsaT48cD48c3Ryb25nPkxMIExQVUFSVDwvc3Ryb25nPiB1cGRhdGU8L3A+CiA8dWw+CiA8bGk+SW1wcm92ZW1lbnQgb2YgTFBVQVJURElWIHZhbHVlIGluIGJhdWQgcmF0ZSBjb21wdXRhdGlvbiBpbiBfX0xMX0xQVUFSVF9ESVYoKSBtYWNybzwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+PHN0cm9uZz5MTCBVU0FSVDwvc3Ryb25nPiB1cGRhdGUKKzxsaT48cD48c3Ryb25nPkxMIFVTQVJUPC9zdHJvbmc+IHVwZGF0ZTwvcD4KIDx1bD4KIDxsaT5JbXByb3ZlbWVudCBvZiBVU0FSVERJViB2YWx1ZSBpbiBiYXVkIHJhdGUgY29tcHV0YXRpb24gaW4gX19MTF9VU0FSVF9ESVZfU0FNUExJTkc4KCkgYW5kIF9fTExfVVNBUlRfRElWX1NBTVBMSU5HMTYoKSBtYWNyb3M8L2xpPgogPC91bD48L2xpPgpAQCAtMzAwMCw3ICszMDMxLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xNSIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMTUiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4zLjAgLyAyOS1KYW51YXJ5LTIwMTY8L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTE4Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMTkiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+PHN0cm9uZz5OZXcgTG93IExheWVyIGRyaXZlciBpbml0aWFsaXphdGlvbi9kZS1pbml0aWFsaXphdGlvbiBBUElzPC9zdHJvbmc+CiA8dWw+CkBAIC0zMDEzLDggKzMwNDQsOCBAQAogPC91bD48L2xpPgogPGxpPkZpeCAicGFyYW1ldGVyIHVudXNlZCIgR0NDIGNvbXBpbGF0aW9uIHdhcm5pbmdzIG9uIF9fd2VhayBmdW5jdGlvbnM8L2xpPgogPC91bD4KLTxoMiBpZD0iY29udGVudHMtMTkiPkNvbnRlbnRzPC9oMj4KLTxwPjxzdHJvbmc+PHNwYW4gY2xhc3M9InVuZGVybGluZSI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxoMiBpZD0iY29udGVudHMtMjAiPkNvbnRlbnRzPC9oMj4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkhBTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC91Pjwvc3Ryb25nPjwvcD4KIDx1bD4KIDxsaT48cD48c3Ryb25nPkhBTCBnZW5lcmljPC9zdHJvbmc+IHVwZGF0ZTwvcD4KIDx1bD4KQEAgLTMwNzcsNyArMzEwOCw3IEBACiA8bGk+QWRkIG1pc3NpbmcgVVNBUlRfU1RPUEJJVFNfMF81IGRlZmluaXRpb24gZm9yIGZyYW1lIHdpdGggMC41IHN0b3AgYml0PC9saT4KIDwvdWw+PC9saT4KIDwvdWw+Ci08cD48c3Ryb25nPjxzcGFuIGNsYXNzPSJ1bmRlcmxpbmUiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBjb2xvcjogYmxhY2s7Ij5MTCBkcml2ZXJzIGNoYW5nZXM8L3NwYW4+PC9zcGFuPjwvc3Ryb25nPjwvcD4KKzxwPjxzdHJvbmc+PHU+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTBwdDsgZm9udC1mYW1pbHk6IFZlcmRhbmE7IGNvbG9yOiBibGFjazsiPkxMIGRyaXZlcnMgY2hhbmdlczwvc3Bhbj48L3U+PC9zdHJvbmc+PC9wPgogPHVsPgogPGxpPjxwPjxzdHJvbmc+TEwgVVRJTFM8L3N0cm9uZz4gdXBkYXRlICh1c2VyIGNvZGUgaW1wYWN0ZWQhKTwvcD4KIDx1bD4KQEAgLTMxNjAsMTQgKzMxOTEsMTMgQEAKIDwvZGl2PgogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjE2IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xNiIgYXJpYS1oaWRkZW49InRydWUiPlYxLjIuMCAvIDI1LU5vdmVtYmVyLTIwMTU8L2xhYmVsPgotPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTE5Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMjAiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+Ci08bGk+PHN0cm9uZz5IQUwgZ2VuZXJpYzwvc3Ryb25nPiB1cGRhdGUKKzxsaT48cD48c3Ryb25nPkhBTCBnZW5lcmljPC9zdHJvbmc+IHVwZGF0ZTwvcD4KIDx1bD4KIDxsaT5SZWR1Y2UgZGVmYXVsdCBIU0Ugc3RhcnR1cCB0aW1lb3V0IHZhbHVlIHRvIDEwMG1zIGluIEluY1xzdG0zMmw0eHhfaGFsX2NvbmZfdGVtcGxhdGUuaCBmaWxlPC9saT4KIDwvdWw+PC9saT4KLTxsaT48c3Ryb25nPkhBTCBQV1I8L3N0cm9uZz4gdXBkYXRlIChVc2VyIGFwcGxpY2F0aW9uIGNvZGUgaW1wYWN0ZWQpCis8bGk+PHA+PHN0cm9uZz5IQUwgUFdSPC9zdHJvbmc+IHVwZGF0ZSAoVXNlciBhcHBsaWNhdGlvbiBjb2RlIGltcGFjdGVkKTwvcD4KIDx1bD4KIDxsaT5TdG9wIDEgd2l0aCBtYWluIHJlZ3VsYXRvciByZW5hbWVkIGludG8gU3RvcCAwLCB0byBiZSBhbGlnbmVkIHdpdGggbGF0ZXN0IHZlcnNpb24gb2YgUmVmZXJlbmNlIE1hbnVhbDwvbGk+CiA8bGk+Q2hhbmdlIEhBTF9QV1JFeF9FbnRlclNUT1AxTW9kZSh1aW50MzJfdCBSZWd1bGF0b3IsIHVpbnQ4X3QgU1RPUEVudHJ5KSBpbnRvIEhBTF9QV1JFeF9FbnRlclNUT1AxTW9kZSh1aW50OF90IFNUT1BFbnRyeSk8L2xpPgpAQCAtMzE3OSwxMCArMzIwOSwxMCBAQAogPHVsPgogPGxpPlByb3ZpZGUgY2FwYWJpbGl0eSB0byBydW4gY2FsaWJyYXRpb24gZGVzcGl0ZSBQR0EgbW9kZSBieSBzd2l0Y2hpbmcgdGVtcG9yYXJ5IHRvIHN0YW5kYWxvbmUgbW9kZTwvbGk+CiA8L3VsPjwvbGk+Ci08bGk+PHN0cm9uZz5IQUwgU0FJPC9zdHJvbmc+IHVwZGF0ZQorPGxpPjxwPjxzdHJvbmc+SEFMIFNBSTwvc3Ryb25nPiB1cGRhdGU8L3A+CiA8dWw+CiA8bGk+PHA+dXBkYXRlIFNBSSBibG9jayBzeW5jaHJvbml6YXRpb24gc2VsZWN0aW9uIChVc2VyIGFwcGxpY2F0aW9uIGNvZGUgaW1wYWN0ZWQpPC9wPjwvbGk+Ci08bGk+PHA+UmVwbGFjZSBpbmNvbXBsZXRlIFNBSV9TWU5DSFJPTk9VU19FWFQgdmFsdWUgZm9yIHdpdGggU0FJX1NZTkNIUk9OT1VTX0VYVF9TQUkxIGFuZCBTQUlfU1lOQ0hST05PVVNfRVhUX1NBSTI8L3A+PC9saT4KKzxsaT48cD5SZXBsYWNlIHVuY29tcGxldGUgU0FJX1NZTkNIUk9OT1VTX0VYVCB2YWx1ZSBmb3Igd2l0aCBTQUlfU1lOQ0hST05PVVNfRVhUX1NBSTEgYW5kIFNBSV9TWU5DSFJPTk9VU19FWFRfU0FJMjwvcD48L2xpPgogPGxpPjxwPlVwZGF0ZSBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24gaW5wdXQgc2VsZWN0aW9uIChVc2VyIGFwcGxpY2F0aW9uIGNvZGUgaW1wYWN0ZWQpPC9wPjwvbGk+CiA8bGk+PHA+UmVtb3ZlIHVzZWxlc3MgU0FJX1NZTkNFWFRfSU5fRU5BQkxFIHZhbHVlIGZvciBTeW5jaHJvRXh0IGZpZWxkIGluIFNBSV9Jbml0VHlwZURlZiBzdHJ1Y3R1cmU8L3A+PC9saT4KIDxsaT48cD5BZGQgc3VwcG9ydCBvZiAyNGJpdHMgY29uZmlndXJhdGlvbiBpbiBQQ00gcHJvdG9jb2w8L3A+PC9saT4KQEAgLTMxOTEsNyArMzIyMSw3IEBACiA8bGk+PHA+Rml4wqBtdXRlIGNvdW50ZXIgc2V0dGluZyBpbiBIQUxfU0FJX0VuYWJsZVJ4TXV0ZU1vZGUoKTwvcD48L2xpPgogPGxpPjxwPkZpeCBhbWJpZ3VvdXMgY2xvY2sgc3Ryb2JpbmcgdmFsdWVzOiBmaXggSEFMX1NBSV9Jbml0KCkgdG8gc2V0IGNvcnJlY3QgQ0tTVFIgYml0cyBpbiBTQUlfeENSMSBhY2NvcmRpbmcgdG8gQ2xvY2tTdHJvYmluZyBhbmQgQXVkaW9Nb2RlIHBhcmFtZXRlcnM8L3A+PC9saT4KIDxsaT48cD5GaWxsIGluIHRoZSBGaWZvIGJlZm9yZSBlbmFibGUgaW50ZXJydXB0IGluIEhBTF9TQUlfVHJhbnNtaXRfSVQoKTwvcD48L2xpPgotPGxpPkZpeMKgYXNzZXJ0IG9uIGFjdGl2ZSBzbG90IHNlbGVjdGlvbiBpbiBIQUxfU0FJX0luaXQoKTwvbGk+Cis8bGk+PHA+Rml4wqBhc3NlcnQgb24gYWN0aXZlIHNsb3Qgc2VsZWN0aW9uIGluIEhBTF9TQUlfSW5pdCgpPC9wPjwvbGk+CiA8bGk+PHA+Rml4IGNvbXBhbmRpbmcgbW9kZSBtYW5hZ2VtZW50IGluIEhBTF9TQUlfSW5pdCgpPGJyIC8+CiA8L3A+PC9saT4KIDwvdWw+PC9saT4KQEAgLTMyMTQsMTEgKzMyNDQsOSBAQAogPC91bD48L2xpPgogPC91bD4KIDwvZGl2PgotPC9kaXY+CiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMTciIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjE3IiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMS4xIC8gMTYtT2N0b2Jlci0yMDE1PC9sYWJlbD4KLTxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0yMCI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTIxIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPjxwPjxzdHJvbmc+SEFMIGdlbmVyaWM8L3N0cm9uZz4gdXBkYXRlPC9wPgogPHVsPgpAQCAtMzI0NCwxOSArMzI3MiwxOCBAQAogPC91bD48L2xpPgogPC91bD4KIDwvZGl2PgotPC9kaXY+CiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMjAiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjIwIiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMS4wIC8gMjYtU2VwdGVtYmVyLTIwMTU8L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTIxIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMjIiPk1haW4gQ2hhbmdlczwvaDI+CiA8cD48c3Ryb25nPkFkZCBMb3cgTGF5ZXIgZHJpdmVycyBhbGxvd2luZyBwZXJmb3JtYW5jZSBhbmQgZm9vdHByaW50IG9wdGltaXphdGlvbjwvc3Ryb25nPjwvcD4KIDx1bD4KLTxsaT5Mb3cgTGF5ZXIgZHJpdmVycyBBUElzIHByb3ZpZGUgcmVnaXN0ZXIgbGV2ZWwgcHJvZ3JhbW1pbmc6IHRoZXkgcmVxdWlyZSBkZWVwIGtub3dsZWRnZSBvZiBwZXJpcGhlcmFscyBkZXNjcmliZWQgaW4gU1RNMzJMNHg2IFJlZmVyZW5jZSBNYW51YWw8L2xpPgotPGxpPjxwPkxvdyBMYXllciBkcml2ZXJzIGFyZSBhdmFpbGFibGUgZm9yOiBBREMsIENPTVAsIENvcnRleCwgQ1JDLCBEQUMsIERNQSwgRVhUSSwgR1BJTywgSTJDLCBJV0RHLCBMUFlJTSwgTFBVQVJULCBPUEFNUCwgUFdSLCBSQ0MsIFJORywgUlRDLCBTUEksIFNXUE1JLCBUSU0sIFVTQVJULCBXV0RHIHBlcmlwaGVyYWxzIGFuZCBhZGRpdGlvbmFsIExvdyBMZXZlbCBCdXMsIFN5c3RlbSBhbmQgVXRpbGl0aWVzIEFQSXMuPGJyIC8+Cis8bGk+PHA+TG93IExheWVyIGRyaXZlcnMgQVBJcyBwcm92aWRlIHJlZ2lzdGVyIGxldmVsIHByb2dyYW1taW5nOiB0aGV5IHJlcXVpcmUgZGVlcCBrbm93bGVkZ2Ugb2YgcGVyaXBoZXJhbHMgZGVzY3JpYmVkIGluIFNUTTMyTDR4NiBSZWZlcmVuY2UgTWFudWFsPC9wPjwvbGk+Cis8bGk+PHA+TG93IExheWVyIGRyaXZlcnMgYXJlIGF2YWlsYWJsZSBmb3I6IEFEQywgQ09NUCwgQ29ydGV4LCBDUkMsIERBQywgRE1BLCBFWFRJLCBHUElPLCBJMkMsIElXREcsIExQWUlNLCBMUFVBUlQsIE9QQU1QLCBQV1IsIFJDQywgUk5HLCBSVEMsIFNQSSwgU1dQTUksIFRJTSwgVVNBUlQsIFdXREcgcGVyaXBoZXJhbHMgYW5kIGFkZGl0aW9ubmFsIExvdyBMZXZlbCBCdXMsIFN5c3RlbSBhbmQgVXRpbGl0aWVzIEFQSXMuPGJyIC8+CiA8L3A+PC9saT4KIDxsaT48cD5Mb3cgTGF5ZXIgZHJpdmVycyBBUElzIGFyZSBpbXBsZW1lbnRlZCBhcyBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGluIG5ldyBJbmMvc3RtMzJsNHh4X2xsX3BwcC5oIGZpbGVzIGZvciBQUFAgcGVyaXBoZXJhbHMsIHRoZXJlIGlzIG5vIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgZWFjaCBzdG0zMmw0eHhfbGxfcHBwLmggZmlsZSBtdXN0IGJlIGluY2x1ZGVkIGluIHVzZXIgY29kZS48L3A+PC9saT4KIDwvdWw+Ci08aDIgaWQ9ImNvbnRlbnRzLTIwIj5Db250ZW50czwvaDI+Cis8aDIgaWQ9ImNvbnRlbnRzLTIxIj5Db250ZW50czwvaDI+CiA8dWw+CiA8bGk+PHA+PHN0cm9uZz5IQUwgQURDPC9zdHJvbmc+IHVwZGF0ZTwvcD4KIDx1bD4KQEAgLTMyOTQsMTMgKzMzMjEsMTMgQEAKIDwvdWw+PC9saT4KIDxsaT48cD48c3Ryb25nPkhBTCBSQ0M8L3N0cm9uZz4gdXBkYXRlPC9wPgogPHVsPgotPGxpPkFkZCBMU0UgQ2xvY2sgU2VjdXJpdHkgU3lzdGVtIChDU1MpIG1hbmFnZW1lbnQgd2l0aCBuZXcgQVBJczogSEFMX1JDQ0V4X0VuYWJsZUxTRUNTU19JVCgpLCBIQUxfUkNDRXhfTFNFQ1NTX0lSUUhhbmRsZXIoKSBhbmQgSEFMX1JDQ0V4X0xTRUNTU19DYWxsYmFjaygpPC9saT4KLTxsaT5BZGQgUkNDX01DTzFTT1VSQ0VfTk9DTE9DSyB0byBwcm92aWRlIGNhcGFiaWxpdHkgdG8gZGlzYWJsZSBNQ08gb3V0cHV0IGluIEhBTF9SQ0NfTUNPQ29uZmlnKCk8L2xpPgotPGxpPlVwZGF0ZSBIQUxfUkNDX09zY0NvbmZpZygpIGFuZCBIQUxfUkNDRXhfUGVyaXBoQ0xLQ29uZmlnKCkgdG8ga2VlcCBiYWNrdXAgZG9tYWluIGVuYWJsZWQgd2hlbiBjb25maWd1cmluZyByZXNwZWN0aXZlbHnCoExTRSBhbmQgUlRDIGNsb2NrIHNvdXJjZTwvbGk+Ci08bGk+VXBkYXRlIEhBTF9SQ0NFeF9EaXNhYmxlUExMU0FJMSgpIGFuZCBIQUxfUkNDRXhfRGlzYWJsZVBMTFNBSTIoKSB0byBkaXNhYmxlIHJlc3BlY3RpdmVseSBQTExTQUkxIGFuZCBQTExTQUkyIGNsb2NrIG91dHB1dHM8L2xpPgorPGxpPjxwPkFkZCBMU0UgQ2xvY2sgU2VjdXJpdHkgU3lzdGVtIChDU1MpIG1hbmFnZW1lbnQgd2l0aCBuZXcgQVBJczogSEFMX1JDQ0V4X0VuYWJsZUxTRUNTU19JVCgpLCBIQUxfUkNDRXhfTFNFQ1NTX0lSUUhhbmRsZXIoKSBhbmQgSEFMX1JDQ0V4X0xTRUNTU19DYWxsYmFjaygpPC9wPjwvbGk+Cis8bGk+PHA+QWRkIFJDQ19NQ08xU09VUkNFX05PQ0xPQ0sgdG8gcHJvdmlkZSBjYXBhYmlsaXR5IHRvIGRpc2FibGUgTUNPIG91dHB1dCBpbiBIQUxfUkNDX01DT0NvbmZpZygpPC9wPjwvbGk+Cis8bGk+PHA+VXBkYXRlIEhBTF9SQ0NfT3NjQ29uZmlnKCkgYW5kIEhBTF9SQ0NFeF9QZXJpcGhDTEtDb25maWcoKSB0byBrZWVwIGJhY2t1cCBkb21haW4gZW5hYmxlZCB3aGVuIGNvbmZpZ3VyaW5nIHJlc3BlY3RpdmVsecKgTFNFIGFuZCBSVEMgY2xvY2sgc291cmNlPC9wPjwvbGk+Cis8bGk+PHA+VXBkYXRlIEhBTF9SQ0NFeF9EaXNhYmxlUExMU0FJMSgpIGFuZCBIQUxfUkNDRXhfRGlzYWJsZVBMTFNBSTIoKSB0byBkaXNhYmxlIHJlc3BlY3RpdmVseSBQTExTQUkxIGFuZCBQTExTQUkyIGNsb2NrIG91dHB1dHM8L3A+PC9saT4KIDxsaT48cD5VcGRhdGUgSEFMX1JDQ0V4X0dldFBlcmlwaENMS0ZyZXEoKSB0byByZXR1cm4gdGhlIGZyZXF1ZW5jeSBpbiBIeiBhcHBsaWVkIHRvIHBlcmlwaGVyYWxzIHZpYSBIQUxfUkNDRXhfUGVyaXBoQ0xLQ29uZmlnKCk8YnIgLz4KIDwvcD48L2xpPgotPGxpPlVwZGF0ZSBIQUxfUkNDX0RlSW5pdCgpIHRvIHNldCBkZWZhdWx0IE1TSSByYW5nZTwvbGk+Cis8bGk+PHA+VXBkYXRlIEhBTF9SQ0NfRGVJbml0KCkgdG8gc2V0IGRlZmF1bHQgTVNJIHJhbmdlPC9wPjwvbGk+CiA8bGk+PHA+UmVtb3ZlIG9sZCB3b3JrYXJvdW5kIG9uIExTRSBkcml2ZSBtZWRpdW0gY29uZmlndXJhdGlvbiB2YWx1ZXM8L3A+PC9saT4KIDwvdWw+PC9saT4KIDxsaT48cD48c3Ryb25nPkhBTCBTUEk8L3N0cm9uZz4gdXBkYXRlPC9wPgpAQCAtMzMyMCwxNCArMzM0NywxMiBAQAogPC9kaXY+CiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMTgiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjE4IiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMC4wIC8gMjYtSnVuZS0yMDE1PC9sYWJlbD4KLTxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0yMiI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTIzIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkZpcnN0IG9mZmljaWFsIHJlbGVhc2Ugb2YgPHN0cm9uZz5TVE0zMkw0eHggSEFMIERyaXZlcnM8L3N0cm9uZz4gZm9yIDxzdHJvbmc+U1RNMzJMNDcxeHgvU1RNMzJMNDc1eHgvU1RNMzJMNDc2eHgvU1RNMzJMNDg1eHg8L3N0cm9uZz4gYW5kIDxzdHJvbmc+U1RNMzJMNDg2eHg8L3N0cm9uZz4gZGV2aWNlczwvbGk+CiA8L3VsPgogPC9kaXY+Ci08L2Rpdj4KLTwvZGl2PgorPC9zZWN0aW9uPgogPC9kaXY+CiA8Zm9vdGVyIGNsYXNzPSJzdGlja3kiPgogPHA+Rm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24gb24gPG1hcms+U1RNMzIgTWljcm9jb250cm9sbGVyczwvbWFyaz4gLCB2aXNpdDogPGEgaHJlZj0iaHR0cDovL3d3dy5zdC5jb20vU1RNMzIiPmh0dHA6Ly93d3cuc3QuY29tL1NUTTMyPC9hPjwvcD4KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsLmMgYi9TcmMvc3RtMzJsNHh4X2hhbC5jCmluZGV4IDliNWNiMWQuLmJkOTFlODIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWwuYwpAQCAtNTMsNyArNTMsNyBAQAogICAgKi8KICNkZWZpbmUgU1RNMzJMNFhYX0hBTF9WRVJTSU9OX01BSU4gICAoMHgwMVUpIC8qITwgWzMxOjI0XSBtYWluIHZlcnNpb24gKi8KICNkZWZpbmUgU1RNMzJMNFhYX0hBTF9WRVJTSU9OX1NVQjEgICAoMHgwRFUpIC8qITwgWzIzOjE2XSBzdWIxIHZlcnNpb24gKi8KLSNkZWZpbmUgU1RNMzJMNFhYX0hBTF9WRVJTSU9OX1NVQjIgICAoMHgwMlUpIC8qITwgWzE1OjhdICBzdWIyIHZlcnNpb24gKi8KKyNkZWZpbmUgU1RNMzJMNFhYX0hBTF9WRVJTSU9OX1NVQjIgICAoMHgwM1UpIC8qITwgWzE1OjhdICBzdWIyIHZlcnNpb24gKi8KICNkZWZpbmUgU1RNMzJMNFhYX0hBTF9WRVJTSU9OX1JDICAgICAoMHgwMFUpIC8qITwgWzc6MF0gIHJlbGVhc2UgY2FuZGlkYXRlICovCiAjZGVmaW5lIFNUTTMyTDRYWF9IQUxfVkVSU0lPTiAgICAgICAgKChTVE0zMkw0WFhfSEFMX1ZFUlNJT05fTUFJTiAgPDwgMjRVKVwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChTVE0zMkw0WFhfSEFMX1ZFUlNJT05fU1VCMSA8PCAxNlUpXApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfYWRjLmMgYi9TcmMvc3RtMzJsNHh4X2hhbF9hZGMuYwppbmRleCAyZDdiOTA2Li45NjJjMzg0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9hZGMuYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9hZGMuYwpAQCAtMzM4Niw2ICszMzg2LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEFEQ19FbmFibGUoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMpCiB7CiAgIHVpbnQzMl90IHRpY2tzdGFydDsKKyAgX19JTyB1aW50MzJfdCB3YWl0X2xvb3BfaW5kZXggPSAwVUw7CiAKICAgLyogQURDIGVuYWJsZSBhbmQgd2FpdCBmb3IgQURDIHJlYWR5IChpbiBjYXNlIG9mIEFEQyBpcyBkaXNhYmxlZCBvciAgICAgICAgICovCiAgIC8qIGVuYWJsaW5nIHBoYXNlIG5vdCB5ZXQgY29tcGxldGVkOiBmbGFnIEFEQyByZWFkeSBub3QgeWV0IHNldCkuICAgICAgICAgICAqLwpAQCAtMzQwOSw2ICszNDEwLDI1IEBACiAgICAgLyogRW5hYmxlIHRoZSBBREMgcGVyaXBoZXJhbCAqLwogICAgIExMX0FEQ19FbmFibGUoaGFkYy0+SW5zdGFuY2UpOwogCisgICAgaWYoKExMX0FEQ19HZXRDb21tb25QYXRoSW50ZXJuYWxDaChfX0xMX0FEQ19DT01NT05fSU5TVEFOQ0UoaGFkYy0+SW5zdGFuY2UpKSAmIExMX0FEQ19QQVRIX0lOVEVSTkFMX1RFTVBTRU5TT1IpICE9IDBVTCkKKyAgICB7CisgICAgICAvKiBEZWxheSBmb3IgdGVtcGVyYXR1cmUgc2Vuc29yIGJ1ZmZlciBzdGFiaWxpemF0aW9uIHRpbWUgKi8KKyAgICAgIC8qIE5vdGU6IFZhbHVlIExMX0FEQ19ERUxBWV9URU1QU0VOU09SX1NUQUJfVVMgdXNlZCBpbnN0ZWFkIG9mICAgICAgKi8KKyAgICAgIC8qICAgICAgIExMX0FEQ19ERUxBWV9URU1QU0VOU09SX0JVRkZFUl9TVEFCX1VTIGJlY2F1c2UgbmVlZGVkICAgICAgKi8KKyAgICAgIC8qICAgICAgIGluIGNhc2Ugb2YgQURDIGVuYWJsZSBhZnRlciBhIHN5c3RlbSB3YWtlIHVwICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgIGZyb20gbG93IHBvd2VyIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgLyogV2FpdCBsb29wIGluaXRpYWxpemF0aW9uIGFuZCBleGVjdXRpb24gKi8KKyAgICAgIC8qIE5vdGU6IFZhcmlhYmxlIGRpdmlkZWQgYnkgMiB0byBjb21wZW5zYXRlIHBhcnRpYWxseSAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgIENQVSBwcm9jZXNzaW5nIGN5Y2xlcywgc2NhbGluZyBpbiB1cyBzcGxpdCB0byBub3QgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgIGV4Y2VlZCAzMiBiaXRzIHJlZ2lzdGVyIGNhcGFjaXR5IGFuZCBoYW5kbGUgbG93IGZyZXF1ZW5jeS4gKi8KKyAgICAgIHdhaXRfbG9vcF9pbmRleCA9ICgoTExfQURDX0RFTEFZX1RFTVBTRU5TT1JfU1RBQl9VUyAvIDEwVUwpICogKChTeXN0ZW1Db3JlQ2xvY2sgLyAoMTAwMDAwVUwgKiAyVUwpKSArIDFVTCkpOworICAgICAgd2hpbGUod2FpdF9sb29wX2luZGV4ICE9IDBVTCkKKyAgICAgIHsKKyAgICAgICAgd2FpdF9sb29wX2luZGV4LS07CisgICAgICB9CisgICAgfQorCiAgICAgLyogV2FpdCBmb3IgQURDIGVmZmVjdGl2ZWx5IGVuYWJsZWQgKi8KICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9jYW4uYyBiL1NyYy9zdG0zMmw0eHhfaGFsX2Nhbi5jCmluZGV4IGVlMmNiYjQuLmIzN2VhMDcgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX2Nhbi5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX2Nhbi5jCkBAIC0yMjYsOCArMjI2LDggQEAKICNpZmRlZiBIQUxfQ0FOX01PRFVMRV9FTkFCTEVECiAKICNpZmRlZiBIQUxfQ0FOX0xFR0FDWV9NT0RVTEVfRU5BQkxFRAotICAjZXJyb3IgIlRoZSBDQU4gZHJpdmVyIGNhbm5vdCBiZSB1c2VkIHdpdGggaXRzIGxlZ2FjeSwgUGxlYXNlIGVuYWJsZSBvbmx5IG9uZSBDQU4gbW9kdWxlIGF0IG9uY2UiCi0jZW5kaWYKKyNlcnJvciAiVGhlIENBTiBkcml2ZXIgY2Fubm90IGJlIHVzZWQgd2l0aCBpdHMgbGVnYWN5LCBQbGVhc2UgZW5hYmxlIG9ubHkgb25lIENBTiBtb2R1bGUgYXQgb25jZSIKKyNlbmRpZiAvKiBIQUxfQ0FOX0xFR0FDWV9NT0RVTEVfRU5BQkxFRCAqLwogCiAvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTU1NSw3ICs1NTUsOCBAQAogICAqIEBwYXJhbSAgcENhbGxiYWNrIHBvaW50ZXIgdG8gdGhlIENhbGxiYWNrIGZ1bmN0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfQ0FOX1JlZ2lzdGVyQ2FsbGJhY2soQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIEhBTF9DQU5fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgdm9pZCAoKiBwQ2FsbGJhY2spKENBTl9IYW5kbGVUeXBlRGVmICpfaGNhbikpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfQ0FOX1JlZ2lzdGVyQ2FsbGJhY2soQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIEhBTF9DQU5fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIHBDYWxsYmFjaykoQ0FOX0hhbmRsZVR5cGVEZWYgKl9oY2FuKSkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCkBAIC02NzUsNyArNjc2LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGEgQ0FOIENhbGxCYWNrLgotICAqICAgICAgICAgQ0FOIGNhbGxhYmNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqICAgICAgICAgQ0FOIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSAgaGNhbiBwb2ludGVyIHRvIGEgQ0FOX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDQU4gbW9kdWxlCiAgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKQEAgLTgzNSw3ICs4MzYsNyBAQAogICAqICAgICAgICAgY29udGFpbnMgdGhlIGZpbHRlciBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgogICAqIEByZXR2YWwgTm9uZQogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NBTl9Db25maWdGaWx0ZXIoQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIENBTl9GaWx0ZXJUeXBlRGVmICpzRmlsdGVyQ29uZmlnKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NBTl9Db25maWdGaWx0ZXIoQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIGNvbnN0IENBTl9GaWx0ZXJUeXBlRGVmICpzRmlsdGVyQ29uZmlnKQogewogICB1aW50MzJfdCBmaWx0ZXJuYnJiaXRwb3M7CiAgIENBTl9UeXBlRGVmICpjYW5faXAgPSBoY2FuLT5JbnN0YW5jZTsKQEAgLTExODgsNyArMTE4OSw3IEBACiAgICogICAgICAgICAgLSAwIDogU2xlZXAgbW9kZSBpcyBub3QgYWN0aXZlLgogICAqICAgICAgICAgIC0gMSA6IFNsZWVwIG1vZGUgaXMgYWN0aXZlLgogICAqLwotdWludDMyX3QgSEFMX0NBTl9Jc1NsZWVwQWN0aXZlKENBTl9IYW5kbGVUeXBlRGVmICpoY2FuKQordWludDMyX3QgSEFMX0NBTl9Jc1NsZWVwQWN0aXZlKGNvbnN0IENBTl9IYW5kbGVUeXBlRGVmICpoY2FuKQogewogICB1aW50MzJfdCBzdGF0dXMgPSAwVTsKICAgSEFMX0NBTl9TdGF0ZVR5cGVEZWYgc3RhdGUgPSBoY2FuLT5TdGF0ZTsKQEAgLTEyMTksNyArMTIyMCw4IEBACiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAYXJnIENBTl9UeF9NYWlsYm94ZXMuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfQ0FOX0FkZFR4TWVzc2FnZShDQU5fSGFuZGxlVHlwZURlZiAqaGNhbiwgQ0FOX1R4SGVhZGVyVHlwZURlZiAqcEhlYWRlciwgdWludDhfdCBhRGF0YVtdLCB1aW50MzJfdCAqcFR4TWFpbGJveCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9DQU5fQWRkVHhNZXNzYWdlKENBTl9IYW5kbGVUeXBlRGVmICpoY2FuLCBjb25zdCBDQU5fVHhIZWFkZXJUeXBlRGVmICpwSGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCBhRGF0YVtdLCB1aW50MzJfdCAqcFR4TWFpbGJveCkKIHsKICAgdWludDMyX3QgdHJhbnNtaXRtYWlsYm94OwogICBIQUxfQ0FOX1N0YXRlVHlwZURlZiBzdGF0ZSA9IGhjYW4tPlN0YXRlOwpAQCAtMTI1MCwxNSArMTI1Miw2IEBACiAgICAgICAvKiBTZWxlY3QgYW4gZW1wdHkgdHJhbnNtaXQgbWFpbGJveCAqLwogICAgICAgdHJhbnNtaXRtYWlsYm94ID0gKHRzciAmIENBTl9UU1JfQ09ERSkgPj4gQ0FOX1RTUl9DT0RFX1BvczsKIAotICAgICAgLyogQ2hlY2sgdHJhbnNtaXQgbWFpbGJveCB2YWx1ZSAqLwotICAgICAgaWYgKHRyYW5zbWl0bWFpbGJveCA+IDJVKQotICAgICAgewotICAgICAgICAvKiBVcGRhdGUgZXJyb3IgY29kZSAqLwotICAgICAgICBoY2FuLT5FcnJvckNvZGUgfD0gSEFMX0NBTl9FUlJPUl9JTlRFUk5BTDsKLQotICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgICAgfQotCiAgICAgICAvKiBTdG9yZSB0aGUgVHggbWFpbGJveCAqLwogICAgICAgKnBUeE1haWxib3ggPSAodWludDMyX3QpMSA8PCB0cmFuc21pdG1haWxib3g7CiAKQEAgLTEzNzYsNyArMTM2OSw3IEBACiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBDQU4uCiAgICogQHJldHZhbCBOdW1iZXIgb2YgZnJlZSBUeCBNYWlsYm94ZXMuCiAgICovCi11aW50MzJfdCBIQUxfQ0FOX0dldFR4TWFpbGJveGVzRnJlZUxldmVsKENBTl9IYW5kbGVUeXBlRGVmICpoY2FuKQordWludDMyX3QgSEFMX0NBTl9HZXRUeE1haWxib3hlc0ZyZWVMZXZlbChjb25zdCBDQU5fSGFuZGxlVHlwZURlZiAqaGNhbikKIHsKICAgdWludDMyX3QgZnJlZWxldmVsID0gMFU7CiAgIEhBTF9DQU5fU3RhdGVUeXBlRGVmIHN0YXRlID0gaGNhbi0+U3RhdGU7CkBAIC0xNDE5LDcgKzE0MTIsNyBAQAogICAqICAgICAgICAgIC0gMSA6IFBlbmRpbmcgdHJhbnNtaXNzaW9uIHJlcXVlc3Qgb24gYXQgbGVhc3Qgb25lIG9mIHRoZSBzZWxlY3RlZAogICAqICAgICAgICAgICAgICAgIFR4IE1haWxib3guCiAgICovCi11aW50MzJfdCBIQUxfQ0FOX0lzVHhNZXNzYWdlUGVuZGluZyhDQU5fSGFuZGxlVHlwZURlZiAqaGNhbiwgdWludDMyX3QgVHhNYWlsYm94ZXMpCit1aW50MzJfdCBIQUxfQ0FOX0lzVHhNZXNzYWdlUGVuZGluZyhjb25zdCBDQU5fSGFuZGxlVHlwZURlZiAqaGNhbiwgdWludDMyX3QgVHhNYWlsYm94ZXMpCiB7CiAgIHVpbnQzMl90IHN0YXR1cyA9IDBVOwogICBIQUxfQ0FOX1N0YXRlVHlwZURlZiBzdGF0ZSA9IGhjYW4tPlN0YXRlOwpAQCAtMTQ1MSw3ICsxNDQ0LDcgQEAKICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgdmFsdWUgb2YgQGFyZyBDQU5fVHhfTWFpbGJveGVzLgogICAqIEByZXR2YWwgVGltZXN0YW1wIG9mIG1lc3NhZ2Ugc2VudCBmcm9tIFR4IE1haWxib3guCiAgICovCi11aW50MzJfdCBIQUxfQ0FOX0dldFR4VGltZXN0YW1wKENBTl9IYW5kbGVUeXBlRGVmICpoY2FuLCB1aW50MzJfdCBUeE1haWxib3gpCit1aW50MzJfdCBIQUxfQ0FOX0dldFR4VGltZXN0YW1wKGNvbnN0IENBTl9IYW5kbGVUeXBlRGVmICpoY2FuLCB1aW50MzJfdCBUeE1haWxib3gpCiB7CiAgIHVpbnQzMl90IHRpbWVzdGFtcCA9IDBVOwogICB1aW50MzJfdCB0cmFuc21pdG1haWxib3g7CkBAIC0xNDg1LDcgKzE0NzgsOCBAQAogICAqIEBwYXJhbSAgYURhdGEgYXJyYXkgd2hlcmUgdGhlIHBheWxvYWQgb2YgdGhlIFJ4IGZyYW1lIHdpbGwgYmUgc3RvcmVkLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NBTl9HZXRSeE1lc3NhZ2UoQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIHVpbnQzMl90IFJ4RmlmbywgQ0FOX1J4SGVhZGVyVHlwZURlZiAqcEhlYWRlciwgdWludDhfdCBhRGF0YVtdKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NBTl9HZXRSeE1lc3NhZ2UoQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIHVpbnQzMl90IFJ4RmlmbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTl9SeEhlYWRlclR5cGVEZWYgKnBIZWFkZXIsIHVpbnQ4X3QgYURhdGFbXSkKIHsKICAgSEFMX0NBTl9TdGF0ZVR5cGVEZWYgc3RhdGUgPSBoY2FuLT5TdGF0ZTsKIApAQCAtMTUyNiw3ICsxNTIwLDggQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIHBIZWFkZXItPkV4dElkID0gKChDQU5fUkkwUl9FWElEIHwgQ0FOX1JJMFJfU1RJRCkgJiBoY2FuLT5JbnN0YW5jZS0+c0ZJRk9NYWlsQm94W1J4Rmlmb10uUklSKSA+PiBDQU5fUkkwUl9FWElEX1BvczsKKyAgICAgIHBIZWFkZXItPkV4dElkID0gKChDQU5fUkkwUl9FWElEIHwgQ0FOX1JJMFJfU1RJRCkgJgorICAgICAgICAgICAgICAgICAgICAgICAgaGNhbi0+SW5zdGFuY2UtPnNGSUZPTWFpbEJveFtSeEZpZm9dLlJJUikgPj4gQ0FOX1JJMFJfRVhJRF9Qb3M7CiAgICAgfQogICAgIHBIZWFkZXItPlJUUiA9IChDQU5fUkkwUl9SVFIgJiBoY2FuLT5JbnN0YW5jZS0+c0ZJRk9NYWlsQm94W1J4Rmlmb10uUklSKTsKICAgICBwSGVhZGVyLT5ETEMgPSAoQ0FOX1JEVDBSX0RMQyAmIGhjYW4tPkluc3RhbmNlLT5zRklGT01haWxCb3hbUnhGaWZvXS5SRFRSKSA+PiBDQU5fUkRUMFJfRExDX1BvczsKQEAgLTE1NzUsNyArMTU3MCw3IEBACiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAYXJnIENBTl9yZWNlaXZlX0ZJRk9fbnVtYmVyLgogICAqIEByZXR2YWwgTnVtYmVyIG9mIG1lc3NhZ2VzIGF2YWlsYWJsZSBpbiBSeCBGSUZPLgogICAqLwotdWludDMyX3QgSEFMX0NBTl9HZXRSeEZpZm9GaWxsTGV2ZWwoQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4sIHVpbnQzMl90IFJ4RmlmbykKK3VpbnQzMl90IEhBTF9DQU5fR2V0UnhGaWZvRmlsbExldmVsKGNvbnN0IENBTl9IYW5kbGVUeXBlRGVmICpoY2FuLCB1aW50MzJfdCBSeEZpZm8pCiB7CiAgIHVpbnQzMl90IGZpbGxsZXZlbCA9IDBVOwogICBIQUxfQ0FOX1N0YXRlVHlwZURlZiBzdGF0ZSA9IGhjYW4tPlN0YXRlOwpAQCAtMjM0Myw3ICsyMzM4LDcgQEAKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIENBTi4KICAgKiBAcmV0dmFsIEhBTCBzdGF0ZQogICAqLwotSEFMX0NBTl9TdGF0ZVR5cGVEZWYgSEFMX0NBTl9HZXRTdGF0ZShDQU5fSGFuZGxlVHlwZURlZiAqaGNhbikKK0hBTF9DQU5fU3RhdGVUeXBlRGVmIEhBTF9DQU5fR2V0U3RhdGUoY29uc3QgQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4pCiB7CiAgIEhBTF9DQU5fU3RhdGVUeXBlRGVmIHN0YXRlID0gaGNhbi0+U3RhdGU7CiAKQEAgLTIzNzgsNyArMjM3Myw3IEBACiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBDQU4uCiAgICogQHJldHZhbCBDQU4gRXJyb3IgQ29kZQogICAqLwotdWludDMyX3QgSEFMX0NBTl9HZXRFcnJvcihDQU5fSGFuZGxlVHlwZURlZiAqaGNhbikKK3VpbnQzMl90IEhBTF9DQU5fR2V0RXJyb3IoY29uc3QgQ0FOX0hhbmRsZVR5cGVEZWYgKmhjYW4pCiB7CiAgIC8qIFJldHVybiBDQU4gZXJyb3IgY29kZSAqLwogICByZXR1cm4gaGNhbi0+RXJyb3JDb2RlOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfY3J5cF9leC5jIGIvU3JjL3N0bTMybDR4eF9oYWxfY3J5cF9leC5jCmluZGV4IGFiZTY1YzguLmRhMWE2ZWIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX2NyeXBfZXguYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9jcnlwX2V4LmMKQEAgLTI0NTgsNyArMjQ1OCw3IEBACiAgICAgICAgICAgICBpbnRlcm1lZGlhdGVfZGF0YVsoKGRpZmZsZW5ndGgrM1UpLzRVKStpbmRleF0gPSAwOwogICAgICAgICAgIH0KIAotICAgICAgICAgIC8qIEluc2VydCBpbnRlcm1lZGlhdGUgZGF0YSB0byB0cmlnZ2VyIGFuIGFkZGl0aW9uYWwgRGF0YSBPdXRwdXQgcmVnaXN0ZXIgcmVhZGluZyByb3VuZCAqLworICAgICAgICAgIC8qIEluc2VydCBpbnRlcm1lZGlhdGUgZGF0YSB0byB0cmlnZ2VyIGFuIGFkZGl0aW9uYWwgRE9VVFIgcmVhZGluZyByb3VuZCAqLwogICAgICAgICAgIC8qIENsZWFyIENvbXB1dGF0aW9uIENvbXBsZXRlIEZsYWcgYmVmb3JlIGVudGVyaW5nIG5ldyBibG9jayAqLwogICAgICAgICAgIF9fSEFMX0NSWVBfQ0xFQVJfRkxBRyhoY3J5cCwgQ1JZUF9DQ0ZfQ0xFQVIpOwogICAgICAgICAgIGZvcihpbmRleD0wVSA7IGluZGV4IDwgNFU7IGluZGV4ICsrKQpAQCAtMjUxMyw3ICsyNTEzLDcgQEAKICNpZiAhZGVmaW5lZChBRVNfQ1JfTlBCTEIpCiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgIC8qIFNvZnR3YXJlIHdvcmstYXJvdW5kOiBhZGRpdGlvbmFsIERhdGEgT3V0cHV0IFJlZ2lzdGVyIHJlYWRpbmcgcm91bmQgdG8gZGlzY2FyZCB0aGUgZGF0YSAqLworICAgICAgICAgIC8qIFNvZnR3YXJlIHdvcmstYXJvdW5kOiBhZGRpdGlvbmFsIERPVVRSIHJlYWRpbmcgcm91bmQgdG8gZGlzY2FyZCB0aGUgZGF0YSAqLwogICAgICAgICAgIGZvcihpbmRleD0wVSA7IGluZGV4IDwgNFU7IGluZGV4ICsrKQogICAgICAgICAgIHsKICAgICAgICAgICAgIGludGVybWVkaWF0ZV9kYXRhW2luZGV4XSA9IGhjcnlwLT5JbnN0YW5jZS0+RE9VVFI7CkBAIC0zMjA2LDcgKzMyMDYsNyBAQAogICAgICAgICBoY3J5cC0+SW5zdGFuY2UtPkRJTlIgPSBpbnRlcm1lZGlhdGVfZGF0YVtpbmRleF07CiAgICAgICB9CiAKLSAgICAgIC8qICBXYWl0IGZvciBjb21wbGV0aW9uLCBhbmQgcmVhZCBkYXRhIG9uIERhdGEgT3V0cHV0IFJlZ2lzdGVyLiBUaGlzIGRhdGEgaXMgdG8gZGlzY2FyZC4gKi8KKyAgICAgIC8qICBXYWl0IGZvciBjb21wbGV0aW9uLCBhbmQgcmVhZCBkYXRhIG9uIERPVVQuIFRoaXMgZGF0YSBpcyB0byBkaXNjYXJkLiAqLwogICAgICAgaWYoQ1JZUF9XYWl0T25DQ0ZsYWcoaGNyeXAsIENSWVBfQ0NGX1RJTUVPVVRWQUxVRSkgIT0gSEFMX09LKQogICAgICAgewogICAgICAgICBoY3J5cC0+U3RhdGUgPSBIQUxfQ1JZUF9TVEFURV9SRUFEWTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX2RzaS5jIGIvU3JjL3N0bTMybDR4eF9oYWxfZHNpLmMKaW5kZXggNTIxZDM4Zi4uYjMxNTRjMSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfZHNpLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfZHNpLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogLyoqIEBhZGR0b2dyb3VwIERTSV9Qcml2YXRlX0NvbnN0YW50cwogICAqIEB7CiAgICovCi0jZGVmaW5lIERTSV9USU1FT1VUX1ZBTFVFICgodWludDMyX3QpMTAwVSkgIC8qIDEwMG1zICovCisjZGVmaW5lIERTSV9USU1FT1VUX1ZBTFVFICgodWludDMyX3QpMTAwMFUpICAvKiAxcyAqLwogCiAjZGVmaW5lIERTSV9FUlJPUl9BQ0tfTUFTSyAoRFNJX0lTUjBfQUUwIHwgRFNJX0lTUjBfQUUxIHwgRFNJX0lTUjBfQUUyIHwgRFNJX0lTUjBfQUUzIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTSV9JU1IwX0FFNCB8IERTSV9JU1IwX0FFNSB8IERTSV9JU1IwX0FFNiB8IERTSV9JU1IwX0FFNyB8IFwKQEAgLTM3OCw3ICszNzgsNyBAQAogICAvKiBFbmFibGUgdGhlIERTSSBQTEwgKi8KICAgX19IQUxfRFNJX1BMTF9FTkFCTEUoaGRzaSk7CiAKLSAgLyogUmVxdWlyZXMgbWluIG9mIDQwMLVzIGRlbGF5IGJlZm9yZSByZWFkaW5nIHRoZSBQTExMUyBmbGFnICovCisgIC8qIFJlcXVpcmVzIG1pbiBvZiA0MDB1cyBkZWxheSBiZWZvcmUgcmVhZGluZyB0aGUgUExMTFMgZmxhZyAqLwogICAvKiAxbXMgZGVsYXkgaXMgaW5zZXJ0ZWQgdGhhdCBpcyB0aGUgbWluaW11bSBIQUwgZGVsYXkgZ3JhbnVsYXJpdHkgKi8KICAgSEFMX0RlbGF5KDEpOwogCkBAIC03MTAsNyArNzEwLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGEgRFNJIENhbGxiYWNrCi0gICogICAgICAgICBEU0kgY2FsbGFiY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogICAgICAgICBEU0kgY2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCiAgICogQHBhcmFtIGhkc2kgZHNpIGhhbmRsZQogICAqIEBwYXJhbSBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSB1bnJlZ2lzdGVyZWQKICAgKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTE4MzUsNiArMTgzNSw4NSBAQAogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhkc2kpOwogCisgIC8qIFZlcmlmeSB0aGUgaW5pdGlhbCBzdGF0dXMgb2YgdGhlIERTSSBIb3N0ICovCisKKyAgLyogVmVyaWZ5IHRoYXQgdGhlIGNsb2NrIGxhbmUgYW5kIHRoZSBkaWdpdGFsIHNlY3Rpb24gb2YgdGhlIEQtUEhZIGFyZSBlbmFibGVkICovCisgIGlmICgoaGRzaS0+SW5zdGFuY2UtPlBDVExSICYgKERTSV9QQ1RMUl9DS0UgfCBEU0lfUENUTFJfREVOKSkgIT0gKERTSV9QQ1RMUl9DS0UgfCBEU0lfUENUTFJfREVOKSkKKyAgeworICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBELVBIWSBQTEwgYW5kIHRoZSByZWZlcmVuY2UgYmlhcyBhcmUgZW5hYmxlZCAqLworICBpZiAoKGhkc2ktPkluc3RhbmNlLT5XUlBDUiAmIERTSV9XUlBDUl9QTExFTikgIT0gRFNJX1dSUENSX1BMTEVOKQorICB7CisgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgIF9fSEFMX1VOTE9DSyhoZHNpKTsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogVmVyaWZ5IHRoYXQgdGhlcmUgYXJlIG5vIFVMUFMgZXhpdCBvciByZXF1ZXN0IG9uIGRhdGEgbGFuZXMgKi8KKyAgaWYgKChoZHNpLT5JbnN0YW5jZS0+UFVDUiAmIChEU0lfUFVDUl9VRURMIHwgRFNJX1BVQ1JfVVJETCkpICE9IDBVKQorICB7CisgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgIF9fSEFMX1VOTE9DSyhoZHNpKTsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogVmVyaWZ5IHRoYXQgdGhlcmUgYXJlIG5vIFRyYW5zbWlzc2lvbiB0cmlnZ2VyICovCisgIGlmICgoaGRzaS0+SW5zdGFuY2UtPlBUVENSICYgRFNJX1BUVENSX1RYX1RSSUcpICE9IDBVKQorICB7CisgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgIF9fSEFMX1VOTE9DSyhoZHNpKTsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogUmVxdWlyZXMgbWluIG9mIDQwMHVzIGRlbGF5IGJlZm9yZSByZWFkaW5nIHRoZSBQTExMUyBmbGFnICovCisgIC8qIDFtcyBkZWxheSBpcyBpbnNlcnRlZCB0aGF0IGlzIHRoZSBtaW5pbXVtIEhBTCBkZWxheSBncmFudWxhcml0eSAqLworICBIQUxfRGVsYXkoMSk7CisKKyAgLyogVmVyaWZ5IHRoYXQgRC1QSFkgUExMIGlzIGxvY2tlZCAqLworICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgIHdoaWxlICgoX19IQUxfRFNJX0dFVF9GTEFHKGhkc2ksIERTSV9GTEFHX1BMTExTKSA9PSAwVSkpCisgIHsKKyAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KKyAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gRFNJX1RJTUVPVVRfVkFMVUUpCisgICAgeworICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgX19IQUxfVU5MT0NLKGhkc2kpOworCisgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgfQorICB9CisKKyAgLyogVmVyaWZ5IHRoYXQgYWxsIGFjdGl2ZSBsYW5lcyBhcmUgaW4gU3RvcCBzdGF0ZSAqLworICBpZiAoKGhkc2ktPkluc3RhbmNlLT5QQ09ORlIgJiBEU0lfUENPTkZSX05MKSA9PSBEU0lfT05FX0RBVEFfTEFORSkKKyAgeworICAgIGlmICgoaGRzaS0+SW5zdGFuY2UtPlBTUiAmIERTSV9QU1JfVUFOMCkgIT0gRFNJX1BTUl9VQU4wKQorICAgIHsKKyAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICAgIF9fSEFMX1VOTE9DSyhoZHNpKTsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICB9CisgIGVsc2UgaWYgKChoZHNpLT5JbnN0YW5jZS0+UENPTkZSICYgRFNJX1BDT05GUl9OTCkgPT0gRFNJX1RXT19EQVRBX0xBTkVTKQorICB7CisgICAgaWYgKChoZHNpLT5JbnN0YW5jZS0+UFNSICYgKERTSV9QU1JfVUFOMCB8IERTSV9QU1JfVUFOMSkpICE9IChEU0lfUFNSX1VBTjAgfCBEU0lfUFNSX1VBTjEpKQorICAgIHsKKyAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICAgIF9fSEFMX1VOTE9DSyhoZHNpKTsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIC8qIFByb2Nlc3MgdW5sb2NrZWQgKi8KKyAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIFVMUFMgUmVxdWVzdCBvbiBEYXRhIExhbmVzICovCiAgIGhkc2ktPkluc3RhbmNlLT5QVUNSIHw9IERTSV9QVUNSX1VSREw7CiAKQEAgLTE4OTgsNiArMTk3Nyw1OCBAQAogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhkc2kpOwogCisgIC8qIFZlcmlmeSB0aGF0IGFsbCBhY3RpdmUgbGFuZXMgYXJlIGluIFVMUE0gKi8KKyAgaWYgKChoZHNpLT5JbnN0YW5jZS0+UENPTkZSICYgRFNJX1BDT05GUl9OTCkgPT0gRFNJX09ORV9EQVRBX0xBTkUpCisgIHsKKyAgICBpZiAoKGhkc2ktPkluc3RhbmNlLT5QU1IgJiAgRFNJX1BTUl9VQU4wKSAhPSAwVSkKKyAgICB7CisgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICB9CisgIGVsc2UgaWYgKChoZHNpLT5JbnN0YW5jZS0+UENPTkZSICYgRFNJX1BDT05GUl9OTCkgPT0gRFNJX1RXT19EQVRBX0xBTkVTKQorICB7CisgICAgaWYgKChoZHNpLT5JbnN0YW5jZS0+UFNSICYgKERTSV9QU1JfVUFOMCAgfCBEU0lfUFNSX1VBTjEpKSAhPSAwVSkKKyAgICB7CisgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIC8qIFByb2Nlc3MgdW5sb2NrZWQgKi8KKyAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogVHVybiBvbiB0aGUgRFNJIFBMTCAqLworICBfX0hBTF9EU0lfUExMX0VOQUJMRShoZHNpKTsKKworICAvKiBSZXF1aXJlcyBtaW4gb2YgNDAwdXMgZGVsYXkgYmVmb3JlIHJlYWRpbmcgdGhlIFBMTExTIGZsYWcgKi8KKyAgLyogMW1zIGRlbGF5IGlzIGluc2VydGVkIHRoYXQgaXMgdGhlIG1pbmltdW0gSEFMIGRlbGF5IGdyYW51bGFyaXR5ICovCisgIEhBTF9EZWxheSgxKTsKKworICAvKiBHZXQgdGljayAqLworICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgIC8qIFdhaXQgZm9yIHRoZSBsb2NrIG9mIHRoZSBQTEwgKi8KKyAgd2hpbGUgKF9fSEFMX0RTSV9HRVRfRkxBRyhoZHNpLCBEU0lfRkxBR19QTExMUykgPT0gMFUpCisgIHsKKyAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KKyAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gRFNJX1RJTUVPVVRfVkFMVUUpCisgICAgeworICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgX19IQUxfVU5MT0NLKGhkc2kpOworCisgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgfQorICB9CisKICAgLyogRXhpdCBVTFBTIG9uIERhdGEgTGFuZXMgKi8KICAgaGRzaS0+SW5zdGFuY2UtPlBVQ1IgfD0gRFNJX1BVQ1JfVUVETDsKIApAQCAtMTk0Nyw2ICsyMDc4LDYxIEBACiAgIC8qIERlLWFzc2VydCB0aGUgVUxQTSByZXF1ZXN0cyBhbmQgdGhlIFVMUE0gZXhpdCBiaXRzICovCiAgIGhkc2ktPkluc3RhbmNlLT5QVUNSID0gMFU7CiAKKyAgLyogVmVyaWZ5IHRoYXQgRC1QSFkgUExMIGlzIGVuYWJsZWQgKi8KKyAgaWYgKChoZHNpLT5JbnN0YW5jZS0+V1JQQ1IgJiBEU0lfV1JQQ1JfUExMRU4pICE9IERTSV9XUlBDUl9QTExFTikKKyAgeworICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFZlcmlmeSB0aGF0IGFsbCBhY3RpdmUgbGFuZXMgYXJlIGluIFN0b3Agc3RhdGUgKi8KKyAgaWYgKChoZHNpLT5JbnN0YW5jZS0+UENPTkZSICYgRFNJX1BDT05GUl9OTCkgPT0gRFNJX09ORV9EQVRBX0xBTkUpCisgIHsKKyAgICBpZiAoKGhkc2ktPkluc3RhbmNlLT5QU1IgJiBEU0lfUFNSX1VBTjApICE9IERTSV9QU1JfVUFOMCkKKyAgICB7CisgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgfQorICBlbHNlIGlmICgoaGRzaS0+SW5zdGFuY2UtPlBDT05GUiAmIERTSV9QQ09ORlJfTkwpID09IERTSV9UV09fREFUQV9MQU5FUykKKyAgeworICAgIGlmICgoaGRzaS0+SW5zdGFuY2UtPlBTUiAmIChEU0lfUFNSX1VBTjAgIHwgIERTSV9QU1JfVUFOMSkpICE9IChEU0lfUFNSX1VBTjAgfCBEU0lfUFNSX1VBTjEpKQorICAgIHsKKyAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICAgIF9fSEFMX1VOTE9DSyhoZHNpKTsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIC8qIFByb2Nlc3MgdW5sb2NrZWQgKi8KKyAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFZlcmlmeSB0aGF0IEQtUEhZIFBMTCBpcyBsb2NrZWQgKi8KKyAgLyogUmVxdWlyZXMgbWluIG9mIDQwMHVzIGRlbGF5IGJlZm9yZSByZWFkaW5nIHRoZSBQTExMUyBmbGFnICovCisgIC8qIDFtcyBkZWxheSBpcyBpbnNlcnRlZCB0aGF0IGlzIHRoZSBtaW5pbXVtIEhBTCBkZWxheSBncmFudWxhcml0eSAqLworICBIQUxfRGVsYXkoMSk7CisKKyAgLyogR2V0IHRpY2sgKi8KKyAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKworICAvKiBXYWl0IGZvciB0aGUgbG9jayBvZiB0aGUgUExMICovCisgIHdoaWxlIChfX0hBTF9EU0lfR0VUX0ZMQUcoaGRzaSwgRFNJX0ZMQUdfUExMTFMpID09IDBVKQorICB7CisgICAgLyogQ2hlY2sgZm9yIHRoZSBUaW1lb3V0ICovCisgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IERTSV9USU1FT1VUX1ZBTFVFKQorICAgIHsKKyAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICAgIF9fSEFMX1VOTE9DSyhoZHNpKTsKKworICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgIH0KKyAgfQorCiAgIC8qIFByb2Nlc3MgdW5sb2NrZWQgKi8KICAgX19IQUxfVU5MT0NLKGhkc2kpOwogCkBAIC0xOTY3LDYgKzIxNTMsODYgQEAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoZHNpKTsKIAorICAvKiBWZXJpZnkgdGhlIGluaXRpYWwgc3RhdHVzIG9mIHRoZSBEU0kgSG9zdCAqLworCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBjbG9jayBsYW5lIGFuZCB0aGUgZGlnaXRhbCBzZWN0aW9uIG9mIHRoZSBELVBIWSBhcmUgZW5hYmxlZCAqLworICBpZiAoKGhkc2ktPkluc3RhbmNlLT5QQ1RMUiAmIChEU0lfUENUTFJfQ0tFIHwgRFNJX1BDVExSX0RFTikpICE9IChEU0lfUENUTFJfQ0tFIHwgRFNJX1BDVExSX0RFTikpCisgIHsKKyAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgX19IQUxfVU5MT0NLKGhkc2kpOworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBWZXJpZnkgdGhhdCB0aGUgRC1QSFkgUExMIGFuZCB0aGUgcmVmZXJlbmNlIGJpYXMgYXJlIGVuYWJsZWQgKi8KKyAgaWYgKChoZHNpLT5JbnN0YW5jZS0+V1JQQ1IgJiBEU0lfV1JQQ1JfUExMRU4pICE9IERTSV9XUlBDUl9QTExFTikKKyAgeworICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFZlcmlmeSB0aGF0IHRoZXJlIGFyZSBubyBVTFBTIGV4aXQgb3IgcmVxdWVzdCBvbiBib3RoIGRhdGEgYW5kIGNsb2NrIGxhbmVzICovCisgIGlmICgoaGRzaS0+SW5zdGFuY2UtPlBVQ1IgJiAoRFNJX1BVQ1JfVUVETCB8IERTSV9QVUNSX1VSREwgfCBEU0lfUFVDUl9VRUNMIHwgRFNJX1BVQ1JfVVJDTCkpICE9IDBVKQorICB7CisgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgIF9fSEFMX1VOTE9DSyhoZHNpKTsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogVmVyaWZ5IHRoYXQgdGhlcmUgYXJlIG5vIFRyYW5zbWlzc2lvbiB0cmlnZ2VyICovCisgIGlmICgoaGRzaS0+SW5zdGFuY2UtPlBUVENSICYgRFNJX1BUVENSX1RYX1RSSUcpICE9IDBVKQorICB7CisgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgIF9fSEFMX1VOTE9DSyhoZHNpKTsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogUmVxdWlyZXMgbWluIG9mIDQwMHVzIGRlbGF5IGJlZm9yZSByZWFkaW5nIHRoZSBQTExMUyBmbGFnICovCisgIC8qIDFtcyBkZWxheSBpcyBpbnNlcnRlZCB0aGF0IGlzIHRoZSBtaW5pbXVtIEhBTCBkZWxheSBncmFudWxhcml0eSAqLworICBIQUxfRGVsYXkoMSk7CisKKyAgLyogVmVyaWZ5IHRoYXQgRC1QSFkgUExMIGlzIGxvY2tlZCAqLworICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgIHdoaWxlICgoX19IQUxfRFNJX0dFVF9GTEFHKGhkc2ksIERTSV9GTEFHX1BMTExTKSA9PSAwVSkpCisgIHsKKyAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KKyAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gRFNJX1RJTUVPVVRfVkFMVUUpCisgICAgeworICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgX19IQUxfVU5MT0NLKGhkc2kpOworCisgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgfQorICB9CisKKyAgLyogVmVyaWZ5IHRoYXQgYWxsIGFjdGl2ZSBsYW5lcyBhcmUgaW4gU3RvcCBzdGF0ZSAqLworICBpZiAoKGhkc2ktPkluc3RhbmNlLT5QQ09ORlIgJiBEU0lfUENPTkZSX05MKSA9PSBEU0lfT05FX0RBVEFfTEFORSkKKyAgeworICAgIGlmICgoaGRzaS0+SW5zdGFuY2UtPlBTUiAmIChEU0lfUFNSX1VBTjAgfCBEU0lfUFNSX1BTUzApKSAhPSAoRFNJX1BTUl9VQU4wIHwgRFNJX1BTUl9QU1MwKSkKKyAgICB7CisgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgfQorICBlbHNlIGlmICgoaGRzaS0+SW5zdGFuY2UtPlBDT05GUiAmIERTSV9QQ09ORlJfTkwpID09IERTSV9UV09fREFUQV9MQU5FUykKKyAgeworICAgIGlmICgoaGRzaS0+SW5zdGFuY2UtPlBTUiAmIChEU0lfUFNSX1VBTjAgfCBEU0lfUFNSX1BTUzAgfCBEU0lfUFNSX1BTUzEgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTSV9QU1JfVUFOMSkpICE9IChEU0lfUFNSX1VBTjAgfCBEU0lfUFNSX1BTUzAgfCBEU0lfUFNSX1BTUzEgfCBEU0lfUFNSX1VBTjEpKQorICAgIHsKKyAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICAgIF9fSEFMX1VOTE9DSyhoZHNpKTsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIC8qIFByb2Nlc3MgdW5sb2NrZWQgKi8KKyAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIENsb2NrIGxhbmUgY29uZmlndXJhdGlvbjogbm8gbW9yZSBIUyByZXF1ZXN0ICovCiAgIGhkc2ktPkluc3RhbmNlLT5DTENSICY9IH5EU0lfQ0xDUl9EUENDOwogCkBAIC0xOTc5LDcgKzIyNDUsNyBAQAogICAvKiBHZXQgdGljayAqLwogICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCi0gIC8qIFdhaXQgdW50aWwgYWxsIGFjdGl2ZSBsYW5lcyBleGl0IFVMUE0gKi8KKyAgLyogV2FpdCB1bnRpbCBhbGwgYWN0aXZlIGxhbmVzIGVudGVyIFVMUE0gKi8KICAgaWYgKChoZHNpLT5JbnN0YW5jZS0+UENPTkZSICYgRFNJX1BDT05GUl9OTCkgPT0gRFNJX09ORV9EQVRBX0xBTkUpCiAgIHsKICAgICB3aGlsZSAoKGhkc2ktPkluc3RhbmNlLT5QU1IgJiAoRFNJX1BTUl9VQU4wIHwgRFNJX1BTUl9VQU5DKSkgIT0gMFUpCkBAIC0yMDM5LDkgKzIzMDUsNDQgQEAKICAgLyogUHJvY2VzcyBsb2NrZWQgKi8KICAgX19IQUxfTE9DSyhoZHNpKTsKIAorICAvKiBWZXJpZnkgdGhhdCBhbGwgYWN0aXZlIGxhbmVzIGFyZSBpbiBVTFBNICovCisgIGlmICgoaGRzaS0+SW5zdGFuY2UtPlBDT05GUiAmIERTSV9QQ09ORlJfTkwpID09IERTSV9PTkVfREFUQV9MQU5FKQorICB7CisgICAgaWYgKChoZHNpLT5JbnN0YW5jZS0+UFNSICYgKERTSV9QU1JfUlVFMCB8IERTSV9QU1JfVUFOMCB8IERTSV9QU1JfUFNTMCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFNJX1BTUl9VQU5DIHwgRFNJX1BTUl9QU1NDIHwgRFNJX1BTUl9QRCkpICE9IDBVKQorICAgIHsKKyAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICAgIF9fSEFMX1VOTE9DSyhoZHNpKTsKKworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoKGhkc2ktPkluc3RhbmNlLT5QQ09ORlIgJiBEU0lfUENPTkZSX05MKSA9PSBEU0lfVFdPX0RBVEFfTEFORVMpCisgIHsKKyAgICBpZiAoKGhkc2ktPkluc3RhbmNlLT5QU1IgJiAoRFNJX1BTUl9SVUUwIHwgRFNJX1BTUl9VQU4wIHwgRFNJX1BTUl9QU1MwIHwgRFNJX1BTUl9VQU4xIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU0lfUFNSX1BTUzEgfCBEU0lfUFNSX1VBTkMgfCBEU0lfUFNSX1BTU0MgfCBEU0lfUFNSX1BEKSkgIT0gMFUpCisgICAgeworICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgX19IQUxfVU5MT0NLKGhkc2kpOworCisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCisgICAgX19IQUxfVU5MT0NLKGhkc2kpOworCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIFR1cm4gb24gdGhlIERTSSBQTEwgKi8KICAgX19IQUxfRFNJX1BMTF9FTkFCTEUoaGRzaSk7CiAKKyAgLyogUmVxdWlyZXMgbWluIG9mIDQwMHVzIGRlbGF5IGJlZm9yZSByZWFkaW5nIHRoZSBQTExMUyBmbGFnICovCisgIC8qIDFtcyBkZWxheSBpcyBpbnNlcnRlZCB0aGF0IGlzIHRoZSBtaW5pbXVtIEhBTCBkZWxheSBncmFudWxhcml0eSAqLworICBIQUxfRGVsYXkoMSk7CisKICAgLyogR2V0IHRpY2sgKi8KICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIApAQCAtMjA1OCwxMCArMjM1OSw2IEBACiAgICAgfQogICB9CiAKLSAgLyogUmVzZXQgdGhlIGRpZ2l0YWwgc2VjdGlvbiBvZiB0aGUgRC1QSFkgKi8KLSAgQ0xFQVJfQklUKGhkc2ktPkluc3RhbmNlLT5QQ1RMUiwgRFNJX1BDVExSX0RFTik7Ci0gIFNFVF9CSVQoaGRzaS0+SW5zdGFuY2UtPlBDVExSLCBEU0lfUENUTFJfREVOKTsKLQogICAvKiBFeGl0IFVMUFMgb24gQ2xvY2sgYW5kIERhdGEgTGFuZXMgKi8KICAgaGRzaS0+SW5zdGFuY2UtPlBVQ1IgfD0gKERTSV9QVUNSX1VFQ0wgfCBEU0lfUFVDUl9VRURMKTsKIApAQCAtMjExOCw2ICsyNDE1LDYyIEBACiAgIC8qIFJlc3RvcmUgY2xvY2sgbGFuZSBjb25maWd1cmF0aW9uIHRvIEhTICovCiAgIGhkc2ktPkluc3RhbmNlLT5DTENSIHw9IERTSV9DTENSX0RQQ0M7CiAKKyAgLyogVmVyaWZ5IHRoYXQgRC1QSFkgUExMIGlzIGVuYWJsZWQgKi8KKyAgaWYgKChoZHNpLT5JbnN0YW5jZS0+V1JQQ1IgJiBEU0lfV1JQQ1JfUExMRU4pICE9IERTSV9XUlBDUl9QTExFTikKKyAgeworICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFZlcmlmeSB0aGF0IGFsbCBhY3RpdmUgbGFuZXMgYXJlIGluIFN0b3Agc3RhdGUgKi8KKyAgaWYgKChoZHNpLT5JbnN0YW5jZS0+UENPTkZSICYgRFNJX1BDT05GUl9OTCkgPT0gRFNJX09ORV9EQVRBX0xBTkUpCisgIHsKKyAgICBpZiAoKGhkc2ktPkluc3RhbmNlLT5QU1IgJiAoRFNJX1BTUl9VQU4wIHwgRFNJX1BTUl9QU1MwKSkgIT0gKERTSV9QU1JfVUFOMCB8IERTSV9QU1JfUFNTMCkpCisgICAgeworICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgX19IQUxfVU5MT0NLKGhkc2kpOworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoKGhkc2ktPkluc3RhbmNlLT5QQ09ORlIgJiBEU0lfUENPTkZSX05MKSA9PSBEU0lfVFdPX0RBVEFfTEFORVMpCisgIHsKKyAgICBpZiAoKGhkc2ktPkluc3RhbmNlLT5QU1IgJiAoRFNJX1BTUl9VQU4wIHwgRFNJX1BTUl9QU1MwIHwgRFNJX1BTUl9QU1MxIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEU0lfUFNSX1VBTjEpKSAhPSAoRFNJX1BTUl9VQU4wIHwgRFNJX1BTUl9QU1MwIHwgRFNJX1BTUl9QU1MxIHwgRFNJX1BTUl9VQU4xKSkKKyAgICB7CisgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBQcm9jZXNzIHVubG9ja2VkICovCisgICAgX19IQUxfVU5MT0NLKGhkc2kpOworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBWZXJpZnkgdGhhdCBELVBIWSBQTEwgaXMgbG9ja2VkICovCisgIC8qIFJlcXVpcmVzIG1pbiBvZiA0MDB1cyBkZWxheSBiZWZvcmUgcmVhZGluZyB0aGUgUExMTFMgZmxhZyAqLworICAvKiAxbXMgZGVsYXkgaXMgaW5zZXJ0ZWQgdGhhdCBpcyB0aGUgbWluaW11bSBIQUwgZGVsYXkgZ3JhbnVsYXJpdHkgKi8KKyAgSEFMX0RlbGF5KDEpOworCisgIC8qIEdldCB0aWNrICovCisgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CisKKyAgLyogV2FpdCBmb3IgdGhlIGxvY2sgb2YgdGhlIFBMTCAqLworICB3aGlsZSAoX19IQUxfRFNJX0dFVF9GTEFHKGhkc2ksIERTSV9GTEFHX1BMTExTKSA9PSAwVSkKKyAgeworICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLworICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBEU0lfVElNRU9VVF9WQUxVRSkKKyAgICB7CisgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICBfX0hBTF9VTkxPQ0soaGRzaSk7CisKKyAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICB9CisgIH0KKwogICAvKiBQcm9jZXNzIHVubG9ja2VkICovCiAgIF9fSEFMX1VOTE9DSyhoZHNpKTsKIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfaTJjLmMgYi9TcmMvc3RtMzJsNHh4X2hhbF9pMmMuYwppbmRleCA0ZmE1YzEwLi4wOTg2ZjVlIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9pMmMuYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9pMmMuYwpAQCAtNDM4LDEwICs0MzgsMTQgQEAKIC8qIFByaXZhdGUgZnVuY3Rpb25zIGZvciBJMkMgdHJhbnNmZXIgSVJRIGhhbmRsZXIgKi8KIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBJMkNfTWFzdGVyX0lTUl9JVChzdHJ1Y3QgX19JMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgSVRGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBJVFNvdXJjZXMpOworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19NZW1fSVNSX0lUKHN0cnVjdCBfX0kyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBJVEZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IElUU291cmNlcyk7CiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSTJDX1NsYXZlX0lTUl9JVChzdHJ1Y3QgX19JMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgSVRGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IElUU291cmNlcyk7CiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgSTJDX01hc3Rlcl9JU1JfRE1BKHN0cnVjdCBfX0kyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBJVEZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBJVFNvdXJjZXMpOworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyQ19NZW1fSVNSX0RNQShzdHJ1Y3QgX19JMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgSVRGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgSVRTb3VyY2VzKTsKIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBJMkNfU2xhdmVfSVNSX0RNQShzdHJ1Y3QgX19JMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgSVRGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBJVFNvdXJjZXMpOwogCkBAIC0yNjQ3LDkgKzI2NTEsNiBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NZW1fV3JpdGVfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBNZW1BZGRTaXplLCB1aW50OF90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKIHsKLSAgdWludDMyX3QgdGlja3N0YXJ0OwotICB1aW50MzJfdCB4ZmVybW9kZTsKLQogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfSTJDX01FTUFERF9TSVpFKE1lbUFkZFNpemUpKTsKIApAQCAtMjY2OSw5ICsyNjcwLDYgQEAKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaGkyYyk7CiAKLSAgICAvKiBJbml0IHRpY2tzdGFydCBmb3IgdGltZW91dCBtYW5hZ2VtZW50Ki8KLSAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotCiAgICAgaGkyYy0+U3RhdGUgICAgICAgPSBIQUxfSTJDX1NUQVRFX0JVU1lfVFg7CiAgICAgaGkyYy0+TW9kZSAgICAgICAgPSBIQUxfSTJDX01PREVfTUVNOwogICAgIGhpMmMtPkVycm9yQ29kZSAgID0gSEFMX0kyQ19FUlJPUl9OT05FOwpAQCAtMjY4MCwzMCArMjY3OCwyOSBAQAogICAgIGhpMmMtPnBCdWZmUHRyICAgID0gcERhdGE7CiAgICAgaGkyYy0+WGZlckNvdW50ICAgPSBTaXplOwogICAgIGhpMmMtPlhmZXJPcHRpb25zID0gSTJDX05PX09QVElPTl9GUkFNRTsKLSAgICBoaTJjLT5YZmVySVNSICAgICA9IEkyQ19NYXN0ZXJfSVNSX0lUOworICAgIGhpMmMtPlhmZXJJU1IgICAgID0gSTJDX01lbV9JU1JfSVQ7CisgICAgaGkyYy0+RGV2YWRkcmVzcyAgPSBEZXZBZGRyZXNzOwogCi0gICAgaWYgKGhpMmMtPlhmZXJDb3VudCA+IE1BWF9OQllURV9TSVpFKQorICAgIC8qIElmIE1lbW9yeSBhZGRyZXNzIHNpemUgaXMgOEJpdCAqLworICAgIGlmIChNZW1BZGRTaXplID09IEkyQ19NRU1BRERfU0laRV84QklUKQogICAgIHsKLSAgICAgIGhpMmMtPlhmZXJTaXplID0gTUFYX05CWVRFX1NJWkU7Ci0gICAgICB4ZmVybW9kZSA9IEkyQ19SRUxPQURfTU9ERTsKKyAgICAgIC8qIFByZWZldGNoIE1lbW9yeSBBZGRyZXNzICovCisgICAgICBoaTJjLT5JbnN0YW5jZS0+VFhEUiA9IEkyQ19NRU1fQUREX0xTQihNZW1BZGRyZXNzKTsKKworICAgICAgLyogUmVzZXQgTWVtYWRkcmVzcyBjb250ZW50ICovCisgICAgICBoaTJjLT5NZW1hZGRyZXNzID0gMHhGRkZGRkZGRlU7CiAgICAgfQorICAgIC8qIElmIE1lbW9yeSBhZGRyZXNzIHNpemUgaXMgMTZCaXQgKi8KICAgICBlbHNlCiAgICAgewotICAgICAgaGkyYy0+WGZlclNpemUgPSBoaTJjLT5YZmVyQ291bnQ7Ci0gICAgICB4ZmVybW9kZSA9IEkyQ19BVVRPRU5EX01PREU7Ci0gICAgfQorICAgICAgLyogUHJlZmV0Y2ggTWVtb3J5IEFkZHJlc3MgKE1TQiBwYXJ0LCBMU0Igd2lsbCBiZSBtYW5hZ2UgdGhyb3VnaCBpbnRlcnJ1cHQpICovCisgICAgICBoaTJjLT5JbnN0YW5jZS0+VFhEUiA9IEkyQ19NRU1fQUREX01TQihNZW1BZGRyZXNzKTsKIAorICAgICAgLyogUHJlcGFyZSBNZW1hZGRyZXNzIGJ1ZmZlciBmb3IgTFNCIHBhcnQgKi8KKyAgICAgIGhpMmMtPk1lbWFkZHJlc3MgPSBJMkNfTUVNX0FERF9MU0IoTWVtQWRkcmVzcyk7CisgICAgfQogICAgIC8qIFNlbmQgU2xhdmUgQWRkcmVzcyBhbmQgTWVtb3J5IEFkZHJlc3MgKi8KLSAgICBpZiAoSTJDX1JlcXVlc3RNZW1vcnlXcml0ZShoaTJjLCBEZXZBZGRyZXNzLCBNZW1BZGRyZXNzLCBNZW1BZGRTaXplLCBJMkNfVElNRU9VVF9GTEFHLCB0aWNrc3RhcnQpCi0gICAgICAgICE9IEhBTF9PSykKLSAgICB7Ci0gICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7Ci0gICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgIH0KLQotICAgIC8qIFNldCBOQllURVMgdG8gd3JpdGUgYW5kIHJlbG9hZCBpZiBoaTJjLT5YZmVyQ291bnQgPiBNQVhfTkJZVEVfU0laRSBhbmQgZ2VuZXJhdGUgUkVTVEFSVCAqLwotICAgIEkyQ19UcmFuc2ZlckNvbmZpZyhoaTJjLCBEZXZBZGRyZXNzLCAodWludDhfdCloaTJjLT5YZmVyU2l6ZSwgeGZlcm1vZGUsIEkyQ19OT19TVEFSVFNUT1ApOworICAgIEkyQ19UcmFuc2ZlckNvbmZpZyhoaTJjLCBEZXZBZGRyZXNzLCAodWludDhfdClNZW1BZGRTaXplLCBJMkNfUkVMT0FEX01PREUsIEkyQ19HRU5FUkFURV9TVEFSVF9XUklURSk7CiAKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGhpMmMpOwpAQCAtMjc0MSw5ICsyNzM4LDYgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMkNfTWVtX1JlYWRfSVQoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQxNl90IE1lbUFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQogewotICB1aW50MzJfdCB0aWNrc3RhcnQ7Ci0gIHVpbnQzMl90IHhmZXJtb2RlOwotCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19JMkNfTUVNQUREX1NJWkUoTWVtQWRkU2l6ZSkpOwogCkBAIC0yNzYzLDkgKzI3NTcsNiBAQAogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhoaTJjKTsKIAotICAgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnZW1lbnQqLwotICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0KICAgICBoaTJjLT5TdGF0ZSAgICAgICA9IEhBTF9JMkNfU1RBVEVfQlVTWV9SWDsKICAgICBoaTJjLT5Nb2RlICAgICAgICA9IEhBTF9JMkNfTU9ERV9NRU07CiAgICAgaGkyYy0+RXJyb3JDb2RlICAgPSBIQUxfSTJDX0VSUk9SX05PTkU7CkBAIC0yNzc0LDI5ICsyNzY1LDI5IEBACiAgICAgaGkyYy0+cEJ1ZmZQdHIgICAgPSBwRGF0YTsKICAgICBoaTJjLT5YZmVyQ291bnQgICA9IFNpemU7CiAgICAgaGkyYy0+WGZlck9wdGlvbnMgPSBJMkNfTk9fT1BUSU9OX0ZSQU1FOwotICAgIGhpMmMtPlhmZXJJU1IgICAgID0gSTJDX01hc3Rlcl9JU1JfSVQ7CisgICAgaGkyYy0+WGZlcklTUiAgICAgPSBJMkNfTWVtX0lTUl9JVDsKKyAgICBoaTJjLT5EZXZhZGRyZXNzICA9IERldkFkZHJlc3M7CiAKLSAgICBpZiAoaGkyYy0+WGZlckNvdW50ID4gTUFYX05CWVRFX1NJWkUpCisgICAgLyogSWYgTWVtb3J5IGFkZHJlc3Mgc2l6ZSBpcyA4Qml0ICovCisgICAgaWYgKE1lbUFkZFNpemUgPT0gSTJDX01FTUFERF9TSVpFXzhCSVQpCiAgICAgewotICAgICAgaGkyYy0+WGZlclNpemUgPSBNQVhfTkJZVEVfU0laRTsKLSAgICAgIHhmZXJtb2RlID0gSTJDX1JFTE9BRF9NT0RFOworICAgICAgLyogUHJlZmV0Y2ggTWVtb3J5IEFkZHJlc3MgKi8KKyAgICAgIGhpMmMtPkluc3RhbmNlLT5UWERSID0gSTJDX01FTV9BRERfTFNCKE1lbUFkZHJlc3MpOworCisgICAgICAvKiBSZXNldCBNZW1hZGRyZXNzIGNvbnRlbnQgKi8KKyAgICAgIGhpMmMtPk1lbWFkZHJlc3MgPSAweEZGRkZGRkZGVTsKICAgICB9CisgICAgLyogSWYgTWVtb3J5IGFkZHJlc3Mgc2l6ZSBpcyAxNkJpdCAqLwogICAgIGVsc2UKICAgICB7Ci0gICAgICBoaTJjLT5YZmVyU2l6ZSA9IGhpMmMtPlhmZXJDb3VudDsKLSAgICAgIHhmZXJtb2RlID0gSTJDX0FVVE9FTkRfTU9ERTsKLSAgICB9CisgICAgICAvKiBQcmVmZXRjaCBNZW1vcnkgQWRkcmVzcyAoTVNCIHBhcnQsIExTQiB3aWxsIGJlIG1hbmFnZSB0aHJvdWdoIGludGVycnVwdCkgKi8KKyAgICAgIGhpMmMtPkluc3RhbmNlLT5UWERSID0gSTJDX01FTV9BRERfTVNCKE1lbUFkZHJlc3MpOwogCisgICAgICAvKiBQcmVwYXJlIE1lbWFkZHJlc3MgYnVmZmVyIGZvciBMU0IgcGFydCAqLworICAgICAgaGkyYy0+TWVtYWRkcmVzcyA9IEkyQ19NRU1fQUREX0xTQihNZW1BZGRyZXNzKTsKKyAgICB9CiAgICAgLyogU2VuZCBTbGF2ZSBBZGRyZXNzIGFuZCBNZW1vcnkgQWRkcmVzcyAqLwotICAgIGlmIChJMkNfUmVxdWVzdE1lbW9yeVJlYWQoaGkyYywgRGV2QWRkcmVzcywgTWVtQWRkcmVzcywgTWVtQWRkU2l6ZSwgSTJDX1RJTUVPVVRfRkxBRywgdGlja3N0YXJ0KSAhPSBIQUxfT0spCi0gICAgewotICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgX19IQUxfVU5MT0NLKGhpMmMpOwotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9Ci0KLSAgICAvKiBTZXQgTkJZVEVTIHRvIHdyaXRlIGFuZCByZWxvYWQgaWYgaGkyYy0+WGZlckNvdW50ID4gTUFYX05CWVRFX1NJWkUgYW5kIGdlbmVyYXRlIFJFU1RBUlQgKi8KLSAgICBJMkNfVHJhbnNmZXJDb25maWcoaGkyYywgRGV2QWRkcmVzcywgKHVpbnQ4X3QpaGkyYy0+WGZlclNpemUsIHhmZXJtb2RlLCBJMkNfR0VORVJBVEVfU1RBUlRfUkVBRCk7CisgICAgSTJDX1RyYW5zZmVyQ29uZmlnKGhpMmMsIERldkFkZHJlc3MsICh1aW50OF90KU1lbUFkZFNpemUsIEkyQ19TT0ZURU5EX01PREUsIEkyQ19HRU5FUkFURV9TVEFSVF9XUklURSk7CiAKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGhpMmMpOwpAQCAtMjgwOSw3ICsyODAwLDcgQEAKICAgICAvKiBwb3NzaWJsZSB0byBlbmFibGUgYWxsIG9mIHRoZXNlICovCiAgICAgLyogSTJDX0lUX0VSUkkgfCBJMkNfSVRfVENJIHwgSTJDX0lUX1NUT1BJIHwgSTJDX0lUX05BQ0tJIHwKICAgICAgIEkyQ19JVF9BRERSSSB8IEkyQ19JVF9SWEkgfCBJMkNfSVRfVFhJICovCi0gICAgSTJDX0VuYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfUlhfSVQpOworICAgIEkyQ19FbmFibGVfSVJRKGhpMmMsIChJMkNfWEZFUl9UWF9JVCB8IEkyQ19YRkVSX1JYX0lUKSk7CiAKICAgICByZXR1cm4gSEFMX09LOwogICB9CkBAIC0yODMzLDggKzI4MjQsNiBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyQ19NZW1fV3JpdGVfRE1BKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50MTZfdCBNZW1BZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQogewotICB1aW50MzJfdCB0aWNrc3RhcnQ7Ci0gIHVpbnQzMl90IHhmZXJtb2RlOwogICBIQUxfU3RhdHVzVHlwZURlZiBkbWF4ZmVyc3RhdHVzOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCkBAIC0yODU2LDkgKzI4NDUsNiBAQAogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhoaTJjKTsKIAotICAgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnZW1lbnQqLwotICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0KICAgICBoaTJjLT5TdGF0ZSAgICAgICA9IEhBTF9JMkNfU1RBVEVfQlVTWV9UWDsKICAgICBoaTJjLT5Nb2RlICAgICAgICA9IEhBTF9JMkNfTU9ERV9NRU07CiAgICAgaGkyYy0+RXJyb3JDb2RlICAgPSBIQUxfSTJDX0VSUk9SX05PTkU7CkBAIC0yODY3LDI4ICsyODUzLDM2IEBACiAgICAgaGkyYy0+cEJ1ZmZQdHIgICAgPSBwRGF0YTsKICAgICBoaTJjLT5YZmVyQ291bnQgICA9IFNpemU7CiAgICAgaGkyYy0+WGZlck9wdGlvbnMgPSBJMkNfTk9fT1BUSU9OX0ZSQU1FOwotICAgIGhpMmMtPlhmZXJJU1IgICAgID0gSTJDX01hc3Rlcl9JU1JfRE1BOworICAgIGhpMmMtPlhmZXJJU1IgICAgID0gSTJDX01lbV9JU1JfRE1BOworICAgIGhpMmMtPkRldmFkZHJlc3MgID0gRGV2QWRkcmVzczsKIAogICAgIGlmIChoaTJjLT5YZmVyQ291bnQgPiBNQVhfTkJZVEVfU0laRSkKICAgICB7CiAgICAgICBoaTJjLT5YZmVyU2l6ZSA9IE1BWF9OQllURV9TSVpFOwotICAgICAgeGZlcm1vZGUgPSBJMkNfUkVMT0FEX01PREU7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICBoaTJjLT5YZmVyU2l6ZSA9IGhpMmMtPlhmZXJDb3VudDsKLSAgICAgIHhmZXJtb2RlID0gSTJDX0FVVE9FTkRfTU9ERTsKICAgICB9CiAKLSAgICAvKiBTZW5kIFNsYXZlIEFkZHJlc3MgYW5kIE1lbW9yeSBBZGRyZXNzICovCi0gICAgaWYgKEkyQ19SZXF1ZXN0TWVtb3J5V3JpdGUoaGkyYywgRGV2QWRkcmVzcywgTWVtQWRkcmVzcywgTWVtQWRkU2l6ZSwgSTJDX1RJTUVPVVRfRkxBRywgdGlja3N0YXJ0KQotICAgICAgICAhPSBIQUxfT0spCisgICAgLyogSWYgTWVtb3J5IGFkZHJlc3Mgc2l6ZSBpcyA4Qml0ICovCisgICAgaWYgKE1lbUFkZFNpemUgPT0gSTJDX01FTUFERF9TSVpFXzhCSVQpCiAgICAgewotICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgX19IQUxfVU5MT0NLKGhpMmMpOwotICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgICB9CisgICAgICAvKiBQcmVmZXRjaCBNZW1vcnkgQWRkcmVzcyAqLworICAgICAgaGkyYy0+SW5zdGFuY2UtPlRYRFIgPSBJMkNfTUVNX0FERF9MU0IoTWVtQWRkcmVzcyk7CiAKKyAgICAgIC8qIFJlc2V0IE1lbWFkZHJlc3MgY29udGVudCAqLworICAgICAgaGkyYy0+TWVtYWRkcmVzcyA9IDB4RkZGRkZGRkZVOworICAgIH0KKyAgICAvKiBJZiBNZW1vcnkgYWRkcmVzcyBzaXplIGlzIDE2Qml0ICovCisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIFByZWZldGNoIE1lbW9yeSBBZGRyZXNzIChNU0IgcGFydCwgTFNCIHdpbGwgYmUgbWFuYWdlIHRocm91Z2ggaW50ZXJydXB0KSAqLworICAgICAgaGkyYy0+SW5zdGFuY2UtPlRYRFIgPSBJMkNfTUVNX0FERF9NU0IoTWVtQWRkcmVzcyk7CisKKyAgICAgIC8qIFByZXBhcmUgTWVtYWRkcmVzcyBidWZmZXIgZm9yIExTQiBwYXJ0ICovCisgICAgICBoaTJjLT5NZW1hZGRyZXNzID0gSTJDX01FTV9BRERfTFNCKE1lbUFkZHJlc3MpOworICAgIH0KIAogICAgIGlmIChoaTJjLT5oZG1hdHggIT0gTlVMTCkKICAgICB7CkBAIC0yOTIzLDEyICsyOTE3LDggQEAKIAogICAgIGlmIChkbWF4ZmVyc3RhdHVzID09IEhBTF9PSykKICAgICB7Ci0gICAgICAvKiBTZW5kIFNsYXZlIEFkZHJlc3MgKi8KLSAgICAgIC8qIFNldCBOQllURVMgdG8gd3JpdGUgYW5kIHJlbG9hZCBpZiBoaTJjLT5YZmVyQ291bnQgPiBNQVhfTkJZVEVfU0laRSBhbmQgZ2VuZXJhdGUgUkVTVEFSVCAqLwotICAgICAgSTJDX1RyYW5zZmVyQ29uZmlnKGhpMmMsIERldkFkZHJlc3MsICh1aW50OF90KWhpMmMtPlhmZXJTaXplLCB4ZmVybW9kZSwgSTJDX05PX1NUQVJUU1RPUCk7Ci0KLSAgICAgIC8qIFVwZGF0ZSBYZmVyQ291bnQgdmFsdWUgKi8KLSAgICAgIGhpMmMtPlhmZXJDb3VudCAtPSBoaTJjLT5YZmVyU2l6ZTsKKyAgICAgIC8qIFNlbmQgU2xhdmUgQWRkcmVzcyBhbmQgTWVtb3J5IEFkZHJlc3MgKi8KKyAgICAgIEkyQ19UcmFuc2ZlckNvbmZpZyhoaTJjLCBEZXZBZGRyZXNzLCAodWludDhfdClNZW1BZGRTaXplLCBJMkNfUkVMT0FEX01PREUsIEkyQ19HRU5FUkFURV9TVEFSVF9XUklURSk7CiAKICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKQEAgLTI5MzYsMTEgKzI5MjYsMTEgQEAKICAgICAgIC8qIE5vdGUgOiBUaGUgSTJDIGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIGFmdGVyIHVubG9ja2luZyBjdXJyZW50IHByb2Nlc3MKICAgICAgICAgICAgICAgICB0byBhdm9pZCB0aGUgcmlzayBvZiBJMkMgaW50ZXJydXB0IGhhbmRsZSBleGVjdXRpb24gYmVmb3JlIGN1cnJlbnQKICAgICAgICAgICAgICAgICBwcm9jZXNzIHVubG9jayAqLwotICAgICAgLyogRW5hYmxlIEVSUiBhbmQgTkFDSyBpbnRlcnJ1cHRzICovCi0gICAgICBJMkNfRW5hYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9FUlJPUl9JVCk7Ci0KLSAgICAgIC8qIEVuYWJsZSBETUEgUmVxdWVzdCAqLwotICAgICAgaGkyYy0+SW5zdGFuY2UtPkNSMSB8PSBJMkNfQ1IxX1RYRE1BRU47CisgICAgICAvKiBFbmFibGUgRVJSLCBUQywgU1RPUCwgTkFDSywgVFhJIGludGVycnVwdCAqLworICAgICAgLyogcG9zc2libGUgdG8gZW5hYmxlIGFsbCBvZiB0aGVzZSAqLworICAgICAgLyogSTJDX0lUX0VSUkkgfCBJMkNfSVRfVENJIHwgSTJDX0lUX1NUT1BJIHwgSTJDX0lUX05BQ0tJIHwKKyAgICAgICAgSTJDX0lUX0FERFJJIHwgSTJDX0lUX1JYSSB8IEkyQ19JVF9UWEkgKi8KKyAgICAgIEkyQ19FbmFibGVfSVJRKGhpMmMsIEkyQ19YRkVSX1RYX0lUKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTI5ODAsOCArMjk3MCw2IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJDX01lbV9SZWFkX0RNQShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDE2X3QgTWVtQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IE1lbUFkZFNpemUsIHVpbnQ4X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQogewotICB1aW50MzJfdCB0aWNrc3RhcnQ7Ci0gIHVpbnQzMl90IHhmZXJtb2RlOwogICBIQUxfU3RhdHVzVHlwZURlZiBkbWF4ZmVyc3RhdHVzOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCkBAIC0zMDAzLDkgKzI5OTEsNiBAQAogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhoaTJjKTsKIAotICAgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnZW1lbnQqLwotICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0KICAgICBoaTJjLT5TdGF0ZSAgICAgICA9IEhBTF9JMkNfU1RBVEVfQlVTWV9SWDsKICAgICBoaTJjLT5Nb2RlICAgICAgICA9IEhBTF9JMkNfTU9ERV9NRU07CiAgICAgaGkyYy0+RXJyb3JDb2RlICAgPSBIQUxfSTJDX0VSUk9SX05PTkU7CkBAIC0zMDE0LDI1ICsyOTk5LDM1IEBACiAgICAgaGkyYy0+cEJ1ZmZQdHIgICAgPSBwRGF0YTsKICAgICBoaTJjLT5YZmVyQ291bnQgICA9IFNpemU7CiAgICAgaGkyYy0+WGZlck9wdGlvbnMgPSBJMkNfTk9fT1BUSU9OX0ZSQU1FOwotICAgIGhpMmMtPlhmZXJJU1IgICAgID0gSTJDX01hc3Rlcl9JU1JfRE1BOworICAgIGhpMmMtPlhmZXJJU1IgICAgID0gSTJDX01lbV9JU1JfRE1BOworICAgIGhpMmMtPkRldmFkZHJlc3MgID0gRGV2QWRkcmVzczsKIAogICAgIGlmIChoaTJjLT5YZmVyQ291bnQgPiBNQVhfTkJZVEVfU0laRSkKICAgICB7CiAgICAgICBoaTJjLT5YZmVyU2l6ZSA9IE1BWF9OQllURV9TSVpFOwotICAgICAgeGZlcm1vZGUgPSBJMkNfUkVMT0FEX01PREU7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICBoaTJjLT5YZmVyU2l6ZSA9IGhpMmMtPlhmZXJDb3VudDsKLSAgICAgIHhmZXJtb2RlID0gSTJDX0FVVE9FTkRfTU9ERTsKICAgICB9CiAKLSAgICAvKiBTZW5kIFNsYXZlIEFkZHJlc3MgYW5kIE1lbW9yeSBBZGRyZXNzICovCi0gICAgaWYgKEkyQ19SZXF1ZXN0TWVtb3J5UmVhZChoaTJjLCBEZXZBZGRyZXNzLCBNZW1BZGRyZXNzLCBNZW1BZGRTaXplLCBJMkNfVElNRU9VVF9GTEFHLCB0aWNrc3RhcnQpICE9IEhBTF9PSykKKyAgICAvKiBJZiBNZW1vcnkgYWRkcmVzcyBzaXplIGlzIDhCaXQgKi8KKyAgICBpZiAoTWVtQWRkU2l6ZSA9PSBJMkNfTUVNQUREX1NJWkVfOEJJVCkKICAgICB7Ci0gICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7Ci0gICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgLyogUHJlZmV0Y2ggTWVtb3J5IEFkZHJlc3MgKi8KKyAgICAgIGhpMmMtPkluc3RhbmNlLT5UWERSID0gSTJDX01FTV9BRERfTFNCKE1lbUFkZHJlc3MpOworCisgICAgICAvKiBSZXNldCBNZW1hZGRyZXNzIGNvbnRlbnQgKi8KKyAgICAgIGhpMmMtPk1lbWFkZHJlc3MgPSAweEZGRkZGRkZGVTsKKyAgICB9CisgICAgLyogSWYgTWVtb3J5IGFkZHJlc3Mgc2l6ZSBpcyAxNkJpdCAqLworICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBQcmVmZXRjaCBNZW1vcnkgQWRkcmVzcyAoTVNCIHBhcnQsIExTQiB3aWxsIGJlIG1hbmFnZSB0aHJvdWdoIGludGVycnVwdCkgKi8KKyAgICAgIGhpMmMtPkluc3RhbmNlLT5UWERSID0gSTJDX01FTV9BRERfTVNCKE1lbUFkZHJlc3MpOworCisgICAgICAvKiBQcmVwYXJlIE1lbWFkZHJlc3MgYnVmZmVyIGZvciBMU0IgcGFydCAqLworICAgICAgaGkyYy0+TWVtYWRkcmVzcyA9IEkyQ19NRU1fQUREX0xTQihNZW1BZGRyZXNzKTsKICAgICB9CiAKICAgICBpZiAoaGkyYy0+aGRtYXJ4ICE9IE5VTEwpCkBAIC0zMDY4LDExICszMDYzLDggQEAKIAogICAgIGlmIChkbWF4ZmVyc3RhdHVzID09IEhBTF9PSykKICAgICB7Ci0gICAgICAvKiBTZXQgTkJZVEVTIHRvIHdyaXRlIGFuZCByZWxvYWQgaWYgaGkyYy0+WGZlckNvdW50ID4gTUFYX05CWVRFX1NJWkUgYW5kIGdlbmVyYXRlIFJFU1RBUlQgKi8KLSAgICAgIEkyQ19UcmFuc2ZlckNvbmZpZyhoaTJjLCBEZXZBZGRyZXNzLCAodWludDhfdCloaTJjLT5YZmVyU2l6ZSwgeGZlcm1vZGUsIEkyQ19HRU5FUkFURV9TVEFSVF9SRUFEKTsKLQotICAgICAgLyogVXBkYXRlIFhmZXJDb3VudCB2YWx1ZSAqLwotICAgICAgaGkyYy0+WGZlckNvdW50IC09IGhpMmMtPlhmZXJTaXplOworICAgICAgLyogU2VuZCBTbGF2ZSBBZGRyZXNzIGFuZCBNZW1vcnkgQWRkcmVzcyAqLworICAgICAgSTJDX1RyYW5zZmVyQ29uZmlnKGhpMmMsIERldkFkZHJlc3MsICh1aW50OF90KU1lbUFkZFNpemUsIEkyQ19TT0ZURU5EX01PREUsIEkyQ19HRU5FUkFURV9TVEFSVF9XUklURSk7CiAKICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKQEAgLTMwODAsMTEgKzMwNzIsMTEgQEAKICAgICAgIC8qIE5vdGUgOiBUaGUgSTJDIGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIGFmdGVyIHVubG9ja2luZyBjdXJyZW50IHByb2Nlc3MKICAgICAgICAgICAgICAgICB0byBhdm9pZCB0aGUgcmlzayBvZiBJMkMgaW50ZXJydXB0IGhhbmRsZSBleGVjdXRpb24gYmVmb3JlIGN1cnJlbnQKICAgICAgICAgICAgICAgICBwcm9jZXNzIHVubG9jayAqLwotICAgICAgLyogRW5hYmxlIEVSUiBhbmQgTkFDSyBpbnRlcnJ1cHRzICovCi0gICAgICBJMkNfRW5hYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9FUlJPUl9JVCk7Ci0KLSAgICAgIC8qIEVuYWJsZSBETUEgUmVxdWVzdCAqLwotICAgICAgaGkyYy0+SW5zdGFuY2UtPkNSMSB8PSBJMkNfQ1IxX1JYRE1BRU47CisgICAgICAvKiBFbmFibGUgRVJSLCBUQywgU1RPUCwgTkFDSywgVFhJIGludGVycnVwdCAqLworICAgICAgLyogcG9zc2libGUgdG8gZW5hYmxlIGFsbCBvZiB0aGVzZSAqLworICAgICAgLyogSTJDX0lUX0VSUkkgfCBJMkNfSVRfVENJIHwgSTJDX0lUX1NUT1BJIHwgSTJDX0lUX05BQ0tJIHwKKyAgICAgICAgSTJDX0lUX0FERFJJIHwgSTJDX0lUX1JYSSB8IEkyQ19JVF9UWEkgKi8KKyAgICAgIEkyQ19FbmFibGVfSVJRKGhpMmMsIEkyQ19YRkVSX1RYX0lUKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTMzMjcsNiArMzMxOSwxMCBAQAogICAgIC8qIE5vdGUgOiBUaGUgSTJDIGludGVycnVwdHMgbXVzdCBiZSBlbmFibGVkIGFmdGVyIHVubG9ja2luZyBjdXJyZW50IHByb2Nlc3MKICAgICAgICAgICAgICAgdG8gYXZvaWQgdGhlIHJpc2sgb2YgSTJDIGludGVycnVwdCBoYW5kbGUgZXhlY3V0aW9uIGJlZm9yZSBjdXJyZW50CiAgICAgICAgICAgICAgIHByb2Nlc3MgdW5sb2NrICovCisgICAgLyogRW5hYmxlIEVSUiwgVEMsIFNUT1AsIE5BQ0ssIFRYSSBpbnRlcnJ1cHQgKi8KKyAgICAvKiBwb3NzaWJsZSB0byBlbmFibGUgYWxsIG9mIHRoZXNlICovCisgICAgLyogSTJDX0lUX0VSUkkgfCBJMkNfSVRfVENJIHwgSTJDX0lUX1NUT1BJIHwgSTJDX0lUX05BQ0tJIHwKKyAgICAgICBJMkNfSVRfQUREUkkgfCBJMkNfSVRfUlhJIHwgSTJDX0lUX1RYSSAqLwogICAgIEkyQ19FbmFibGVfSVJRKGhpMmMsIEkyQ19YRkVSX1RYX0lUKTsKIAogICAgIHJldHVybiBIQUxfT0s7CkBAIC00ODc5LDYgKzQ4NzUsMTQzIEBACiB9CiAKIC8qKgorICAqIEBicmllZiAgSW50ZXJydXB0IFN1Yi1Sb3V0aW5lIHdoaWNoIGhhbmRsZSB0aGUgSW50ZXJydXB0IEZsYWdzIE1lbW9yeSBNb2RlIHdpdGggSW50ZXJydXB0LgorICAqIEBwYXJhbSAgaGkyYyBQb2ludGVyIHRvIGEgSTJDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJMkMuCisgICogQHBhcmFtICBJVEZsYWdzIEludGVycnVwdCBmbGFncyB0byBoYW5kbGUuCisgICogQHBhcmFtICBJVFNvdXJjZXMgSW50ZXJydXB0IHNvdXJjZXMgZW5hYmxlZC4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBJMkNfTWVtX0lTUl9JVChzdHJ1Y3QgX19JMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgSVRGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBJVFNvdXJjZXMpCit7CisgIHVpbnQzMl90IGRpcmVjdGlvbiA9IEkyQ19HRU5FUkFURV9TVEFSVF9XUklURTsKKyAgdWludDMyX3QgdG1wSVRGbGFncyA9IElURmxhZ3M7CisKKyAgLyogUHJvY2VzcyBMb2NrZWQgKi8KKyAgX19IQUxfTE9DSyhoaTJjKTsKKworICBpZiAoKEkyQ19DSEVDS19GTEFHKHRtcElURmxhZ3MsIEkyQ19GTEFHX0FGKSAhPSBSRVNFVCkgJiYgXAorICAgICAgKEkyQ19DSEVDS19JVF9TT1VSQ0UoSVRTb3VyY2VzLCBJMkNfSVRfTkFDS0kpICE9IFJFU0VUKSkKKyAgeworICAgIC8qIENsZWFyIE5BQ0sgRmxhZyAqLworICAgIF9fSEFMX0kyQ19DTEVBUl9GTEFHKGhpMmMsIEkyQ19GTEFHX0FGKTsKKworICAgIC8qIFNldCBjb3JyZXNwb25kaW5nIEVycm9yIENvZGUgKi8KKyAgICAvKiBObyBuZWVkIHRvIGdlbmVyYXRlIFNUT1AsIGl0IGlzIGF1dG9tYXRpY2FsbHkgZG9uZSAqLworICAgIC8qIEVycm9yIGNhbGxiYWNrIHdpbGwgYmUgc2VuZCBkdXJpbmcgc3RvcCBmbGFnIHRyZWF0bWVudCAqLworICAgIGhpMmMtPkVycm9yQ29kZSB8PSBIQUxfSTJDX0VSUk9SX0FGOworCisgICAgLyogRmx1c2ggVFggcmVnaXN0ZXIgKi8KKyAgICBJMkNfRmx1c2hfVFhEUihoaTJjKTsKKyAgfQorICBlbHNlIGlmICgoSTJDX0NIRUNLX0ZMQUcodG1wSVRGbGFncywgSTJDX0ZMQUdfUlhORSkgIT0gUkVTRVQpICYmIFwKKyAgICAgICAgICAgKEkyQ19DSEVDS19JVF9TT1VSQ0UoSVRTb3VyY2VzLCBJMkNfSVRfUlhJKSAhPSBSRVNFVCkpCisgIHsKKyAgICAvKiBSZW1vdmUgUlhORSBmbGFnIG9uIHRlbXBvcmFyeSB2YXJpYWJsZSBhcyByZWFkIGRvbmUgKi8KKyAgICB0bXBJVEZsYWdzICY9IH5JMkNfRkxBR19SWE5FOworCisgICAgLyogUmVhZCBkYXRhIGZyb20gUlhEUiAqLworICAgICpoaTJjLT5wQnVmZlB0ciA9ICh1aW50OF90KWhpMmMtPkluc3RhbmNlLT5SWERSOworCisgICAgLyogSW5jcmVtZW50IEJ1ZmZlciBwb2ludGVyICovCisgICAgaGkyYy0+cEJ1ZmZQdHIrKzsKKworICAgIGhpMmMtPlhmZXJTaXplLS07CisgICAgaGkyYy0+WGZlckNvdW50LS07CisgIH0KKyAgZWxzZSBpZiAoKEkyQ19DSEVDS19GTEFHKHRtcElURmxhZ3MsIEkyQ19GTEFHX1RYSVMpICE9IFJFU0VUKSAmJiBcCisgICAgICAgICAgIChJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgSTJDX0lUX1RYSSkgIT0gUkVTRVQpKQorICB7CisgICAgaWYgKGhpMmMtPk1lbWFkZHJlc3MgPT0gMHhGRkZGRkZGRlUpCisgICAgeworICAgICAgLyogV3JpdGUgZGF0YSB0byBUWERSICovCisgICAgICBoaTJjLT5JbnN0YW5jZS0+VFhEUiA9ICpoaTJjLT5wQnVmZlB0cjsKKworICAgICAgLyogSW5jcmVtZW50IEJ1ZmZlciBwb2ludGVyICovCisgICAgICBoaTJjLT5wQnVmZlB0cisrOworCisgICAgICBoaTJjLT5YZmVyU2l6ZS0tOworICAgICAgaGkyYy0+WGZlckNvdW50LS07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBXcml0ZSBMU0IgcGFydCBvZiBNZW1vcnkgQWRkcmVzcyAqLworICAgICAgaGkyYy0+SW5zdGFuY2UtPlRYRFIgPSBoaTJjLT5NZW1hZGRyZXNzOworCisgICAgICAvKiBSZXNldCBNZW1hZGRyZXNzIGNvbnRlbnQgKi8KKyAgICAgIGhpMmMtPk1lbWFkZHJlc3MgPSAweEZGRkZGRkZGVTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoKEkyQ19DSEVDS19GTEFHKHRtcElURmxhZ3MsIEkyQ19GTEFHX1RDUikgIT0gUkVTRVQpICYmIFwKKyAgICAgICAgICAgKEkyQ19DSEVDS19JVF9TT1VSQ0UoSVRTb3VyY2VzLCBJMkNfSVRfVENJKSAhPSBSRVNFVCkpCisgIHsKKyAgICBpZiAoKGhpMmMtPlhmZXJDb3VudCAhPSAwVSkgJiYgKGhpMmMtPlhmZXJTaXplID09IDBVKSkKKyAgICB7CisgICAgICBpZiAoaGkyYy0+WGZlckNvdW50ID4gTUFYX05CWVRFX1NJWkUpCisgICAgICB7CisgICAgICAgIGhpMmMtPlhmZXJTaXplID0gTUFYX05CWVRFX1NJWkU7CisgICAgICAgIEkyQ19UcmFuc2ZlckNvbmZpZyhoaTJjLCAodWludDE2X3QpaGkyYy0+RGV2YWRkcmVzcywgKHVpbnQ4X3QpaGkyYy0+WGZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfUkVMT0FEX01PREUsIEkyQ19OT19TVEFSVFNUT1ApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBoaTJjLT5YZmVyU2l6ZSA9IGhpMmMtPlhmZXJDb3VudDsKKyAgICAgICAgSTJDX1RyYW5zZmVyQ29uZmlnKGhpMmMsICh1aW50MTZfdCloaTJjLT5EZXZhZGRyZXNzLCAodWludDhfdCloaTJjLT5YZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19BVVRPRU5EX01PREUsIEkyQ19OT19TVEFSVFNUT1ApOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogV3Jvbmcgc2l6ZSBTdGF0dXMgcmVnYXJkaW5nIFRDUiBmbGFnIGV2ZW50ICovCisgICAgICAvKiBDYWxsIHRoZSBjb3JyZXNwb25kaW5nIGNhbGxiYWNrIHRvIGluZm9ybSB1cHBlciBsYXllciBvZiBFbmQgb2YgVHJhbnNmZXIgKi8KKyAgICAgIEkyQ19JVEVycm9yKGhpMmMsIEhBTF9JMkNfRVJST1JfU0laRSk7CisgICAgfQorICB9CisgIGVsc2UgaWYgKChJMkNfQ0hFQ0tfRkxBRyh0bXBJVEZsYWdzLCBJMkNfRkxBR19UQykgIT0gUkVTRVQpICYmIFwKKyAgICAgICAgICAgKEkyQ19DSEVDS19JVF9TT1VSQ0UoSVRTb3VyY2VzLCBJMkNfSVRfVENJKSAhPSBSRVNFVCkpCisgIHsKKyAgICBpZiAoaGkyYy0+U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9CVVNZX1JYKQorICAgIHsKKyAgICAgIGRpcmVjdGlvbiA9IEkyQ19HRU5FUkFURV9TVEFSVF9SRUFEOworICAgIH0KKworICAgIGlmIChoaTJjLT5YZmVyQ291bnQgPiBNQVhfTkJZVEVfU0laRSkKKyAgICB7CisgICAgICBoaTJjLT5YZmVyU2l6ZSA9IE1BWF9OQllURV9TSVpFOworCisgICAgICAvKiBTZXQgTkJZVEVTIHRvIHdyaXRlIGFuZCByZWxvYWQgaWYgaGkyYy0+WGZlckNvdW50ID4gTUFYX05CWVRFX1NJWkUgYW5kIGdlbmVyYXRlIFJFU1RBUlQgKi8KKyAgICAgIEkyQ19UcmFuc2ZlckNvbmZpZyhoaTJjLCAodWludDE2X3QpaGkyYy0+RGV2YWRkcmVzcywgKHVpbnQ4X3QpaGkyYy0+WGZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX1JFTE9BRF9NT0RFLCBkaXJlY3Rpb24pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaGkyYy0+WGZlclNpemUgPSBoaTJjLT5YZmVyQ291bnQ7CisKKyAgICAgIC8qIFNldCBOQllURVMgdG8gd3JpdGUgYW5kIGdlbmVyYXRlIFJFU1RBUlQgKi8KKyAgICAgIEkyQ19UcmFuc2ZlckNvbmZpZyhoaTJjLCAodWludDE2X3QpaGkyYy0+RGV2YWRkcmVzcywgKHVpbnQ4X3QpaGkyYy0+WGZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0FVVE9FTkRfTU9ERSwgZGlyZWN0aW9uKTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICB9CisKKyAgaWYgKChJMkNfQ0hFQ0tfRkxBRyh0bXBJVEZsYWdzLCBJMkNfRkxBR19TVE9QRikgIT0gUkVTRVQpICYmIFwKKyAgICAgIChJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgSTJDX0lUX1NUT1BJKSAhPSBSRVNFVCkpCisgIHsKKyAgICAvKiBDYWxsIEkyQyBNYXN0ZXIgY29tcGxldGUgcHJvY2VzcyAqLworICAgIEkyQ19JVE1hc3RlckNwbHQoaGkyYywgdG1wSVRGbGFncyk7CisgIH0KKworICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgIF9fSEFMX1VOTE9DSyhoaTJjKTsKKworICByZXR1cm4gSEFMX09LOworfQorCisvKioKICAgKiBAYnJpZWYgIEludGVycnVwdCBTdWItUm91dGluZSB3aGljaCBoYW5kbGUgdGhlIEludGVycnVwdCBGbGFncyBTbGF2ZSBNb2RlIHdpdGggSW50ZXJydXB0LgogICAqIEBwYXJhbSAgaGkyYyBQb2ludGVyIHRvIGEgSTJDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJMkMuCkBAIC01MTYwLDYgKzUyOTMsMTQ1IEBACiB9CiAKIC8qKgorICAqIEBicmllZiAgSW50ZXJydXB0IFN1Yi1Sb3V0aW5lIHdoaWNoIGhhbmRsZSB0aGUgSW50ZXJydXB0IEZsYWdzIE1lbW9yeSBNb2RlIHdpdGggRE1BLgorICAqIEBwYXJhbSAgaGkyYyBQb2ludGVyIHRvIGEgSTJDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJMkMuCisgICogQHBhcmFtICBJVEZsYWdzIEludGVycnVwdCBmbGFncyB0byBoYW5kbGUuCisgICogQHBhcmFtICBJVFNvdXJjZXMgSW50ZXJydXB0IHNvdXJjZXMgZW5hYmxlZC4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBJMkNfTWVtX0lTUl9ETUEoc3RydWN0IF9fSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQzMl90IElURmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IElUU291cmNlcykKK3sKKyAgdWludDMyX3QgZGlyZWN0aW9uID0gSTJDX0dFTkVSQVRFX1NUQVJUX1dSSVRFOworCisgIC8qIFByb2Nlc3MgTG9ja2VkICovCisgIF9fSEFMX0xPQ0soaGkyYyk7CisKKyAgaWYgKChJMkNfQ0hFQ0tfRkxBRyhJVEZsYWdzLCBJMkNfRkxBR19BRikgIT0gUkVTRVQpICYmIFwKKyAgICAgIChJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgSTJDX0lUX05BQ0tJKSAhPSBSRVNFVCkpCisgIHsKKyAgICAvKiBDbGVhciBOQUNLIEZsYWcgKi8KKyAgICBfX0hBTF9JMkNfQ0xFQVJfRkxBRyhoaTJjLCBJMkNfRkxBR19BRik7CisKKyAgICAvKiBTZXQgY29ycmVzcG9uZGluZyBFcnJvciBDb2RlICovCisgICAgaGkyYy0+RXJyb3JDb2RlIHw9IEhBTF9JMkNfRVJST1JfQUY7CisKKyAgICAvKiBObyBuZWVkIHRvIGdlbmVyYXRlIFNUT1AsIGl0IGlzIGF1dG9tYXRpY2FsbHkgZG9uZSAqLworICAgIC8qIEJ1dCBlbmFibGUgU1RPUCBpbnRlcnJ1cHQsIHRvIHRyZWF0IGl0ICovCisgICAgLyogRXJyb3IgY2FsbGJhY2sgd2lsbCBiZSBzZW5kIGR1cmluZyBzdG9wIGZsYWcgdHJlYXRtZW50ICovCisgICAgSTJDX0VuYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfQ1BMVF9JVCk7CisKKyAgICAvKiBGbHVzaCBUWCByZWdpc3RlciAqLworICAgIEkyQ19GbHVzaF9UWERSKGhpMmMpOworICB9CisgIGVsc2UgaWYgKChJMkNfQ0hFQ0tfRkxBRyhJVEZsYWdzLCBJMkNfRkxBR19UWElTKSAhPSBSRVNFVCkgJiYgXAorICAgICAgICAgICAoSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEkyQ19JVF9UWEkpICE9IFJFU0VUKSkKKyAgeworICAgIC8qIFdyaXRlIExTQiBwYXJ0IG9mIE1lbW9yeSBBZGRyZXNzICovCisgICAgaGkyYy0+SW5zdGFuY2UtPlRYRFIgPSBoaTJjLT5NZW1hZGRyZXNzOworCisgICAgLyogUmVzZXQgTWVtYWRkcmVzcyBjb250ZW50ICovCisgICAgaGkyYy0+TWVtYWRkcmVzcyA9IDB4RkZGRkZGRkZVOworICB9CisgIGVsc2UgaWYgKChJMkNfQ0hFQ0tfRkxBRyhJVEZsYWdzLCBJMkNfRkxBR19UQ1IpICE9IFJFU0VUKSAmJiBcCisgICAgICAgICAgIChJMkNfQ0hFQ0tfSVRfU09VUkNFKElUU291cmNlcywgSTJDX0lUX1RDSSkgIT0gUkVTRVQpKQorICB7CisgICAgLyogRW5hYmxlIG9ubHkgRXJyb3IgaW50ZXJydXB0ICovCisgICAgSTJDX0VuYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfRVJST1JfSVQpOworCisgICAgaWYgKGhpMmMtPlhmZXJDb3VudCAhPSAwVSkKKyAgICB7CisgICAgICAvKiBQcmVwYXJlIHRoZSBuZXcgWGZlclNpemUgdG8gdHJhbnNmZXIgKi8KKyAgICAgIGlmIChoaTJjLT5YZmVyQ291bnQgPiBNQVhfTkJZVEVfU0laRSkKKyAgICAgIHsKKyAgICAgICAgaGkyYy0+WGZlclNpemUgPSBNQVhfTkJZVEVfU0laRTsKKyAgICAgICAgSTJDX1RyYW5zZmVyQ29uZmlnKGhpMmMsICh1aW50MTZfdCloaTJjLT5EZXZhZGRyZXNzLCAodWludDhfdCloaTJjLT5YZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19SRUxPQURfTU9ERSwgSTJDX05PX1NUQVJUU1RPUCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGhpMmMtPlhmZXJTaXplID0gaGkyYy0+WGZlckNvdW50OworICAgICAgICBJMkNfVHJhbnNmZXJDb25maWcoaGkyYywgKHVpbnQxNl90KWhpMmMtPkRldmFkZHJlc3MsICh1aW50OF90KWhpMmMtPlhmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0FVVE9FTkRfTU9ERSwgSTJDX05PX1NUQVJUU1RPUCk7CisgICAgICB9CisKKyAgICAgIC8qIFVwZGF0ZSBYZmVyQ291bnQgdmFsdWUgKi8KKyAgICAgIGhpMmMtPlhmZXJDb3VudCAtPSBoaTJjLT5YZmVyU2l6ZTsKKworICAgICAgLyogRW5hYmxlIERNQSBSZXF1ZXN0ICovCisgICAgICBpZiAoaGkyYy0+U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9CVVNZX1JYKQorICAgICAgeworICAgICAgICBoaTJjLT5JbnN0YW5jZS0+Q1IxIHw9IEkyQ19DUjFfUlhETUFFTjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgaGkyYy0+SW5zdGFuY2UtPkNSMSB8PSBJMkNfQ1IxX1RYRE1BRU47CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBXcm9uZyBzaXplIFN0YXR1cyByZWdhcmRpbmcgVENSIGZsYWcgZXZlbnQgKi8KKyAgICAgIC8qIENhbGwgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbGJhY2sgdG8gaW5mb3JtIHVwcGVyIGxheWVyIG9mIEVuZCBvZiBUcmFuc2ZlciAqLworICAgICAgSTJDX0lURXJyb3IoaGkyYywgSEFMX0kyQ19FUlJPUl9TSVpFKTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoKEkyQ19DSEVDS19GTEFHKElURmxhZ3MsIEkyQ19GTEFHX1RDKSAhPSBSRVNFVCkgJiYgXAorICAgICAgICAgICAoSTJDX0NIRUNLX0lUX1NPVVJDRShJVFNvdXJjZXMsIEkyQ19JVF9UQ0kpICE9IFJFU0VUKSkKKyAgeworICAgIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpCisgICAgeworICAgICAgZGlyZWN0aW9uID0gSTJDX0dFTkVSQVRFX1NUQVJUX1JFQUQ7CisgICAgfQorCisgICAgaWYgKGhpMmMtPlhmZXJDb3VudCA+IE1BWF9OQllURV9TSVpFKQorICAgIHsKKyAgICAgIGhpMmMtPlhmZXJTaXplID0gTUFYX05CWVRFX1NJWkU7CisKKyAgICAgIC8qIFNldCBOQllURVMgdG8gd3JpdGUgYW5kIHJlbG9hZCBpZiBoaTJjLT5YZmVyQ291bnQgPiBNQVhfTkJZVEVfU0laRSBhbmQgZ2VuZXJhdGUgUkVTVEFSVCAqLworICAgICAgSTJDX1RyYW5zZmVyQ29uZmlnKGhpMmMsICh1aW50MTZfdCloaTJjLT5EZXZhZGRyZXNzLCAodWludDhfdCloaTJjLT5YZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfUkVMT0FEX01PREUsIGRpcmVjdGlvbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBoaTJjLT5YZmVyU2l6ZSA9IGhpMmMtPlhmZXJDb3VudDsKKworICAgICAgLyogU2V0IE5CWVRFUyB0byB3cml0ZSBhbmQgZ2VuZXJhdGUgUkVTVEFSVCAqLworICAgICAgSTJDX1RyYW5zZmVyQ29uZmlnKGhpMmMsICh1aW50MTZfdCloaTJjLT5EZXZhZGRyZXNzLCAodWludDhfdCloaTJjLT5YZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQVVUT0VORF9NT0RFLCBkaXJlY3Rpb24pOworICAgIH0KKworICAgIC8qIFVwZGF0ZSBYZmVyQ291bnQgdmFsdWUgKi8KKyAgICBoaTJjLT5YZmVyQ291bnQgLT0gaGkyYy0+WGZlclNpemU7CisKKyAgICAvKiBFbmFibGUgRE1BIFJlcXVlc3QgKi8KKyAgICBpZiAoaGkyYy0+U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9CVVNZX1JYKQorICAgIHsKKyAgICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgfD0gSTJDX0NSMV9SWERNQUVOOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaGkyYy0+SW5zdGFuY2UtPkNSMSB8PSBJMkNfQ1IxX1RYRE1BRU47CisgICAgfQorICB9CisgIGVsc2UgaWYgKChJMkNfQ0hFQ0tfRkxBRyhJVEZsYWdzLCBJMkNfRkxBR19TVE9QRikgIT0gUkVTRVQpICYmIFwKKyAgICAgICAgICAgKEkyQ19DSEVDS19JVF9TT1VSQ0UoSVRTb3VyY2VzLCBJMkNfSVRfU1RPUEkpICE9IFJFU0VUKSkKKyAgeworICAgIC8qIENhbGwgSTJDIE1hc3RlciBjb21wbGV0ZSBwcm9jZXNzICovCisgICAgSTJDX0lUTWFzdGVyQ3BsdChoaTJjLCBJVEZsYWdzKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgIH0KKworICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgIF9fSEFMX1VOTE9DSyhoaTJjKTsKKworICByZXR1cm4gSEFMX09LOworfQorCisvKioKICAgKiBAYnJpZWYgIEludGVycnVwdCBTdWItUm91dGluZSB3aGljaCBoYW5kbGUgdGhlIEludGVycnVwdCBGbGFncyBTbGF2ZSBNb2RlIHdpdGggRE1BLgogICAqIEBwYXJhbSAgaGkyYyBQb2ludGVyIHRvIGEgSTJDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJMkMuCkBAIC02NTc1LDExICs2ODQ3LDExIEBACiAgICAgICAgICAgewogICAgICAgICAgICAgLyogR2VuZXJhdGUgU3RvcCAqLwogICAgICAgICAgICAgaGkyYy0+SW5zdGFuY2UtPkNSMiB8PSBJMkNfQ1IyX1NUT1A7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLyogVXBkYXRlIFRpY2sgd2l0aCBuZXcgcmVmZXJlbmNlICovCiAgICAgICAgICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogICAgICAgICAgIH0KLSAgICAgICAgICAKKwogICAgICAgICAgIHdoaWxlIChfX0hBTF9JMkNfR0VUX0ZMQUcoaGkyYywgSTJDX0ZMQUdfU1RPUEYpID09IFJFU0VUKQogICAgICAgICAgIHsKICAgICAgICAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLwpAQCAtNjU4OCwxMCArNjg2MCwxMCBAQAogICAgICAgICAgICAgICBoaTJjLT5FcnJvckNvZGUgfD0gSEFMX0kyQ19FUlJPUl9USU1FT1VUOwogICAgICAgICAgICAgICBoaTJjLT5TdGF0ZSA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CiAgICAgICAgICAgICAgIGhpMmMtPk1vZGUgPSBIQUxfSTJDX01PREVfTk9ORTsKLSAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgICAgICAgICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7Ci0gICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CkBAIC02Njk2LDE0ICs2OTY4LDE0IEBACiAKICAgLyogRGVjbGFyYXRpb24gb2YgdG1wIHRvIHByZXZlbnQgdW5kZWZpbmVkIGJlaGF2aW9yIG9mIHZvbGF0aWxlIHVzYWdlICovCiAgIHVpbnQzMl90IHRtcCA9ICgodWludDMyX3QpKCgodWludDMyX3QpRGV2QWRkcmVzcyAmIEkyQ19DUjJfU0FERCkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodWludDMyX3QpU2l6ZSA8PCBJMkNfQ1IyX05CWVRFU19Qb3MpICYgSTJDX0NSMl9OQllURVMpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KU1vZGUgfCAodWludDMyX3QpUmVxdWVzdCkgJiAofjB4ODAwMDAwMDBVKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KVNpemUgPDwgSTJDX0NSMl9OQllURVNfUG9zKSAmIEkyQ19DUjJfTkJZVEVTKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KU1vZGUgfCAodWludDMyX3QpUmVxdWVzdCkgJiAofjB4ODAwMDAwMDBVKSk7CiAKICAgLyogdXBkYXRlIENSMiByZWdpc3RlciAqLwogICBNT0RJRllfUkVHKGhpMmMtPkluc3RhbmNlLT5DUjIsIFwKICAgICAgICAgICAgICAoKEkyQ19DUjJfU0FERCB8IEkyQ19DUjJfTkJZVEVTIHwgSTJDX0NSMl9SRUxPQUQgfCBJMkNfQ1IyX0FVVE9FTkQgfCBcCiAgICAgICAgICAgICAgICAoSTJDX0NSMl9SRF9XUk4gJiAodWludDMyX3QpKFJlcXVlc3QgPj4gKDMxVSAtIEkyQ19DUjJfUkRfV1JOX1BvcykpKSB8IFwKLSAgICAgICAgICAgICAgICBJMkNfQ1IyX1NUQVJUIHwgSTJDX0NSMl9TVE9QKSksIHRtcCk7CisgICAgICAgICAgICAgICBJMkNfQ1IyX1NUQVJUIHwgSTJDX0NSMl9TVE9QKSksIHRtcCk7CiB9CiAKIC8qKgpAQCAtNjc2NCw2ICs3MDM2LDEyIEBACiAgICAgICB0bXBpc3IgfD0gSTJDX0lUX0VSUkkgfCBJMkNfSVRfVENJIHwgSTJDX0lUX1NUT1BJIHwgSTJDX0lUX05BQ0tJIHwgSTJDX0lUX1JYSTsKICAgICB9CiAKKyAgICBpZiAoSW50ZXJydXB0UmVxdWVzdCA9PSBJMkNfWEZFUl9FUlJPUl9JVCkKKyAgICB7CisgICAgICAvKiBFbmFibGUgRVJSIGFuZCBOQUNLIGludGVycnVwdHMgKi8KKyAgICAgIHRtcGlzciB8PSBJMkNfSVRfRVJSSSB8IEkyQ19JVF9OQUNLSTsKKyAgICB9CisKICAgICBpZiAoSW50ZXJydXB0UmVxdWVzdCA9PSBJMkNfWEZFUl9DUExUX0lUKQogICAgIHsKICAgICAgIC8qIEVuYWJsZSBTVE9QIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX2lyZGEuYyBiL1NyYy9zdG0zMmw0eHhfaGFsX2lyZGEuYwppbmRleCA1YTY1NDQ1Li40ZGM2NWJjIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9pcmRhLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfaXJkYS5jCkBAIC0xMDc4LDE0ICsxMDc4LDE0IEBACiAgICAgfQogI2Vsc2UKICAgICBpZiAoaGlyZGEtPkluaXQuUGFyaXR5ICE9IElSREFfUEFSSVRZX05PTkUpCi0gICAgeyAKLSAgICAgIC8qIEVuYWJsZSB0aGUgSVJEQSBQYXJpdHkgRXJyb3IgYW5kIERhdGEgUmVnaXN0ZXIgbm90IGVtcHR5IEludGVycnVwdHMgKi8gIAorICAgIHsKKyAgICAgIC8qIEVuYWJsZSB0aGUgSVJEQSBQYXJpdHkgRXJyb3IgYW5kIERhdGEgUmVnaXN0ZXIgbm90IGVtcHR5IEludGVycnVwdHMgKi8KICAgICAgIFNFVF9CSVQoaGlyZGEtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9QRUlFIHwgVVNBUlRfQ1IxX1JYTkVJRSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgIC8qIEVuYWJsZSB0aGUgSVJEQSBEYXRhIFJlZ2lzdGVyIG5vdCBlbXB0eSBJbnRlcnJ1cHRzICovIAotICAgICBTRVRfQklUKGhpcmRhLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfUlhORUlFKTsgCisgICAgICAvKiBFbmFibGUgdGhlIElSREEgRGF0YSBSZWdpc3RlciBub3QgZW1wdHkgSW50ZXJydXB0cyAqLworICAgICAgU0VUX0JJVChoaXJkYS0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JYTkVJRSk7CiAgICAgfQogI2VuZGlmIC8qIFVTQVJUX0NSMV9GSUZPRU4gKi8KIApAQCAtMTMyNSw3ICsxMzI1LDcgQEAKIAogICAgIC8qIFJlLWVuYWJsZSBQRSBhbmQgRVJSIChGcmFtZSBlcnJvciwgbm9pc2UgZXJyb3IsIG92ZXJydW4gZXJyb3IpIGludGVycnVwdHMgKi8KICAgICBpZiAoaGlyZGEtPkluaXQuUGFyaXR5ICE9IElSREFfUEFSSVRZX05PTkUpCi0gICAgeyAgICAKKyAgICB7CiAgICAgICBTRVRfQklUKGhpcmRhLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfUEVJRSk7CiAgICAgfQogICAgIFNFVF9CSVQoaGlyZGEtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19FSUUpOwpAQCAtMjI2Miw3ICsyMjYyLDcgQEAKICAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJUkRBIG1vZHVsZS4KICAgKiBAcmV0dmFsIEhBTCBzdGF0ZQogICAqLwotSEFMX0lSREFfU3RhdGVUeXBlRGVmIEhBTF9JUkRBX0dldFN0YXRlKElSREFfSGFuZGxlVHlwZURlZiAqaGlyZGEpCitIQUxfSVJEQV9TdGF0ZVR5cGVEZWYgSEFMX0lSREFfR2V0U3RhdGUoY29uc3QgSVJEQV9IYW5kbGVUeXBlRGVmICpoaXJkYSkKIHsKICAgLyogUmV0dXJuIElSREEgaGFuZGxlIHN0YXRlICovCiAgIHVpbnQzMl90IHRlbXAxOwpAQCAtMjI3OSw3ICsyMjc5LDcgQEAKICAgKiAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIElSREEgbW9kdWxlLgogICAqIEByZXR2YWwgSVJEQSBFcnJvciBDb2RlCiAgICovCi11aW50MzJfdCBIQUxfSVJEQV9HZXRFcnJvcihJUkRBX0hhbmRsZVR5cGVEZWYgKmhpcmRhKQordWludDMyX3QgSEFMX0lSREFfR2V0RXJyb3IoY29uc3QgSVJEQV9IYW5kbGVUeXBlRGVmICpoaXJkYSkKIHsKICAgcmV0dXJuIGhpcmRhLT5FcnJvckNvZGU7CiB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9scHRpbS5jIGIvU3JjL3N0bTMybDR4eF9oYWxfbHB0aW0uYwppbmRleCBlMmIxZWU0Li4zZTY0ZWZmIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9scHRpbS5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX2xwdGltLmMKQEAgLTUxMyw3ICs1MTMsNyBAQAogICAqIEBicmllZiAgU3RhcnQgdGhlIExQVElNIFBXTSBnZW5lcmF0aW9uLgogICAqIEBwYXJhbSAgaGxwdGltIExQVElNIGhhbmRsZQogICAqIEBwYXJhbSAgUGVyaW9kIFNwZWNpZmllcyB0aGUgQXV0b3JlbG9hZCB2YWx1ZS4KLSAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDB4MDAwMCBhbmQgMHhGRkZGLgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMDAxIGFuZCAweEZGRkYuCiAgICogQHBhcmFtICBQdWxzZSBTcGVjaWZpZXMgdGhlIGNvbXBhcmUgdmFsdWUuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwMDAgYW5kIDB4RkZGRi4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTU2MSw3ICs1NjEsNyBAQAogICAvKiBTdGFydCB0aW1lciBpbiBjb250aW51b3VzIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfQ09OVElOVU9VUyhobHB0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgVElNIHN0YXRlKi8KKyAgLyogQ2hhbmdlIHRoZSBMUFRJTSBzdGF0ZSAqLwogICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX1JFQURZOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KQEAgLTU3OCw3ICs1NzgsNyBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fSU5TVEFOQ0UoaGxwdGltLT5JbnN0YW5jZSkpOwogCi0gIC8qIFNldCB0aGUgTFBUSU0gc3RhdGUgKi8KKyAgLyogQ2hhbmdlIHRoZSBMUFRJTSBzdGF0ZSAqLwogICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX0JVU1k7CiAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwpAQCAtNTg5LDcgKzU4OSw3IEBACiAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICB9CiAKLSAgLyogQ2hhbmdlIHRoZSBMUFRJTSBzdGF0ZSovCisgIC8qIENoYW5nZSB0aGUgTFBUSU0gc3RhdGUgKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9SRUFEWTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC02MDAsNyArNjAwLDcgQEAKICAgKiBAYnJpZWYgIFN0YXJ0IHRoZSBMUFRJTSBQV00gZ2VuZXJhdGlvbiBpbiBpbnRlcnJ1cHQgbW9kZS4KICAgKiBAcGFyYW0gIGhscHRpbSBMUFRJTSBoYW5kbGUKICAgKiBAcGFyYW0gIFBlcmlvZCBTcGVjaWZpZXMgdGhlIEF1dG9yZWxvYWQgdmFsdWUuCi0gICogICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwMDAgYW5kIDB4RkZGRgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMDAxIGFuZCAweEZGRkYKICAgKiBAcGFyYW0gIFB1bHNlIFNwZWNpZmllcyB0aGUgY29tcGFyZSB2YWx1ZS4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDB4MDAwMCBhbmQgMHhGRkZGCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCkBAIC02ODYsNyArNjg2LDcgQEAKICAgLyogU3RhcnQgdGltZXIgaW4gY29udGludW91cyBtb2RlICovCiAgIF9fSEFMX0xQVElNX1NUQVJUX0NPTlRJTlVPVVMoaGxwdGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIFRJTSBzdGF0ZSovCisgIC8qIENoYW5nZSB0aGUgTFBUSU0gc3RhdGUgKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9SRUFEWTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC03MDMsNyArNzAzLDcgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0lOU1RBTkNFKGhscHRpbS0+SW5zdGFuY2UpKTsKIAotICAvKiBTZXQgdGhlIExQVElNIHN0YXRlICovCisgIC8qIENoYW5nZSB0aGUgTFBUSU0gc3RhdGUgKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9CVVNZOwogCiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KQEAgLTc0MSw3ICs3NDEsNyBAQAogICBfX0hBTF9MUFRJTV9ESVNBQkxFX0lUKGhscHRpbSwgTFBUSU1fSVRfVVBEQVRFKTsKICNlbmRpZgogCi0gIC8qIENoYW5nZSB0aGUgTFBUSU0gc3RhdGUqLworICAvKiBDaGFuZ2UgdGhlIExQVElNIHN0YXRlICovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfUkVBRFk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwpAQCAtNzUyLDcgKzc1Miw3IEBACiAgICogQGJyaWVmICBTdGFydCB0aGUgTFBUSU0gT25lIHB1bHNlIGdlbmVyYXRpb24uCiAgICogQHBhcmFtICBobHB0aW0gTFBUSU0gaGFuZGxlCiAgICogQHBhcmFtICBQZXJpb2QgU3BlY2lmaWVzIHRoZSBBdXRvcmVsb2FkIHZhbHVlLgotICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMDAwIGFuZCAweEZGRkYuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwMDEgYW5kIDB4RkZGRi4KICAgKiBAcGFyYW0gIFB1bHNlIFNwZWNpZmllcyB0aGUgY29tcGFyZSB2YWx1ZS4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDB4MDAwMCBhbmQgMHhGRkZGLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwpAQCAtODAwLDcgKzgwMCw3IEBACiAgIC8qIFN0YXJ0IHRpbWVyIGluIHNpbmdsZSAob25lIHNob3QpIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfU0lOR0xFKGhscHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBUSU0gc3RhdGUqLworICAvKiBDaGFuZ2UgdGhlIExQVElNIHN0YXRlICovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfUkVBRFk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwpAQCAtODI4LDcgKzgyOCw3IEBACiAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICB9CiAKLSAgLyogQ2hhbmdlIHRoZSBMUFRJTSBzdGF0ZSovCisgIC8qIENoYW5nZSB0aGUgTFBUSU0gc3RhdGUgKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9SRUFEWTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC04MzksNyArODM5LDcgQEAKICAgKiBAYnJpZWYgIFN0YXJ0IHRoZSBMUFRJTSBPbmUgcHVsc2UgZ2VuZXJhdGlvbiBpbiBpbnRlcnJ1cHQgbW9kZS4KICAgKiBAcGFyYW0gIGhscHRpbSBMUFRJTSBoYW5kbGUKICAgKiBAcGFyYW0gIFBlcmlvZCBTcGVjaWZpZXMgdGhlIEF1dG9yZWxvYWQgdmFsdWUuCi0gICogICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwMDAgYW5kIDB4RkZGRi4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDB4MDAwMSBhbmQgMHhGRkZGLgogICAqIEBwYXJhbSAgUHVsc2UgU3BlY2lmaWVzIHRoZSBjb21wYXJlIHZhbHVlLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMDAwIGFuZCAweEZGRkYuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCkBAIC05MjUsNyArOTI1LDcgQEAKICAgLyogU3RhcnQgdGltZXIgaW4gc2luZ2xlIChvbmUgc2hvdCkgbW9kZSAqLwogICBfX0hBTF9MUFRJTV9TVEFSVF9TSU5HTEUoaGxwdGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIFRJTSBzdGF0ZSovCisgIC8qIENoYW5nZSB0aGUgTFBUSU0gc3RhdGUgKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9SRUFEWTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC05NDUsNiArOTQ1LDcgQEAKICAgLyogU2V0IHRoZSBMUFRJTSBzdGF0ZSAqLwogICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX0JVU1k7CiAKKwogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKIApAQCAtOTgwLDcgKzk4MSw3IEBACiAgIF9fSEFMX0xQVElNX0RJU0FCTEVfSVQoaGxwdGltLCBMUFRJTV9JVF9VUERBVEUpOwogI2VuZGlmCiAKLSAgLyogQ2hhbmdlIHRoZSBMUFRJTSBzdGF0ZSovCisgIC8qIENoYW5nZSB0aGUgTFBUSU0gc3RhdGUgKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9SRUFEWTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC05OTEsNyArOTkyLDcgQEAKICAgKiBAYnJpZWYgIFN0YXJ0IHRoZSBMUFRJTSBpbiBTZXQgb25jZSBtb2RlLgogICAqIEBwYXJhbSAgaGxwdGltIExQVElNIGhhbmRsZQogICAqIEBwYXJhbSAgUGVyaW9kIFNwZWNpZmllcyB0aGUgQXV0b3JlbG9hZCB2YWx1ZS4KLSAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDB4MDAwMCBhbmQgMHhGRkZGLgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMDAxIGFuZCAweEZGRkYuCiAgICogQHBhcmFtICBQdWxzZSBTcGVjaWZpZXMgdGhlIGNvbXBhcmUgdmFsdWUuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwMDAgYW5kIDB4RkZGRi4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTEwMzksNyArMTA0MCw3IEBACiAgIC8qIFN0YXJ0IHRpbWVyIGluIHNpbmdsZSAob25lIHNob3QpIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfU0lOR0xFKGhscHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBUSU0gc3RhdGUqLworICAvKiBDaGFuZ2UgdGhlIExQVElNIHN0YXRlICovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfUkVBRFk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwpAQCAtMTA2Nyw3ICsxMDY4LDcgQEAKICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgIH0KIAotICAvKiBDaGFuZ2UgdGhlIExQVElNIHN0YXRlKi8KKyAgLyogQ2hhbmdlIHRoZSBMUFRJTSBzdGF0ZSAqLwogICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX1JFQURZOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KQEAgLTExNTYsNyArMTE1Nyw3IEBACiAgIC8qIFN0YXJ0IHRpbWVyIGluIHNpbmdsZSAob25lIHNob3QpIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfU0lOR0xFKGhscHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBUSU0gc3RhdGUqLworICAvKiBDaGFuZ2UgdGhlIExQVElNIHN0YXRlICovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfUkVBRFk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwpAQCAtMTIwMyw3ICsxMjA0LDcgQEAKICAgICBfX0hBTF9MUFRJTV9ESVNBQkxFX0lUKGhscHRpbSwgTFBUSU1fSVRfRVhUVFJJRyk7CiAgIH0KIAotICAvKiBDaGFuZ2UgdGhlIExQVElNIHN0YXRlKi8KKyAgLyogQ2hhbmdlIHRoZSBMUFRJTSBzdGF0ZSAqLwogICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX1JFQURZOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KQEAgLTEyMTQsNyArMTIxNSw3IEBACiAgICogQGJyaWVmICBTdGFydCB0aGUgRW5jb2RlciBpbnRlcmZhY2UuCiAgICogQHBhcmFtICBobHB0aW0gTFBUSU0gaGFuZGxlCiAgICogQHBhcmFtICBQZXJpb2QgU3BlY2lmaWVzIHRoZSBBdXRvcmVsb2FkIHZhbHVlLgotICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMDAwIGFuZCAweEZGRkYuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwMDEgYW5kIDB4RkZGRi4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9MUFRJTV9FbmNvZGVyX1N0YXJ0KExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSwgdWludDMyX3QgUGVyaW9kKQpAQCAtMTI2NCw3ICsxMjY1LDcgQEAKICAgLyogU3RhcnQgdGltZXIgaW4gY29udGludW91cyBtb2RlICovCiAgIF9fSEFMX0xQVElNX1NUQVJUX0NPTlRJTlVPVVMoaGxwdGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIFRJTSBzdGF0ZSovCisgIC8qIENoYW5nZSB0aGUgTFBUSU0gc3RhdGUgKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9SRUFEWTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC0xMjk1LDcgKzEyOTYsNyBAQAogICAvKiBSZXNldCBFTkMgYml0IHRvIGRpc2FibGUgdGhlIGVuY29kZXIgaW50ZXJmYWNlICovCiAgIGhscHRpbS0+SW5zdGFuY2UtPkNGR1IgJj0gfkxQVElNX0NGR1JfRU5DOwogCi0gIC8qIENoYW5nZSB0aGUgVElNIHN0YXRlKi8KKyAgLyogQ2hhbmdlIHRoZSBMUFRJTSBzdGF0ZSAqLwogICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX1JFQURZOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KQEAgLTEzNzQsNyArMTM3NSw3IEBACiAgIC8qIFN0YXJ0IHRpbWVyIGluIGNvbnRpbnVvdXMgbW9kZSAqLwogICBfX0hBTF9MUFRJTV9TVEFSVF9DT05USU5VT1VTKGhscHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBUSU0gc3RhdGUqLworICAvKiBDaGFuZ2UgdGhlIExQVElNIHN0YXRlICovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfUkVBRFk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwpAQCAtMTQxMSw3ICsxNDEyLDcgQEAKICAgLyogRGlzYWJsZSAic3dpdGNoIHRvIHVwIGRpcmVjdGlvbiIgaW50ZXJydXB0ICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEVfSVQoaGxwdGltLCBMUFRJTV9JVF9VUCk7CiAKLSAgLyogQ2hhbmdlIHRoZSBUSU0gc3RhdGUqLworICAvKiBDaGFuZ2UgdGhlIExQVElNIHN0YXRlICovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfUkVBRFk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwpAQCAtMTQyNCw3ICsxNDI1LDcgQEAKICAgKiAgICAgICAgIHRyaWdnZXIgZXZlbnQgd2lsbCByZXNldCB0aGUgY291bnRlciBhbmQgdGhlIHRpbWVyIHJlc3RhcnRzLgogICAqIEBwYXJhbSAgaGxwdGltIExQVElNIGhhbmRsZQogICAqIEBwYXJhbSAgUGVyaW9kIFNwZWNpZmllcyB0aGUgQXV0b3JlbG9hZCB2YWx1ZS4KLSAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDB4MDAwMCBhbmQgMHhGRkZGLgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMDAxIGFuZCAweEZGRkYuCiAgICogQHBhcmFtICBUaW1lb3V0IFNwZWNpZmllcyB0aGUgVGltZU91dCB2YWx1ZSB0byByZXNldCB0aGUgY291bnRlci4KICAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDB4MDAwMCBhbmQgMHhGRkZGLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwpAQCAtMTQ3Miw3ICsxNDczLDcgQEAKICAgLyogU3RhcnQgdGltZXIgaW4gY29udGludW91cyBtb2RlICovCiAgIF9fSEFMX0xQVElNX1NUQVJUX0NPTlRJTlVPVVMoaGxwdGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIFRJTSBzdGF0ZSovCisgIC8qIENoYW5nZSB0aGUgTFBUSU0gc3RhdGUgKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9SRUFEWTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC0xNTAzLDcgKzE1MDQsNyBAQAogICAvKiBSZXNldCBUSU1PVVQgYml0IHRvIGVuYWJsZSB0aGUgdGltZW91dCBmdW5jdGlvbiAqLwogICBobHB0aW0tPkluc3RhbmNlLT5DRkdSICY9IH5MUFRJTV9DRkdSX1RJTU9VVDsKIAotICAvKiBDaGFuZ2UgdGhlIFRJTSBzdGF0ZSovCisgIC8qIENoYW5nZSB0aGUgTFBUSU0gc3RhdGUgKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9SRUFEWTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC0xNTE2LDcgKzE1MTcsNyBAQAogICAqICAgICAgICAgdHJpZ2dlciBldmVudCB3aWxsIHJlc2V0IHRoZSBjb3VudGVyIGFuZCB0aGUgdGltZXIgcmVzdGFydHMuCiAgICogQHBhcmFtICBobHB0aW0gTFBUSU0gaGFuZGxlCiAgICogQHBhcmFtICBQZXJpb2QgU3BlY2lmaWVzIHRoZSBBdXRvcmVsb2FkIHZhbHVlLgotICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMDAwIGFuZCAweEZGRkYuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwMDEgYW5kIDB4RkZGRi4KICAgKiBAcGFyYW0gIFRpbWVvdXQgU3BlY2lmaWVzIHRoZSBUaW1lT3V0IHZhbHVlIHRvIHJlc2V0IHRoZSBjb3VudGVyLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMDAwIGFuZCAweEZGRkYuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCkBAIC0xNTgxLDcgKzE1ODIsNyBAQAogICAvKiBTdGFydCB0aW1lciBpbiBjb250aW51b3VzIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfQ09OVElOVU9VUyhobHB0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgVElNIHN0YXRlKi8KKyAgLyogQ2hhbmdlIHRoZSBMUFRJTSBzdGF0ZSAqLwogICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX1JFQURZOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KQEAgLTE1OTgsMTIgKzE1OTksMTMgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0lOU1RBTkNFKGhscHRpbS0+SW5zdGFuY2UpKTsKIAotICAvKiBTZXQgdGhlIExQVElNIHN0YXRlICovCi0gIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfQlVTWTsKIAogICAvKiBEaXNhYmxlIEVYVEkgTGluZSBpbnRlcnJ1cHQgb24gdGhlIExQVElNIFdha2UtdXAgVGltZXIgKi8KICAgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0lUKGhscHRpbS0+SW5zdGFuY2UpOwogCisgIC8qIFNldCB0aGUgTFBUSU0gc3RhdGUgKi8KKyAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9CVVNZOworCiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOwogCkBAIC0xNjE4LDcgKzE2MjAsNyBAQAogICAvKiBEaXNhYmxlIENvbXBhcmUgbWF0Y2ggaW50ZXJydXB0ICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEVfSVQoaGxwdGltLCBMUFRJTV9JVF9DTVBNKTsKIAotICAvKiBDaGFuZ2UgdGhlIFRJTSBzdGF0ZSovCisgIC8qIENoYW5nZSB0aGUgTFBUSU0gc3RhdGUgKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9SRUFEWTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC0xNjI5LDcgKzE2MzEsNyBAQAogICAqIEBicmllZiAgU3RhcnQgdGhlIENvdW50ZXIgbW9kZS4KICAgKiBAcGFyYW0gIGhscHRpbSBMUFRJTSBoYW5kbGUKICAgKiBAcGFyYW0gIFBlcmlvZCBTcGVjaWZpZXMgdGhlIEF1dG9yZWxvYWQgdmFsdWUuCi0gICogICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwMDAgYW5kIDB4RkZGRi4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDB4MDAwMSBhbmQgMHhGRkZGLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0xQVElNX0NvdW50ZXJfU3RhcnQoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltLCB1aW50MzJfdCBQZXJpb2QpCkBAIC0xNjY5LDcgKzE2NzEsNyBAQAogICAvKiBTdGFydCB0aW1lciBpbiBjb250aW51b3VzIG1vZGUgKi8KICAgX19IQUxfTFBUSU1fU1RBUlRfQ09OVElOVU9VUyhobHB0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgVElNIHN0YXRlKi8KKyAgLyogQ2hhbmdlIHRoZSBMUFRJTSBzdGF0ZSAqLwogICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX1JFQURZOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KQEAgLTE2OTcsNyArMTY5OSw3IEBACiAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICB9CiAKLSAgLyogQ2hhbmdlIHRoZSBUSU0gc3RhdGUqLworICAvKiBDaGFuZ2UgdGhlIExQVElNIHN0YXRlICovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfUkVBRFk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwpAQCAtMTcwOCw3ICsxNzEwLDcgQEAKICAgKiBAYnJpZWYgIFN0YXJ0IHRoZSBDb3VudGVyIG1vZGUgaW4gaW50ZXJydXB0IG1vZGUuCiAgICogQHBhcmFtICBobHB0aW0gTFBUSU0gaGFuZGxlCiAgICogQHBhcmFtICBQZXJpb2QgU3BlY2lmaWVzIHRoZSBBdXRvcmVsb2FkIHZhbHVlLgotICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMHgwMDAwIGFuZCAweEZGRkYuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAweDAwMDEgYW5kIDB4RkZGRi4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9MUFRJTV9Db3VudGVyX1N0YXJ0X0lUKExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSwgdWludDMyX3QgUGVyaW9kKQpAQCAtMTc3Niw3ICsxNzc4LDcgQEAKICAgLyogU3RhcnQgdGltZXIgaW4gY29udGludW91cyBtb2RlICovCiAgIF9fSEFMX0xQVElNX1NUQVJUX0NPTlRJTlVPVVMoaGxwdGltKTsKIAotICAvKiBDaGFuZ2UgdGhlIFRJTSBzdGF0ZSovCisgIC8qIENoYW5nZSB0aGUgTFBUSU0gc3RhdGUgKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9SRUFEWTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC0xNzkzLDEyICsxNzk1LDEzIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9JTlNUQU5DRShobHB0aW0tPkluc3RhbmNlKSk7CiAKLSAgLyogU2V0IHRoZSBMUFRJTSBzdGF0ZSAqLwotICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX0JVU1k7CiAKICAgLyogRGlzYWJsZSBFWFRJIExpbmUgaW50ZXJydXB0IG9uIHRoZSBMUFRJTSBXYWtlLXVwIFRpbWVyICovCiAgIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9JVChobHB0aW0tPkluc3RhbmNlKTsKIAorICAvKiBTZXQgdGhlIExQVElNIHN0YXRlICovCisgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfQlVTWTsKKwogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKIApAQCAtMTgyMCw3ICsxODIzLDcgQEAKICAgLyogRGlzYWJsZSBVcGRhdGUgRXZlbnQgaW50ZXJydXB0ICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEVfSVQoaGxwdGltLCBMUFRJTV9JVF9VUERBVEUpOwogI2VuZGlmCi0gIC8qIENoYW5nZSB0aGUgVElNIHN0YXRlKi8KKyAgLyogQ2hhbmdlIHRoZSBMUFRJTSBzdGF0ZSAqLwogICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX1JFQURZOwogCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KQEAgLTE4NTEsNyArMTg1NCw3IEBACiAgICogQHBhcmFtICBobHB0aW0gTFBUSU0gaGFuZGxlCiAgICogQHJldHZhbCBDb3VudGVyIHZhbHVlLgogICAqLwotdWludDMyX3QgSEFMX0xQVElNX1JlYWRDb3VudGVyKExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSkKK3VpbnQzMl90IEhBTF9MUFRJTV9SZWFkQ291bnRlcihjb25zdCBMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9JTlNUQU5DRShobHB0aW0tPkluc3RhbmNlKSk7CkBAIC0xODY0LDcgKzE4NjcsNyBAQAogICAqIEBwYXJhbSAgaGxwdGltIExQVElNIGhhbmRsZQogICAqIEByZXR2YWwgQXV0b3JlbG9hZCB2YWx1ZS4KICAgKi8KLXVpbnQzMl90IEhBTF9MUFRJTV9SZWFkQXV0b1JlbG9hZChMUFRJTV9IYW5kbGVUeXBlRGVmICpobHB0aW0pCit1aW50MzJfdCBIQUxfTFBUSU1fUmVhZEF1dG9SZWxvYWQoY29uc3QgTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fSU5TVEFOQ0UoaGxwdGltLT5JbnN0YW5jZSkpOwpAQCAtMTg3Nyw3ICsxODgwLDcgQEAKICAgKiBAcGFyYW0gIGhscHRpbSBMUFRJTSBoYW5kbGUKICAgKiBAcmV0dmFsIENvbXBhcmUgdmFsdWUuCiAgICovCi11aW50MzJfdCBIQUxfTFBUSU1fUmVhZENvbXBhcmUoTFBUSU1fSGFuZGxlVHlwZURlZiAqaGxwdGltKQordWludDMyX3QgSEFMX0xQVElNX1JlYWRDb21wYXJlKGNvbnN0IExQVElNX0hhbmRsZVR5cGVEZWYgKmhscHRpbSkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0lOU1RBTkNFKGhscHRpbS0+SW5zdGFuY2UpKTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX2x0ZGMuYyBiL1NyYy9zdG0zMmw0eHhfaGFsX2x0ZGMuYwppbmRleCAxZjA5YjhlLi5lOGY4ZmQ2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9sdGRjLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfbHRkYy5jCkBAIC0xMywxMyArMTMsMTIgQEAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCi0gICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCi0gICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgorICAqIENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgKgotICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLAotICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKLSAgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6Ci0gICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKKyAgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKKyAgKiBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb2Z0d2FyZSBjb21wb25lbnQuCisgICogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCiAgICoKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIEB2ZXJiYXRpbQpAQCAtNTE1LDcgKzUxNCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgVW5yZWdpc3RlciBhbiBMVERDIENhbGxiYWNrCi0gICogICAgICAgICBMVERDIGNhbGxhYmNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqICAgICAgICAgTFREQyBjYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2sKICAgKiBAcGFyYW0gaGx0ZGMgbHRkYyBoYW5kbGUKICAgKiBAcGFyYW0gQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9sdGRjX2V4LmMgYi9TcmMvc3RtMzJsNHh4X2hhbF9sdGRjX2V4LmMKaW5kZXggODVlNmU1Mi4uMDFiYmI1ZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfbHRkY19leC5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX2x0ZGNfZXguYwpAQCAtNiwxMyArNiwxMiBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KLSAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CisgICogQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAqCi0gICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCi0gICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQotICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKLSAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZQorICAqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKyAgKiBJZiBubyBMSUNFTlNFIGZpbGUgY29tZXMgd2l0aCB0aGlzIHNvZnR3YXJlLCBpdCBpcyBwcm92aWRlZCBBUy1JUy4KICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX25vci5jIGIvU3JjL3N0bTMybDR4eF9oYWxfbm9yLmMKaW5kZXggMDJmMjUwYi4uNjM3MGU4ZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfbm9yLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfbm9yLmMKQEAgLTMwMCwyMSArMzAwLDIxIEBACiAgICAgZGV2aWNlYWRkcmVzcyA9IE5PUl9NRU1PUllfQURSRVNTNDsKICAgfQogCi0gIEZNQ19OT1JTUkFNX1dyaXRlT3BlcmF0aW9uX0VuYWJsZShobm9yLT5JbnN0YW5jZSxobm9yLT5Jbml0Lk5TQmFuayk7Ci0gIAotICAvKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSBjb21tYW5kIHNldCAqLwotICBOT1JfV1JJVEUoTk9SX0FERFJfU0hJRlQoZGV2aWNlYWRkcmVzcywgdXdOT1JNZW1vcnlEYXRhV2lkdGgsIE5PUl9DTURfQUREUkVTU19GSVJTVF9DRkkpLCBOT1JfQ01EX0RBVEFfQ0ZJKTsKLSAgaG5vci0+Q29tbWFuZFNldCA9ICooX19JTyB1aW50MTZfdCAqKSBOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0FERFJFU1NfQ09NTUFORF9TRVQpOwotICAKLSAgc3RhdHVzID0gSEFMX05PUl9SZXR1cm5Ub1JlYWRNb2RlKGhub3IpOwotCiAgIGlmIChobm9yLT5Jbml0LldyaXRlT3BlcmF0aW9uID09IEZNQ19XUklURV9PUEVSQVRJT05fRElTQUJMRSkKICAgewotICAgIEZNQ19OT1JTUkFNX1dyaXRlT3BlcmF0aW9uX0Rpc2FibGUoaG5vci0+SW5zdGFuY2UsaG5vci0+SW5pdC5OU0JhbmspOworICAgICh2b2lkKUZNQ19OT1JTUkFNX1dyaXRlT3BlcmF0aW9uX0Rpc2FibGUoaG5vci0+SW5zdGFuY2UsIGhub3ItPkluaXQuTlNCYW5rKTsKIAogICAgIC8qIFVwZGF0ZSB0aGUgTk9SIGNvbnRyb2xsZXIgc3RhdGUgKi8KICAgICBobm9yLT5TdGF0ZSA9IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEOwogICB9CisgIGVsc2UKKyAgeworICAgIC8qIEdldCB0aGUgdmFsdWUgb2YgdGhlIGNvbW1hbmQgc2V0ICovCisgICAgTk9SX1dSSVRFKE5PUl9BRERSX1NISUZUKGRldmljZWFkZHJlc3MsIHV3Tk9STWVtb3J5RGF0YVdpZHRoLCBOT1JfQ01EX0FERFJFU1NfRklSU1RfQ0ZJKSwgTk9SX0NNRF9EQVRBX0NGSSk7CisgICAgaG5vci0+Q29tbWFuZFNldCA9ICooX19JTyB1aW50MTZfdCAqKSBOT1JfQUREUl9TSElGVChkZXZpY2VhZGRyZXNzLCB1d05PUk1lbW9yeURhdGFXaWR0aCwgTk9SX0FERFJFU1NfQ09NTUFORF9TRVQpOworCisgICAgc3RhdHVzID0gSEFMX05PUl9SZXR1cm5Ub1JlYWRNb2RlKGhub3IpOworICB9CiAKICAgcmV0dXJuIHN0YXR1czsKIH0KQEAgLTQzOSw3ICs0MzksMTEgQEAKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmICgoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKSkKKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpCiAgIHsKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaG5vcik7CkBAIC01MjYsNyArNTMwLDExIEBACiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpIHx8IChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkpCisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorICBlbHNlIGlmIChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFQURZKQogICB7CiAgICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgICBfX0hBTF9MT0NLKGhub3IpOwpAQCAtNjAwLDcgKzYwOCwxMSBAQAogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1JFQURZKSB8fCAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpKQorICBlbHNlIGlmIChzdGF0ZSA9PSBIQUxfTk9SX1NUQVRFX1BST1RFQ1RFRCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkKICAgewogICAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgICAgX19IQUxfTE9DSyhobm9yKTsKQEAgLTc2OSw3ICs3ODEsMTEgQEAKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmICgoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKSkKKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpCiAgIHsKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaG5vcik7CkBAIC0xMTI5LDcgKzExNDUsMTEgQEAKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmICgoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9SRUFEWSkgfHwgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUFJPVEVDVEVEKSkKKyAgZWxzZSBpZiAoc3RhdGUgPT0gSEFMX05PUl9TVEFURV9QUk9URUNURUQpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIGVsc2UgaWYgKHN0YXRlID09IEhBTF9OT1JfU1RBVEVfUkVBRFkpCiAgIHsKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaG5vcik7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9wY2QuYyBiL1NyYy9zdG0zMmw0eHhfaGFsX3BjZC5jCmluZGV4IDI4YWM5OTEuLjgwZjE3M2MgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX3BjZC5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX3BjZC5jCkBAIC00MzUsNyArNDM1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBVbnJlZ2lzdGVyIGFuIFVTQiBQQ0QgQ2FsbGJhY2sKLSAgKiAgICAgICAgIFVTQiBQQ0QgY2FsbGFiY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogICAgICAgICBVU0IgUENEIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjawogICAqIEBwYXJhbSAgaHBjZCBVU0IgUENEIGhhbmRsZQogICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMTA3OCw3ICsxMDc4LDcgQEAKICAgdWludDMyX3QgZXBpbnQ7CiAgIHVpbnQzMl90IGVwbnVtOwogICB1aW50MzJfdCBmaWZvZW1wdHltc2s7Ci0gIHVpbnQzMl90IHRlbXA7CisgIHVpbnQzMl90IFJlZ1ZhbDsKIAogICAvKiBlbnN1cmUgdGhhdCB3ZSBhcmUgaW4gZGV2aWNlIG1vZGUgKi8KICAgaWYgKFVTQl9HZXRNb2RlKGhwY2QtPkluc3RhbmNlKSA9PSBVU0JfT1RHX01PREVfREVWSUNFKQpAQCAtMTA4OSw2ICsxMDg5LDkgQEAKICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvKiBzdG9yZSBjdXJyZW50IGZyYW1lIG51bWJlciAqLworICAgIGhwY2QtPkZyYW1lTnVtYmVyID0gKFVTQnhfREVWSUNFLT5EU1RTICYgVVNCX09UR19EU1RTX0ZOU09GX01zaykgPj4gVVNCX09UR19EU1RTX0ZOU09GX1BvczsKKwogICAgIGlmIChfX0hBTF9QQ0RfR0VUX0ZMQUcoaHBjZCwgVVNCX09UR19HSU5UU1RTX01NSVMpKQogICAgIHsKICAgICAgIC8qIGluY29ycmVjdCBtb2RlLCBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0ICovCkBAIC0xMTAwLDI1ICsxMTAzLDI1IEBACiAgICAgewogICAgICAgVVNCX01BU0tfSU5URVJSVVBUKGhwY2QtPkluc3RhbmNlLCBVU0JfT1RHX0dJTlRTVFNfUlhGTFZMKTsKIAotICAgICAgdGVtcCA9IFVTQngtPkdSWFNUU1A7CisgICAgICBSZWdWYWwgPSBVU0J4LT5HUlhTVFNQOwogCi0gICAgICBlcCA9ICZocGNkLT5PVVRfZXBbdGVtcCAmIFVTQl9PVEdfR1JYU1RTUF9FUE5VTV07CisgICAgICBlcCA9ICZocGNkLT5PVVRfZXBbUmVnVmFsICYgVVNCX09UR19HUlhTVFNQX0VQTlVNXTsKIAotICAgICAgaWYgKCgodGVtcCAmIFVTQl9PVEdfR1JYU1RTUF9QS1RTVFMpID4+IDE3KSA9PSAgU1RTX0RBVEFfVVBEVCkKKyAgICAgIGlmICgoKFJlZ1ZhbCAmIFVTQl9PVEdfR1JYU1RTUF9QS1RTVFMpID4+IDE3KSA9PSAgU1RTX0RBVEFfVVBEVCkKICAgICAgIHsKLSAgICAgICAgaWYgKCh0ZW1wICYgVVNCX09UR19HUlhTVFNQX0JDTlQpICE9IDBVKQorICAgICAgICBpZiAoKFJlZ1ZhbCAmIFVTQl9PVEdfR1JYU1RTUF9CQ05UKSAhPSAwVSkKICAgICAgICAgewogICAgICAgICAgICh2b2lkKVVTQl9SZWFkUGFja2V0KFVTQngsIGVwLT54ZmVyX2J1ZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KSgodGVtcCAmIFVTQl9PVEdfR1JYU1RTUF9CQ05UKSA+PiA0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KSgoUmVnVmFsICYgVVNCX09UR19HUlhTVFNQX0JDTlQpID4+IDQpKTsKIAotICAgICAgICAgIGVwLT54ZmVyX2J1ZmYgKz0gKHRlbXAgJiBVU0JfT1RHX0dSWFNUU1BfQkNOVCkgPj4gNDsKLSAgICAgICAgICBlcC0+eGZlcl9jb3VudCArPSAodGVtcCAmIFVTQl9PVEdfR1JYU1RTUF9CQ05UKSA+PiA0OworICAgICAgICAgIGVwLT54ZmVyX2J1ZmYgKz0gKFJlZ1ZhbCAmIFVTQl9PVEdfR1JYU1RTUF9CQ05UKSA+PiA0OworICAgICAgICAgIGVwLT54ZmVyX2NvdW50ICs9IChSZWdWYWwgJiBVU0JfT1RHX0dSWFNUU1BfQkNOVCkgPj4gNDsKICAgICAgICAgfQogICAgICAgfQotICAgICAgZWxzZSBpZiAoKCh0ZW1wICYgVVNCX09UR19HUlhTVFNQX1BLVFNUUykgPj4gMTcpID09ICBTVFNfU0VUVVBfVVBEVCkKKyAgICAgIGVsc2UgaWYgKCgoUmVnVmFsICYgVVNCX09UR19HUlhTVFNQX1BLVFNUUykgPj4gMTcpID09IFNUU19TRVRVUF9VUERUKQogICAgICAgewogICAgICAgICAodm9pZClVU0JfUmVhZFBhY2tldChVU0J4LCAodWludDhfdCAqKWhwY2QtPlNldHVwLCA4VSk7Ci0gICAgICAgIGVwLT54ZmVyX2NvdW50ICs9ICh0ZW1wICYgVVNCX09UR19HUlhTVFNQX0JDTlQpID4+IDQ7CisgICAgICAgIGVwLT54ZmVyX2NvdW50ICs9IChSZWdWYWwgJiBVU0JfT1RHX0dSWFNUU1BfQkNOVCkgPj4gNDsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKQEAgLTExNTksNiArMTE2MiwzMCBAQAogICAgICAgICAgICAgQ0xFQVJfT1VUX0VQX0lOVFIoZXBudW0sIFVTQl9PVEdfRE9FUElOVF9PVEVQRElTKTsKICAgICAgICAgICB9CiAKKyAgICAgICAgICAvKiBDbGVhciBPVVQgRW5kcG9pbnQgZGlzYWJsZSBpbnRlcnJ1cHQgKi8KKyAgICAgICAgICBpZiAoKGVwaW50ICYgVVNCX09UR19ET0VQSU5UX0VQRElTRCkgPT0gVVNCX09UR19ET0VQSU5UX0VQRElTRCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoKFVTQngtPkdJTlRTVFMgJiBVU0JfT1RHX0dJTlRTVFNfQk9VVE5BS0VGRikgPT0gVVNCX09UR19HSU5UU1RTX0JPVVROQUtFRkYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFVTQnhfREVWSUNFLT5EQ1RMIHw9IFVTQl9PVEdfRENUTF9DR09OQUs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVwID0gJmhwY2QtPk9VVF9lcFtlcG51bV07CisKKyAgICAgICAgICAgIGlmIChlcC0+aXNfaXNvX2luY29tcGxldGUgPT0gMVUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVwLT5pc19pc29faW5jb21wbGV0ZSA9IDBVOworCisjaWYgKFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICAgICAgICAgICAgaHBjZC0+SVNPT1VUSW5jb21wbGV0ZUNhbGxiYWNrKGhwY2QsICh1aW50OF90KWVwbnVtKTsKKyNlbHNlCisgICAgICAgICAgICAgIEhBTF9QQ0RfSVNPT1VUSW5jb21wbGV0ZUNhbGxiYWNrKGhwY2QsICh1aW50OF90KWVwbnVtKTsKKyNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ0xFQVJfT1VUX0VQX0lOVFIoZXBudW0sIFVTQl9PVEdfRE9FUElOVF9FUERJU0QpOworICAgICAgICAgIH0KKwogICAgICAgICAgIC8qIENsZWFyIFN0YXR1cyBQaGFzZSBSZWNlaXZlZCBpbnRlcnJ1cHQgKi8KICAgICAgICAgICBpZiAoKGVwaW50ICYgVVNCX09UR19ET0VQSU5UX09URVBTUFIpID09IFVTQl9PVEdfRE9FUElOVF9PVEVQU1BSKQogICAgICAgICAgIHsKQEAgLTEyMTcsNiArMTI0NCwyMCBAQAogICAgICAgICAgIGlmICgoZXBpbnQgJiBVU0JfT1RHX0RJRVBJTlRfRVBESVNEKSA9PSBVU0JfT1RHX0RJRVBJTlRfRVBESVNEKQogICAgICAgICAgIHsKICAgICAgICAgICAgICh2b2lkKVVTQl9GbHVzaFR4RmlmbyhVU0J4LCBlcG51bSk7CisKKyAgICAgICAgICAgIGVwID0gJmhwY2QtPklOX2VwW2VwbnVtXTsKKworICAgICAgICAgICAgaWYgKGVwLT5pc19pc29faW5jb21wbGV0ZSA9PSAxVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXAtPmlzX2lzb19pbmNvbXBsZXRlID0gMFU7CisKKyNpZiAoVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorICAgICAgICAgICAgICBocGNkLT5JU09JTkluY29tcGxldGVDYWxsYmFjayhocGNkLCAodWludDhfdCllcG51bSk7CisjZWxzZQorICAgICAgICAgICAgICBIQUxfUENEX0lTT0lOSW5jb21wbGV0ZUNhbGxiYWNrKGhwY2QsICh1aW50OF90KWVwbnVtKTsKKyNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgQ0xFQVJfSU5fRVBfSU5UUihlcG51bSwgVVNCX09UR19ESUVQSU5UX0VQRElTRCk7CiAgICAgICAgICAgfQogICAgICAgICAgIGlmICgoZXBpbnQgJiBVU0JfT1RHX0RJRVBJTlRfVFhGRSkgPT0gVVNCX09UR19ESUVQSU5UX1RYRkUpCkBAIC0xMzc3LDE4ICsxNDE4LDM3IEBACiAgICAgICBfX0hBTF9QQ0RfQ0xFQVJfRkxBRyhocGNkLCBVU0JfT1RHX0dJTlRTVFNfU09GKTsKICAgICB9CiAKKyAgICAvKiBIYW5kbGUgR2xvYmFsIE9VVCBOQUsgZWZmZWN0aXZlIEludGVycnVwdCAqLworICAgIGlmIChfX0hBTF9QQ0RfR0VUX0ZMQUcoaHBjZCwgVVNCX09UR19HSU5UU1RTX0JPVVROQUtFRkYpKQorICAgIHsKKyAgICAgIFVTQngtPkdJTlRNU0sgJj0gflVTQl9PVEdfR0lOVE1TS19HT05BS0VGRk07CisKKyAgICAgIGZvciAoZXBudW0gPSAxVTsgZXBudW0gPCBocGNkLT5Jbml0LmRldl9lbmRwb2ludHM7IGVwbnVtKyspCisgICAgICB7CisgICAgICAgIGlmIChocGNkLT5PVVRfZXBbZXBudW1dLmlzX2lzb19pbmNvbXBsZXRlID09IDFVKQorICAgICAgICB7CisgICAgICAgICAgLyogQWJvcnQgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgZGlzYWJsZSB0aGUgRVAgKi8KKyAgICAgICAgICAodm9pZClIQUxfUENEX0VQX0Fib3J0KGhwY2QsICh1aW50OF90KWVwbnVtKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKwogICAgIC8qIEhhbmRsZSBJbmNvbXBsZXRlIElTTyBJTiBJbnRlcnJ1cHQgKi8KICAgICBpZiAoX19IQUxfUENEX0dFVF9GTEFHKGhwY2QsIFVTQl9PVEdfR0lOVFNUU19JSVNPSVhGUikpCiAgICAgewotICAgICAgLyogS2VlcCBhcHBsaWNhdGlvbiBjaGVja2luZyB0aGUgY29ycmVzcG9uZGluZyBJc28gSU4gZW5kcG9pbnQKLSAgICAgIGNhdXNpbmcgdGhlIGluY29tcGxldGUgSW50ZXJydXB0ICovCi0gICAgICBlcG51bSA9IDBVOworICAgICAgZm9yIChlcG51bSA9IDFVOyBlcG51bSA8IGhwY2QtPkluaXQuZGV2X2VuZHBvaW50czsgZXBudW0rKykKKyAgICAgIHsKKyAgICAgICAgUmVnVmFsID0gVVNCeF9JTkVQKGVwbnVtKS0+RElFUENUTDsKIAotI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gICAgICBocGNkLT5JU09JTkluY29tcGxldGVDYWxsYmFjayhocGNkLCAodWludDhfdCllcG51bSk7Ci0jZWxzZQotICAgICAgSEFMX1BDRF9JU09JTkluY29tcGxldGVDYWxsYmFjayhocGNkLCAodWludDhfdCllcG51bSk7Ci0jZW5kaWYgLyogVVNFX0hBTF9QQ0RfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgICAgIGlmICgoaHBjZC0+SU5fZXBbZXBudW1dLnR5cGUgPT0gRVBfVFlQRV9JU09DKSAmJgorICAgICAgICAgICAgKChSZWdWYWwgJiBVU0JfT1RHX0RJRVBDVExfRVBFTkEpID09IFVTQl9PVEdfRElFUENUTF9FUEVOQSkpCisgICAgICAgIHsKKyAgICAgICAgICBocGNkLT5JTl9lcFtlcG51bV0uaXNfaXNvX2luY29tcGxldGUgPSAxVTsKKworICAgICAgICAgIC8qIEFib3J0IGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIGRpc2FibGUgdGhlIEVQICovCisgICAgICAgICAgKHZvaWQpSEFMX1BDRF9FUF9BYm9ydChocGNkLCAodWludDhfdCkoZXBudW0gfCAweDgwVSkpOworICAgICAgICB9CisgICAgICB9CiAKICAgICAgIF9fSEFMX1BDRF9DTEVBUl9GTEFHKGhwY2QsIFVTQl9PVEdfR0lOVFNUU19JSVNPSVhGUik7CiAgICAgfQpAQCAtMTM5NiwxNSArMTQ1NiwyNSBAQAogICAgIC8qIEhhbmRsZSBJbmNvbXBsZXRlIElTTyBPVVQgSW50ZXJydXB0ICovCiAgICAgaWYgKF9fSEFMX1BDRF9HRVRfRkxBRyhocGNkLCBVU0JfT1RHX0dJTlRTVFNfUFhGUl9JTkNPTVBJU09PVVQpKQogICAgIHsKLSAgICAgIC8qIEtlZXAgYXBwbGljYXRpb24gY2hlY2tpbmcgdGhlIGNvcnJlc3BvbmRpbmcgSXNvIE9VVCBlbmRwb2ludAotICAgICAgY2F1c2luZyB0aGUgaW5jb21wbGV0ZSBJbnRlcnJ1cHQgKi8KLSAgICAgIGVwbnVtID0gMFU7CisgICAgICBmb3IgKGVwbnVtID0gMVU7IGVwbnVtIDwgaHBjZC0+SW5pdC5kZXZfZW5kcG9pbnRzOyBlcG51bSsrKQorICAgICAgeworICAgICAgICBSZWdWYWwgPSBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUENUTDsKIAotI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCi0gICAgICBocGNkLT5JU09PVVRJbmNvbXBsZXRlQ2FsbGJhY2soaHBjZCwgKHVpbnQ4X3QpZXBudW0pOwotI2Vsc2UKLSAgICAgIEhBTF9QQ0RfSVNPT1VUSW5jb21wbGV0ZUNhbGxiYWNrKGhwY2QsICh1aW50OF90KWVwbnVtKTsKLSNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICAgICAgaWYgKChocGNkLT5PVVRfZXBbZXBudW1dLnR5cGUgPT0gRVBfVFlQRV9JU09DKSAmJgorICAgICAgICAgICAgKChSZWdWYWwgJiBVU0JfT1RHX0RPRVBDVExfRVBFTkEpID09IFVTQl9PVEdfRE9FUENUTF9FUEVOQSkgJiYKKyAgICAgICAgICAgICgoUmVnVmFsICYgKDB4MVUgPDwgMTYpKSA9PSAoaHBjZC0+RnJhbWVOdW1iZXIgJiAweDFVKSkpCisgICAgICAgIHsKKyAgICAgICAgICBocGNkLT5PVVRfZXBbZXBudW1dLmlzX2lzb19pbmNvbXBsZXRlID0gMVU7CisKKyAgICAgICAgICBVU0J4LT5HSU5UTVNLIHw9IFVTQl9PVEdfR0lOVE1TS19HT05BS0VGRk07CisKKyAgICAgICAgICBpZiAoKFVTQngtPkdJTlRTVFMgJiBVU0JfT1RHX0dJTlRTVFNfQk9VVE5BS0VGRikgPT0gMFUpCisgICAgICAgICAgeworICAgICAgICAgICAgVVNCeF9ERVZJQ0UtPkRDVEwgfD0gVVNCX09UR19EQ1RMX1NHT05BSzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQogCiAgICAgICBfX0hBTF9QQ0RfQ0xFQVJfRkxBRyhocGNkLCBVU0JfT1RHX0dJTlRTVFNfUFhGUl9JTkNPTVBJU09PVVQpOwogICAgIH0KQEAgLTE0MjQsOSArMTQ5NCw5IEBACiAgICAgLyogSGFuZGxlIERpc2Nvbm5lY3Rpb24gZXZlbnQgSW50ZXJydXB0ICovCiAgICAgaWYgKF9fSEFMX1BDRF9HRVRfRkxBRyhocGNkLCBVU0JfT1RHX0dJTlRTVFNfT1RHSU5UKSkKICAgICB7Ci0gICAgICB0ZW1wID0gaHBjZC0+SW5zdGFuY2UtPkdPVEdJTlQ7CisgICAgICBSZWdWYWwgPSBocGNkLT5JbnN0YW5jZS0+R09UR0lOVDsKIAotICAgICAgaWYgKCh0ZW1wICYgVVNCX09UR19HT1RHSU5UX1NFREVUKSA9PSBVU0JfT1RHX0dPVEdJTlRfU0VERVQpCisgICAgICBpZiAoKFJlZ1ZhbCAmIFVTQl9PVEdfR09UR0lOVF9TRURFVCkgPT0gVVNCX09UR19HT1RHSU5UX1NFREVUKQogICAgICAgewogI2lmIChVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAgICAgICAgIGhwY2QtPkRpc2Nvbm5lY3RDYWxsYmFjayhocGNkKTsKQEAgLTE0MzQsNyArMTUwNCw3IEBACiAgICAgICAgIEhBTF9QQ0RfRGlzY29ubmVjdENhbGxiYWNrKGhwY2QpOwogI2VuZGlmIC8qIFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogICAgICAgfQotICAgICAgaHBjZC0+SW5zdGFuY2UtPkdPVEdJTlQgfD0gdGVtcDsKKyAgICAgIGhwY2QtPkluc3RhbmNlLT5HT1RHSU5UIHw9IFJlZ1ZhbDsKICAgICB9CiAgIH0KIH0KQEAgLTIzNDQsNiArMjQxNCwxMCBAQAogICB1aW50MTZfdCBUeFBjdFNpemU7CiAgIHVpbnQ4X3QgZXBpbmRleDsKIAorI2lmIChVU0VfVVNCX0RPVUJMRV9CVUZGRVIgIT0gMVUpCisgIGNvdW50ID0gMFU7CisjZW5kaWYgLyogVVNFX1VTQl9ET1VCTEVfQlVGRkVSICovCisKICAgLyogc3RheSBpbiBsb29wIHdoaWxlIHBlbmRpbmcgaW50ZXJydXB0cyAqLwogICB3aGlsZSAoKGhwY2QtPkluc3RhbmNlLT5JU1RSICYgVVNCX0lTVFJfQ1RSKSAhPSAwVSkKICAgewpAQCAtMjQzMSw3ICsyNTA1LDkgQEAKICNlbmRpZiAvKiBVU0VfSEFMX1BDRF9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgICAgICAgICB9CiAKLSAgICAgICAgICBpZiAoKFBDRF9HRVRfRU5EUE9JTlQoaHBjZC0+SW5zdGFuY2UsIFBDRF9FTkRQMCkgJiBVU0JfRVBfU0VUVVApID09IDBVKQorICAgICAgICAgIHdFUFZhbCA9ICh1aW50MTZfdClQQ0RfR0VUX0VORFBPSU5UKGhwY2QtPkluc3RhbmNlLCBQQ0RfRU5EUDApOworCisgICAgICAgICAgaWYgKCgod0VQVmFsICYgVVNCX0VQX1NFVFVQKSA9PSAwVSkgJiYgKCh3RVBWYWwgJiBVU0JfRVBfUlhfU1RSWCkgIT0gVVNCX0VQX1JYX1ZBTElEKSkKICAgICAgICAgICB7CiAgICAgICAgICAgICBQQ0RfU0VUX0VQX1JYX0NOVChocGNkLT5JbnN0YW5jZSwgUENEX0VORFAwLCBlcC0+bWF4cGFja2V0KTsKICAgICAgICAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKGhwY2QtPkluc3RhbmNlLCBQQ0RfRU5EUDAsIFVTQl9FUF9SWF9WQUxJRCk7CkBAIC0yNTI0LDcgKzI2MDAsNyBAQAogICAgICAgICAvKiBjbGVhciBpbnQgZmxhZyAqLwogICAgICAgICBQQ0RfQ0xFQVJfVFhfRVBfQ1RSKGhwY2QtPkluc3RhbmNlLCBlcGluZGV4KTsKIAotICAgICAgICBpZiAoZXAtPnR5cGUgIT0gRVBfVFlQRV9CVUxLKQorICAgICAgICBpZiAoZXAtPnR5cGUgPT0gRVBfVFlQRV9JU09DKQogICAgICAgICB7CiAgICAgICAgICAgZXAtPnhmZXJfbGVuID0gMFU7CiAKQEAgLTI1NTEsNyArMjYyNyw3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgLyogTWFuYWdlIEJ1bGsgU2luZ2xlIEJ1ZmZlciBUcmFuc2FjdGlvbiAqLworICAgICAgICAgIC8qIE1hbmFnZSBTaW5nbGUgQnVmZmVyIFRyYW5zYWN0aW9uICovCiAgICAgICAgICAgaWYgKCh3RVBWYWwgJiBVU0JfRVBfS0lORCkgPT0gMFUpCiAgICAgICAgICAgewogICAgICAgICAgICAgLyogbXVsdGktcGFja2V0IG9uIHRoZSBOT04gY29udHJvbCBJTiBlbmRwb2ludCAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfcHdyLmMgYi9TcmMvc3RtMzJsNHh4X2hhbF9wd3IuYwppbmRleCA4NjM4ZWVjLi5jMGMwYTgyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF9wd3IuYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF9wd3IuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIFsuLl0KICAgICAgICgrKSBFbnRyeToKLSAgICAgICAgICBUaGUgU2xlZXAgbW9kZSAvIExvdy1wb3dlciBTbGVlcCBtb2RlIGlzIGVudGVyZWQgdGhyb3VnaCBIQUxfUFdSX0VudGVyU0xFRVBNb2RlKCkgQVBJCisgICAgICAgICAgVGhlIFNsZWVwIG1vZGUgLyBMb3ctcG93ZXIgU2xlZXAgbW9kZSBpcyBlbnRlcmVkIHRocnUgSEFMX1BXUl9FbnRlclNMRUVQTW9kZSgpIEFQSQogICAgICAgICAgIGluIHNwZWNpZnlpbmcgd2hldGhlciBvciBub3QgdGhlIHJlZ3VsYXRvciBpcyBmb3JjZWQgdG8gbG93LXBvd2VyIG1vZGUgYW5kIGlmIGV4aXQgaXMgaW50ZXJydXB0IG9yIGV2ZW50LXRyaWdnZXJlZC4KICAgICAgICAgICAoKyspIFBXUl9NQUlOUkVHVUxBVE9SX09OOiBTbGVlcCBtb2RlIChyZWd1bGF0b3IgaW4gbWFpbiBtb2RlKS4KICAgICAgICAgICAoKyspIFBXUl9MT1dQT1dFUlJFR1VMQVRPUl9PTjogTG93LXBvd2VyIHNsZWVwIChyZWd1bGF0b3IgaW4gbG93IHBvd2VyIG1vZGUpLgpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgWy4uXQogICAgICAgKCspIEVudHJ5OgotICAgICAgICAgIFRoZSBTdG9wIDAsIFN0b3AgMSBvciBTdG9wIDIgbW9kZXMgYXJlIGVudGVyZWQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIEFQSSdzOgorICAgICAgICAgIFRoZSBTdG9wIDAsIFN0b3AgMSBvciBTdG9wIDIgbW9kZXMgYXJlIGVudGVyZWQgdGhydSB0aGUgZm9sbG93aW5nIEFQSSdzOgogICAgICAgICAgICgrKykgSEFMX1BXUkV4X0VudGVyU1RPUDBNb2RlKCkgZm9yIG1vZGUgMCBvciBIQUxfUFdSRXhfRW50ZXJTVE9QMU1vZGUoKSBmb3IgbW9kZSAxIG9yIGZvciBwb3J0aW5nIHJlYXNvbnMgSEFMX1BXUl9FbnRlclNUT1BNb2RlKCkuCiAgICAgICAgICAgKCsrKSBIQUxfUFdSRXhfRW50ZXJTVE9QMk1vZGUoKSBmb3IgbW9kZSAyLgogICAgICAgKCspIFJlZ3VsYXRvciBzZXR0aW5nIChhcHBsaWNhYmxlIHRvIEhBTF9QV1JfRW50ZXJTVE9QTW9kZSgpIG9ubHkpOgpAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICAgIGFuZCBTdGFuZGJ5IGNpcmN1aXRyeS4KIAogICAgICAgKCsrKSBFbnRyeToKLSAgICAgICAgICAoKysrKSBUaGUgU3RhbmRieSBtb2RlIGlzIGVudGVyZWQgdGhyb3VnaCBIQUxfUFdSX0VudGVyU1RBTkRCWU1vZGUoKSBBUEkuCisgICAgICAgICAgKCsrKykgVGhlIFN0YW5kYnkgbW9kZSBpcyBlbnRlcmVkIHRocnUgSEFMX1BXUl9FbnRlclNUQU5EQllNb2RlKCkgQVBJLgogICAgICAgICAgICAgICAgIFNSQU0xIGFuZCByZWdpc3RlciBjb250ZW50cyBhcmUgbG9zdCBleGNlcHQgZm9yIHJlZ2lzdGVycyBpbiB0aGUgQmFja3VwIGRvbWFpbiBhbmQKICAgICAgICAgICAgICAgICBTdGFuZGJ5IGNpcmN1aXRyeS4gU1JBTTIgY29udGVudCBjYW4gYmUgcHJlc2VydmVkIGlmIHRoZSBiaXQgUlJTIGlzIHNldCBpbiBQV1JfQ1IzIHJlZ2lzdGVyLgogICAgICAgICAgICAgICAgIFRvIGVuYWJsZSB0aGlzIGZlYXR1cmUsIHRoZSB1c2VyIGNhbiByZXNvcnQgdG8gSEFMX1BXUkV4X0VuYWJsZVNSQU0yQ29udGVudFJldGVudGlvbigpIEFQSQpAQCAtMjY0LDcgKzI2NCw3IEBACiAgICAgICAgIFNSQU0gYW5kIHJlZ2lzdGVycyBjb250ZW50cyBhcmUgbG9zdCBleGNlcHQgZm9yIGJhY2t1cCBkb21haW4gcmVnaXN0ZXJzLgogCiAgICAgICAoKykgRW50cnk6Ci0gICAgICAgICAgVGhlIFNodXRkb3duIG1vZGUgaXMgZW50ZXJlZCB0aHJvdWdoIEhBTF9QV1JFeF9FbnRlclNIVVRET1dOTW9kZSgpIEFQSS4KKyAgICAgICAgICBUaGUgU2h1dGRvd24gbW9kZSBpcyBlbnRlcmVkIHRocnUgSEFMX1BXUkV4X0VudGVyU0hVVERPV05Nb2RlKCkgQVBJLgogCiAgICAgICAoKykgRXhpdDoKICAgICAgICAgICAoKyspIFdLVVAgcGluIHJpc2luZyBlZGdlLCBSVEMgYWxhcm0gb3Igd2FrZXVwLCB0YW1wZXIgZXZlbnQsIHRpbWUtc3RhbXAgZXZlbnQsCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2hhbF9wd3JfZXguYyBiL1NyYy9zdG0zMmw0eHhfaGFsX3B3cl9leC5jCmluZGV4IDBiNmViMmYuLjM3ZDcyNzMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX3B3cl9leC5jCisrKyBiL1NyYy9zdG0zMmw0eHhfaGFsX3B3cl9leC5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIAogLyoqCiAgICogQGJyaWVmIEVuYWJsZSBiYXR0ZXJ5IGNoYXJnaW5nLgotICAqICAgICAgICBXaGVuIFZERCBpcyBwcmVzZW50LCBjaGFyZ2UgdGhlIGV4dGVybmFsIGJhdHRlcnkgb24gVkJBVCB0aHJvdWdoIGFuIGludGVybmFsIHJlc2lzdG9yLgorICAqICAgICAgICBXaGVuIFZERCBpcyBwcmVzZW50LCBjaGFyZ2UgdGhlIGV4dGVybmFsIGJhdHRlcnkgb24gVkJBVCB0aHJ1IGFuIGludGVybmFsIHJlc2lzdG9yLgogICAqIEBwYXJhbSAgUmVzaXN0b3JTZWxlY3Rpb24gc3BlY2lmaWVzIHRoZSByZXNpc3RvciBpbXBlZGFuY2UuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBQV1JfQkFUVEVSWV9DSEFSR0lOR19SRVNJU1RPUl81ICAgICA1IGtPaG1zIHJlc2lzdG9yCkBAIC05NzQsNyArOTc0LDcgQEAKIAogCiAgIC8qIENvbmZpZ3VyZSBFWFRJIDM1IHRvIDM4IGludGVycnVwdHMgaWYgc28gcmVxdWlyZWQ6Ci0gICAgIHNjYW4gdGhyb3VnaCBQVk1UeXBlIHRvIGRldGVjdCB3aGljaCBQVk14IGlzIHNldCBhbmQKKyAgICAgc2NhbiB0aHJ1IFBWTVR5cGUgdG8gZGV0ZWN0IHdoaWNoIFBWTXggaXMgc2V0IGFuZAogICAgICBjb25maWd1cmUgdGhlIGNvcnJlc3BvbmRpbmcgRVhUSSBsaW5lIGFjY29yZGluZ2x5LiAqLwogICBzd2l0Y2ggKHNDb25maWdQVk0tPlBWTVR5cGUpCiAgIHsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX3JjYy5jIGIvU3JjL3N0bTMybDR4eF9oYWxfcmNjLmMKaW5kZXggZDFkNWUxMC4uZDc5YjgxNCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfcmNjLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfcmNjLmMKQEAgLTEwMTIsMjkgKzEwMTIsNiBAQAogICAgICAgICAvKiBEaXNhYmxlIHRoZSBtYWluIFBMTC4gKi8KICAgICAgICAgX19IQUxfUkNDX1BMTF9ESVNBQkxFKCk7CiAKLSAgICAgICAgLyogRGlzYWJsZSBhbGwgUExMIG91dHB1dHMgdG8gc2F2ZSBwb3dlciBpZiBubyBQTExzIG9uICovCi0jaWYgZGVmaW5lZChSQ0NfUExMU0FJMV9TVVBQT1JUKSAmJiBkZWZpbmVkKFJDQ19DUl9QTExTQUkyUkRZKQotICAgICAgICBpZihSRUFEX0JJVChSQ0MtPkNSLCAoUkNDX0NSX1BMTFNBSTFSRFkgfCBSQ0NfQ1JfUExMU0FJMlJEWSkpID09IDBVKQotICAgICAgICB7Ci0gICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPlBMTENGR1IsIFJDQ19QTExDRkdSX1BMTFNSQywgUkNDX1BMTFNPVVJDRV9OT05FKTsKLSAgICAgICAgfQotI2VsaWYgZGVmaW5lZChSQ0NfUExMU0FJMV9TVVBQT1JUKQotICAgICAgICBpZihSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfUExMU0FJMVJEWSkgPT0gMFUpCi0gICAgICAgIHsKLSAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+UExMQ0ZHUiwgUkNDX1BMTENGR1JfUExMU1JDLCBSQ0NfUExMU09VUkNFX05PTkUpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBNT0RJRllfUkVHKFJDQy0+UExMQ0ZHUiwgUkNDX1BMTENGR1JfUExMU1JDLCBSQ0NfUExMU09VUkNFX05PTkUpOwotI2VuZGlmIC8qIFJDQ19QTExTQUkxX1NVUFBPUlQgJiYgUkNDX0NSX1BMTFNBSTJSRFkgKi8KLQotI2lmIGRlZmluZWQoUkNDX1BMTFNBSTJfU1VQUE9SVCkKLSAgICAgICAgX19IQUxfUkNDX1BMTENMS09VVF9ESVNBQkxFKFJDQ19QTExfU1lTQ0xLIHwgUkNDX1BMTF80OE0xQ0xLIHwgUkNDX1BMTF9TQUkzQ0xLKTsKLSNlbGlmIGRlZmluZWQoUkNDX1BMTFNBSTFfU1VQUE9SVCkKLSAgICAgICAgX19IQUxfUkNDX1BMTENMS09VVF9ESVNBQkxFKFJDQ19QTExfU1lTQ0xLIHwgUkNDX1BMTF80OE0xQ0xLIHwgUkNDX1BMTF9TQUkyQ0xLKTsKLSNlbHNlCi0gICAgICAgIF9fSEFMX1JDQ19QTExDTEtPVVRfRElTQUJMRShSQ0NfUExMX1NZU0NMSyB8IFJDQ19QTExfNDhNMUNMSyk7Ci0jZW5kaWYgLyogUkNDX1BMTFNBSTJfU1VQUE9SVCAqLwotCiAgICAgICAgIC8qIEdldCBTdGFydCBUaWNrKi8KICAgICAgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKIApAQCAtMTA0Niw2ICsxMDIzLDE0IEBACiAgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIC8qIFVuc2VsZWN0IG1haW4gUExMIGNsb2NrIHNvdXJjZSBhbmQgZGlzYWJsZSBtYWluIFBMTCBvdXRwdXRzIHRvIHNhdmUgcG93ZXIgKi8KKyNpZiBkZWZpbmVkKFJDQ19QTExTQUkyX1NVUFBPUlQpCisgICAgICAgIFJDQy0+UExMQ0ZHUiAmPSB+KFJDQ19QTExDRkdSX1BMTFNSQyB8IFJDQ19QTExfU1lTQ0xLIHwgUkNDX1BMTF80OE0xQ0xLIHwgUkNDX1BMTF9TQUkzQ0xLKTsKKyNlbGlmIGRlZmluZWQoUkNDX1BMTFNBSTFfU1VQUE9SVCkKKyAgICAgICAgUkNDLT5QTExDRkdSICY9IH4oUkNDX1BMTENGR1JfUExMU1JDIHwgUkNDX1BMTF9TWVNDTEsgfCBSQ0NfUExMXzQ4TTFDTEsgfCBSQ0NfUExMX1NBSTJDTEspOworI2Vsc2UKKyAgICAgICAgUkNDLT5QTExDRkdSICY9IH4oUkNDX1BMTENGR1JfUExMU1JDIHwgUkNDX1BMTF9TWVNDTEsgfCBSQ0NfUExMXzQ4TTFDTEspOworI2VuZGlmIC8qIFJDQ19QTExTQUkyX1NVUFBPUlQgKi8KICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX3JjY19leC5jIGIvU3JjL3N0bTMybDR4eF9oYWxfcmNjX2V4LmMKaW5kZXggMjQ1N2I3Zi4uNzM4YjQxNyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfcmNjX2V4LmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfcmNjX2V4LmMKQEAgLTMzMTEsNyArMzMxMSw3IEBACiAgIHVpbnQzMl90IHBsbHAgPSAwVTsKICNlbmRpZiAvKiBSQ0NfUExMUF9TVVBQT1JUICovCiAKLSAgLyogSGFuZGxlIFNBSXggKi8KKyAgLyogSGFuZGxlIFNBSXMgKi8KICAgaWYoUGVyaXBoQ2xrID09IFJDQ19QRVJJUEhDTEtfU0FJMSkKICAgewogICAgIHNyY2NsayA9IF9fSEFMX1JDQ19HRVRfU0FJMV9TT1VSQ0UoKTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX3NtYXJ0Y2FyZC5jIGIvU3JjL3N0bTMybDR4eF9oYWxfc21hcnRjYXJkLmMKaW5kZXggMDQyYTBlZi4uMDZhN2YxMyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfc21hcnRjYXJkLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfc21hcnRjYXJkLmMKQEAgLTIzODYsNyArMjM4Niw3IEBACiAgICogICAgICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFNNQVJUQ0FSRCBtb2R1bGUuCiAgICogQHJldHZhbCBTTUFSVENBUkQgaGFuZGxlIHN0YXRlCiAgICovCi1IQUxfU01BUlRDQVJEX1N0YXRlVHlwZURlZiBIQUxfU01BUlRDQVJEX0dldFN0YXRlKFNNQVJUQ0FSRF9IYW5kbGVUeXBlRGVmICpoc21hcnRjYXJkKQorSEFMX1NNQVJUQ0FSRF9TdGF0ZVR5cGVEZWYgSEFMX1NNQVJUQ0FSRF9HZXRTdGF0ZShjb25zdCBTTUFSVENBUkRfSGFuZGxlVHlwZURlZiAqaHNtYXJ0Y2FyZCkKIHsKICAgLyogUmV0dXJuIFNNQVJUQ0FSRCBoYW5kbGUgc3RhdGUgKi8KICAgdWludDMyX3QgdGVtcDE7CkBAIC0yNDAzLDcgKzI0MDMsNyBAQAogICAqICAgICAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBTTUFSVENBUkQgbW9kdWxlLgogICAqIEByZXR2YWwgU01BUlRDQVJEIGhhbmRsZSBFcnJvciBDb2RlCiAgICovCi11aW50MzJfdCBIQUxfU01BUlRDQVJEX0dldEVycm9yKFNNQVJUQ0FSRF9IYW5kbGVUeXBlRGVmICpoc21hcnRjYXJkKQordWludDMyX3QgSEFMX1NNQVJUQ0FSRF9HZXRFcnJvcihjb25zdCBTTUFSVENBUkRfSGFuZGxlVHlwZURlZiAqaHNtYXJ0Y2FyZCkKIHsKICAgcmV0dXJuIGhzbWFydGNhcmQtPkVycm9yQ29kZTsKIH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX3RpbS5jIGIvU3JjL3N0bTMybDR4eF9oYWxfdGltLmMKaW5kZXggYzk0NTk3OS4uMGU1NzEyZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9oYWxfdGltLmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfdGltLmMKQEAgLTIwNSwxMSArMjA1LDExIEBACiAvKiogQGFkZHRvZ3JvdXAgVElNX1ByaXZhdGVfRnVuY3Rpb25zCiAgICogQHsKICAgKi8KLXN0YXRpYyB2b2lkIFRJTV9PQzFfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBUSU1fT0NfSW5pdFR5cGVEZWYgKk9DX0NvbmZpZyk7Ci1zdGF0aWMgdm9pZCBUSU1fT0MzX1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgVElNX09DX0luaXRUeXBlRGVmICpPQ19Db25maWcpOwotc3RhdGljIHZvaWQgVElNX09DNF9TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIFRJTV9PQ19Jbml0VHlwZURlZiAqT0NfQ29uZmlnKTsKLXN0YXRpYyB2b2lkIFRJTV9PQzVfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBUSU1fT0NfSW5pdFR5cGVEZWYgKk9DX0NvbmZpZyk7Ci1zdGF0aWMgdm9pZCBUSU1fT0M2X1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgVElNX09DX0luaXRUeXBlRGVmICpPQ19Db25maWcpOworc3RhdGljIHZvaWQgVElNX09DMV9TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIGNvbnN0IFRJTV9PQ19Jbml0VHlwZURlZiAqT0NfQ29uZmlnKTsKK3N0YXRpYyB2b2lkIFRJTV9PQzNfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBjb25zdCBUSU1fT0NfSW5pdFR5cGVEZWYgKk9DX0NvbmZpZyk7CitzdGF0aWMgdm9pZCBUSU1fT0M0X1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgVElNX09DX0luaXRUeXBlRGVmICpPQ19Db25maWcpOworc3RhdGljIHZvaWQgVElNX09DNV9TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIGNvbnN0IFRJTV9PQ19Jbml0VHlwZURlZiAqT0NfQ29uZmlnKTsKK3N0YXRpYyB2b2lkIFRJTV9PQzZfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBjb25zdCBUSU1fT0NfSW5pdFR5cGVEZWYgKk9DX0NvbmZpZyk7CiBzdGF0aWMgdm9pZCBUSU1fVEkxX0NvbmZpZ0lucHV0U3RhZ2UoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IFRJTV9JQ1BvbGFyaXR5LCB1aW50MzJfdCBUSU1fSUNGaWx0ZXIpOwogc3RhdGljIHZvaWQgVElNX1RJMl9TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IFRJTV9JQ1BvbGFyaXR5LCB1aW50MzJfdCBUSU1fSUNTZWxlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUSU1fSUNGaWx0ZXIpOwpAQCAtMjI1LDcgKzIyNSw3IEBACiBzdGF0aWMgdm9pZCBUSU1fRE1BVHJpZ2dlckNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIHZvaWQgVElNX0RNQVRyaWdnZXJIYWxmQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgVElNX1NsYXZlVGltZXJfU2V0Q29uZmlnKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fU2xhdmVDb25maWdUeXBlRGVmICpzU2xhdmVDb25maWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSU1fU2xhdmVDb25maWdUeXBlRGVmICpzU2xhdmVDb25maWcpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI3OCw2ICsyNzgsNyBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ09VTlRFUl9NT0RFKGh0aW0tPkluaXQuQ291bnRlck1vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTE9DS0RJVklTSU9OX0RJVihodGltLT5Jbml0LkNsb2NrRGl2aXNpb24pKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9QRVJJT0QoaHRpbSwgaHRpbS0+SW5pdC5QZXJpb2QpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BVVRPUkVMT0FEX1BSRUxPQUQoaHRpbS0+SW5pdC5BdXRvUmVsb2FkUHJlbG9hZCkpOwogCiAgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFU0VUKQpAQCAtNTI1LDcgKzUyNiw3IEBACiAgICogQHBhcmFtICBMZW5ndGggVGhlIGxlbmd0aCBvZiBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIGZyb20gbWVtb3J5IHRvIHBlcmlwaGVyYWwuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0Jhc2VfU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCAqcERhdGEsIHVpbnQxNl90IExlbmd0aCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fQmFzZV9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIGNvbnN0IHVpbnQzMl90ICpwRGF0YSwgdWludDE2X3QgTGVuZ3RoKQogewogICB1aW50MzJfdCB0bXBzbWNyOwogCkBAIC01MzksNyArNTQwLDcgQEAKICAgfQogICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CkBAIC02NjEsNiArNjYyLDcgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NPVU5URVJfTU9ERShodGltLT5Jbml0LkNvdW50ZXJNb2RlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0xPQ0tESVZJU0lPTl9ESVYoaHRpbS0+SW5pdC5DbG9ja0RpdmlzaW9uKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fUEVSSU9EKGh0aW0sIGh0aW0tPkluaXQuUGVyaW9kKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQVVUT1JFTE9BRF9QUkVMT0FEKGh0aW0tPkluaXQuQXV0b1JlbG9hZFByZWxvYWQpKTsKIAogICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRVNFVCkKQEAgLTEwNTAsNyArMTA1Miw4IEBACiAgICogQHBhcmFtICBMZW5ndGggVGhlIGxlbmd0aCBvZiBkYXRhIHRvIGJlIHRyYW5zZmVycmVkIGZyb20gbWVtb3J5IHRvIFRJTSBwZXJpcGhlcmFsCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX09DX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgKnBEYXRhLCB1aW50MTZfdCBMZW5ndGgpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX09DX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCwgY29uc3QgdWludDMyX3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgTGVuZ3RoKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CiAgIHVpbnQzMl90IHRtcHNtY3I7CkBAIC0xMDY1LDcgKzEwNjgsNyBAQAogICB9CiAgIGVsc2UgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSB8fCAoTGVuZ3RoID09IDBVKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KQEAgLTEzMjgsNiArMTMzMSw3IEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DT1VOVEVSX01PREUoaHRpbS0+SW5pdC5Db3VudGVyTW9kZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NMT0NLRElWSVNJT05fRElWKGh0aW0tPkluaXQuQ2xvY2tEaXZpc2lvbikpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX1BFUklPRChodGltLCBodGltLT5Jbml0LlBlcmlvZCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0FVVE9SRUxPQURfUFJFTE9BRChodGltLT5Jbml0LkF1dG9SZWxvYWRQcmVsb2FkKSk7CiAKICAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVTRVQpCkBAIC0xNzE3LDcgKzE3MjEsOCBAQAogICAqIEBwYXJhbSAgTGVuZ3RoIFRoZSBsZW5ndGggb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIG1lbW9yeSB0byBUSU0gcGVyaXBoZXJhbAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9QV01fU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCAqcERhdGEsIHVpbnQxNl90IExlbmd0aCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fUFdNX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCwgY29uc3QgdWludDMyX3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IExlbmd0aCkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBzbWNyOwpAQCAtMTczMiw3ICsxNzM3LDcgQEAKICAgfQogICBlbHNlIGlmIChUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CkBAIC0xOTk0LDYgKzE5OTksNyBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ09VTlRFUl9NT0RFKGh0aW0tPkluaXQuQ291bnRlck1vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTE9DS0RJVklTSU9OX0RJVihodGltLT5Jbml0LkNsb2NrRGl2aXNpb24pKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9QRVJJT0QoaHRpbSwgaHRpbS0+SW5pdC5QZXJpb2QpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BVVRPUkVMT0FEX1BSRUxPQUQoaHRpbS0+SW5pdC5BdXRvUmVsb2FkUHJlbG9hZCkpOwogCiAgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFU0VUKQpAQCAtMjM4Nyw3ICsyMzkzLDcgQEAKICAgZWxzZSBpZiAoKGNoYW5uZWxfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgIHsKLSAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSB8fCAoTGVuZ3RoID09IDBVKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KQEAgLTI2NDMsNiArMjY0OSw3IEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fQ09VTlRFUl9NT0RFKGh0aW0tPkluaXQuQ291bnRlck1vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTE9DS0RJVklTSU9OX0RJVihodGltLT5Jbml0LkNsb2NrRGl2aXNpb24pKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9PUE1fTU9ERShPbmVQdWxzZU1vZGUpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9QRVJJT0QoaHRpbSwgaHRpbS0+SW5pdC5QZXJpb2QpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BVVRPUkVMT0FEX1BSRUxPQUQoaHRpbS0+SW5pdC5BdXRvUmVsb2FkUHJlbG9hZCkpOwogCiAgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFU0VUKQpAQCAtMzA0Niw2ICszMDUzLDcgQEAKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19QUkVTQ0FMRVIoc0NvbmZpZy0+SUMyUHJlc2NhbGVyKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fSUNfRklMVEVSKHNDb25maWctPklDMUZpbHRlcikpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX0ZJTFRFUihzQ29uZmlnLT5JQzJGaWx0ZXIpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9QRVJJT0QoaHRpbSwgaHRpbS0+SW5pdC5QZXJpb2QpKTsKIAogICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRVNFVCkKICAgewpAQCAtMzU1NSw3ICszNTYzLDcgQEAKICAgICBlbHNlIGlmICgoY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgICAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgICB7Ci0gICAgICBpZiAoKHBEYXRhMSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgICAgaWYgKChwRGF0YTEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgICB7CiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CkBAIC0zNTgwLDcgKzM1ODgsNyBAQAogICAgIGVsc2UgaWYgKChjaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICAgICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICAgIHsKLSAgICAgIGlmICgocERhdGEyID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgICBpZiAoKHBEYXRhMiA9PSBOVUxMKSB8fCAoTGVuZ3RoID09IDBVKSkKICAgICAgIHsKICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KQEAgLTM2MDksNyArMzYxNyw3IEBACiAgICAgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgICAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKICAgICB7Ci0gICAgICBpZiAoKCgocERhdGExID09IE5VTEwpIHx8IChwRGF0YTIgPT0gTlVMTCkpKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgICAgaWYgKCgoKHBEYXRhMSA9PSBOVUxMKSB8fCAocERhdGEyID09IE5VTEwpKSkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgICB7CiAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgICB9CkBAIC00MDU0LDcgKzQwNjIsNyBAQAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9PQ19Db25maWdDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTV9PQ19Jbml0VHlwZURlZiAqc0NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSU1fT0NfSW5pdFR5cGVEZWYgKnNDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwpAQCAtNDE1Miw3ICs0MTYwLDcgQEAKICAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfNDogVElNIENoYW5uZWwgNCBzZWxlY3RlZAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9JQ19Db25maWdDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBUSU1fSUNfSW5pdFR5cGVEZWYgKnNDb25maWcsIHVpbnQzMl90IENoYW5uZWwpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0lDX0NvbmZpZ0NoYW5uZWwoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIGNvbnN0IFRJTV9JQ19Jbml0VHlwZURlZiAqc0NvbmZpZywgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCkBAIC00MjU0LDcgKzQyNjIsNyBAQAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9QV01fQ29uZmlnQ2hhbm5lbChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElNX09DX0luaXRUeXBlRGVmICpzQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSU1fT0NfSW5pdFR5cGVEZWYgKnNDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKQEAgLTQ1NTYsNyArNDU2NCw3IEBACiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X1dyaXRlU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IEJ1cnN0QmFzZUFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjLCB1aW50MzJfdCAqQnVyc3RCdWZmZXIsIHVpbnQzMl90ICBCdXJzdExlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCdXJzdFJlcXVlc3RTcmMsIGNvbnN0IHVpbnQzMl90ICpCdXJzdEJ1ZmZlciwgdWludDMyX3QgIEJ1cnN0TGVuZ3RoKQogewogICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CiAKQEAgLTQ2MTQsNyArNDYyMiw3IEBACiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0X011bHRpV3JpdGVTdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQnVyc3RCYXNlQWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJ1cnN0UmVxdWVzdFNyYywgdWludDMyX3QgKkJ1cnN0QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQnVyc3RSZXF1ZXN0U3JjLCBjb25zdCB1aW50MzJfdCAqQnVyc3RCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgQnVyc3RMZW5ndGgsICB1aW50MzJfdCAgRGF0YUxlbmd0aCkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwpAQCAtNTI2OSw3ICs1Mjc3LDcgQEAKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fQ29uZmlnT0NyZWZDbGVhcihUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fQ2xlYXJJbnB1dENvbmZpZ1R5cGVEZWYgKnNDbGVhcklucHV0Q29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJTV9DbGVhcklucHV0Q29uZmlnVHlwZURlZiAqc0NsZWFySW5wdXRDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwpAQCAtNTQzNSw3ICs1NDQzLDcgQEAKICAgKiAgICAgICAgIGNvbnRhaW5zIHRoZSBjbG9jayBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIHRoZSBUSU0gcGVyaXBoZXJhbC4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fQ29uZmlnQ2xvY2tTb3VyY2UoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIFRJTV9DbG9ja0NvbmZpZ1R5cGVEZWYgKnNDbG9ja1NvdXJjZUNvbmZpZykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fQ29uZmlnQ2xvY2tTb3VyY2UoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIGNvbnN0IFRJTV9DbG9ja0NvbmZpZ1R5cGVEZWYgKnNDbG9ja1NvdXJjZUNvbmZpZykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBzbWNyOwpAQCAtNTYyMSw3ICs1NjI5LDcgQEAKICAgKiAgICAgICAgIChEaXNhYmxlLCBSZXNldCwgR2F0ZWQsIFRyaWdnZXIsIEV4dGVybmFsIGNsb2NrIG1vZGUgMSkuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX1NsYXZlQ29uZmlnU3luY2hybyhUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgVElNX1NsYXZlQ29uZmlnVHlwZURlZiAqc1NsYXZlQ29uZmlnKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9TbGF2ZUNvbmZpZ1N5bmNocm8oVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIGNvbnN0IFRJTV9TbGF2ZUNvbmZpZ1R5cGVEZWYgKnNTbGF2ZUNvbmZpZykKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9TTEFWRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwpAQCAtNTY2Miw3ICs1NjcwLDcgQEAKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fU2xhdmVDb25maWdTeW5jaHJvX0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElNX1NsYXZlQ29uZmlnVHlwZURlZiAqc1NsYXZlQ29uZmlnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVElNX1NsYXZlQ29uZmlnVHlwZURlZiAqc1NsYXZlQ29uZmlnKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX1NMQVZFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CkBAIC01NzA0LDcgKzU3MTIsNyBAQAogICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF80OiBUSU0gQ2hhbm5lbCA0IHNlbGVjdGVkCiAgICogQHJldHZhbCBDYXB0dXJlZCB2YWx1ZQogICAqLwotdWludDMyX3QgSEFMX1RJTV9SZWFkQ2FwdHVyZWRWYWx1ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKK3VpbnQzMl90IEhBTF9USU1fUmVhZENhcHR1cmVkVmFsdWUoY29uc3QgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIHVpbnQzMl90IHRtcHJlZyA9IDBVOwogCkBAIC02NDkyLDcgKzY1MDAsNyBAQAogICAqIEBwYXJhbSAgaHRpbSBUSU0gQmFzZSBoYW5kbGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0ZQogICAqLwotSEFMX1RJTV9TdGF0ZVR5cGVEZWYgSEFMX1RJTV9CYXNlX0dldFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKQorSEFMX1RJTV9TdGF0ZVR5cGVEZWYgSEFMX1RJTV9CYXNlX0dldFN0YXRlKGNvbnN0IFRJTV9IYW5kbGVUeXBlRGVmICpodGltKQogewogICByZXR1cm4gaHRpbS0+U3RhdGU7CiB9CkBAIC02NTAyLDcgKzY1MTAsNyBAQAogICAqIEBwYXJhbSAgaHRpbSBUSU0gT3V0cHV0IENvbXBhcmUgaGFuZGxlCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KLUhBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fT0NfR2V0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pCitIQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNX09DX0dldFN0YXRlKGNvbnN0IFRJTV9IYW5kbGVUeXBlRGVmICpodGltKQogewogICByZXR1cm4gaHRpbS0+U3RhdGU7CiB9CkBAIC02NTEyLDcgKzY1MjAsNyBAQAogICAqIEBwYXJhbSAgaHRpbSBUSU0gaGFuZGxlCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KLUhBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fUFdNX0dldFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKQorSEFMX1RJTV9TdGF0ZVR5cGVEZWYgSEFMX1RJTV9QV01fR2V0U3RhdGUoY29uc3QgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pCiB7CiAgIHJldHVybiBodGltLT5TdGF0ZTsKIH0KQEAgLTY1MjIsNyArNjUzMCw3IEBACiAgICogQHBhcmFtICBodGltIFRJTSBJQyBoYW5kbGUKICAgKiBAcmV0dmFsIEhBTCBzdGF0ZQogICAqLwotSEFMX1RJTV9TdGF0ZVR5cGVEZWYgSEFMX1RJTV9JQ19HZXRTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSkKK0hBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fSUNfR2V0U3RhdGUoY29uc3QgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pCiB7CiAgIHJldHVybiBodGltLT5TdGF0ZTsKIH0KQEAgLTY1MzIsNyArNjU0MCw3IEBACiAgICogQHBhcmFtICBodGltIFRJTSBPUE0gaGFuZGxlCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KLUhBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fT25lUHVsc2VfR2V0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pCitIQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNX09uZVB1bHNlX0dldFN0YXRlKGNvbnN0IFRJTV9IYW5kbGVUeXBlRGVmICpodGltKQogewogICByZXR1cm4gaHRpbS0+U3RhdGU7CiB9CkBAIC02NTQyLDcgKzY1NTAsNyBAQAogICAqIEBwYXJhbSAgaHRpbSBUSU0gRW5jb2RlciBJbnRlcmZhY2UgaGFuZGxlCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KLUhBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9HZXRTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSkKK0hBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9HZXRTdGF0ZShjb25zdCBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSkKIHsKICAgcmV0dXJuIGh0aW0tPlN0YXRlOwogfQpAQCAtNjU1Miw3ICs2NTYwLDcgQEAKICAgKiBAcGFyYW0gIGh0aW0gVElNIGhhbmRsZQogICAqIEByZXR2YWwgQWN0aXZlIGNoYW5uZWwKICAgKi8KLUhBTF9USU1fQWN0aXZlQ2hhbm5lbCBIQUxfVElNX0dldEFjdGl2ZUNoYW5uZWwoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pCitIQUxfVElNX0FjdGl2ZUNoYW5uZWwgSEFMX1RJTV9HZXRBY3RpdmVDaGFubmVsKGNvbnN0IFRJTV9IYW5kbGVUeXBlRGVmICpodGltKQogewogICByZXR1cm4gaHRpbS0+Q2hhbm5lbDsKIH0KQEAgLTY1NzAsNyArNjU3OCw3IEBACiAgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzY6IFRJTSBDaGFubmVsIDYKICAgKiBAcmV0dmFsIFRJTSBDaGFubmVsIHN0YXRlCiAgICovCi1IQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgSEFMX1RJTV9HZXRDaGFubmVsU3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICB1aW50MzJfdCBDaGFubmVsKQorSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIEhBTF9USU1fR2V0Q2hhbm5lbFN0YXRlKGNvbnN0IFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCAgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfc3RhdGU7CiAKQEAgLTY1ODcsNyArNjU5NSw3IEBACiAgICogQHBhcmFtICBodGltIFRJTSBoYW5kbGUKICAgKiBAcmV0dmFsIERNQSBidXJzdCBzdGF0ZQogICAqLwotSEFMX1RJTV9ETUFCdXJzdFN0YXRlVHlwZURlZiBIQUxfVElNX0RNQUJ1cnN0U3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pCitIQUxfVElNX0RNQUJ1cnN0U3RhdGVUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RTdGF0ZShjb25zdCBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFCVVJTVF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwpAQCAtNjkzMCw3ICs2OTM4LDcgQEAKICAgKiBAcGFyYW0gIFN0cnVjdHVyZSBUSU0gQmFzZSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQogICAqIEByZXR2YWwgTm9uZQogICAqLwotdm9pZCBUSU1fQmFzZV9TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIFRJTV9CYXNlX0luaXRUeXBlRGVmICpTdHJ1Y3R1cmUpCit2b2lkIFRJTV9CYXNlX1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgVElNX0Jhc2VfSW5pdFR5cGVEZWYgKlN0cnVjdHVyZSkKIHsKICAgdWludDMyX3QgdG1wY3IxOwogICB0bXBjcjEgPSBUSU14LT5DUjE7CkBAIC02OTc4LDcgKzY5ODYsNyBAQAogICAqIEBwYXJhbSAgT0NfQ29uZmlnIFRoZSBvdXRwdXQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyB2b2lkIFRJTV9PQzFfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBUSU1fT0NfSW5pdFR5cGVEZWYgKk9DX0NvbmZpZykKK3N0YXRpYyB2b2lkIFRJTV9PQzFfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBjb25zdCBUSU1fT0NfSW5pdFR5cGVEZWYgKk9DX0NvbmZpZykKIHsKICAgdWludDMyX3QgdG1wY2Ntcng7CiAgIHVpbnQzMl90IHRtcGNjZXI7CkBAIC03MDUzLDcgKzcwNjEsNyBAQAogICAqIEBwYXJhbSAgT0NfQ29uZmlnIFRoZSBvdXRwdXQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXZvaWQgVElNX09DMl9TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIFRJTV9PQ19Jbml0VHlwZURlZiAqT0NfQ29uZmlnKQordm9pZCBUSU1fT0MyX1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgVElNX09DX0luaXRUeXBlRGVmICpPQ19Db25maWcpCiB7CiAgIHVpbnQzMl90IHRtcGNjbXJ4OwogICB1aW50MzJfdCB0bXBjY2VyOwpAQCAtNzEyOSw3ICs3MTM3LDcgQEAKICAgKiBAcGFyYW0gIE9DX0NvbmZpZyBUaGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCiAgICogQHJldHZhbCBOb25lCiAgICovCi1zdGF0aWMgdm9pZCBUSU1fT0MzX1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgVElNX09DX0luaXRUeXBlRGVmICpPQ19Db25maWcpCitzdGF0aWMgdm9pZCBUSU1fT0MzX1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgVElNX09DX0luaXRUeXBlRGVmICpPQ19Db25maWcpCiB7CiAgIHVpbnQzMl90IHRtcGNjbXJ4OwogICB1aW50MzJfdCB0bXBjY2VyOwpAQCAtNzIwMyw3ICs3MjExLDcgQEAKICAgKiBAcGFyYW0gIE9DX0NvbmZpZyBUaGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCiAgICogQHJldHZhbCBOb25lCiAgICovCi1zdGF0aWMgdm9pZCBUSU1fT0M0X1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgVElNX09DX0luaXRUeXBlRGVmICpPQ19Db25maWcpCitzdGF0aWMgdm9pZCBUSU1fT0M0X1NldENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgVElNX09DX0luaXRUeXBlRGVmICpPQ19Db25maWcpCiB7CiAgIHVpbnQzMl90IHRtcGNjbXJ4OwogICB1aW50MzJfdCB0bXBjY2VyOwpAQCAtNzI2NCw3ICs3MjcyLDcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHN0YXRpYyB2b2lkIFRJTV9PQzVfU2V0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElNX09DX0luaXRUeXBlRGVmICpPQ19Db25maWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSU1fT0NfSW5pdFR5cGVEZWYgKk9DX0NvbmZpZykKIHsKICAgdWludDMyX3QgdG1wY2Ntcng7CiAgIHVpbnQzMl90IHRtcGNjZXI7CkBAIC03MzE3LDcgKzczMjUsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogc3RhdGljIHZvaWQgVElNX09DNl9TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fT0NfSW5pdFR5cGVEZWYgKk9DX0NvbmZpZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJTV9PQ19Jbml0VHlwZURlZiAqT0NfQ29uZmlnKQogewogICB1aW50MzJfdCB0bXBjY21yeDsKICAgdWludDMyX3QgdG1wY2NlcjsKQEAgLTczNzEsNyArNzM3OSw3IEBACiAgICogQHJldHZhbCBOb25lCiAgICovCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgVElNX1NsYXZlVGltZXJfU2V0Q29uZmlnKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fU2xhdmVDb25maWdUeXBlRGVmICpzU2xhdmVDb25maWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRJTV9TbGF2ZUNvbmZpZ1R5cGVEZWYgKnNTbGF2ZUNvbmZpZykKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBzbWNyOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfdGltX2V4LmMgYi9TcmMvc3RtMzJsNHh4X2hhbF90aW1fZXguYwppbmRleCA2ZjIzMWY3Li5kN2MwZTA0IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJsNHh4X2hhbF90aW1fZXguYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF90aW1fZXguYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAgICogQHBhcmFtICBzQ29uZmlnIFRJTSBIYWxsIFNlbnNvciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0hhbGxTZW5zb3JfSW5pdChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgVElNX0hhbGxTZW5zb3JfSW5pdFR5cGVEZWYgKnNDb25maWcpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfSGFsbFNlbnNvcl9Jbml0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCBjb25zdCBUSU1fSGFsbFNlbnNvcl9Jbml0VHlwZURlZiAqc0NvbmZpZykKIHsKICAgVElNX09DX0luaXRUeXBlRGVmIE9DX0NvbmZpZzsKIApAQCAtMTUzLDYgKzE1Myw3IEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0xPQ0tESVZJU0lPTl9ESVYoaHRpbS0+SW5pdC5DbG9ja0RpdmlzaW9uKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQVVUT1JFTE9BRF9QUkVMT0FEKGh0aW0tPkluaXQuQXV0b1JlbG9hZFByZWxvYWQpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19QT0xBUklUWShzQ29uZmlnLT5JQzFQb2xhcml0eSkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX1BFUklPRChodGltLCBodGltLT5Jbml0LlBlcmlvZCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1BSRVNDQUxFUihzQ29uZmlnLT5JQzFQcmVzY2FsZXIpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19GSUxURVIoc0NvbmZpZy0+SUMxRmlsdGVyKSk7CiAKQEAgLTUwMyw3ICs1MDQsNyBAQAogICBlbHNlIGlmICgoY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCiAgIHsKLSAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSB8fCAoTGVuZ3RoID09IDBVKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KQEAgLTg2OCw3ICs4NjksOCBAQAogICAqIEBwYXJhbSAgTGVuZ3RoIFRoZSBsZW5ndGggb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIG1lbW9yeSB0byBUSU0gcGVyaXBoZXJhbAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X09DTl9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90ICpwRGF0YSwgdWludDE2X3QgTGVuZ3RoKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X09DTl9TdGFydF9ETUEoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwsIGNvbnN0IHVpbnQzMl90ICpwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IExlbmd0aCkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBzbWNyOwpAQCAtODgzLDcgKzg4NSw3IEBACiAgIH0KICAgZWxzZSBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKExlbmd0aCA9PSAwVSkpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CkBAIC0xMzQ5LDcgKzEzNTEsOCBAQAogICAqIEBwYXJhbSAgTGVuZ3RoIFRoZSBsZW5ndGggb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIG1lbW9yeSB0byBUSU0gcGVyaXBoZXJhbAogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X1BXTU5fU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCAqcERhdGEsIHVpbnQxNl90IExlbmd0aCkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9QV01OX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCwgY29uc3QgdWludDMyX3QgKnBEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IExlbmd0aCkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogICB1aW50MzJfdCB0bXBzbWNyOwpAQCAtMTM2NCw3ICsxMzY3LDcgQEAKICAgfQogICBlbHNlIGlmIChUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgIHsKLSAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSB8fCAoTGVuZ3RoID09IDBVKSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KQEAgLTE5NjMsNyArMTk2Niw3IEBACiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfTWFzdGVyQ29uZmlnU3luY2hyb25pemF0aW9uKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1fTWFzdGVyQ29uZmlnVHlwZURlZiAqc01hc3RlckNvbmZpZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVElNX01hc3RlckNvbmZpZ1R5cGVEZWYgKnNNYXN0ZXJDb25maWcpCiB7CiAgIHVpbnQzMl90IHRtcGNyMjsKICAgdWludDMyX3QgdG1wc21jcjsKQEAgLTIwMzYsNyArMjAzOSw3IEBACiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfQ29uZmlnQnJlYWtEZWFkVGltZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTV9CcmVha0RlYWRUaW1lQ29uZmlnVHlwZURlZiAqc0JyZWFrRGVhZFRpbWVDb25maWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSU1fQnJlYWtEZWFkVGltZUNvbmZpZ1R5cGVEZWYgKnNCcmVha0RlYWRUaW1lQ29uZmlnKQogewogICAvKiBLZWVwIHRoaXMgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdG8gMCBhcyBpdCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBCRFRSIHJlZ2lzdGVyICovCiAgIHVpbnQzMl90IHRtcGJkdHIgPSAwVTsKQEAgLTIxMDEsNyArMjEwNCw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfQ29uZmlnQnJlYWtJbnB1dChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IEJyZWFrSW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FeF9CcmVha0lucHV0Q29uZmlnVHlwZURlZiAqc0JyZWFrSW5wdXRDb25maWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUSU1FeF9CcmVha0lucHV0Q29uZmlnVHlwZURlZiAqc0JyZWFrSW5wdXRDb25maWcpCiAKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwpAQCAtMjYyNSw3ICsyNjI4LDcgQEAKICAgKiBAcGFyYW0gIGh0aW0gVElNIEhhbGwgU2Vuc29yIGhhbmRsZQogICAqIEByZXR2YWwgSEFMIHN0YXRlCiAgICovCi1IQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNRXhfSGFsbFNlbnNvcl9HZXRTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSkKK0hBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1FeF9IYWxsU2Vuc29yX0dldFN0YXRlKGNvbnN0IFRJTV9IYW5kbGVUeXBlRGVmICpodGltKQogewogICByZXR1cm4gaHRpbS0+U3RhdGU7CiB9CkBAIC0yNjQwLDcgKzI2NDMsNyBAQAogICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8zOiBUSU0gQ2hhbm5lbCAzCiAgICogQHJldHZhbCBUSU0gQ29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlCiAgICovCi1IQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgSEFMX1RJTUV4X0dldENoYW5uZWxOU3RhdGUoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sICB1aW50MzJfdCBDaGFubmVsTikKK0hBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBIQUxfVElNRXhfR2V0Q2hhbm5lbE5TdGF0ZShjb25zdCBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIHVpbnQzMl90IENoYW5uZWxOKQogewogICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF9zdGF0ZTsKIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMybDR4eF9oYWxfdWFydC5jIGIvU3JjL3N0bTMybDR4eF9oYWxfdWFydC5jCmluZGV4IDg0NGNmN2QuLjA1ZjUwZGMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX3VhcnQuYworKysgYi9TcmMvc3RtMzJsNHh4X2hhbF91YXJ0LmMKQEAgLTE2MTksNyArMTYxOSw3IEBACiAKICAgICAvKiBSZS1lbmFibGUgUEUgYW5kIEVSUiAoRnJhbWUgZXJyb3IsIG5vaXNlIGVycm9yLCBvdmVycnVuIGVycm9yKSBpbnRlcnJ1cHRzICovCiAgICAgaWYgKGh1YXJ0LT5Jbml0LlBhcml0eSAhPSBVQVJUX1BBUklUWV9OT05FKQotICAgIHsgICAgCisgICAgewogICAgICAgQVRPTUlDX1NFVF9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9QRUlFKTsKICAgICB9CiAgICAgQVRPTUlDX1NFVF9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19FSUUpOwpAQCAtMjU3OCw3ICsyNTc4LDcgQEAKIAogICAgICAgICAvKiBEaXNhYmxlIHRoZSBVQVJUIEVycm9yIEludGVycnVwdDogKEZyYW1lIGVycm9yLCBub2lzZSBlcnJvciwgb3ZlcnJ1biBlcnJvcikgKi8KICAgICAgICAgQVRPTUlDX0NMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0VJRSk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBVU0FSVF9DUjFfRklGT0VOICovCiAKICAgICAgICAgLyogUnggcHJvY2VzcyBpcyBjb21wbGV0ZWQsIHJlc3RvcmUgaHVhcnQtPlJ4U3RhdGUgdG8gUmVhZHkgKi8KICAgICAgICAgaHVhcnQtPlJ4U3RhdGUgPSBIQUxfVUFSVF9TVEFURV9SRUFEWTsKQEAgLTMwNzksNyArMzA3OSw3IEBACiAgICogICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVQVJULgogICAqIEByZXR2YWwgSEFMIHN0YXRlCiAgICovCi1IQUxfVUFSVF9TdGF0ZVR5cGVEZWYgSEFMX1VBUlRfR2V0U3RhdGUoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCkKK0hBTF9VQVJUX1N0YXRlVHlwZURlZiBIQUxfVUFSVF9HZXRTdGF0ZShjb25zdCBVQVJUX0hhbmRsZVR5cGVEZWYgKmh1YXJ0KQogewogICB1aW50MzJfdCB0ZW1wMTsKICAgdWludDMyX3QgdGVtcDI7CkBAIC0zMDk1LDcgKzMwOTUsNyBAQAogICAqICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgVUFSVC4KICAgKiBAcmV0dmFsIFVBUlQgRXJyb3IgQ29kZQogICAqLwotdWludDMyX3QgSEFMX1VBUlRfR2V0RXJyb3IoVUFSVF9IYW5kbGVUeXBlRGVmICpodWFydCkKK3VpbnQzMl90IEhBTF9VQVJUX0dldEVycm9yKGNvbnN0IFVBUlRfSGFuZGxlVHlwZURlZiAqaHVhcnQpCiB7CiAgIHJldHVybiBodWFydC0+RXJyb3JDb2RlOwogfQpAQCAtMzU2Nyw3ICszNTY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNBUlRfQ1IxX1RYRUlFX1RYRk5GSUUpKTsKICNlbHNlCiAgICAgICAgICAgQVRPTUlDX0NMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMSwgKFVTQVJUX0NSMV9SWE5FSUUgfCBVU0FSVF9DUjFfUEVJRSB8IFVTQVJUX0NSMV9UWEVJRSkpOwotI2VuZGlmCisjZW5kaWYgLyogVVNBUlRfQ1IxX0ZJRk9FTiAqLwogICAgICAgICAgIEFUT01JQ19DTEVBUl9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjMsIFVTQVJUX0NSM19FSUUpOwogCiAgICAgICAgICAgaHVhcnQtPmdTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX1JFQURZOwpAQCAtMzY1Nyw3ICszNjU3LDcgQEAKICAgICBlbHNlCiAgICAgewogICAgICAgQVRPTUlDX1NFVF9CSVQoaHVhcnQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9SWE5FSUVfUlhGTkVJRSk7Ci0gICAgfSAgCisgICAgfQogICB9CiAjZWxzZQogICAvKiBTZXQgdGhlIFJ4IElTUiBmdW5jdGlvbiBwb2ludGVyIGFjY29yZGluZyB0byB0aGUgZGF0YSB3b3JkIGxlbmd0aCAqLwpAQCAtMzY3NCw3ICszNjc0LDcgQEAKIAogICAvKiBFbmFibGUgdGhlIFVBUlQgUGFyaXR5IEVycm9yIGludGVycnVwdCBhbmQgRGF0YSBSZWdpc3RlciBOb3QgRW1wdHkgaW50ZXJydXB0ICovCiAgIGlmIChodWFydC0+SW5pdC5QYXJpdHkgIT0gVUFSVF9QQVJJVFlfTk9ORSkKLSAgeyAKKyAgewogICAgIEFUT01JQ19TRVRfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfUEVJRSB8IFVTQVJUX0NSMV9SWE5FSUUpOwogICB9CiAgIGVsc2UKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfaGFsX3VzYXJ0LmMgYi9TcmMvc3RtMzJsNHh4X2hhbF91c2FydC5jCmluZGV4IDllNTIyZTguLjVhMzczNTUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfaGFsX3VzYXJ0LmMKKysrIGIvU3JjL3N0bTMybDR4eF9oYWxfdXNhcnQuYwpAQCAtNzYzLDcgKzc2Myw4IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfVVNBUlRfVHJhbnNtaXQoVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0LCBjb25zdCB1aW50OF90ICpwVHhEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1VTQVJUX1RyYW5zbWl0KFVTQVJUX0hhbmRsZVR5cGVEZWYgKmh1c2FydCwgY29uc3QgdWludDhfdCAqcFR4RGF0YSwgdWludDE2X3QgU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KQogewogICBjb25zdCB1aW50OF90ICAqcHR4ZGF0YThiaXRzOwogICBjb25zdCB1aW50MTZfdCAqcHR4ZGF0YTE2Yml0czsKQEAgLTEyNjEsNyArMTI2Miw3IEBACiAgICAgICAvKiBFbmFibGUgdGhlIFVTQVJUIFBhcml0eSBFcnJvciBpbnRlcnJ1cHQgYW5kIFJYIEZJRk8gVGhyZXNob2xkIGludGVycnVwdCAqLwogICAgICAgaWYgKGh1c2FydC0+SW5pdC5QYXJpdHkgIT0gVVNBUlRfUEFSSVRZX05PTkUpCiAgICAgICB7Ci0gICAgICAgU0VUX0JJVChodXNhcnQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9QRUlFKTsKKyAgICAgICAgU0VUX0JJVChodXNhcnQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9QRUlFKTsKICAgICAgIH0KICAgICAgIFNFVF9CSVQoaHVzYXJ0LT5JbnN0YW5jZS0+Q1IzLCBVU0FSVF9DUjNfUlhGVElFKTsKICAgICB9CkBAIC0yNTk3LDcgKzI1OTgsNyBAQAogICAqICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBVU0FSVC4KICAgKiBAcmV0dmFsIFVTQVJUIGhhbmRsZSBzdGF0ZQogICAqLwotSEFMX1VTQVJUX1N0YXRlVHlwZURlZiBIQUxfVVNBUlRfR2V0U3RhdGUoVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0KQorSEFMX1VTQVJUX1N0YXRlVHlwZURlZiBIQUxfVVNBUlRfR2V0U3RhdGUoY29uc3QgVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0KQogewogICByZXR1cm4gaHVzYXJ0LT5TdGF0ZTsKIH0KQEAgLTI2MDgsNyArMjYwOSw3IEBACiAgICogICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIFVTQVJULgogICAqIEByZXR2YWwgVVNBUlQgaGFuZGxlIEVycm9yIENvZGUKICAgKi8KLXVpbnQzMl90IEhBTF9VU0FSVF9HZXRFcnJvcihVU0FSVF9IYW5kbGVUeXBlRGVmICpodXNhcnQpCit1aW50MzJfdCBIQUxfVVNBUlRfR2V0RXJyb3IoY29uc3QgVVNBUlRfSGFuZGxlVHlwZURlZiAqaHVzYXJ0KQogewogICByZXR1cm4gaHVzYXJ0LT5FcnJvckNvZGU7CiB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2xsX2xwdGltLmMgYi9TcmMvc3RtMzJsNHh4X2xsX2xwdGltLmMKaW5kZXggNGE4MDBjYi4uMGM2OTU0NCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9sbF9scHRpbS5jCisrKyBiL1NyYy9zdG0zMmw0eHhfbGxfbHB0aW0uYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAgICogICAgICAgICAgLSBTVUNDRVNTOiBMUFRJTXggaW5zdGFuY2UgaGFzIGJlZW4gaW5pdGlhbGl6ZWQKICAgKiAgICAgICAgICAtIEVSUk9SOiBMUFRJTXggaW5zdGFuY2UgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQKICAgKi8KLUVycm9yU3RhdHVzIExMX0xQVElNX0luaXQoTFBUSU1fVHlwZURlZiAqTFBUSU14LCBMTF9MUFRJTV9Jbml0VHlwZURlZiAqTFBUSU1fSW5pdFN0cnVjdCkKK0Vycm9yU3RhdHVzIExMX0xQVElNX0luaXQoTFBUSU1fVHlwZURlZiAqTFBUSU14LCBjb25zdCBMTF9MUFRJTV9Jbml0VHlwZURlZiAqTFBUSU1fSW5pdFN0cnVjdCkKIHsKICAgRXJyb3JTdGF0dXMgcmVzdWx0ID0gU1VDQ0VTUzsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfbGxfbHB1YXJ0LmMgYi9TcmMvc3RtMzJsNHh4X2xsX2xwdWFydC5jCmluZGV4IGMwZTc1NjEuLjliNjAxY2QgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfbGxfbHB1YXJ0LmMKKysrIGIvU3JjL3N0bTMybDR4eF9sbF9scHVhcnQuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICogICAgICAgICAgLSBTVUNDRVNTOiBMUFVBUlQgcmVnaXN0ZXJzIGFyZSBkZS1pbml0aWFsaXplZAogICAqICAgICAgICAgIC0gRVJST1I6IG5vdCBhcHBsaWNhYmxlCiAgICovCi1FcnJvclN0YXR1cyBMTF9MUFVBUlRfRGVJbml0KFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCitFcnJvclN0YXR1cyBMTF9MUFVBUlRfRGVJbml0KGNvbnN0IFVTQVJUX1R5cGVEZWYgKkxQVUFSVHgpCiB7CiAgIEVycm9yU3RhdHVzIHN0YXR1cyA9IFNVQ0NFU1M7CiAKQEAgLTE2Niw3ICsxNjYsNyBAQAogICAqICAgICAgICAgIC0gU1VDQ0VTUzogTFBVQVJUIHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQgYWNjb3JkaW5nIHRvIExQVUFSVF9Jbml0U3RydWN0IGNvbnRlbnQKICAgKiAgICAgICAgICAtIEVSUk9SOiBQcm9ibGVtIG9jY3VycmVkIGR1cmluZyBMUFVBUlQgUmVnaXN0ZXJzIGluaXRpYWxpemF0aW9uCiAgICovCi1FcnJvclN0YXR1cyBMTF9MUFVBUlRfSW5pdChVU0FSVF9UeXBlRGVmICpMUFVBUlR4LCBMTF9MUFVBUlRfSW5pdFR5cGVEZWYgKkxQVUFSVF9Jbml0U3RydWN0KQorRXJyb3JTdGF0dXMgTExfTFBVQVJUX0luaXQoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCwgY29uc3QgTExfTFBVQVJUX0luaXRUeXBlRGVmICpMUFVBUlRfSW5pdFN0cnVjdCkKIHsKICAgRXJyb3JTdGF0dXMgc3RhdHVzID0gRVJST1I7CiAgIHVpbnQzMl90IHBlcmlwaGNsazsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfbGxfdGltLmMgYi9TcmMvc3RtMzJsNHh4X2xsX3RpbS5jCmluZGV4IGViODc1NjUuLjBjYzdjNTcgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfbGxfdGltLmMKKysrIGIvU3JjL3N0bTMybDR4eF9sbF90aW0uYwpAQCAtMTgzLDE2ICsxODMsMTYgQEAKIC8qKiBAZGVmZ3JvdXAgVElNX0xMX1ByaXZhdGVfRnVuY3Rpb25zIFRJTSBQcml2YXRlIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCi1zdGF0aWMgRXJyb3JTdGF0dXMgT0MxQ29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBMTF9USU1fT0NfSW5pdFR5cGVEZWYgKlRJTV9PQ0luaXRTdHJ1Y3QpOwotc3RhdGljIEVycm9yU3RhdHVzIE9DMkNvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NJbml0U3RydWN0KTsKLXN0YXRpYyBFcnJvclN0YXR1cyBPQzNDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIExMX1RJTV9PQ19Jbml0VHlwZURlZiAqVElNX09DSW5pdFN0cnVjdCk7Ci1zdGF0aWMgRXJyb3JTdGF0dXMgT0M0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBMTF9USU1fT0NfSW5pdFR5cGVEZWYgKlRJTV9PQ0luaXRTdHJ1Y3QpOwotc3RhdGljIEVycm9yU3RhdHVzIE9DNUNvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NJbml0U3RydWN0KTsKLXN0YXRpYyBFcnJvclN0YXR1cyBPQzZDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIExMX1RJTV9PQ19Jbml0VHlwZURlZiAqVElNX09DSW5pdFN0cnVjdCk7Ci1zdGF0aWMgRXJyb3JTdGF0dXMgSUMxQ29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBMTF9USU1fSUNfSW5pdFR5cGVEZWYgKlRJTV9JQ0luaXRTdHJ1Y3QpOwotc3RhdGljIEVycm9yU3RhdHVzIElDMkNvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgTExfVElNX0lDX0luaXRUeXBlRGVmICpUSU1fSUNJbml0U3RydWN0KTsKLXN0YXRpYyBFcnJvclN0YXR1cyBJQzNDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIExMX1RJTV9JQ19Jbml0VHlwZURlZiAqVElNX0lDSW5pdFN0cnVjdCk7Ci1zdGF0aWMgRXJyb3JTdGF0dXMgSUM0Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBMTF9USU1fSUNfSW5pdFR5cGVEZWYgKlRJTV9JQ0luaXRTdHJ1Y3QpOworc3RhdGljIEVycm9yU3RhdHVzIE9DMUNvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NJbml0U3RydWN0KTsKK3N0YXRpYyBFcnJvclN0YXR1cyBPQzJDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIGNvbnN0IExMX1RJTV9PQ19Jbml0VHlwZURlZiAqVElNX09DSW5pdFN0cnVjdCk7CitzdGF0aWMgRXJyb3JTdGF0dXMgT0MzQ29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBjb25zdCBMTF9USU1fT0NfSW5pdFR5cGVEZWYgKlRJTV9PQ0luaXRTdHJ1Y3QpOworc3RhdGljIEVycm9yU3RhdHVzIE9DNENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NJbml0U3RydWN0KTsKK3N0YXRpYyBFcnJvclN0YXR1cyBPQzVDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIGNvbnN0IExMX1RJTV9PQ19Jbml0VHlwZURlZiAqVElNX09DSW5pdFN0cnVjdCk7CitzdGF0aWMgRXJyb3JTdGF0dXMgT0M2Q29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBjb25zdCBMTF9USU1fT0NfSW5pdFR5cGVEZWYgKlRJTV9PQ0luaXRTdHJ1Y3QpOworc3RhdGljIEVycm9yU3RhdHVzIElDMUNvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX0lDX0luaXRUeXBlRGVmICpUSU1fSUNJbml0U3RydWN0KTsKK3N0YXRpYyBFcnJvclN0YXR1cyBJQzJDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIGNvbnN0IExMX1RJTV9JQ19Jbml0VHlwZURlZiAqVElNX0lDSW5pdFN0cnVjdCk7CitzdGF0aWMgRXJyb3JTdGF0dXMgSUMzQ29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBjb25zdCBMTF9USU1fSUNfSW5pdFR5cGVEZWYgKlRJTV9JQ0luaXRTdHJ1Y3QpOworc3RhdGljIEVycm9yU3RhdHVzIElDNENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX0lDX0luaXRUeXBlRGVmICpUSU1fSUNJbml0U3RydWN0KTsKIC8qKgogICAqIEB9CiAgICovCkBAIC0zMjAsNyArMzIwLDcgQEAKICAgKiAgICAgICAgICAtIFNVQ0NFU1M6IFRJTXggcmVnaXN0ZXJzIGFyZSBkZS1pbml0aWFsaXplZAogICAqICAgICAgICAgIC0gRVJST1I6IG5vdCBhcHBsaWNhYmxlCiAgICovCi1FcnJvclN0YXR1cyBMTF9USU1fSW5pdChUSU1fVHlwZURlZiAqVElNeCwgTExfVElNX0luaXRUeXBlRGVmICpUSU1fSW5pdFN0cnVjdCkKK0Vycm9yU3RhdHVzIExMX1RJTV9Jbml0KFRJTV9UeXBlRGVmICpUSU14LCBjb25zdCBMTF9USU1fSW5pdFR5cGVEZWYgKlRJTV9Jbml0U3RydWN0KQogewogICB1aW50MzJfdCB0bXBjcjE7CiAKQEAgLTQwMSw3ICs0MDEsNyBAQAogICAqICAgICAgICAgIC0gU1VDQ0VTUzogVElNeCBvdXRwdXQgY2hhbm5lbCBpcyBpbml0aWFsaXplZAogICAqICAgICAgICAgIC0gRVJST1I6IFRJTXggb3V0cHV0IGNoYW5uZWwgaXMgbm90IGluaXRpYWxpemVkCiAgICovCi1FcnJvclN0YXR1cyBMTF9USU1fT0NfSW5pdChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NfSW5pdFN0cnVjdCkKK0Vycm9yU3RhdHVzIExMX1RJTV9PQ19Jbml0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCBjb25zdCBMTF9USU1fT0NfSW5pdFR5cGVEZWYgKlRJTV9PQ19Jbml0U3RydWN0KQogewogICBFcnJvclN0YXR1cyByZXN1bHQgPSBFUlJPUjsKIApAQCAtNDYyLDcgKzQ2Miw3IEBACiAgICogICAgICAgICAgLSBTVUNDRVNTOiBUSU14IG91dHB1dCBjaGFubmVsIGlzIGluaXRpYWxpemVkCiAgICogICAgICAgICAgLSBFUlJPUjogVElNeCBvdXRwdXQgY2hhbm5lbCBpcyBub3QgaW5pdGlhbGl6ZWQKICAgKi8KLUVycm9yU3RhdHVzIExMX1RJTV9JQ19Jbml0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCBMTF9USU1fSUNfSW5pdFR5cGVEZWYgKlRJTV9JQ19Jbml0U3RydWN0KQorRXJyb3JTdGF0dXMgTExfVElNX0lDX0luaXQoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIGNvbnN0IExMX1RJTV9JQ19Jbml0VHlwZURlZiAqVElNX0lDX0luaXRTdHJ1Y3QpCiB7CiAgIEVycm9yU3RhdHVzIHJlc3VsdCA9IEVSUk9SOwogCkBAIC01MTYsNyArNTE2LDcgQEAKICAgKiAgICAgICAgICAtIFNVQ0NFU1M6IFRJTXggcmVnaXN0ZXJzIGFyZSBkZS1pbml0aWFsaXplZAogICAqICAgICAgICAgIC0gRVJST1I6IG5vdCBhcHBsaWNhYmxlCiAgICovCi1FcnJvclN0YXR1cyBMTF9USU1fRU5DT0RFUl9Jbml0KFRJTV9UeXBlRGVmICpUSU14LCBMTF9USU1fRU5DT0RFUl9Jbml0VHlwZURlZiAqVElNX0VuY29kZXJJbml0U3RydWN0KQorRXJyb3JTdGF0dXMgTExfVElNX0VOQ09ERVJfSW5pdChUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX0VOQ09ERVJfSW5pdFR5cGVEZWYgKlRJTV9FbmNvZGVySW5pdFN0cnVjdCkKIHsKICAgdWludDMyX3QgdG1wY2NtcjE7CiAgIHVpbnQzMl90IHRtcGNjZXI7CkBAIC02MDksNyArNjA5LDcgQEAKICAgKiAgICAgICAgICAtIFNVQ0NFU1M6IFRJTXggcmVnaXN0ZXJzIGFyZSBkZS1pbml0aWFsaXplZAogICAqICAgICAgICAgIC0gRVJST1I6IG5vdCBhcHBsaWNhYmxlCiAgICovCi1FcnJvclN0YXR1cyBMTF9USU1fSEFMTFNFTlNPUl9Jbml0KFRJTV9UeXBlRGVmICpUSU14LCBMTF9USU1fSEFMTFNFTlNPUl9Jbml0VHlwZURlZiAqVElNX0hhbGxTZW5zb3JJbml0U3RydWN0KQorRXJyb3JTdGF0dXMgTExfVElNX0hBTExTRU5TT1JfSW5pdChUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX0hBTExTRU5TT1JfSW5pdFR5cGVEZWYgKlRJTV9IYWxsU2Vuc29ySW5pdFN0cnVjdCkKIHsKICAgdWludDMyX3QgdG1wY3IyOwogICB1aW50MzJfdCB0bXBjY21yMTsKQEAgLTcyMSw3ICs3MjEsNyBAQAogICAqICAgICAgICAgIC0gU1VDQ0VTUzogQnJlYWsgYW5kIERlYWQgVGltZSBpcyBpbml0aWFsaXplZAogICAqICAgICAgICAgIC0gRVJST1I6IG5vdCBhcHBsaWNhYmxlCiAgICovCi1FcnJvclN0YXR1cyBMTF9USU1fQkRUUl9Jbml0KFRJTV9UeXBlRGVmICpUSU14LCBMTF9USU1fQkRUUl9Jbml0VHlwZURlZiAqVElNX0JEVFJJbml0U3RydWN0KQorRXJyb3JTdGF0dXMgTExfVElNX0JEVFJfSW5pdChUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX0JEVFJfSW5pdFR5cGVEZWYgKlRJTV9CRFRSSW5pdFN0cnVjdCkKIHsKICAgdWludDMyX3QgdG1wYmR0ciA9IDA7CiAKQEAgLTc4OSw3ICs3ODksNyBAQAogICAqICAgICAgICAgIC0gU1VDQ0VTUzogVElNeCByZWdpc3RlcnMgYXJlIGRlLWluaXRpYWxpemVkCiAgICogICAgICAgICAgLSBFUlJPUjogbm90IGFwcGxpY2FibGUKICAgKi8KLXN0YXRpYyBFcnJvclN0YXR1cyBPQzFDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIExMX1RJTV9PQ19Jbml0VHlwZURlZiAqVElNX09DSW5pdFN0cnVjdCkKK3N0YXRpYyBFcnJvclN0YXR1cyBPQzFDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIGNvbnN0IExMX1RJTV9PQ19Jbml0VHlwZURlZiAqVElNX09DSW5pdFN0cnVjdCkKIHsKICAgdWludDMyX3QgdG1wY2NtcjE7CiAgIHVpbnQzMl90IHRtcGNjZXI7CkBAIC04NjgsNyArODY4LDcgQEAKICAgKiAgICAgICAgICAtIFNVQ0NFU1M6IFRJTXggcmVnaXN0ZXJzIGFyZSBkZS1pbml0aWFsaXplZAogICAqICAgICAgICAgIC0gRVJST1I6IG5vdCBhcHBsaWNhYmxlCiAgICovCi1zdGF0aWMgRXJyb3JTdGF0dXMgT0MyQ29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBMTF9USU1fT0NfSW5pdFR5cGVEZWYgKlRJTV9PQ0luaXRTdHJ1Y3QpCitzdGF0aWMgRXJyb3JTdGF0dXMgT0MyQ29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBjb25zdCBMTF9USU1fT0NfSW5pdFR5cGVEZWYgKlRJTV9PQ0luaXRTdHJ1Y3QpCiB7CiAgIHVpbnQzMl90IHRtcGNjbXIxOwogICB1aW50MzJfdCB0bXBjY2VyOwpAQCAtOTQ3LDcgKzk0Nyw3IEBACiAgICogICAgICAgICAgLSBTVUNDRVNTOiBUSU14IHJlZ2lzdGVycyBhcmUgZGUtaW5pdGlhbGl6ZWQKICAgKiAgICAgICAgICAtIEVSUk9SOiBub3QgYXBwbGljYWJsZQogICAqLwotc3RhdGljIEVycm9yU3RhdHVzIE9DM0NvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NJbml0U3RydWN0KQorc3RhdGljIEVycm9yU3RhdHVzIE9DM0NvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NJbml0U3RydWN0KQogewogICB1aW50MzJfdCB0bXBjY21yMjsKICAgdWludDMyX3QgdG1wY2NlcjsKQEAgLTEwMjYsNyArMTAyNiw3IEBACiAgICogICAgICAgICAgLSBTVUNDRVNTOiBUSU14IHJlZ2lzdGVycyBhcmUgZGUtaW5pdGlhbGl6ZWQKICAgKiAgICAgICAgICAtIEVSUk9SOiBub3QgYXBwbGljYWJsZQogICAqLwotc3RhdGljIEVycm9yU3RhdHVzIE9DNENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NJbml0U3RydWN0KQorc3RhdGljIEVycm9yU3RhdHVzIE9DNENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NJbml0U3RydWN0KQogewogICB1aW50MzJfdCB0bXBjY21yMjsKICAgdWludDMyX3QgdG1wY2NlcjsKQEAgLTEwOTYsNyArMTA5Niw3IEBACiAgICogICAgICAgICAgLSBTVUNDRVNTOiBUSU14IHJlZ2lzdGVycyBhcmUgZGUtaW5pdGlhbGl6ZWQKICAgKiAgICAgICAgICAtIEVSUk9SOiBub3QgYXBwbGljYWJsZQogICAqLwotc3RhdGljIEVycm9yU3RhdHVzIE9DNUNvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NJbml0U3RydWN0KQorc3RhdGljIEVycm9yU3RhdHVzIE9DNUNvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NJbml0U3RydWN0KQogewogICB1aW50MzJfdCB0bXBjY21yMzsKICAgdWludDMyX3QgdG1wY2NlcjsKQEAgLTExNTcsNyArMTE1Nyw3IEBACiAgICogICAgICAgICAgLSBTVUNDRVNTOiBUSU14IHJlZ2lzdGVycyBhcmUgZGUtaW5pdGlhbGl6ZWQKICAgKiAgICAgICAgICAtIEVSUk9SOiBub3QgYXBwbGljYWJsZQogICAqLwotc3RhdGljIEVycm9yU3RhdHVzIE9DNkNvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NJbml0U3RydWN0KQorc3RhdGljIEVycm9yU3RhdHVzIE9DNkNvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX09DX0luaXRUeXBlRGVmICpUSU1fT0NJbml0U3RydWN0KQogewogICB1aW50MzJfdCB0bXBjY21yMzsKICAgdWludDMyX3QgdG1wY2NlcjsKQEAgLTEyMTcsNyArMTIxNyw3IEBACiAgICogICAgICAgICAgLSBTVUNDRVNTOiBUSU14IHJlZ2lzdGVycyBhcmUgZGUtaW5pdGlhbGl6ZWQKICAgKiAgICAgICAgICAtIEVSUk9SOiBub3QgYXBwbGljYWJsZQogICAqLwotc3RhdGljIEVycm9yU3RhdHVzIElDMUNvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgTExfVElNX0lDX0luaXRUeXBlRGVmICpUSU1fSUNJbml0U3RydWN0KQorc3RhdGljIEVycm9yU3RhdHVzIElDMUNvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX0lDX0luaXRUeXBlRGVmICpUSU1fSUNJbml0U3RydWN0KQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMV9JTlNUQU5DRShUSU14KSk7CkBAIC0xMjUwLDcgKzEyNTAsNyBAQAogICAqICAgICAgICAgIC0gU1VDQ0VTUzogVElNeCByZWdpc3RlcnMgYXJlIGRlLWluaXRpYWxpemVkCiAgICogICAgICAgICAgLSBFUlJPUjogbm90IGFwcGxpY2FibGUKICAgKi8KLXN0YXRpYyBFcnJvclN0YXR1cyBJQzJDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIExMX1RJTV9JQ19Jbml0VHlwZURlZiAqVElNX0lDSW5pdFN0cnVjdCkKK3N0YXRpYyBFcnJvclN0YXR1cyBJQzJDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIGNvbnN0IExMX1RJTV9JQ19Jbml0VHlwZURlZiAqVElNX0lDSW5pdFN0cnVjdCkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzJfSU5TVEFOQ0UoVElNeCkpOwpAQCAtMTI4Myw3ICsxMjgzLDcgQEAKICAgKiAgICAgICAgICAtIFNVQ0NFU1M6IFRJTXggcmVnaXN0ZXJzIGFyZSBkZS1pbml0aWFsaXplZAogICAqICAgICAgICAgIC0gRVJST1I6IG5vdCBhcHBsaWNhYmxlCiAgICovCi1zdGF0aWMgRXJyb3JTdGF0dXMgSUMzQ29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBMTF9USU1fSUNfSW5pdFR5cGVEZWYgKlRJTV9JQ0luaXRTdHJ1Y3QpCitzdGF0aWMgRXJyb3JTdGF0dXMgSUMzQ29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCBjb25zdCBMTF9USU1fSUNfSW5pdFR5cGVEZWYgKlRJTV9JQ0luaXRTdHJ1Y3QpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0MzX0lOU1RBTkNFKFRJTXgpKTsKQEAgLTEzMTYsNyArMTMxNiw3IEBACiAgICogICAgICAgICAgLSBTVUNDRVNTOiBUSU14IHJlZ2lzdGVycyBhcmUgZGUtaW5pdGlhbGl6ZWQKICAgKiAgICAgICAgICAtIEVSUk9SOiBub3QgYXBwbGljYWJsZQogICAqLwotc3RhdGljIEVycm9yU3RhdHVzIElDNENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgTExfVElNX0lDX0luaXRUeXBlRGVmICpUSU1fSUNJbml0U3RydWN0KQorc3RhdGljIEVycm9yU3RhdHVzIElDNENvbmZpZyhUSU1fVHlwZURlZiAqVElNeCwgY29uc3QgTExfVElNX0lDX0luaXRUeXBlRGVmICpUSU1fSUNJbml0U3RydWN0KQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDNF9JTlNUQU5DRShUSU14KSk7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJsNHh4X2xsX3VzYXJ0LmMgYi9TcmMvc3RtMzJsNHh4X2xsX3VzYXJ0LmMKaW5kZXggOTBmNjAzZi4uMTg5YjcyOSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMybDR4eF9sbF91c2FydC5jCisrKyBiL1NyYy9zdG0zMmw0eHhfbGxfdXNhcnQuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAgICogICAgICAgICAgLSBTVUNDRVNTOiBVU0FSVCByZWdpc3RlcnMgYXJlIGRlLWluaXRpYWxpemVkCiAgICogICAgICAgICAgLSBFUlJPUjogVVNBUlQgcmVnaXN0ZXJzIGFyZSBub3QgZGUtaW5pdGlhbGl6ZWQKICAgKi8KLUVycm9yU3RhdHVzIExMX1VTQVJUX0RlSW5pdChVU0FSVF9UeXBlRGVmICpVU0FSVHgpCitFcnJvclN0YXR1cyBMTF9VU0FSVF9EZUluaXQoY29uc3QgVVNBUlRfVHlwZURlZiAqVVNBUlR4KQogewogICBFcnJvclN0YXR1cyBzdGF0dXMgPSBTVUNDRVNTOwogCkBAIC0yMDYsNyArMjA2LDcgQEAKICAgKiAgICAgICAgICAtIFNVQ0NFU1M6IFVTQVJUIHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQgYWNjb3JkaW5nIHRvIFVTQVJUX0luaXRTdHJ1Y3QgY29udGVudAogICAqICAgICAgICAgIC0gRVJST1I6IFByb2JsZW0gb2NjdXJyZWQgZHVyaW5nIFVTQVJUIFJlZ2lzdGVycyBpbml0aWFsaXphdGlvbgogICAqLwotRXJyb3JTdGF0dXMgTExfVVNBUlRfSW5pdChVU0FSVF9UeXBlRGVmICpVU0FSVHgsIExMX1VTQVJUX0luaXRUeXBlRGVmICpVU0FSVF9Jbml0U3RydWN0KQorRXJyb3JTdGF0dXMgTExfVVNBUlRfSW5pdChVU0FSVF9UeXBlRGVmICpVU0FSVHgsIGNvbnN0IExMX1VTQVJUX0luaXRUeXBlRGVmICpVU0FSVF9Jbml0U3RydWN0KQogewogICBFcnJvclN0YXR1cyBzdGF0dXMgPSBFUlJPUjsKICAgdWludDMyX3QgcGVyaXBoY2xrID0gTExfUkNDX1BFUklQSF9GUkVRVUVOQ1lfTk87CkBAIC0zNjEsNyArMzYxLDcgQEAKICAgKiAgICAgICAgICAgICAgICAgICAgIHRvIFVTQVJUX0Nsb2NrSW5pdFN0cnVjdCBjb250ZW50CiAgICogICAgICAgICAgLSBFUlJPUjogUHJvYmxlbSBvY2N1cnJlZCBkdXJpbmcgVVNBUlQgUmVnaXN0ZXJzIGluaXRpYWxpemF0aW9uCiAgICovCi1FcnJvclN0YXR1cyBMTF9VU0FSVF9DbG9ja0luaXQoVVNBUlRfVHlwZURlZiAqVVNBUlR4LCBMTF9VU0FSVF9DbG9ja0luaXRUeXBlRGVmICpVU0FSVF9DbG9ja0luaXRTdHJ1Y3QpCitFcnJvclN0YXR1cyBMTF9VU0FSVF9DbG9ja0luaXQoVVNBUlRfVHlwZURlZiAqVVNBUlR4LCBjb25zdCBMTF9VU0FSVF9DbG9ja0luaXRUeXBlRGVmICpVU0FSVF9DbG9ja0luaXRTdHJ1Y3QpCiB7CiAgIEVycm9yU3RhdHVzIHN0YXR1cyA9IFNVQ0NFU1M7CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmw0eHhfbGxfdXNiLmMgYi9TcmMvc3RtMzJsNHh4X2xsX3VzYi5jCmluZGV4IDliOTFkNWUuLjY1YWFlZTYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmw0eHhfbGxfdXNiLmMKKysrIGIvU3JjL3N0bTMybDR4eF9sbF91c2IuYwpAQCAtNDA3LDcgKzQwNyw5IEBACiAgIC8qIFdhaXQgZm9yIEFIQiBtYXN0ZXIgSURMRSBzdGF0ZS4gKi8KICAgZG8KICAgewotICAgIGlmICgrK2NvdW50ID4gMjAwMDAwVSkKKyAgICBjb3VudCsrOworCisgICAgaWYgKGNvdW50ID4gMjAwMDAwVSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQpAQCAtNDE5LDcgKzQyMSw5IEBACiAKICAgZG8KICAgewotICAgIGlmICgrK2NvdW50ID4gMjAwMDAwVSkKKyAgICBjb3VudCsrOworCisgICAgaWYgKGNvdW50ID4gMjAwMDAwVSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQpAQCAtNDQwLDcgKzQ0NCw5IEBACiAgIC8qIFdhaXQgZm9yIEFIQiBtYXN0ZXIgSURMRSBzdGF0ZS4gKi8KICAgZG8KICAgewotICAgIGlmICgrK2NvdW50ID4gMjAwMDAwVSkKKyAgICBjb3VudCsrOworCisgICAgaWYgKGNvdW50ID4gMjAwMDAwVSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQpAQCAtNDUyLDcgKzQ1OCw5IEBACiAKICAgZG8KICAgewotICAgIGlmICgrK2NvdW50ID4gMjAwMDAwVSkKKyAgICBjb3VudCsrOworCisgICAgaWYgKGNvdW50ID4gMjAwMDAwVSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQpAQCAtODczLDcgKzg4MSw5IEBACiAKICAgICAgIGRvCiAgICAgICB7Ci0gICAgICAgIGlmICgrK2NvdW50ID4gMTAwMDBVKQorICAgICAgICBjb3VudCsrOworCisgICAgICAgIGlmIChjb3VudCA+IDEwMDAwVSkKICAgICAgICAgewogICAgICAgICAgIHJldCA9IEhBTF9FUlJPUjsKICAgICAgICAgICBicmVhazsKQEAgLTg5MCw3ICs5MDAsOSBAQAogCiAgICAgICBkbwogICAgICAgewotICAgICAgICBpZiAoKytjb3VudCA+IDEwMDAwVSkKKyAgICAgICAgY291bnQrKzsKKworICAgICAgICBpZiAoY291bnQgPiAxMDAwMFUpCiAgICAgICAgIHsKICAgICAgICAgICByZXQgPSBIQUxfRVJST1I7CiAgICAgICAgICAgYnJlYWs7CkBAIC0xMjk1LDcgKzEzMDcsOSBAQAogICAvKiBXYWl0IGZvciBBSEIgbWFzdGVyIElETEUgc3RhdGUuICovCiAgIGRvCiAgIHsKLSAgICBpZiAoKytjb3VudCA+IDIwMDAwMFUpCisgICAgY291bnQrKzsKKworICAgIGlmIChjb3VudCA+IDIwMDAwMFUpCiAgICAgewogICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgIH0KQEAgLTEzMDcsNyArMTMyMSw5IEBACiAKICAgZG8KICAgewotICAgIGlmICgrK2NvdW50ID4gMjAwMDAwVSkKKyAgICBjb3VudCsrOworCisgICAgaWYgKGNvdW50ID4gMjAwMDAwVSkKICAgICB7CiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQpAQCAtMTc4Niw3ICsxODAyLDkgQEAKICAgICAgICAgVVNCeF9IQyhoY251bSktPkhDQ0hBUiB8PSBVU0JfT1RHX0hDQ0hBUl9DSEVOQTsKICAgICAgICAgZG8KICAgICAgICAgewotICAgICAgICAgIGlmICgrK2NvdW50ID4gMTAwMFUpCisgICAgICAgICAgY291bnQrKzsKKworICAgICAgICAgIGlmIChjb3VudCA+IDEwMDBVKQogICAgICAgICAgIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIH0KQEAgLTE4MDgsNyArMTgyNiw5IEBACiAgICAgICBVU0J4X0hDKGhjbnVtKS0+SENDSEFSIHw9IFVTQl9PVEdfSENDSEFSX0NIRU5BOwogICAgICAgZG8KICAgICAgIHsKLSAgICAgICAgaWYgKCsrY291bnQgPiAxMDAwVSkKKyAgICAgICAgY291bnQrKzsKKworICAgICAgICBpZiAoY291bnQgPiAxMDAwVSkKICAgICAgICAgewogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xODk2LDcgKzE5MTYsOSBAQAogCiAgICAgZG8KICAgICB7Ci0gICAgICBpZiAoKytjb3VudCA+IDEwMDBVKQorICAgICAgY291bnQrKzsKKworICAgICAgaWYgKGNvdW50ID4gMTAwMFUpCiAgICAgICB7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQpAQCAtMjE3NSw4ICsyMTk3LDE2IEBACiAgICAgICBQQ0RfU0VUX0VQX1JYX0NOVChVU0J4LCBlcC0+bnVtLCBlcC0+bWF4cGFja2V0KTsKICAgICAgIFBDRF9DTEVBUl9SWF9EVE9HKFVTQngsIGVwLT5udW0pOwogCi0gICAgICAvKiBDb25maWd1cmUgVkFMSUQgc3RhdHVzIGZvciB0aGUgRW5kcG9pbnQgKi8KLSAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9SWF9WQUxJRCk7CisgICAgICBpZiAoZXAtPm51bSA9PSAwVSkKKyAgICAgIHsKKyAgICAgICAgLyogQ29uZmlndXJlIFZBTElEIHN0YXR1cyBmb3IgRVAwICovCisgICAgICAgIFBDRF9TRVRfRVBfUlhfU1RBVFVTKFVTQngsIGVwLT5udW0sIFVTQl9FUF9SWF9WQUxJRCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIENvbmZpZ3VyZSBOQUsgc3RhdHVzIGZvciBPVVQgRW5kcG9pbnQgKi8KKyAgICAgICAgUENEX1NFVF9FUF9SWF9TVEFUVVMoVVNCeCwgZXAtPm51bSwgVVNCX0VQX1JYX05BSyk7CisgICAgICB9CiAgICAgfQogICB9CiAjaWYgKFVTRV9VU0JfRE9VQkxFX0JVRkZFUiA9PSAxVSkKQEAgLTI4MjUsMjAgKzI4NTUsMTggQEAKIHsKICAgdWludDMyX3QgbiA9ICgodWludDMyX3Qpd05CeXRlcyArIDFVKSA+PiAxOwogICB1aW50MzJfdCBCYXNlQWRkciA9ICh1aW50MzJfdClVU0J4OwotICB1aW50MzJfdCBpOwotICB1aW50MzJfdCB0ZW1wMTsKLSAgdWludDMyX3QgdGVtcDI7CisgIHVpbnQzMl90IGNvdW50OworICB1aW50MTZfdCBXclZhbDsKICAgX19JTyB1aW50MTZfdCAqcGR3VmFsOwogICB1aW50OF90ICpwQnVmID0gcGJVc3JCdWY7CiAKICAgcGR3VmFsID0gKF9fSU8gdWludDE2X3QgKikoQmFzZUFkZHIgKyAweDQwMFUgKyAoKHVpbnQzMl90KXdQTUFCdWZBZGRyICogUE1BX0FDQ0VTUykpOwogCi0gIGZvciAoaSA9IG47IGkgIT0gMFU7IGktLSkKKyAgZm9yIChjb3VudCA9IG47IGNvdW50ICE9IDBVOyBjb3VudC0tKQogICB7Ci0gICAgdGVtcDEgPSAqcEJ1ZjsKLSAgICBwQnVmKys7Ci0gICAgdGVtcDIgPSB0ZW1wMSB8ICgodWludDE2X3QpKCh1aW50MTZfdCkgKnBCdWYgPDwgOCkpOwotICAgICpwZHdWYWwgPSAodWludDE2X3QpdGVtcDI7CisgICAgV3JWYWwgPSBwQnVmWzBdOworICAgIFdyVmFsIHw9ICh1aW50MTZfdClwQnVmWzFdIDw8IDg7CisgICAgKnBkd1ZhbCA9IChXclZhbCAmIDB4RkZGRlUpOwogICAgIHBkd1ZhbCsrOwogCiAjaWYgUE1BX0FDQ0VTUyA+IDFVCkBAIC0yODQ2LDYgKzI4NzQsNyBAQAogI2VuZGlmIC8qIFBNQV9BQ0NFU1MgKi8KIAogICAgIHBCdWYrKzsKKyAgICBwQnVmKys7CiAgIH0KIH0KIApAQCAtMjg2MSwyMCArMjg5MCwyMCBAQAogewogICB1aW50MzJfdCBuID0gKHVpbnQzMl90KXdOQnl0ZXMgPj4gMTsKICAgdWludDMyX3QgQmFzZUFkZHIgPSAodWludDMyX3QpVVNCeDsKLSAgdWludDMyX3QgaTsKLSAgdWludDMyX3QgdGVtcDsKKyAgdWludDMyX3QgY291bnQ7CisgIHVpbnQzMl90IFJkVmFsOwogICBfX0lPIHVpbnQxNl90ICpwZHdWYWw7CiAgIHVpbnQ4X3QgKnBCdWYgPSBwYlVzckJ1ZjsKIAogICBwZHdWYWwgPSAoX19JTyB1aW50MTZfdCAqKShCYXNlQWRkciArIDB4NDAwVSArICgodWludDMyX3Qpd1BNQUJ1ZkFkZHIgKiBQTUFfQUNDRVNTKSk7CiAKLSAgZm9yIChpID0gbjsgaSAhPSAwVTsgaS0tKQorICBmb3IgKGNvdW50ID0gbjsgY291bnQgIT0gMFU7IGNvdW50LS0pCiAgIHsKLSAgICB0ZW1wID0gKihfX0lPIHVpbnQxNl90ICopcGR3VmFsOworICAgIFJkVmFsID0gKihfX0lPIHVpbnQxNl90ICopcGR3VmFsOwogICAgIHBkd1ZhbCsrOwotICAgICpwQnVmID0gKHVpbnQ4X3QpKCh0ZW1wID4+IDApICYgMHhGRlUpOworICAgICpwQnVmID0gKHVpbnQ4X3QpKChSZFZhbCA+PiAwKSAmIDB4RkZVKTsKICAgICBwQnVmKys7Ci0gICAgKnBCdWYgPSAodWludDhfdCkoKHRlbXAgPj4gOCkgJiAweEZGVSk7CisgICAgKnBCdWYgPSAodWludDhfdCkoKFJkVmFsID4+IDgpICYgMHhGRlUpOwogICAgIHBCdWYrKzsKIAogI2lmIFBNQV9BQ0NFU1MgPiAxVQpAQCAtMjg4NCw4ICsyOTEzLDggQEAKIAogICBpZiAoKHdOQnl0ZXMgJSAyVSkgIT0gMFUpCiAgIHsKLSAgICB0ZW1wID0gKnBkd1ZhbDsKLSAgICAqcEJ1ZiA9ICh1aW50OF90KSgodGVtcCA+PiAwKSAmIDB4RkZVKTsKKyAgICBSZFZhbCA9ICpwZHdWYWw7CisgICAgKnBCdWYgPSAodWludDhfdCkoKFJkVmFsID4+IDApICYgMHhGRlUpOwogICB9CiB9CiAjZW5kaWYgLyogZGVmaW5lZCAoVVNCKSAqLwo=