ZGlmZiAtLWdpdCBhL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjMyNS5jIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzI1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM2Nzk5MQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjMyNS5jCkBAIC0wLDAgKzEsMTI4NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE0CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgICBkY2xfcG1pYzYzMjUuYworICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICAgIE1PTFkgU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICAgIFRoaXMgZmlsZSBpcyBmb3IgUE1JQyA2MzI1CisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoRlBHQV9DVFApCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInJlZ19iYXNlLmgiCisjaW5jbHVkZSAiZHJ2X2NvbW0uaCIKKyNpbmNsdWRlICJpbml0LmgiCisjaW5jbHVkZSAiZGNsLmgiCisjaW5jbHVkZSAiZGNsX3BtdV9zdy5oIgorI2luY2x1ZGUgInBtaWNfd3JhcC5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAidXNfdGltZXIuaCIKKyNpbmNsdWRlICJkaGxfdHJhY2UuaCIKKyNpZiBkZWZpbmVkKFBNSUNfNjMyNV9SRUdfQVBJKQorCisvLyBTdGFydCBQTUlDX1VOSVRfVEVTVAorLy8jZGVmaW5lIFBNSUNfVU5JVF9URVNUCisvLyBBUk0gU2VjdGlvbiBSVy9STy9aSSBVc2UgSW50ZXJuYWwgU1JBTQorLy8jZGVmaW5lIFBNSUNfSU5URVJOQUxfU1JBTQorI2lmICFkZWZpbmVkKF9fRlVFX18pCisjZGVmaW5lIFNBVkVBTkRTRVRJUlFNQVNLKCkgICAgICBTYXZlQW5kU2V0SVJRTWFzaygpCisjZGVmaW5lIFJFU1RPUkVJUlFNQVNLKG1hc2spICAgICBSZXN0b3JlSVJRTWFzayhtYXNrKQorI2Vsc2UgLypkZWZpbmVkKF9fRlVFX18pKi8KKyNkZWZpbmUgU0FWRUFORFNFVElSUU1BU0soKSAgICAgIDAKKyNkZWZpbmUgUkVTVE9SRUlSUU1BU0sobWFzaykgICAgIHt9CisjZW5kaWYgLypkZWZpbmVkKF9fRlVFX18pKi8KKworI2RlZmluZSBCQU5LU19OVU0gICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUE1JQzYzMjVfTUFYX1JFR19OVU0gICAgICAgICAgICAgICAgMHgwRjUwIC8vIDB4MDAwMH4weDBGNDgKKy8vI2RlZmluZSBQTUlDX01BWF9SRUdfTlVNICAgICAgICAgICAgICAgIDB4NDBGRiAvLyBSZWdpc3RlciBCVUNLMSwgUmVnaXN0ZXIgQU5BTERPLCBSZWdpc3RlciBESUdMRE8gKDB4MDQ3MCkKKworI2RlZmluZSBNVDYzMjVfSFdfQ0lEX0UxICAgICAgICAgICAgMHgyNTEwCisjZGVmaW5lIE1UNjMyNV9IV19DSURfRTIgICAgICAgICAgICAweDI1MjAKKyNkZWZpbmUgTVQ2MzI1X0hXX0NJRF9FMyAgICAgICAgICAgIDB4MjUzMAorI2RlZmluZSBNVDYzMjVfU1dfQ0lEX0UxICAgICAgICAgICAgMHgyNTEwCisjZGVmaW5lIE1UNjMyNV9TV19DSURfRTIgICAgICAgICAgICAweDI1MjAKKyNkZWZpbmUgTVQ2MzI1X1NXX0NJRF9FMyAgICAgICAgICAgIDB4MjUzMAorCisjZGVmaW5lIFBNSUNfUkVBRCAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBNSUNfV1JJVEUgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgUE1JQ182MzI1ICAgICAgICAgICAgICAgICAgIDB4NjMyNQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgRXhwb3J0ZWQgQVBJcyAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitleHRlcm4ga2FsX2Jvb2wgcG1pYzYzMjVfcmVnX3dyaXRlKGthbF91aW50MTYgcmVnLCBrYWxfdWludDE2IHZhbCk7CitleHRlcm4ga2FsX2Jvb2wgcG1pYzYzMjVfcmVnX3JlYWQoa2FsX3VpbnQxNiByZWcsIGthbF91aW50MTYgKnBWYWwpOworCitleHRlcm4gRENMX0JPT0wgZGNsX3BtaWNfaW5pdF9kb25lX3F1ZXJ5KHZvaWQpOwordHlwZWRlZiBlbnVtCit7CisgICAgQVVYQURDX1JFQURfSU5JVCA9IDAsCisgICAgQVVYQURDX1JFQURfUkVRVUVTVCA9IDEsCisgICAgQVVYQURDX1JFQURfUkVBRFkgPSAyLAorICAgIEFVWEFEQ19SRUFEX0JVU1kgPSAzLAorICAgIEFVWEFEQ19SRUFEX0RBVEEgPSA0Cit9QVVYQURDX0ZTTTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIGNvbW1hbmRfZmxhZzsKKyAgICBrYWxfdWludDMyIHJlZ19iZWZvcmVfd3JpdGU7CisgICAga2FsX3VpbnQzMiB3cml0ZV92YWx1ZTsKKyAgICBrYWxfdWludDMyIGFkZHJlc3Nfb2Zmc2V0OworICAgIGthbF91aW50MzIgcmVnX21hc2s7CisgICAga2FsX3VpbnQzMiByZWdfc2hpZnQ7CisgICAga2FsX3VpbnQzMiByZWdfYWRkcjsKKyAgICBrYWxfdWludDMyIHJlZ19kYXRhOworfVBNSUNfUkVHX0xPRzsKKworQVVYQURDX0ZTTSBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfSU5JVDsKK1BNSUNfUkVHX0xPRyBwbWljX3JlZ19sb2c7CisKKy8vI2lmIChkZWZpbmVkKF9fTVRLX1RBUkdFVF9fKSAmJiBkZWZpbmVkKFBNSUNfSU5URVJOQUxfU1JBTSkpCisvL19fYXR0cmlidXRlX18gKCh6ZXJvX2luaXQpKSAKKy8vI2VuZGlmIC8qIF9fTVRLX1RBUkdFVF9fICovCitrYWxfdWludDggcG1pYzYzMjVfaHdfdmVyc2lvbjsKK2thbF91aW50OCBwbWljNjMyNV9zd192ZXJzaW9uOwora2FsX3VpbnQxNiBwbWljNjMyNV9yZWdbUE1JQzYzMjVfTUFYX1JFR19OVU1dOworRENMX0JPT0wgcG1pY19pbml0X2RvbmUgPSBEQ0xfRkFMU0U7CisKK2NvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSBwbWljNjMyNV9mbGFnc190YWJsZVtdID0gCit7CisgICAge01UNjMyNV9IV0NJRCwJCU1UNjMyNV9IV0NJRF9NQVNLLAkJTVQ2MzI1X0hXQ0lEX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X1NXQ0lELAkJTVQ2MzI1X1NXQ0lEX01BU0ssCQlNVDYzMjVfU1dDSURfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfVlBBX0FOQV9DT04xLAkJTVQ2MzI1X1JHX1ZQQV9NT0RFU0VUX01BU0ssCQlNVDYzMjVfUkdfVlBBX01PREVTRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfVlJGMThfMF9BTkFfQ09OMSwJCU1UNjMyNV9SR19WUkYxOF8wX01PREVTRVRfTUFTSywJCU1UNjMyNV9SR19WUkYxOF8wX01PREVTRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfVlJGMThfMF9DT043LAkJTVQ2MzI1X1ZSRjE4XzBfRU5fQ1RSTF9NQVNLLAkJTVQ2MzI1X1ZSRjE4XzBfRU5fQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjMyNV9WUkYxOF8wX0NPTjcsCQlNVDYzMjVfVlJGMThfMF9WT1NFTF9DVFJMX01BU0ssCQlNVDYzMjVfVlJGMThfMF9WT1NFTF9DVFJMX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X1ZSRjE4XzBfQ09OOCwJCU1UNjMyNV9WUkYxOF8wX0VOX1NFTF9NQVNLLAkJTVQ2MzI1X1ZSRjE4XzBfRU5fU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X1ZSRjE4XzBfQ09OOCwJCU1UNjMyNV9WUkYxOF8wX1ZPU0VMX1NFTF9NQVNLLAkJTVQ2MzI1X1ZSRjE4XzBfVk9TRUxfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X1ZSRjE4XzBfQ09OOSwJCU1UNjMyNV9WUkYxOF8wX0VOX01BU0ssCQlNVDYzMjVfVlJGMThfMF9FTl9TSElGVCwJCX0sCisgICAge01UNjMyNV9WUkYxOF8wX0NPTjExLAkJTVQ2MzI1X1ZSRjE4XzBfVk9TRUxfTUFTSywJCU1UNjMyNV9WUkYxOF8wX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X1ZSRjE4XzBfQ09OMTIsCQlNVDYzMjVfVlJGMThfMF9WT1NFTF9PTl9NQVNLLAkJTVQ2MzI1X1ZSRjE4XzBfVk9TRUxfT05fU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfVlJGMThfMF9DT04xMywJCU1UNjMyNV9WUkYxOF8wX1ZPU0VMX1NMRUVQX01BU0ssCQlNVDYzMjVfVlJGMThfMF9WT1NFTF9TTEVFUF9TSElGVCwJCX0sCisgICAge01UNjMyNV9WUkYxOF8wX0NPTjE4LAkJTVQ2MzI1X1ZSRjE4XzBfVlNMRUVQX0VOX01BU0ssCQlNVDYzMjVfVlJGMThfMF9WU0xFRVBfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfVlBBX0NPTjgsCQlNVDYzMjVfVlBBX0VOX1NFTF9NQVNLLAkJTVQ2MzI1X1ZQQV9FTl9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfVlBBX0NPTjgsCQlNVDYzMjVfVlBBX1ZPU0VMX1NFTF9NQVNLLAkJTVQ2MzI1X1ZQQV9WT1NFTF9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfVlBBX0NPTjksCQlNVDYzMjVfVlBBX0VOX01BU0ssCQlNVDYzMjVfVlBBX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X1ZQQV9DT04xMSwJCU1UNjMyNV9WUEFfVk9TRUxfTUFTSywJCU1UNjMyNV9WUEFfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfVlBBX0NPTjEyLAkJTVQ2MzI1X1ZQQV9WT1NFTF9PTl9NQVNLLAkJTVQ2MzI1X1ZQQV9WT1NFTF9PTl9TSElGVCwJCX0sCisgICAge01UNjMyNV9WUEFfQ09OMTMsCQlNVDYzMjVfVlBBX1ZPU0VMX1NMRUVQX01BU0ssCQlNVDYzMjVfVlBBX1ZPU0VMX1NMRUVQX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X0xET19DT04wLAkJTVQ2MzI1X1JHX1ZUQ1hPMF9NT0RFX1NFVF9NQVNLLAkJTVQ2MzI1X1JHX1ZUQ1hPMF9NT0RFX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fQ09OMCwJCU1UNjMyNV9SR19WVENYTzBfRU5fTUFTSywJCU1UNjMyNV9SR19WVENYTzBfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjAsCQlNVDYzMjVfUkdfVlRDWE8wX01PREVfQ1RSTF9NQVNLLAkJTVQ2MzI1X1JHX1ZUQ1hPMF9NT0RFX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjAsCQlNVDYzMjVfUkdfVlRDWE8wX09OX0NUUkxfTUFTSywJCU1UNjMyNV9SR19WVENYTzBfT05fQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fQ09OMCwJCU1UNjMyNV9SR19WVENYTzBfU1JDTEtfTU9ERV9TRUxfTUFTSywJCU1UNjMyNV9SR19WVENYTzBfU1JDTEtfTU9ERV9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjAsCQlNVDYzMjVfUUlfVlRDWE8wX01PREVfTUFTSywJCU1UNjMyNV9RSV9WVENYTzBfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fQ09OMSwJCU1UNjMyNV9SR19WVENYTzFfTU9ERV9TRVRfTUFTSywJCU1UNjMyNV9SR19WVENYTzFfTU9ERV9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjEsCQlNVDYzMjVfUkdfVlRDWE8xX0VOX01BU0ssCQlNVDYzMjVfUkdfVlRDWE8xX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X0xET19DT04xLAkJTVQ2MzI1X1JHX1ZUQ1hPMV9NT0RFX0NUUkxfTUFTSywJCU1UNjMyNV9SR19WVENYTzFfTU9ERV9DVFJMX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X0xET19DT04xLAkJTVQ2MzI1X1JHX1ZUQ1hPMV9PTl9DVFJMX01BU0ssCQlNVDYzMjVfUkdfVlRDWE8xX09OX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjEsCQlNVDYzMjVfUkdfVlRDWE8xX1NSQ0xLX01PREVfU0VMX01BU0ssCQlNVDYzMjVfUkdfVlRDWE8xX1NSQ0xLX01PREVfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X0xET19DT04xLAkJTVQ2MzI1X1FJX1ZUQ1hPMV9NT0RFX01BU0ssCQlNVDYzMjVfUUlfVlRDWE8xX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjgsCQlNVDYzMjVfUkdfVlJGMThfMV9NT0RFX1NFVF9NQVNLLAkJTVQ2MzI1X1JHX1ZSRjE4XzFfTU9ERV9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjgsCQlNVDYzMjVfUkdfVlJGMThfMV9FTl9NQVNLLAkJTVQ2MzI1X1JHX1ZSRjE4XzFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjgsCQlNVDYzMjVfUkdfVlJGMThfMV9NT0RFX0NUUkxfTUFTSywJCU1UNjMyNV9SR19WUkYxOF8xX01PREVfQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fQ09OOCwJCU1UNjMyNV9SR19WUkYxOF8xX09OX0NUUkxfTUFTSywJCU1UNjMyNV9SR19WUkYxOF8xX09OX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjgsCQlNVDYzMjVfUkdfVlJGMThfMV9TUkNMS19NT0RFX1NFTF9NQVNLLAkJTVQ2MzI1X1JHX1ZSRjE4XzFfU1JDTEtfTU9ERV9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjgsCQlNVDYzMjVfUUlfVlJGMThfMV9NT0RFX01BU0ssCQlNVDYzMjVfUUlfVlJGMThfMV9NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X0xET19DT044LAkJTVQ2MzI1X1JHX1ZSRjE4XzFfU1JDTEtfRU5fU0VMX01BU0ssCQlNVDYzMjVfUkdfVlJGMThfMV9TUkNMS19FTl9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjE3LAkJTVQ2MzI1X1JHX1ZTSU0xX01PREVfU0VUX01BU0ssCQlNVDYzMjVfUkdfVlNJTTFfTU9ERV9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjE3LAkJTVQ2MzI1X1JHX1ZTSU0xX0VOX01BU0ssCQlNVDYzMjVfUkdfVlNJTTFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjE3LAkJTVQ2MzI1X1JHX1ZTSU0xX01PREVfQ1RSTF9NQVNLLAkJTVQ2MzI1X1JHX1ZTSU0xX01PREVfQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fQ09OMTcsCQlNVDYzMjVfUkdfVlNJTTFfT05fQ1RSTF9NQVNLLAkJTVQ2MzI1X1JHX1ZTSU0xX09OX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjE3LAkJTVQ2MzI1X1JHX1ZTSU0xX1NSQ0xLX01PREVfU0VMX01BU0ssCQlNVDYzMjVfUkdfVlNJTTFfU1JDTEtfTU9ERV9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjE3LAkJTVQ2MzI1X1FJX1ZTSU0xX01PREVfTUFTSywJCU1UNjMyNV9RSV9WU0lNMV9NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X0xET19DT04xNywJCU1UNjMyNV9SR19WU0lNMV9TVEJURF9NQVNLLAkJTVQ2MzI1X1JHX1ZTSU0xX1NUQlREX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X0xET19DT04xNywJCU1UNjMyNV9SR19WU0lNMV9TUkNMS19FTl9TRUxfTUFTSywJCU1UNjMyNV9SR19WU0lNMV9TUkNMS19FTl9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjE4LAkJTVQ2MzI1X1JHX1ZTSU0yX01PREVfU0VUX01BU0ssCQlNVDYzMjVfUkdfVlNJTTJfTU9ERV9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjE4LAkJTVQ2MzI1X1JHX1ZTSU0yX0VOX01BU0ssCQlNVDYzMjVfUkdfVlNJTTJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjE4LAkJTVQ2MzI1X1JHX1ZTSU0yX01PREVfQ1RSTF9NQVNLLAkJTVQ2MzI1X1JHX1ZTSU0yX01PREVfQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fQ09OMTgsCQlNVDYzMjVfUkdfVlNJTTJfT05fQ1RSTF9NQVNLLAkJTVQ2MzI1X1JHX1ZTSU0yX09OX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjE4LAkJTVQ2MzI1X1JHX1ZTSU0yX1NSQ0xLX01PREVfU0VMX01BU0ssCQlNVDYzMjVfUkdfVlNJTTJfU1JDTEtfTU9ERV9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjE4LAkJTVQ2MzI1X1FJX1ZTSU0yX01PREVfTUFTSywJCU1UNjMyNV9RSV9WU0lNMl9NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X0xET19DT04xOCwJCU1UNjMyNV9SR19WU0lNMl9TVEJURF9NQVNLLAkJTVQ2MzI1X1JHX1ZTSU0yX1NUQlREX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X0xET19DT04xOCwJCU1UNjMyNV9SR19WU0lNMl9TUkNMS19FTl9TRUxfTUFTSywJCU1UNjMyNV9SR19WU0lNMl9TUkNMS19FTl9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjE4LAkJTVQ2MzI1X1FJX1ZTSU0yX1NUQl9NQVNLLAkJTVQ2MzI1X1FJX1ZTSU0yX1NUQl9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fQ09OMTgsCQlNVDYzMjVfUUlfVlNJTTJfRU5fTUFTSywJCU1UNjMyNV9RSV9WU0lNMl9FTl9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fQ09OMTksCQlNVDYzMjVfUkdfVk1JUElfTU9ERV9TRVRfTUFTSywJCU1UNjMyNV9SR19WTUlQSV9NT0RFX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fQ09OMTksCQlNVDYzMjVfUkdfVk1JUElfRU5fTUFTSywJCU1UNjMyNV9SR19WTUlQSV9FTl9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fQ09OMTksCQlNVDYzMjVfUkdfVk1JUElfTU9ERV9DVFJMX01BU0ssCQlNVDYzMjVfUkdfVk1JUElfTU9ERV9DVFJMX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X0xET19DT04xOSwJCU1UNjMyNV9SR19WTUlQSV9PTl9DVFJMX01BU0ssCQlNVDYzMjVfUkdfVk1JUElfT05fQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fQ09OMTksCQlNVDYzMjVfUkdfVk1JUElfU1JDTEtfTU9ERV9TRUxfTUFTSywJCU1UNjMyNV9SR19WTUlQSV9TUkNMS19NT0RFX1NFTF9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fQ09OMTksCQlNVDYzMjVfUUlfVk1JUElfTU9ERV9NQVNLLAkJTVQ2MzI1X1FJX1ZNSVBJX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjE5LAkJTVQ2MzI1X1JHX1ZNSVBJX1NUQlREX01BU0ssCQlNVDYzMjVfUkdfVk1JUElfU1RCVERfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfTERPX0NPTjE5LAkJTVQ2MzI1X1JHX1ZNSVBJX1NSQ0xLX0VOX1NFTF9NQVNLLAkJTVQ2MzI1X1JHX1ZNSVBJX1NSQ0xLX0VOX1NFTF9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fQ09OMTksCQlNVDYzMjVfUUlfVk1JUElfRU5fTUFTSywJCU1UNjMyNV9RSV9WTUlQSV9FTl9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fVkNPTjksCQlNVDYzMjVfUkdfVlNJTTJfVk9TRUxfTUFTSywJCU1UNjMyNV9SR19WU0lNMl9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fVkNPTjksCQlNVDYzMjVfUkdfVlNJTTFfVk9TRUxfTUFTSywJCU1UNjMyNV9SR19WU0lNMV9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjMyNV9MRE9fT0NGQjEsCQlNVDYzMjVfUkdfVlNJTTJfT0NGQl9FTl9NQVNLLAkJTVQ2MzI1X1JHX1ZTSU0yX09DRkJfRU5fU0hJRlQsCQl9LCAgICAKKyAgICB7TVQ2MzI1X0xET19PQ0ZCMSwJCU1UNjMyNV9SR19WU0lNMV9PQ0ZCX0VOX01BU0ssCQlNVDYzMjVfUkdfVlNJTTFfT0NGQl9FTl9TSElGVCwJCX0sICAgIAorICAgIHtNVDYzMjVfU1BLX0NPTjgsCQlNVDYzMjVfUkdfU1BLX0NDT0RFX01BU0ssCQlNVDYzMjVfUkdfU1BLX0NDT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X1NQS19DT044LAkJTVQ2MzI1X1JHX1NQS19FTl9WSUVXX1ZDTV9NQVNLLAkJTVQ2MzI1X1JHX1NQS19FTl9WSUVXX1ZDTV9TSElGVCwJCX0sCisgICAge01UNjMyNV9TUEtfQ09OOCwJCU1UNjMyNV9SR19TUEtfRkJSQ19FTl9NQVNLLAkJTVQ2MzI1X1JHX1NQS19GQlJDX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X1NQS19DT045LAkJTVQ2MzI1X1NQS19URVNUX01PREUwX01BU0ssCQlNVDYzMjVfU1BLX1RFU1RfTU9ERTBfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfU1BLX0NPTjEwLAkJTVQ2MzI1X1NQS19URF9ET05FX01BU0ssCQlNVDYzMjVfU1BLX1REX0RPTkVfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfQVVYQURDX1JRU1QxX1NFVCwJCU1UNjMyNV9BVVhBRENfUlFTVDFfU0VUX01BU0ssCQlNVDYzMjVfQVVYQURDX1JRU1QxX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMyNV9BVVhBRENfUlFTVDFfQ0xSLAkJTVQ2MzI1X0FVWEFEQ19SUVNUMV9DTFJfTUFTSywJCU1UNjMyNV9BVVhBRENfUlFTVDFfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X0FVWEFEQ19BREMxNSwJCU1UNjMyNV9SR19BRENfT1VUX01EX01BU0ssCQlNVDYzMjVfUkdfQURDX09VVF9NRF9TSElGVCwJCX0sCisgICAge01UNjMyNV9BVVhBRENfQURDMTYsCQlNVDYzMjVfUkdfQURDX1JEWV9NRF9NQVNLLAkJTVQ2MzI1X1JHX0FEQ19SRFlfTURfU0hJRlQsCQl9LAorICAgIHtNVDYzMjVfQVVYQURDX0NPTjIwLAkJTVQ2MzI1X1JHX01EX1JRU1RfTUFTSywJCU1UNjMyNV9SR19NRF9SUVNUX1NISUZULAkJfSwKKyAgICB7TVQ2MzI1X0FVWEFEQ19DT04yNywJCU1UNjMyNV9SR19WUkVGMThfRU5CX01EX01BU0ssCQlNVDYzMjVfUkdfVlJFRjE4X0VOQl9NRF9TSElGVCwJCX0sCit9OworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICAgICAgICAgICAgICAgICAgV1JJVEUgQVBJcyAgICAgICAgICAgICAgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBXcml0ZSBXaG9sZSBCeXRlcwordm9pZCBkY2xfcG1pYzYzMjVfYnl0ZV93cml0ZShEQ0xfVUlOVDE2IGFkZHIsIERDTF9VSU5UMTYgdmFsKQoreworICAgIGthbF91aW50MzIgc2F2ZWRNYXNrID0gMDsKKyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKQorCXNhdmVkTWFzayA9IFNhdmVBbmRTZXRJUlFNYXNrKCk7CisjZW5kaWYgLy8jaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykgICAgIAorICAgIAorI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisgICAgcG1pYzYzMjVfcmVnW2FkZHJdID0gdmFsOworICAgICAgICAgICAgICAgICAKKyAgICBEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIGFkZHIsIHZhbCwgMHgwMCk7CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykgICAgCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uc3RhcnRfdGltZSwgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykJCisgICAgUmVzdG9yZUlSUU1hc2soc2F2ZWRNYXNrKTsKKyNlbmRpZiAvLyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKSAgIAorfQorCisvLyBXcml0ZSByZWdpc3RlciBmaWVsZAordm9pZCBkY2xfcG1pYzYzMjVfZmllbGRfd3JpdGUoUE1JQzYzMjVfRkxBR1NfTElTVF9FTlVNIGZsYWcsIERDTF9VSU5UMTYgc2VsKQoreworICAgIGNvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSAqcFRhYmxlID0gcG1pYzYzMjVfZmxhZ3NfdGFibGU7CisgICAga2FsX3VpbnQzMiBzYXZlZE1hc2sgPSAwOworI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCisJc2F2ZWRNYXNrID0gU2F2ZUFuZFNldElSUU1hc2soKTsKKyNlbmRpZiAvLyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKSAgCisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworICAgIHBtaWNfcmVnX2xvZy5jb21tYW5kX2ZsYWcgPSBmbGFnOworICAgIHBtaWNfcmVnX2xvZy5yZWdfYmVmb3JlX3dyaXRlID0gcG1pYzYzMjVfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdOworCisgICAgcG1pYzYzMjVfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdICY9IH4ocFRhYmxlW2ZsYWddLm1hc2sgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKyAgICBwbWljNjMyNV9yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gfD0gKChrYWxfdWludDE2KXNlbCA8PCBwVGFibGVbZmxhZ10uc2hpZnQpOyAgICAKKyAgICAKKyAgICBEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWM2MzI1X3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSwgMHgwMCk7CisKKyAgICBwbWljX3JlZ19sb2cud3JpdGVfdmFsdWUgPSBzZWw7CisgICAgcG1pY19yZWdfbG9nLmFkZHJlc3Nfb2Zmc2V0ID0gcFRhYmxlW2ZsYWddLm9mZnNldDsKKyAgICBwbWljX3JlZ19sb2cucmVnX21hc2sgPSBwVGFibGVbZmxhZ10ubWFzazsKKyAgICBwbWljX3JlZ19sb2cucmVnX3NoaWZ0ID0gcFRhYmxlW2ZsYWddLnNoaWZ0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfYWRkciA9IHBUYWJsZVtmbGFnXS5vZmZzZXQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19kYXRhID0gcG1pYzYzMjVfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpICAgIAorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLnN0YXJ0X3RpbWUsIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5lbmRfdGltZSk7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCQorICAgIFJlc3RvcmVJUlFNYXNrKHNhdmVkTWFzayk7CisjZW5kaWYgLy8jaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykgIAorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgICBSRUFEIEFQSXMgICAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIFJlYWQgV2hvbGUgQnl0ZXMKK0RDTF9VSU5UMTYgZGNsX3BtaWM2MzI1X2J5dGVfcmV0dXJuKERDTF9VSU5UMTYgYWRkcikKK3sKKyAgICBEQ0xfVUlOVDE2IHJlZ190ZW1wOworICAgIGthbF91aW50MzIgc2F2ZWRNYXNrID0gMDsgICAgCisgICAgCisjaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykKKwlzYXZlZE1hc2sgPSBTYXZlQW5kU2V0SVJRTWFzaygpOworI2VuZGlmIC8vI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pIAorCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisgIAorICAgIERydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCAoRENMX1VJTlQzMilhZGRyLCAweDAwLCAmcmVnX3RlbXApOworCisgICAgcG1pYzYzMjVfcmVnW2FkZHJdID0gcmVnX3RlbXA7CisgIAorI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKSAgICAKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5zdGFydF90aW1lLCBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZW5kX3RpbWUpOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKQkKKyAgICBSZXN0b3JlSVJRTWFzayhzYXZlZE1hc2spOworI2VuZGlmIC8vI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pICAgCisKKyAgICByZXR1cm4gcmVnX3RlbXA7Cit9CisKKy8vIFJlYWQgcmVnaXN0ZXIgZmllbGQKK0RDTF9VSU5UMTYgZGNsX3BtaWM2MzI1X2ZpZWxkX3JlYWQoUE1JQzYzMjVfRkxBR1NfTElTVF9FTlVNIGZsYWcpCit7CisgICAgY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZICpwVGFibGUgPSBwbWljNjMyNV9mbGFnc190YWJsZTsKKyAgICBrYWxfdWludDMyIHNhdmVkTWFzayA9IDA7CisgICAgRENMX1VJTlQxNiByZWdfcmV0dXJuID0gMDsKKworI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCisJc2F2ZWRNYXNrID0gU2F2ZUFuZFNldElSUU1hc2soKTsKKyNlbmRpZiAvLyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKSAKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisgICAgRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1JFQUQsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIDB4MDAsICZwbWljNjMyNV9yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0pOworCisgICAgcmVnX3JldHVybiA9ICgocG1pYzYzMjVfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdICYgKHBUYWJsZVtmbGFnXS5tYXNrIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCkpID4+IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisgICAgCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpICAgIAorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLnN0YXJ0X3RpbWUsIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5lbmRfdGltZSk7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCQorICAgIFJlc3RvcmVJUlFNYXNrKHNhdmVkTWFzayk7CisjZW5kaWYgLy8jaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykgICAgCisKKyAgICByZXR1cm4gcmVnX3JldHVybjsgICAKK30KKworCisvLyBFeHBvcnRlZCBmb3IgRU0gdXNlZAordm9pZCBwbWljNjMyNV9FTV9yZWdfd3JpdGUoa2FsX3VpbnQxNiByZWcsIGthbF91aW50MTYgdmFsKXsKKyAgICBkY2xfcG1pYzYzMjVfYnl0ZV93cml0ZShyZWcsIHZhbCk7Cit9CisKK2thbF91aW50MTYgcG1pYzYzMjVfRU1fcmVnX3JlYWQoa2FsX3VpbnQxNiByZWcpeworICAgIHJldHVybiAgZGNsX3BtaWM2MzI1X2J5dGVfcmV0dXJuKHJlZyk7Cit9CisKK1BNVV9DVFJMX1BNSUNfRUNPX1ZFUlNJT05fRU5VTSBwbWljNjMyNV9nZXRfSFdfRUNPX3ZlcnNpb24odm9pZCkKK3sKKyAgICByZXR1cm4gcG1pYzYzMjVfaHdfdmVyc2lvbjsKK30KKworUE1VX0NUUkxfUE1JQ19FQ09fVkVSU0lPTl9FTlVNIHBtaWM2MzI1X2dldF9TV192ZXJzaW9uKHZvaWQpCit7CisgICAgcmV0dXJuIHBtaWM2MzI1X3N3X3ZlcnNpb247Cit9CisKKy8qCitjb25zdCBEQ0xfVUlOVDMyIHZwYV92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF8wMF81MDAwMDBfViwgICBQTVVfVk9MVF8wMF81NTAwMDBfViwgICBQTVVfVk9MVF8wMF82MDAwMDBfViwgICBQTVVfVk9MVF8wMF82NTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wMF83MDAwMDBfViwgICBQTVVfVk9MVF8wMF83NTAwMDBfViwgICBQTVVfVk9MVF8wMF84MDAwMDBfViwgICBQTVVfVk9MVF8wMF84NTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wMF85MDAwMDBfViwgICBQTVVfVk9MVF8wMF85NTAwMDBfViwgICBQTVVfVk9MVF8wMV8wMDAwMDBfViwgICBQTVVfVk9MVF8wMV8wNTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wMV8xMDAwMDBfViwgICBQTVVfVk9MVF8wMV8xNTAwMDBfViwgICBQTVVfVk9MVF8wMV8yMDAwMDBfViwgICBQTVVfVk9MVF8wMV8yNTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wMV8zMDAwMDBfViwgICBQTVVfVk9MVF8wMV8zNTAwMDBfViwgICBQTVVfVk9MVF8wMV80MDAwMDBfViwgICBQTVVfVk9MVF8wMV80NTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wMV81MDAwMDBfViwgICBQTVVfVk9MVF8wMV81NTAwMDBfViwgICBQTVVfVk9MVF8wMV82MDAwMDBfViwgICBQTVVfVk9MVF8wMV82NTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wMV83MDAwMDBfViwgICBQTVVfVk9MVF8wMV83NTAwMDBfViwgICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICBQTVVfVk9MVF8wMV84NTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wMV85MDAwMDBfViwgICBQTVVfVk9MVF8wMV85NTAwMDBfViwgICBQTVVfVk9MVF8wMl8wMDAwMDBfViwgICBQTVVfVk9MVF8wMl8wNTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wMl8xMDAwMDBfViwgICBQTVVfVk9MVF8wMl8xNTAwMDBfViwgICBQTVVfVk9MVF8wMl8yMDAwMDBfViwgICBQTVVfVk9MVF8wMl8yNTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wMl8zMDAwMDBfViwgICBQTVVfVk9MVF8wMl8zNTAwMDBfViwgICBQTVVfVk9MVF8wMl80MDAwMDBfViwgICBQTVVfVk9MVF8wMl80NTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wMl81MDAwMDBfViwgICBQTVVfVk9MVF8wMl81NTAwMDBfViwgICBQTVVfVk9MVF8wMl82MDAwMDBfViwgICBQTVVfVk9MVF8wMl82NTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wMl83MDAwMDBfViwgICBQTVVfVk9MVF8wMl83NTAwMDBfViwgICBQTVVfVk9MVF8wMl84MDAwMDBfViwgICBQTVVfVk9MVF8wMl84NTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wMl85MDAwMDBfViwgICBQTVVfVk9MVF8wMl85NTAwMDBfViwgICBQTVVfVk9MVF8wM18wMDAwMDBfViwgICBQTVVfVk9MVF8wM18wNTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wM18xMDAwMDBfViwgICBQTVVfVk9MVF8wM18xNTAwMDBfViwgICBQTVVfVk9MVF8wM18yMDAwMDBfViwgICBQTVVfVk9MVF8wM18yNTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wM18zMDAwMDBfViwgICBQTVVfVk9MVF8wM18zNTAwMDBfViwgICBQTVVfVk9MVF8wM180MDAwMDBfViwgICBQTVVfVk9MVF8wM180NTAwMDBfViwgICAKKyAgICBQTVVfVk9MVF8wM181MDAwMDBfViwgICBQTVVfVk9MVF8wM181NTAwMDBfViwgICBQTVVfVk9MVF8wM182MDAwMDBfViwgICBQTVVfVk9MVF8wM182NTAwMDBfViwgICAKKworfTsKKyovCisKK2NvbnN0IERDTF9VSU5UMzIgdnBhX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUXzAwXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDBfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICBQTVVfVk9MVF8wMF83MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAwXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisgICAgUE1VX1ZPTFRfMDBfOTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV8wMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgIFBNVV9WT0xUXzAxXzEwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfMjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICBQTVVfVk9MVF8wMV8zMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisgICAgUE1VX1ZPTFRfMDFfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV82MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgIFBNVV9WT0xUXzAxXzcwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICBQTVVfVk9MVF8wMV85MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzAwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsIAorICAgIFBNVV9WT0xUXzAyXzEwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICBQTVVfVk9MVF8wMl8zMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisgICAgUE1VX1ZPTFRfMDJfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl82MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgIFBNVV9WT0xUXzAyXzcwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfODAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICBQTVVfVk9MVF8wMl85MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisgICAgUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wM18yMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgIFBNVV9WT0xUXzAzXzMwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfNDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICBQTVVfVk9MVF8wM181MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisKK307CisKKy8vIDMnYjAwMTogMS42NSwgMydiMDEwOiAxLjggViwgMydiMDExOiAxLjg1IFYsIDMnYjEwMTogMi43NVYsIDMnYjExMDogMy4wIFYsIDMnYjExMTogMy4xIFYKK2NvbnN0IERDTF9VSU5UMzIgdnNpbTFfdm9zZWxbXSA9Cit7CisgICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAgICAgUE1VX1ZPTFRfMDFfNjUwMDAwX1YsICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICBQTVVfVk9MVF8wMV84NTAwMDBfViwgIAorICAgIFBNVV9WT0xUX0lOVkFMSUQsICAgICAgIFBNVV9WT0xUXzAyXzc1MDAwMF9WLCAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgUE1VX1ZPTFRfMDNfMTAwMDAwX1YsCit9OworCitQTVVfUEFSQU1FVEVSX1RBQkxFX0VOVFJZIHBtdV9wYXJhbWV0ZXJfdGFibGVbXT0KK3sKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWUEFfU1cpLAkJICAgIHZwYV92b3NlbCwJCSAgICBOVUxMLAkgICAgCQlHRVRBUlJOVU0odnBhX3Zvc2VsKQkJfSwgICAgCisJe0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlNJTTEpLAkJICAgIHZzaW0xX3Zvc2VsLAkJTlVMTCwJICAgIAkJR0VUQVJSTlVNKHZzaW0xX3Zvc2VsKQkJfSwKKyAgICB7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWU0lNMiksCQkgICAgdnNpbTFfdm9zZWwsCQlOVUxMLCAgIAkJCUdFVEFSUk5VTSh2c2ltMV92b3NlbCkJICAgIH0sICAgICAgICAgICAgCit9OworCitleHRlcm4gUE1VX0NPTlRST0xfSEFORExFUiBwbXVfY29udHJvbF9oYW5kbGVyOworCitEQ0xfVUlOVDE2IHBtdV9wYXJhbWV0ZXJfc2l6ZSA9IDA7CisKK0RDTF9TVEFUVVMgUE1JQzYzMjVfY29udHJvbF9oYW5kbGVyKERDTF9IQU5ETEUgaGFuZGxlLERDTF9DVFJMX0NNRCBjbWQsRENMX0NUUkxfREFUQV9UICpkYXRhKQoreworICAgIERDTF9VSU5UMTYJcmVnVmFsOworICAgIERDTF9JTlQzMglyZXR1cm5fdmFsID0gU1RBVFVTX0ZBSUw7CisKKyAgICBzd2l0Y2goY21kKQorICAgIHsKKyAgICAgICAgY2FzZSBMRE9fQlVDS19TRVRfRU46CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiAqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tTZXRFbik7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4XzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMjVfZmllbGRfd3JpdGUoTVQ2MzI1X1ZSRjE4XzBfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxOF8yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzI1X2ZpZWxkX3dyaXRlKE1UNjMyNV9SR19WUkYxOF8xX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMyNV9maWVsZF93cml0ZShNVDYzMjVfUkdfVlNJTTFfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzI1X2ZpZWxkX3dyaXRlKE1UNjMyNV9SR19WU0lNMl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVk1JUEk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMjVfZmllbGRfd3JpdGUoTVQ2MzI1X1JHX1ZNSVBJX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUEFfU1c6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMjVfZmllbGRfd3JpdGUoTVQ2MzI1X1ZQQV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIExET19CVUNLX1NFVF9MUF9NT0RFX1NFVDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0xQX01PREVfU0VUICpwTGRvQnVja0N0cmwgPSYgKGRhdGEtPnJQTVVMZG9CdWNrU2V0THBNb2RlU2V0KTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMyNV9maWVsZF93cml0ZShNVDYzMjVfUkdfVlNJTTFfTU9ERV9TRVQsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMyNV9maWVsZF93cml0ZShNVDYzMjVfUkdfVlNJTTJfTU9ERV9TRVQsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxOF8yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzI1X2ZpZWxkX3dyaXRlKE1UNjMyNV9SR19WUkYxOF8xX01PREVfU0VULCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgTERPX0JVQ0tfU0VUX0xQX1NFTDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0xQX1NFTCAqcExkb0J1Y2tDdHJsID0mIChkYXRhLT5yUE1VTGRvQnVja1NldExwU2VsKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAxJ2IwOiBTVyBjb250cm9sIGJ5IFZTSU0xX01PREVfU0VULCAxJ2IxOiBIVyBjb250cm9sIGJ5IFNSQ0xLRU4KKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzI1X2ZpZWxkX3dyaXRlKE1UNjMyNV9SR19WU0lNMV9NT0RFX0NUUkwsIHBMZG9CdWNrQ3RybC0+b25TZWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMjVfZmllbGRfd3JpdGUoTVQ2MzI1X1JHX1ZTSU0yX01PREVfQ1RSTCwgcExkb0J1Y2tDdHJsLT5vblNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7ICAgICAgICAKKworICAgICAgICBjYXNlIExET19CVUNLX1NFVF9WT0xUQUdFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvbHRhZ2UpOworICAgICAgICAgICAgcmVnVmFsID0gUE1VX1BhcmFtZXRlcl90b19WYWx1ZShFTkMoY21kLCBwTGRvQnVja0N0cmwtPm1vZCksIHBMZG9CdWNrQ3RybC0+dm9sdGFnZSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzI1X2ZpZWxkX3dyaXRlKE1UNjMyNV9SR19WU0lNMV9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzI1X2ZpZWxkX3dyaXRlKE1UNjMyNV9SR19WU0lNMl9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9TVzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMyNV9maWVsZF93cml0ZShNVDYzMjVfVlBBX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAKKwkJY2FzZSBMRE9fQlVDS19TRVRfRU5fQ1RSTDoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0NUUkwgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRFbkN0cmwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUkYxOF8xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gMDogU1cgY29udHJvbDE6IEhXIGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzI1X2ZpZWxkX3dyaXRlKE1UNjMyNV9WUkYxOF8wX0VOX0NUUkwsIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMyNV9maWVsZF93cml0ZShNVDYzMjVfUkdfVlJGMThfMV9PTl9DVFJMLCBwTGRvQnVja0N0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgIAorCisgICAgICAgICAgICAgICAgY2FzZSBWTUlQSToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIDA6IFNXIGNvbnRyb2wsIDE6IEhXCisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMyNV9maWVsZF93cml0ZShNVDYzMjVfUkdfVk1JUElfT05fQ1RSTCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisgICAgICAgIGNhc2UgTERPX0JVQ0tfU0VUX09DRkJfRU46CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9PQ0ZCX0VOICpwTGRvQnVja0N0cmw9JihkYXRhLT5yUE1VTGRvQnVja1NldE9jZmJFbik7CisgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMyNV9maWVsZF93cml0ZShNVDYzMjVfUkdfVlNJTTFfT0NGQl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMyNV9maWVsZF93cml0ZShNVDYzMjVfUkdfVlNJTTJfT0NGQl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7ICAKKyAgICAgICAgCQkKKworCQljYXNlIExET19CVUNLX1NFVF9FTl9TRUw6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9FTl9TRUwgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRFblNlbCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4XzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMjVfZmllbGRfd3JpdGUoTVQ2MzI1X1ZSRjE4XzBfRU5fU0VMLCBwTGRvQnVja0N0cmwtPnNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMyNV9maWVsZF93cml0ZShNVDYzMjVfUkdfVlJGMThfMV9TUkNMS19FTl9TRUwsIHBMZG9CdWNrQ3RybC0+c2VsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgIAorCisgICAgICAgICAgICAgICAgY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMyNV9maWVsZF93cml0ZShNVDYzMjVfUkdfVlNJTTFfU1JDTEtfRU5fU0VMLCBwTGRvQnVja0N0cmwtPnNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAKKworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMjVfZmllbGRfd3JpdGUoTVQ2MzI1X1JHX1ZTSU0yX1NSQ0xLX0VOX1NFTCwgcExkb0J1Y2tDdHJsLT5zZWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgICAgCisKKyAgICAgICAgICAgICAgICBjYXNlIFZNSVBJOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzI1X2ZpZWxkX3dyaXRlKE1UNjMyNV9SR19WTUlQSV9TUkNMS19FTl9TRUwsIHBMZG9CdWNrQ3RybC0+c2VsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgTERPX0JVQ0tfU0VUX1NSQ0xLX01PREVfU0VMOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1NSQ0xLX01PREVfU0VMICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0U3JjbGtNb2RlU2VsKTsKKworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzI1X2ZpZWxkX3dyaXRlKE1UNjMyNV9SR19WU0lNMV9TUkNMS19NT0RFX1NFTCwgcExkb0J1Y2tDdHJsLT5zZWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzI1X2ZpZWxkX3dyaXRlKE1UNjMyNV9SR19WU0lNMl9TUkNMS19NT0RFX1NFTCwgcExkb0J1Y2tDdHJsLT5zZWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisJCWJyZWFrOworICAgICAgICAgICAgICAgIAorCQljYXNlIExET19CVUNLX1NFVF9NT0RFU0VUOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldE1vZGVzZXQpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUEFfU1c6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMjVfZmllbGRfd3JpdGUoTVQ2MzI1X1JHX1ZQQV9NT0RFU0VULCBwTGRvQnVja0N0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4XzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMjVfZmllbGRfd3JpdGUoTVQ2MzI1X1JHX1ZSRjE4XzBfTU9ERVNFVCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7ICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBWUEFfU0VUX0VOOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9WUEFfU0VUX0VOICpwVnBhU2V0RW4gPSAmKGRhdGEtPnJQTVVWcGFTZXRFbik7CisgICAgICAgICAgICBkY2xfcG1pYzYzMjVfZmllbGRfd3JpdGUoTVQ2MzI1X1ZQQV9FTiwgcFZwYVNldEVuLT5lbmFibGUpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIFZQQV9HRVRfVk9MVEFHRV9MSVNUOgorCQl7CisJCQlQTVVfQ1RSTF9WUEFfR0VUX1ZPTFRBR0VfTElTVCAqcFZwYUN0cmwgPSAmKGRhdGEtPnJQTVVWcGFHZXRWb2x0YWdlTGlzdCk7CisJCQlwVnBhQ3RybC0+cFZvbHRhZ2VMaXN0ID0gdnBhX3Zvc2VsOworCQkJcFZwYUN0cmwtPm51bWJlciA9IEdFVEFSUk5VTSh2cGFfdm9zZWwpOwkJCQorICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworICAgICAgICAKKyAgICAgICAgY2FzZSBBRENfU0VUX1JRU1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0FEQ19TRVRfUlFTVCAqcEFkY0N0cmwgPSAmKGRhdGEtPnJQTVVBZGNTZXRScXN0KTsKKyAgICAgICAgICAgIGlmKChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0lOSVQpICYmIChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0RBVEEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGNsX3BtaWM2MzI1X2J5dGVfd3JpdGUoTVQ2MzI1X1RPUF9DTEtTUV9TRVQsICgweDEgPDwgMykpOworICAgICAgICAgICAgZGNsX3BtaWM2MzI1X2J5dGVfd3JpdGUoTVQ2MzI1X0FVWEFEQ19DT04yNywgKDB4MCA8PCBNVDYzMjVfUkdfVlJFRjE4X0VOQl9NRF9TSElGVCkpOworICAgICAgICAgICAgZGNsX3BtaWM2MzI1X2ZpZWxkX3dyaXRlKE1UNjMyNV9SR19NRF9SUVNULCAweDApOyAvLyBOZWVkIFNldCAwIGZpcnN0CisJCQkKKyAgICAgICAgICAgIGRjbF9wbWljNjMyNV9maWVsZF93cml0ZShNVDYzMjVfUkdfTURfUlFTVCwgcEFkY0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfUkVRVUVTVDsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBRENfR0VUX1JEWV9NRDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfQURDX0dFVF9SRFlfTUQgKnBBZGNDdHJsID0gJihkYXRhLT5yUE1VQWRjR2V0UmR5TWQpOworCisgICAgICAgICAgICBwQWRjQ3RybC0+c3RhdHVzID0gKERDTF9CT09MKWRjbF9wbWljNjMyNV9maWVsZF9yZWFkKE1UNjMyNV9SR19BRENfUkRZX01EKTsKKyAgICAgICAgICAgIGlmKChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX1JFUVVFU1QpICYmIChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0JVU1kpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYocEFkY0N0cmwtPnN0YXR1cyA9PSBEQ0xfVFJVRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfUkVBRFk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0JVU1k7ICAgIAorICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQURDX0dFVF9PVVRfTUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0FEQ19HRVRfT1VUX01EICpwQWRjQ3RybCA9ICYoZGF0YS0+clBNVUFkY0dldE91dE1kKTsKKyAgICAgICAgICAgIGlmKEFVWEFEQ19TdGF0dXMgIT0gQVVYQURDX1JFQURfUkVBRFkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEFkY0N0cmwtPmRhdGEgPSAoRENMX1VJTlQzMilkY2xfcG1pYzYzMjVfZmllbGRfcmVhZChNVDYzMjVfUkdfQURDX09VVF9NRCk7IAorICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0RBVEE7CisgICAgICAgICAgICBkY2xfcG1pYzYzMjVfZmllbGRfd3JpdGUoTVQ2MzI1X1JHX01EX1JRU1QsIDB4MCk7CisgICAgICAgICAgICBkY2xfcG1pYzYzMjVfYnl0ZV93cml0ZShNVDYzMjVfVE9QX0NMS1NRX0NMUiwgKDB4MSA8PCAzKSk7CisgICAgICAgICAgICBkY2xfcG1pYzYzMjVfYnl0ZV93cml0ZShNVDYzMjVfQVVYQURDX0NPTjI3LCAoMHgxIDw8IE1UNjMyNV9SR19WUkVGMThfRU5CX01EX1NISUZUKSk7CisJCQkKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNSVNDX0dFVF9IV19WRVJTSU9OOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9NSVNDX0dFVF9IV19WRVJTSU9OCSpwTWlzY0N0cmwgPSAmKGRhdGEtPnJQTVVNaXNjR2V0SHdWZXJzaW9uKTsKKyAgICAgICAgICAgIGlmKHBNaXNjQ3RybC0+Y2hpcF9uYW1lID09IFBNSUNfTVRfNjMyNSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwTWlzY0N0cmwtPnZlcnNpb24gPSBwbWljNjMyNV9od192ZXJzaW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNSVNDX1NFVF9SRUdJU1RFUl9WQUxVRToKKyAgICAgICAgewkJCQorICAgICAgICAgICAgUE1VX0NUUkxfTUlTQ19TRVRfUkVHSVNURVJfVkFMVUUJKnBDaHJDdHJsID0gJihkYXRhLT5yUE1VTWlzY1NldFJlZ2lzdGVyVmFsdWUpOworICAgICAgICAgICAgcG1pYzYzMjVfRU1fcmVnX3dyaXRlKHBDaHJDdHJsLT5vZmZzZXQsIHBDaHJDdHJsLT52YWx1ZSk7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBNSVNDX0dFVF9SRUdJU1RFUl9WQUxVRToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTUlTQ19HRVRfUkVHSVNURVJfVkFMVUUJKnBDaHJDdHJsPSYoZGF0YS0+clBNVU1pc2NHZXRSZWdpc3RlclZhbHVlKTsKKyAgICAgICAgICAgIHBDaHJDdHJsLT52YWx1ZSA9IHBtaWM2MzI1X0VNX3JlZ19yZWFkKHBDaHJDdHJsLT5vZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgkJCQkKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXR1cm5fdmFsOworCit9CisKK2V4dGVybiB2b2lkIGRjbF9wbWljNjMyNV9tb2RlbV9vbmx5X2luaXQodm9pZCk7CitleHRlcm4gRENMX1VJTlQzMiBEUlZfUmVhZF9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIpOworZXh0ZXJuIHZvaWQgRFJWX1dyaXRlX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkciwgRENMX1VJTlQzMiB2YWx1ZSk7CitleHRlcm4ga2FsX3VpbnQzMiBQTUlDX0NvbmZpZ19JbnRlcmZhY2Uoa2FsX2Jvb2wgYWN0aW9uLCBrYWxfdWludDMyIGFkZHJlc3MsIGthbF91aW50MzIgd2RhdGEsIGthbF91aW50MzIgKnJkYXRhLCBrYWxfdWludDMyIGNoaXBfbmFtZSk7CitleHRlcm4gdm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpOworI2lmIGRlZmluZWQoUE1JQ19VTklUX1RFU1QpCitleHRlcm4gdm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgUE1JQ19Vbml0X1Rlc3Qodm9pZCk7CisjZW5kaWYKKworCit2b2lkIGRjbF9wbWljNjMyNV9pbnRlcm5hbF9pbml0KHZvaWQpCit7Cit9CisKKyNpZiBkZWZpbmVkKF9fREhMX01PRFVMRV9fKQorZXh0ZXJuIGthbF9ib29sIGRobF9yZWdpc3Rlcl9jdXN0b21fbWVtX3JlYWQoREhMX0NVU1RPTV9NRU1fVFlQRSBtZW1fdHlwZSwgREhMX0NVU1RPTV9SRUFEX01FTV9DQUxMQkFDSyByZWFkX2NiKTsKK2V4dGVybiBrYWxfYm9vbCBkaGxfcmVnaXN0ZXJfY3VzdG9tX21lbV93cml0ZShESExfQ1VTVE9NX01FTV9UWVBFIG1lbV90eXBlLCBESExfQ1VTVE9NX1dSSVRFX01FTV9DQUxMQkFDSyB3cml0ZV9jYik7CitleHRlcm4gdm9pZCBQTUlDX1JlYWRfQ2FsbGJhY2tfRm9yX0RITCh2b2lkKiByZWFkX2FkZHIsIGthbF91aW50MzIgbGVuLCBrYWxfdWludDMyIG9wdGlvbiwgdm9pZCoqIHJlYWRfYnVmZmVyX2FkZHIsIGthbF91aW50MzIgKnJlYWRfYnVmZmVyX2xlbik7CitleHRlcm4gdm9pZCBQTUlDX1dyaXRlX0NhbGxiYWNrX0Zvcl9ESEwodm9pZCogd3JpdGVfYWRkciwga2FsX3VpbnQzMiBsZW4sIGthbF91aW50MzIgb3B0aW9uLCB2b2lkKiB3cml0ZV9idWZmZXJfYWRkcik7CisjZW5kaWYKKwordm9pZCBkY2xfcG1pYzYzMjVfaW5pdCh2b2lkKXsKKyAgICBleHRlcm4gdm9pZCBwbWljX3dyYXBfZHVtcF9pbml0KHZvaWQpOworICAgIHBtdV9jb250cm9sX2hhbmRsZXIgPSBQTUlDNjMyNV9jb250cm9sX2hhbmRsZXI7CisgICAgcG11X3BhcmFtZXRlcl9zaXplID0gR0VUQVJSTlVNKHBtdV9wYXJhbWV0ZXJfdGFibGUpOworI2lmIGRlZmluZWQoX19ESExfTU9EVUxFX18pICAgCisgICAgZGhsX3JlZ2lzdGVyX2N1c3RvbV9tZW1fcmVhZChESExfQ1VTVE9NX01FTV9QTUlDLCBQTUlDX1JlYWRfQ2FsbGJhY2tfRm9yX0RITCk7CisgICAgZGhsX3JlZ2lzdGVyX2N1c3RvbV9tZW1fd3JpdGUoREhMX0NVU1RPTV9NRU1fUE1JQywgUE1JQ19Xcml0ZV9DYWxsYmFja19Gb3JfREhMKTsKKyNlbmRpZiAgICAKKyAgICBwbWljX3dyYXBfZHVtcF9pbml0KCk7CisKKyNpZiAgIWRlZmluZWQoX19TTUFSVF9QSE9ORV9NT0RFTV9fKSAgICAKKyAgICBEcnZQV1JBUF9Jbml0KCk7CisjZW5kaWYgICAgCisgICAgcG1pYzYzMjVfaHdfdmVyc2lvbiA9IFBNSUNfRUNPX0UxOworICAgIHBtaWM2MzI1X3N3X3ZlcnNpb24gPSBQTUlDX0VDT19FMTsKKworICAgIC8vIEdldCBNVDYzMjUgRUNPIHZlcnNpb24KKyAgICB7CisgICAgICAgIGthbF91aW50MTYgcG1pYzYzMjVfaHdfZWNvX3ZlcnNpb24gPSAwOworICAgICAgICBrYWxfdWludDE2IHBtaWM2MzI1X3N3X2Vjb192ZXJzaW9uID0gMDsKKyAgICAgICAgcG1pYzYzMjVfaHdfZWNvX3ZlcnNpb24gPSBkY2xfcG1pYzYzMjVfYnl0ZV9yZXR1cm4oTVQ2MzI1X0hXQ0lEKTsKKyAgICAgICAgcG1pYzYzMjVfc3dfZWNvX3ZlcnNpb24gPSBkY2xfcG1pYzYzMjVfYnl0ZV9yZXR1cm4oTVQ2MzI1X1NXQ0lEKTsKKworICAgICAgICBpZiAocG1pYzYzMjVfaHdfZWNvX3ZlcnNpb24gPT0gTVQ2MzI1X0hXX0NJRF9FMSkKKyAgICAgICAgeworICAgICAgICAgICAgcG1pYzYzMjVfaHdfdmVyc2lvbiA9IFBNSUNfRUNPX0UxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcG1pYzYzMjVfaHdfdmVyc2lvbiA9IFBNSUNfRUNPX0UyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBtaWM2MzI1X3N3X2Vjb192ZXJzaW9uID09IE1UNjMyNV9TV19DSURfRTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBtaWM2MzI1X3N3X3ZlcnNpb24gPSBQTUlDX0VDT19FMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBtaWM2MzI1X3N3X3ZlcnNpb24gPSBQTUlDX0VDT19FMjsKKyAgICAgICAgfSAgICAKKyAgICB9CisKKyAgICBQTUlDX1JlYWRfQWxsKCk7CisKKyNpZiAhZGVmaW5lZChfX1NNQVJUX1BIT05FX01PREVNX18pICAgIAorICAgIGRjbF9wbWljNjMyNV9tb2RlbV9vbmx5X2luaXQoKTsKKyNlbmRpZgorICAgIGRjbF9wbWljNjMyNV9pbnRlcm5hbF9pbml0KCk7CisKKyAgICAvLyAgcG1pYzYzMjVfY3VzdG9taXphdGlvbl9pbml0KCk7CisjaWYgZGVmaW5lZChQTUlDX1VOSVRfVEVTVCkKKyAgICBQTUlDX1JlYWRfQWxsKCk7CisgICAgUE1JQ19Vbml0X1Rlc3QoKTsKKyAgICBQTUlDX1JlYWRfQWxsKCk7CisjZW5kaWYgICAgCisgICAgcG1pY19pbml0X2RvbmUgPSBEQ0xfVFJVRTsKKyAgICAKK30KKworI2lmIGRlZmluZWQoX19ESExfTU9EVUxFX18pCitrYWxfdWludDMyIHBtaWNfcmVhZF9kYXRhOwordm9pZCBQTUlDX1JlYWRfQ2FsbGJhY2tfRm9yX0RITCh2b2lkKiByZWFkX2FkZHIsIGthbF91aW50MzIgbGVuLCBrYWxfdWludDMyIG9wdGlvbiwgdm9pZCoqIHJlYWRfYnVmZmVyX2FkZHIsIGthbF91aW50MzIgKnJlYWRfYnVmZmVyX2xlbikKK3sKKyAgICBrYWxfdWludDMyIHdyaXRlX2J1ZmZlcl9hZGRyID0gMDsKKyAgICBrYWxfdWludDMyIHJlYWRfZGF0YV9hZGRyID0gKGthbF91aW50MzIpcmVhZF9hZGRyOworICAgIC8vIFdyaXRlIFdvcmthcm91bmQKKyAgICBpZihyZWFkX2RhdGFfYWRkciAmIDB4MDAwMDAwMDEpICAgICAgICAKKyAgICB7CisgICAgICAgICB3cml0ZV9idWZmZXJfYWRkciA9IChyZWFkX2RhdGFfYWRkciAmIDB4RkZGRjAwMDApID4+IDE2OworICAgICAgICAgcmVhZF9kYXRhX2FkZHIgPSAocmVhZF9kYXRhX2FkZHIgJiAweDAwMDBGRkZFKTsKKyAgICAgICAgIFBNSUNfQ29uZmlnX0ludGVyZmFjZShQTUlDX1dSSVRFLCByZWFkX2RhdGFfYWRkciwgKGthbF91aW50MzIpd3JpdGVfYnVmZmVyX2FkZHIsIE5VTEwsIG9wdGlvbik7CisgICAgfQorICAgIFBNSUNfQ29uZmlnX0ludGVyZmFjZShQTUlDX1JFQUQsIHJlYWRfZGF0YV9hZGRyLCAwLCAmcG1pY19yZWFkX2RhdGEsIG9wdGlvbik7CisgICAgKnJlYWRfYnVmZmVyX2FkZHIgPSAoa2FsX3VpbnQzMiopJnBtaWNfcmVhZF9kYXRhOworICAgICpyZWFkX2J1ZmZlcl9sZW4gPSA0OworfQorCit2b2lkIFBNSUNfV3JpdGVfQ2FsbGJhY2tfRm9yX0RITCh2b2lkKiB3cml0ZV9hZGRyLCBrYWxfdWludDMyIGxlbiwga2FsX3VpbnQzMiBvcHRpb24sIHZvaWQqIHdyaXRlX2J1ZmZlcl9hZGRyKQoreworICAgIFBNSUNfQ29uZmlnX0ludGVyZmFjZShQTUlDX1dSSVRFLCAoa2FsX3VpbnQzMil3cml0ZV9hZGRyLCAoa2FsX3VpbnQzMil3cml0ZV9idWZmZXJfYWRkciwgTlVMTCwgb3B0aW9uKTsKK30KKyNlbmRpZiAvLyBFbmQgb2YgI2lmIGRlZmluZWQoX19ESExfTU9EVUxFX18pCitrYWxfdWludDMyIFBNSUNfQ29uZmlnX0ludGVyZmFjZShrYWxfYm9vbCBhY3Rpb24sIGthbF91aW50MzIgYWRkcmVzcywga2FsX3VpbnQzMiB3ZGF0YSwga2FsX3VpbnQzMiAqcmRhdGEsIGthbF91aW50MzIgY2hpcF9uYW1lKQoreworICAgIC8vIENoZWNrIGFyZ3VtZW50IHZhbGlkYXRpb24KKyAgICBpZigoYWN0aW9uICAmIH4oMHgxKSkgICAgIT0gMCkgIHJldHVybiAwOyAvLyBXcml0ZSBzaG91bGQgYmUgMSBiaXQKKyAgICBpZigoYWRkcmVzcyAmIH4oMHhmZmZmKSkgIT0gMCkgIHJldHVybiAwOyAvLyBBZGRyZXNzIHNob3VsZCBubyBsYXJnZXIgdGhhbiAweEZGRkYKKyAgICBpZigod2RhdGEgICAmIH4oMHhmZmZmKSkgIT0gMCkgIHJldHVybiAwOyAvLyBXcml0ZSBEQVRBIHNob3VsZCBiZSBubyBsYXJnZXIgdGhhbiAweEZGRkYKKyAgICAgICAgICAgIAorICAgIGlmKGFjdGlvbiA9PSBQTUlDX1JFQUQpCisgICAgeworICAgICAgICBpZihjaGlwX25hbWUgPT0gUE1JQ182MzI1KQorICAgICAgICB7CisgICAgICAgICAgICAqcmRhdGEgPSAoa2FsX3VpbnQzMilEUlZfUmVhZF9QTUlDX0RhdGEoYWRkcmVzcyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZihhY3Rpb24gPT0gUE1JQ19XUklURSkKKyAgICB7CisgICAgICAgIGlmKGNoaXBfbmFtZSA9PSBQTUlDXzYzMjUpCisgICAgICAgIHsKKyAgICAgICAgICAgIERSVl9Xcml0ZV9QTUlDX0RhdGEoYWRkcmVzcywgd2RhdGEpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKDApOworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworRENMX0JPT0wgZGNsX3BtaWNfaW5pdF9kb25lX3F1ZXJ5KHZvaWQpCit7CisgICAgICAgIGlmKHBtaWNfaW5pdF9kb25lID09IERDTF9UUlVFKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIERDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBEQ0xfRkFMU0U7CisgICAgICAgIH0KK30KKworRENMX1VJTlQzMiBEUlZfUmVhZF9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIpCit7CisgICAgcmV0dXJuIGRjbF9wbWljNjMyNV9ieXRlX3JldHVybihwbWljX2FkZHIpOworfQorCit2b2lkIERSVl9Xcml0ZV9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIsIERDTF9VSU5UMzIgdmFsdWUpCit7CisgICAgZGNsX3BtaWM2MzI1X2J5dGVfd3JpdGUocG1pY19hZGRyLCB2YWx1ZSk7Cit9CisKK3ZvaWQgUE1JQ19SZWFkX0FsbCh2b2lkKQoreworICAgIHZvbGF0aWxlIGthbF91aW50MzIgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgUE1JQzYzMjVfTUFYX1JFR19OVU07IGkgKz0gMil7CisgICAgICAgIHBtaWM2MzI1X3JlZ1tpXSA9IGRjbF9wbWljNjMyNV9ieXRlX3JldHVybihpKTsgCisgICAgfQorfQorCisjaWYgZGVmaW5lZChQTUlDX1VOSVRfVEVTVCkKK3ZvaWQgUE1JQ19Vbml0X1Rlc3Qodm9pZCkKK3sKK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09OX0NUUkwgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwubW9kZSA9IEhXX0NPTlRST0w7IC8vIChTV19DT05UUk9MX0JZX1JFRyAvIEhXX0NPTlRST0wpCit2YWwubW9kID0gVk1JUEk7CitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9PTl9DVFJMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLmVuYWJsZSA9IERDTF9UUlVFOyAvLyAoRENMX1RSVUUgLyBEQ0xfRkFMU0UpOwordmFsLm1vZCA9IFZNSVBJOworRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7Cit2YWwubW9kID0gVlBBX1NXOworRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5tb2Q9VlBBX1NXOwordmFsLnZvbHRhZ2UgPSBQTVVfVk9MVF8wMV84MDAwMDBfVjsgCisvKiAgICAgUE1VX1ZPTFRfMDBfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDBfNjAwMDAwX1YsICAgICAgCisgICAgICAgIFBNVV9WT0xUXzAwXzcwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAwXzgwMDAwMF9WLCAgICAgIAorICAgICAgICBQTVVfVk9MVF8wMF85MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV8wMDAwMDBfViwgICAgICAKKyAgICAgICAgUE1VX1ZPTFRfMDFfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfMjAwMDAwX1YsICAgICAgCisgICAgICAgIFBNVV9WT0xUXzAxXzMwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAxXzQwMDAwMF9WLCAgICAgIAorICAgICAgICBQTVVfVk9MVF8wMV81MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV82MDAwMDBfViwgICAgICAKKyAgICAgICAgUE1VX1ZPTFRfMDFfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgICAgCisgICAgICAgIFBNVV9WT0xUXzAxXzkwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAyXzAwMDAwMF9WLCAgICAKKyAgICAgICAgUE1VX1ZPTFRfMDJfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsICAgICAgCisgICAgICAgIFBNVV9WT0xUXzAyXzMwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAyXzQwMDAwMF9WLCAgICAgIAorICAgICAgICBQTVVfVk9MVF8wMl81MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl82MDAwMDBfViwgICAgICAKKyAgICAgICAgUE1VX1ZPTFRfMDJfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfODAwMDAwX1YsICAgICAgCisgICAgICAgIFBNVV9WT0xUXzAyXzkwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLCAgICAgIAorICAgICAgICBQTVVfVk9MVF8wM18xMDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18yMDAwMDBfViwgICAgICAKKyAgICAgICAgUE1VX1ZPTFRfMDNfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfNDAwMDAwX1YsICAgICAgCisgICAgICAgIFBNVV9WT0xUXzAzXzUwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAzXzYwMDAwMF9WLCAgICAgICovCitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX01PREVTRVQgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwubW9kID0gVlBBX1NXOwordmFsLm1vZGUgPSBGT1JDRV9QV01fTU9ERTsgLy8gKEFVVE9fTU9ERSAvIEZPUkNFX1BXTV9NT0RFKQorRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfTU9ERVNFVCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9FTl9DVFJMIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLm1vZGUgPSBIV19DT05UUk9MOyAvLyAoU1dfQ09OVFJPTF9CWV9SRUcgLyBIV19DT05UUk9MKQordmFsLm1vZCA9IFZSRjE7CitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTl9DVFJMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX1NFTCB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5zZWwgPSBTUkNMS0VOX0lOMV9TRUw7IAorLyogU1JDTEtFTl9JTjFfU0VMIC8gU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMl9TRUwvCisgICAgU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTCAqLwordmFsLm1vZCA9IFZSRjE7CitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTl9TRUwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5tb2QgPSBWUkYxOwordmFsLm1vZGUgPSBGT1JDRV9QV01fTU9ERTsgLy8gKEFVVE9fTU9ERSAvIEZPUkNFX1BXTV9NT0RFKQorRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfTU9ERVNFVCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX1ZSRjFfU0VUX01PREVTRVRfQ0tQRE5fU0VUIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLnJlZ3ZhbCA9IDB4NzsgLy8gKDB4MH4weEYpCitEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfU0VUX01PREVTRVRfQ0tQRE5fU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9DTFIgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwucmVndmFsID0gMHg3OyAvLyAoMHgwfjB4RikKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9DTFIsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9WUkYxX0dFVF9NT0RFU0VUX0NLUEROIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworLy8gdmFsLnJlZ3ZhbCB3aWxsIGJlIHlvdXIgcmVxdWVzdCB2YWx1ZSAoIG5vIG5lZWQgZG8gYW55IHNoaWZ0KQorRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBWUkYxX0dFVF9NT0RFU0VUX0NLUEROLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0NUUkwgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwubW9kZSA9IEhXX0NPTlRST0w7IC8vIChTV19DT05UUk9MX0JZX1JFRyAvIEhXX0NPTlRST0wpCit2YWwubW9kID0gVlJGMjsKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOX0NUUkwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fU0VMIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLnNlbCA9IFNSQ0xLRU5fSU4xX1NFTDsgCisvKiBTUkNMS0VOX0lOMV9TRUwgLyBTUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX09SX1NSQ0xLRU5fSU4yX1NFTC8KKyAgICBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMICovCit2YWwubW9kID0gVlJGMjsKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOX1NFTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKK3ZhbC5tb2QgPSBWUkYyOworRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5tb2QgPSBWUkYxOwordmFsLm1vZGUgPSBGT1JDRV9QV01fTU9ERTsgLy8gKEFVVE9fTU9ERSAvIEZPUkNFX1BXTV9NT0RFKQorRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfTU9ERVNFVCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9TUkNMS19FTl9TRUwgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwuc2VsID0gU1JDTEtFTl9JTjFfU0VMOyAKKy8qIFNSQ0xLRU5fSU4xX1NFTCAvIFNSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfT1JfU1JDTEtFTl9JTjJfU0VMLworICAgIFNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwgKi8KK3ZhbC5tb2QgPSBWTUlQSTsKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX1NSQ0xLX0VOX1NFTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKK3ZhbC5tb2QgPSBWU0lNMTsKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLmVuYWJsZSA9IERDTF9UUlVFOyAvLyAoRENMX1RSVUUgLyBEQ0xfRkFMU0UpOwordmFsLm1vZCA9IFZTSU0yOworRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5tb2Q9VlNJTTE7Cit2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOyAKKy8qICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18wMDAwMDBfViwgICAqLworRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLm1vZD1WU0lNMjsKK3ZhbC52b2x0YWdlID0gUE1VX1ZPTFRfMDFfODAwMDAwX1Y7IAorLyogIFBNVV9WT0xUXzAxXzgwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLCAgICovCitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK30KKyNlbmRpZiAvLyBFbmQgb2YgI2lmIGRlZmluZWQoUE1JQ19VTklUX1RFU1QpCisKKyNlbmRpZiAvLyBFbmQgb2YgI2lmIGRlZmluZWQoUE1JQ182MzI1X1JFR19BUEkpCisKZGlmZiAtLWdpdCBhL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjMyNV9pbml0LmMgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzMjVfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMTRlNDUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzMjVfaW5pdC5jCkBAIC0wLDAgKzEsMzAzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTQKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgIGRjbF9wbWljNjMyNV9pbml0LmMKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgICBNT0xZIFNvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgICBUaGlzIGZpbGUgaXMgZm9yIFBNSUMgNjMyNQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiaW5pdC5oIgorI2luY2x1ZGUgImRjbC5oIgorCitleHRlcm4gRENMX1VJTlQzMiBEUlZfUmVhZF9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIpOworZXh0ZXJuIHZvaWQgRFJWX1dyaXRlX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkciwgRENMX1VJTlQzMiB2YWx1ZSk7CisKK3ZvaWQgUE1JQ19EUlZfU2V0RGF0YShEQ0xfVUlOVDMyIGFkZHIsIERDTF9VSU5UMzIgYml0bWFzaywgRENMX1VJTlQxNiB2YWx1ZSwgRENMX1VJTlQzMiBiYW5rKQoreworICAgRENMX1VJTlQzMiB0ZW1wOworICAgYWRkciB8PSAoYmFuayA8PCAzMSk7CisgICB0ZW1wID0gKH4oYml0bWFzaykpICYgRFJWX1JlYWRfUE1JQ19EYXRhKGFkZHIpOworICAgdGVtcCB8PSAoKHZhbHVlKSAmIChiaXRtYXNrKSk7CisgICBEUlZfV3JpdGVfUE1JQ19EYXRhKGFkZHIsdGVtcCk7Cit9CisKKy8vIE1UNjMyNSBFQ09fRTEKK3ZvaWQgZGNsX3BtaWM2MzI1X21vZGVtX29ubHlfaW5pdCh2b2lkKQoreworCS8vIFJHX0VOX0RSVlNFTFs0OjRdID0gMHgxID0+IFJpY2t5CisJUE1JQ19EUlZfU2V0RGF0YSgweDQgICAgICAgLCAweDEwICAgICAgLCAweDEwICAgICAgLCAweDApOworCisJLy8gUkdfUlNUQl9EUlZfU0VMWzU6NV0gPSAweDEgPT4gUmlja3kKKwlQTUlDX0RSVl9TZXREYXRhKDB4NCAgICAgICAsIDB4MjAgICAgICAsIDB4MjAgICAgICAsIDB4MCk7CisKKwkvLyBERFVWTE9fREVCX0VOWzA6MF0gPSAweDEgPT4gUmlja3kKKwlQTUlDX0RSVl9TZXREYXRhKDB4QSAgICAgICAsIDB4MSAgICAgICAsIDB4MSAgICAgICAsIDB4MCk7CisKKwkvLyBWRFZGUzExX1BHX0gyTF9FTlswOjBdID0gMHgxID0+IFJpY2t5CisJUE1JQ19EUlZfU2V0RGF0YSgweEMgICAgICAgLCAweDEgICAgICAgLCAweDEgICAgICAgLCAweDApOworCisJLy8gVkRWRlMxMl9QR19IMkxfRU5bMToxXSA9IDB4MSA9PiBSaWNreQorCVBNSUNfRFJWX1NldERhdGEoMHhDICAgICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKworCS8vIFZDT1JFMV9QR19IMkxfRU5bNDo0XSA9IDB4MSA9PiBSaWNreQorCVBNSUNfRFJWX1NldERhdGEoMHhDICAgICAgICwgMHgxMCAgICAgICwgMHgxMCAgICAgICwgMHgwKTsKKworCS8vIFZDT1JFMl9QR19IMkxfRU5bNTo1XSA9IDB4MSA9PiBSaWNreQorCVBNSUNfRFJWX1NldERhdGEoMHhDICAgICAgICwgMHgyMCAgICAgICwgMHgyMCAgICAgICwgMHgwKTsKKworCS8vIFZHUFVfUEdfSDJMX0VOWzY6Nl0gPSAweDEgPT4gUmlja3kKKwlQTUlDX0RSVl9TZXREYXRhKDB4QyAgICAgICAsIDB4NDAgICAgICAsIDB4NDAgICAgICAsIDB4MCk7CisKKwkvLyBWSU8xOF9QR19IMkxfRU5bNzo3XSA9IDB4MSA9PiBSaWNreQorCVBNSUNfRFJWX1NldERhdGEoMHhDICAgICAgICwgMHg4MCAgICAgICwgMHg4MCAgICAgICwgMHgwKTsKKworCS8vIFZBVUQyOF9QR19IMkxfRU5bODo4XSA9IDB4MSA9PiBSaWNreQorCVBNSUNfRFJWX1NldERhdGEoMHhDICAgICAgICwgMHgxMDAgICAgICwgMHgxMDAgICAgICwgMHgwKTsKKworCS8vIFZUQ1hPX1BHX0gyTF9FTls5OjldID0gMHgxID0+IFJpY2t5CisJUE1JQ19EUlZfU2V0RGF0YSgweEMgICAgICAgLCAweDIwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworCisJLy8gVlVTQl9QR19IMkxfRU5bMTA6MTBdID0gMHgxID0+IFJpY2t5CisJUE1JQ19EUlZfU2V0RGF0YSgweEMgICAgICAgLCAweDQwMCAgICAgLCAweDQwMCAgICAgLCAweDApOworCisJLy8gVlNSQU1fRFZGUzFfUEdfSDJMX0VOWzExOjExXSA9IDB4MSA9PiBSaWNreQorCVBNSUNfRFJWX1NldERhdGEoMHhDICAgICAgICwgMHg4MDAgICAgICwgMHg4MDAgICAgICwgMHgwKTsKKworCS8vIFZJTzI4X1BHX0gyTF9FTlsxMjoxMl0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4QyAgICAgICAsIDB4MTAwMCAgICAsIDB4MTAwMCAgICAsIDB4MCk7CisKKwkvLyBWRFJBTV9QR19IMkxfRU5bMTM6MTNdID0gMHgxID0+IFJpY2t5CisJUE1JQ19EUlZfU2V0RGF0YSgweEMgICAgICAgLCAweDIwMDAgICAgLCAweDIwMDAgICAgLCAweDApOworCisJLy8gVVZMT19MMkhfREVCX0VOWzU6NV0gPSAweDEgPT4gUmlja3kKKwlQTUlDX0RSVl9TZXREYXRhKDB4MTAgICAgICAsIDB4MjAgICAgICAsIDB4MjAgICAgICAsIDB4MCk7CisKKwkvLyBTVFJVUF9QV1JPRkZfU0VRX0VOWzA6MF0gPSAweDEgPT4gUmlja3kKKwlQTUlDX0RSVl9TZXREYXRhKDB4MTYgICAgICAsIDB4MSAgICAgICAsIDB4MSAgICAgICAsIDB4MCk7CisKKwkvLyBTVFJVUF9QV1JPRkZfUFJFT0ZGX0VOWzE6MV0gPSAweDEgPT4gUmlja3kKKwlQTUlDX0RSVl9TZXREYXRhKDB4MTYgICAgICAsIDB4MiAgICAgICAsIDB4MiAgICAgICAsIDB4MCk7CisKKwkvLyBSR19URVNUTU9ERV9TV0VOWzExOjExXSA9IDB4MCA9PiBDQworCVBNSUNfRFJWX1NldERhdGEoMHgxRSAgICAgICwgMHg4MDAgICAgICwgMHgwICAgICAgICwgMHgwKTsKKworCS8vIFJHX1NSQ0xLRU5fSU4wX0hXX01PREVbNDo0XSA9IDB4MSA9PiBKdWlubi1UaW5nCisJUE1JQ19EUlZfU2V0RGF0YSgweDIwNCAgICAgLCAweDEwICAgICAgLCAweDEwICAgICAgLCAweDApOworCisJLy8gUkdfU1JDTEtFTl9JTjFfSFdfTU9ERVs1OjVdID0gMHgxID0+IEp1aW5uLVRpbmcKKwlQTUlDX0RSVl9TZXREYXRhKDB4MjA0ICAgICAsIDB4MjAgICAgICAsIDB4MjAgICAgICAsIDB4MCk7CisKKwkvLyBSR19PU0NfU0VMX0hXX01PREVbNjo2XSA9IDB4MSA9PiBKdWlubi1UaW5nCisJUE1JQ19EUlZfU2V0RGF0YSgweDIwNCAgICAgLCAweDQwICAgICAgLCAweDQwICAgICAgLCAweDApOworCisJLy8gUkdfU01UX1dEVFJTVEJfSU5bMDowXSA9IDB4MSA9PiBSaWNreQorCVBNSUNfRFJWX1NldERhdGEoMHgyMjIgICAgICwgMHgxICAgICAgICwgMHgxICAgICAgICwgMHgwKTsKKworCS8vIFJHX1NNVF9TUkNMS0VOX0lOMFsyOjJdID0gMHgxID0+IFJpY2t5CisJUE1JQ19EUlZfU2V0RGF0YSgweDIyMiAgICAgLCAweDQgICAgICAgLCAweDQgICAgICAgLCAweDApOworCisJLy8gUkdfU01UX1NSQ0xLRU5fSU4xWzM6M10gPSAweDEgPT4gUmlja3kKKwlQTUlDX0RSVl9TZXREYXRhKDB4MjIyICAgICAsIDB4OCAgICAgICAsIDB4OCAgICAgICAsIDB4MCk7CisKKwkvLyBSR19SVENfNzVLX0NLX1BETlsyOjJdID0gMHgxID0+IEp1aW5uLVRpbmcKKwlQTUlDX0RSVl9TZXREYXRhKDB4MjNFICAgICAsIDB4NCAgICAgICAsIDB4NCAgICAgICAsIDB4MCk7CisKKwkvLyBSR19SVENERVRfQ0tfUEROWzM6M10gPSAweDEgPT4gSnVpbm4tVGluZworCVBNSUNfRFJWX1NldERhdGEoMHgyM0UgICAgICwgMHg4ICAgICAgICwgMHg4ICAgICAgICwgMHgwKTsKKworCS8vIFZEVkZTMTFfU0ZDSEdfRlJBVEVbNjowXSA9IDB4NAorCVBNSUNfRFJWX1NldERhdGEoMHg0QjYgICAgICwgMHg3RiAgICAgICwgMHg0ICAgICAgICwgMHgwKTsKKworCS8vIFZEVkZTMTFfU0ZDSEdfUlJBVEVbMTQ6OF0gPSAweDQKKwlQTUlDX0RSVl9TZXREYXRhKDB4NEI2ICAgICAsIDB4N0YwMCAgICAsIDB4NDAwICAgICAsIDB4MCk7CisKKwkvLyBWRFZGUzEyX1NGQ0hHX0ZSQVRFWzY6MF0gPSAweDQKKwlQTUlDX0RSVl9TZXREYXRhKDB4NERDICAgICAsIDB4N0YgICAgICAsIDB4NCAgICAgICAsIDB4MCk7CisKKwkvLyBWRFZGUzEyX1NGQ0hHX1JSQVRFWzE0OjhdID0gMHg0CisJUE1JQ19EUlZfU2V0RGF0YSgweDREQyAgICAgLCAweDdGMDAgICAgLCAweDQwMCAgICAgLCAweDApOworCisJLy8gVlNSQU1fRFZGUzFfU0ZDSEdfRlJBVEVbNjowXSA9IDB4NAorCVBNSUNfRFJWX1NldERhdGEoMHg1MDIgICAgICwgMHg3RiAgICAgICwgMHg0ICAgICAgICwgMHgwKTsKKworCS8vIFZTUkFNX0RWRlMxX1NGQ0hHX1JSQVRFWzE0OjhdID0gMHg0CisJUE1JQ19EUlZfU2V0RGF0YSgweDUwMiAgICAgLCAweDdGMDAgICAgLCAweDQwMCAgICAgLCAweDApOworCisJLy8gVkRSQU1fRU5fQ1RSTFswOjBdID0gMHgwID0+IFlQCisJUE1JQ19EUlZfU2V0RGF0YSgweDUyMiAgICAgLCAweDEgICAgICAgLCAweDAgICAgICAgLCAweDApOworCisJLy8gVkRSQU1fVk9TRUxfQ1RSTFsxOjFdID0gMHgxID0+IFlQCisJUE1JQ19EUlZfU2V0RGF0YSgweDUyMiAgICAgLCAweDIgICAgICAgLCAweDIgICAgICAgLCAweDApOworCisJLy8gVkRSQU1fU0ZDSEdfRlJBVEVbNjowXSA9IDB4MjMgPT4gU2hhbmdZaW5nOyBGYWxsaW5nIHNsZXdyYXRlPTIuMHVzL3N0ZXAKKwlQTUlDX0RSVl9TZXREYXRhKDB4NTI4ICAgICAsIDB4N0YgICAgICAsIDB4MjMgICAgICAsIDB4MCk7CisKKwkvLyBWRFJBTV9TRkNIR19GRU5bNzo3XSA9IDB4MSA9PiBTaGFuZ1lpbmc7IFNvZnQgY2hhbmdlIGZhbGxpbmcgZW5hYmxlLgorCVBNSUNfRFJWX1NldERhdGEoMHg1MjggICAgICwgMHg4MCAgICAgICwgMHg4MCAgICAgICwgMHgwKTsKKworCS8vIFZEUkFNX1NGQ0hHX1JSQVRFWzE0OjhdID0gMHg2ID0+IFNoYW5nWWluZzsgUmlzaW5nIHNsZXdyYXRlPTAuNHVzL3N0ZXAKKwlQTUlDX0RSVl9TZXREYXRhKDB4NTI4ICAgICAsIDB4N0YwMCAgICAsIDB4NjAwICAgICAsIDB4MCk7CisKKwkvLyBWRFJBTV9TRkNIR19SRU5bMTU6MTVdID0gMHgxID0+IFNoYW5nWWluZzsgU29mdCBjaGFuZ2UgcmFpc2luZyBlbmFibGUuCisJUE1JQ19EUlZfU2V0RGF0YSgweDUyOCAgICAgLCAweDgwMDAgICAgLCAweDgwMDAgICAgLCAweDApOworCisJLy8gVkRSQU1fVk9TRUxfU0xFRVBbNjowXSA9IDB4MCA9PiBZUAorCVBNSUNfRFJWX1NldERhdGEoMHg1MkUgICAgICwgMHg3RiAgICAgICwgMHgwICAgICAgICwgMHgwKTsKKworCS8vIFZEUkFNX1RSQU5TX1REWzE6MF0gPSAweDMgPT4gU2hhbmdZaW5nOyBQdWxzZSB3aWR0aD01MHVTCisJUE1JQ19EUlZfU2V0RGF0YSgweDUzOCAgICAgLCAweDMgICAgICAgLCAweDMgICAgICAgLCAweDApOworCisJLy8gVkRSQU1fVFJBTlNfQ1RSTFs1OjRdID0gMHgxID0+IFNoYW5nWWluZzsgRm9yY2UgUFdNIHdoZW4gRFZGUyBmYWxsaW5nIGVuYWJsZS4KKwlQTUlDX0RSVl9TZXREYXRhKDB4NTM4ICAgICAsIDB4MzAgICAgICAsIDB4MTAgICAgICAsIDB4MCk7CisKKwkvLyBWRFJBTV9WU0xFRVBfRU5bODo4XSA9IDB4MSA9PiBTaGFuZ1lpbmc7IFNsZWVwIG1vZGUgZW5hYmxlCisJUE1JQ19EUlZfU2V0RGF0YSgweDUzOCAgICAgLCAweDEwMCAgICAgLCAweDEwMCAgICAgLCAweDApOworCisJLy8gVlJGMThfMF9TRkNIR19GUkFURVs2OjBdID0gMHg0CisJUE1JQ19EUlZfU2V0RGF0YSgweDU0RSAgICAgLCAweDdGICAgICAgLCAweDQgICAgICAgLCAweDApOworCisJLy8gVlJGMThfMF9TRkNIR19SUkFURVsxNDo4XSA9IDB4NAorCVBNSUNfRFJWX1NldERhdGEoMHg1NEUgICAgICwgMHg3RjAwICAgICwgMHg0MDAgICAgICwgMHgwKTsKKworCS8vIFZHUFVfU0ZDSEdfRlJBVEVbNjowXSA9IDB4NAorCVBNSUNfRFJWX1NldERhdGEoMHg2MTQgICAgICwgMHg3RiAgICAgICwgMHg0ICAgICAgICwgMHgwKTsKKworCS8vIFZHUFVfU0ZDSEdfUlJBVEVbMTQ6OF0gPSAweDQKKwlQTUlDX0RSVl9TZXREYXRhKDB4NjE0ICAgICAsIDB4N0YwMCAgICAsIDB4NDAwICAgICAsIDB4MCk7CisKKwkvLyBWQ09SRTFfU0ZDSEdfRlJBVEVbNjowXSA9IDB4NAorCVBNSUNfRFJWX1NldERhdGEoMHg2M0EgICAgICwgMHg3RiAgICAgICwgMHg0ICAgICAgICwgMHgwKTsKKworCS8vIFZDT1JFMV9TRkNIR19SUkFURVsxNDo4XSA9IDB4NAorCVBNSUNfRFJWX1NldERhdGEoMHg2M0EgICAgICwgMHg3RjAwICAgICwgMHg0MDAgICAgICwgMHgwKTsKKworCS8vIFZDT1JFMl9WT1NFTF9DVFJMWzE6MV0gPSAweDEgPT4gWVAKKwlQTUlDX0RSVl9TZXREYXRhKDB4NjVBICAgICAsIDB4MiAgICAgICAsIDB4MiAgICAgICAsIDB4MCk7CisKKwkvLyBWQ09SRTJfU0ZDSEdfRlJBVEVbNjowXSA9IDB4MjMgPT4gU2hhbmdZaW5nOyBGYWxsaW5nIHNsZXdyYXRlPTIuMHVzL3N0ZXAKKwlQTUlDX0RSVl9TZXREYXRhKDB4NjYwICAgICAsIDB4N0YgICAgICAsIDB4MjMgICAgICAsIDB4MCk7CisKKwkvLyBWQ09SRTJfU0ZDSEdfRkVOWzc6N10gPSAweDEgPT4gU2hhbmdZaW5nOyBTb2Z0IGNoYW5nZSBmYWxsaW5nIGVuYWJsZS4KKwlQTUlDX0RSVl9TZXREYXRhKDB4NjYwICAgICAsIDB4ODAgICAgICAsIDB4ODAgICAgICAsIDB4MCk7CisKKwkvLyBWQ09SRTJfU0ZDSEdfUlJBVEVbMTQ6OF0gPSAweDggPT4gU2hhbmdZaW5nOyBSaXNpbmcgc2xld3JhdGU9MC41dXMvc3RlcAorCVBNSUNfRFJWX1NldERhdGEoMHg2NjAgICAgICwgMHg3RjAwICAgICwgMHg4MDAgICAgICwgMHgwKTsKKworCS8vIFZDT1JFMl9TRkNIR19SRU5bMTU6MTVdID0gMHgxID0+IFNoYW5nWWluZzsgU29mdCBjaGFuZ2UgcmFpc2luZyBlbmFibGUuCisJUE1JQ19EUlZfU2V0RGF0YSgweDY2MCAgICAgLCAweDgwMDAgICAgLCAweDgwMDAgICAgLCAweDApOworCisJLy8gVkNPUkUyX1ZPU0VMWzY6MF0gPSAweDQ0ID0+IFlQCisJUE1JQ19EUlZfU2V0RGF0YSgweDY2MiAgICAgLCAweDdGICAgICAgLCAweDQ0ICAgICAgLCAweDApOworCisJLy8gVkNPUkUyX1ZPU0VMX09OWzY6MF0gPSAweDQ0ID0+IFlQCisJUE1JQ19EUlZfU2V0RGF0YSgweDY2NCAgICAgLCAweDdGICAgICAgLCAweDQ0ICAgICAgLCAweDApOworCisJLy8gVkNPUkUyX1ZPU0VMX1NMRUVQWzY6MF0gPSAweDAgPT4gWVAKKwlQTUlDX0RSVl9TZXREYXRhKDB4NjY2ICAgICAsIDB4N0YgICAgICAsIDB4MCAgICAgICAsIDB4MCk7CisKKwkvLyBWQ09SRTJfVFJBTlNfVERbMTowXSA9IDB4MyA9PiBTaGFuZ1lpbmc7IFB1bHNlIHdpZHRoPTUwdVMKKwlQTUlDX0RSVl9TZXREYXRhKDB4NjcwICAgICAsIDB4MyAgICAgICAsIDB4MyAgICAgICAsIDB4MCk7CisKKwkvLyBWQ09SRTJfVFJBTlNfQ1RSTFs1OjRdID0gMHgxID0+IFNoYW5nWWluZzsgRm9yY2UgUFdNIHdoZW4gRFZGUyBmYWxsaW5nIGVuYWJsZS4KKwlQTUlDX0RSVl9TZXREYXRhKDB4NjcwICAgICAsIDB4MzAgICAgICAsIDB4MTAgICAgICAsIDB4MCk7CisKKwkvLyBWQ09SRTJfVlNMRUVQX0VOWzg6OF0gPSAweDEgPT4gU2hhbmdZaW5nOyBTbGVlcCBtb2RlIGVuYWJsZQorCVBNSUNfRFJWX1NldERhdGEoMHg2NzAgICAgICwgMHgxMDAgICAgICwgMHgxMDAgICAgICwgMHgwKTsKKworCS8vIFZJTzE4X1NGQ0hHX0ZSQVRFWzY6MF0gPSAweDQKKwlQTUlDX0RSVl9TZXREYXRhKDB4NjhBICAgICAsIDB4N0YgICAgICAsIDB4NCAgICAgICAsIDB4MCk7CisKKwkvLyBWSU8xOF9TRkNIR19SUkFURVsxNDo4XSA9IDB4NAorCVBNSUNfRFJWX1NldERhdGEoMHg2OEEgICAgICwgMHg3RjAwICAgICwgMHg0MDAgICAgICwgMHgwKTsKKworCS8vIFZJTzE4X1ZTTEVFUF9FTls4OjhdID0gMHgxID0+IEpvaG5zb247IFNMRUVQIG1vZGUgc2V0dGluZworCVBNSUNfRFJWX1NldERhdGEoMHg2OUEgICAgICwgMHgxMDAgICAgICwgMHgxMDAgICAgICwgMHgwKTsKKworCS8vIFZQQV9TRkNIR19GUkFURVs2OjBdID0gMHg0CisJUE1JQ19EUlZfU2V0RGF0YSgweDZCMCAgICAgLCAweDdGICAgICAgLCAweDQgICAgICAgLCAweDApOworCisJLy8gVlBBX1NGQ0hHX1JSQVRFWzE0OjhdID0gMHg0CisJUE1JQ19EUlZfU2V0RGF0YSgweDZCMCAgICAgLCAweDdGMDAgICAgLCAweDQwMCAgICAgLCAweDApOworCisJLy8gUUlfVlBBX0JVUlNUTFsxMzoxMl0gPSAweDEgPT4gSm9obnNvbjsgU0xFRVAgbW9kZSBzZXR0aW5nCisJUE1JQ19EUlZfU2V0RGF0YSgweDZDNCAgICAgLCAweDMwMDAgICAgLCAweDEwMDAgICAgLCAweDApOworCisJLy8gUkdfVkJJQVNOX0VOWzE6MV0gPSAweDAgPT4gRmFuZHksIGRpc2FibGUKKwlQTUlDX0RSVl9TZXREYXRhKDB4QTM4ICAgICAsIDB4MiAgICAgICAsIDB4MCAgICAgICAsIDB4MCk7CisKKwkvLyBGR19TTFBfRU5bODo4XSA9IDB4MSA9PiBSaWNreQorCVBNSUNfRFJWX1NldERhdGEoMHhDQkMgICAgICwgMHgxMDAgICAgICwgMHgxMDAgICAgICwgMHgwKTsKKworCS8vIEZHX1pDVl9ERVRfRU5bOTo5XSA9IDB4MSA9PiBSaWNreQorCVBNSUNfRFJWX1NldERhdGEoMHhDQkMgICAgICwgMHgyMDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCS8vIFJHX0ZHX0FVWEFEQ19SWzEwOjEwXSA9IDB4MSA9PiBSaWNreQorCVBNSUNfRFJWX1NldERhdGEoMHhDQkMgICAgICwgMHg0MDAgICAgICwgMHg0MDAgICAgICwgMHgwKTsKKworCS8vIEZHX1NMUF9DVVJfVEhbMTU6MF0gPSAweDI0ID0+IFJpY2t5CisJUE1JQ19EUlZfU2V0RGF0YSgweENDMCAgICAgLCAweEZGRkYgICAgLCAweDI0ICAgICAgLCAweDApOworCisJLy8gRkdfU0xQX1RJTUVbNzowXSA9IDB4MTQgPT4gUmlja3kKKwlQTUlDX0RSVl9TZXREYXRhKDB4Q0MyICAgICAsIDB4RkYgICAgICAsIDB4MTQgICAgICAsIDB4MCk7CisKKwkvLyBGR19ERVRfVElNRVsxNTo4XSA9IDB4RkYgPT4gUmlja3kKKwlQTUlDX0RSVl9TZXREYXRhKDB4Q0M0ICAgICAsIDB4RkYwMCAgICAsIDB4RkYwMCAgICAsIDB4MCk7CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzMzFfMzIuYyBiL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjMzMV8zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViM2ZlNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzMzFfMzIuYwpAQCAtMCwwICsxLDEzNzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxMworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICAgZGNsX3BtaWM2MzMxXzMyLmMKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgICBNT0xZIFNvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgICBUaGlzIGZpbGUgaXMgZm9yIFBNSUMgNjMzMS82MzMyCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoRlBHQV9DVFApCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInJlZ19iYXNlLmgiCisjaW5jbHVkZSAiZHJ2X2NvbW0uaCIKKyNpbmNsdWRlICJpbml0LmgiCisjaW5jbHVkZSAiZGNsLmgiCisjaW5jbHVkZSAiZGNsX3BtdV9zdy5oIgorI2luY2x1ZGUgInBtaWNfd3JhcC5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAidXNfdGltZXIuaCIKKworI2lmIGRlZmluZWQoUE1JQ182MzMxX1JFR19BUEkpIHx8IGRlZmluZWQoUE1JQ182MzMyX1JFR19BUEkpCisKKy8vIFN0YXJ0IFBNSUNfVU5JVF9URVNUCisvLyNkZWZpbmUgUE1JQ19VTklUX1RFU1QKKy8vIEFSTSBTZWN0aW9uIFJXL1JPL1pJIFVzZSBJbnRlcm5hbCBTUkFNCisjZGVmaW5lIFBNSUNfSU5URVJOQUxfU1JBTQorI2RlZmluZSBfX01EMV9fCisKKyNpZiAhZGVmaW5lZChfX0ZVRV9fKQorI2RlZmluZSBTQVZFQU5EU0VUSVJRTUFTSygpICAgICAgU2F2ZUFuZFNldElSUU1hc2soKQorI2RlZmluZSBSRVNUT1JFSVJRTUFTSyhtYXNrKSAgICAgUmVzdG9yZUlSUU1hc2sobWFzaykKKyNlbHNlIC8qZGVmaW5lZChfX0ZVRV9fKSovCisjZGVmaW5lIFNBVkVBTkRTRVRJUlFNQVNLKCkgICAgICAwCisjZGVmaW5lIFJFU1RPUkVJUlFNQVNLKG1hc2spICAgICB7fQorI2VuZGlmIC8qZGVmaW5lZChfX0ZVRV9fKSovCisKKyNkZWZpbmUgQkFOS1NfTlVNICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFBNSUM2MzMxX01BWF9SRUdfTlVNICAgICAgICAgICAgICAgIDB4MDgwMCAvLyAweDAwMDF+MHgwN0ZGCisjZGVmaW5lIFBNSUM2MzMyX01BWF9SRUdfTlVNICAgICAgICAgICAgICAgIDB4MDgwMCAvLyAweDAwMDF+MHgwN0ZGCisjZGVmaW5lIEdQSU9fTUFYX1JFR19OVU0gICAgICAgICAgICAgICAgICAgIDB4MDEwMCAvLyAweDAwMDF+MHgwMEZGCisvLyNkZWZpbmUgUE1JQ19NQVhfUkVHX05VTSAgICAgICAgICAgICAgICAweDQwRkYgLy8gUmVnaXN0ZXIgQlVDSzEsIFJlZ2lzdGVyIEFOQUxETywgUmVnaXN0ZXIgRElHTERPICgweDA0NzApCisKKyNkZWZpbmUgTVQ2MzMxX0hXX0NJRF9FMSAgICAgICAgICAgIDB4MTAzMQorI2RlZmluZSBNVDYzMzFfSFdfQ0lEX0UyICAgICAgICAgICAgMHgyMDMxCisjZGVmaW5lIE1UNjMzMV9IV19DSURfRTMgICAgICAgICAgICAweDMwMzEKKyNkZWZpbmUgTVQ2MzMxX1NXX0NJRF9FMSAgICAgICAgICAgIDB4MTAzMQorI2RlZmluZSBNVDYzMzFfU1dfQ0lEX0UyICAgICAgICAgICAgMHgyMDMxCisjZGVmaW5lIE1UNjMzMV9TV19DSURfRTMgICAgICAgICAgICAweDMwMzEKKyNkZWZpbmUgTVQ2MzMyX0hXX0NJRF9FMSAgICAgICAgICAgIDB4MTAzMgorI2RlZmluZSBNVDYzMzJfSFdfQ0lEX0UyICAgICAgICAgICAgMHgyMDMyCisjZGVmaW5lIE1UNjMzMl9IV19DSURfRTMgICAgICAgICAgICAweDMwMzIKKyNkZWZpbmUgTVQ2MzMyX1NXX0NJRF9FMSAgICAgICAgICAgIDB4MTAzMgorI2RlZmluZSBNVDYzMzJfU1dfQ0lEX0UyICAgICAgICAgICAgMHgyMDMyCisjZGVmaW5lIE1UNjMzMl9TV19DSURfRTMgICAgICAgICAgICAweDMwMzIKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICBFeHBvcnRlZCBBUElzICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2V4dGVybiBrYWxfYm9vbCBwbWljNjMzMV9yZWdfd3JpdGUoa2FsX3VpbnQxNiByZWcsIGthbF91aW50MTYgdmFsKTsKK2V4dGVybiBrYWxfYm9vbCBwbWljNjMzMV9yZWdfcmVhZChrYWxfdWludDE2IHJlZywga2FsX3VpbnQxNiAqcFZhbCk7CitleHRlcm4ga2FsX2Jvb2wgcG1pYzYzMzJfcmVnX3dyaXRlKGthbF91aW50MTYgcmVnLCBrYWxfdWludDE2IHZhbCk7CitleHRlcm4ga2FsX2Jvb2wgcG1pYzYzMzJfcmVnX3JlYWQoa2FsX3VpbnQxNiByZWcsIGthbF91aW50MTYgKnBWYWwpOworCitleHRlcm4gRENMX0JPT0wgZGNsX3BtaWNfaW5pdF9kb25lX3F1ZXJ5KHZvaWQpOwordHlwZWRlZiBlbnVtCit7CisgICAgQVVYQURDX1JFQURfSU5JVCA9IDAsCisgICAgQVVYQURDX1JFQURfUkVRVUVTVCA9IDEsCisgICAgQVVYQURDX1JFQURfUkVBRFkgPSAyLAorICAgIEFVWEFEQ19SRUFEX0JVU1kgPSAzLAorICAgIEFVWEFEQ19SRUFEX0RBVEEgPSA0Cit9QVVYQURDX0ZTTTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIGNvbW1hbmRfZmxhZzsKKyAgICBrYWxfdWludDMyIHJlZ19iZWZvcmVfd3JpdGU7CisgICAga2FsX3VpbnQzMiB3cml0ZV92YWx1ZTsKKyAgICBrYWxfdWludDMyIGFkZHJlc3Nfb2Zmc2V0OworICAgIGthbF91aW50MzIgcmVnX21hc2s7CisgICAga2FsX3VpbnQzMiByZWdfc2hpZnQ7CisgICAga2FsX3VpbnQzMiByZWdfYWRkcjsKKyAgICBrYWxfdWludDMyIHJlZ19kYXRhOworfVBNSUNfUkVHX0xPRzsKKworQVVYQURDX0ZTTSBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfSU5JVDsKK1BNSUNfUkVHX0xPRyBwbWljX3JlZ19sb2c7CisKKyNpZiAoZGVmaW5lZChfX01US19UQVJHRVRfXykgJiYgZGVmaW5lZChQTUlDX0lOVEVSTkFMX1NSQU0pKQorX19hdHRyaWJ1dGVfXyAoKHplcm9faW5pdCkpIAorI2VuZGlmIC8qIF9fTVRLX1RBUkdFVF9fICovCitrYWxfdWludDggcG1pYzYzMzFfaHdfdmVyc2lvbjsKK2thbF91aW50OCBwbWljNjMzMV9zd192ZXJzaW9uOwora2FsX3VpbnQ4IHBtaWM2MzMyX2h3X3ZlcnNpb247CitrYWxfdWludDggcG1pYzYzMzJfc3dfdmVyc2lvbjsKK2thbF91aW50MTYgcG1pYzYzMzFfcmVnW1BNSUM2MzMxX01BWF9SRUdfTlVNXTsKK2thbF91aW50MTYgcG1pYzYzMzJfcmVnW1BNSUM2MzMyX01BWF9SRUdfTlVNXTsKK2thbF91aW50MTYgcG1pYzYzMzFfZ3Bpb19yZWdbR1BJT19NQVhfUkVHX05VTV07CitEQ0xfQk9PTCBwbWljX2luaXRfZG9uZSA9IERDTF9GQUxTRTsKK2NvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSBwbWljNjMzMV9mbGFnc190YWJsZVtdID0gCit7CisgICAge01UNjMzMV9IV0NJRCwJCU1UNjMzMV9IV0NJRF9NQVNLLAkJTVQ2MzMxX0hXQ0lEX1NISUZULAkJfSwKKyAgICB7TVQ2MzMxX1NXQ0lELAkJTVQ2MzMxX1NXQ0lEX01BU0ssCQlNVDYzMzFfU1dDSURfU0hJRlQsCQl9LAorICAgIHtNVDYzMzFfQU5BTERPX0NPTjIsCQlNVDYzMzFfUkdfVlRDWE8yX0xQX0NUUkxfTUFTSywJCU1UNjMzMV9SR19WVENYTzJfTFBfQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjMzMV9BTkFMRE9fQ09OMiwJCU1UNjMzMV9SR19WVENYTzJfTFBfU0VUX01BU0ssCQlNVDYzMzFfUkdfVlRDWE8yX0xQX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzMV9BTkFMRE9fQ09OMiwJCU1UNjMzMV9SR19WVENYTzJfRU5fTUFTSywJCU1UNjMzMV9SR19WVENYTzJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzFfQU5BTERPX0NPTjIsCQlNVDYzMzFfUkdfVlRDWE8yX09OX0NUUkxfTUFTSywJCU1UNjMzMV9SR19WVENYTzJfT05fQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjMzMV9BTkFMRE9fQ09OMiwJCU1UNjMzMV9SR19WVENYTzJfU1JDTEtfRU5fU0VMX01BU0ssCQlNVDYzMzFfUkdfVlRDWE8yX1NSQ0xLX0VOX1NFTF9TSElGVCwJCX0sCisgICAge01UNjMzMV9TWVNMRE9fQ09ONSwJCU1UNjMzMV9SR19WTUlQSV9FTl9NQVNLLAkJTVQ2MzMxX1JHX1ZNSVBJX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzMxX1NZU0xET19DT041LAkJTVQ2MzMxX1JHX1ZNSVBJX09OX0NUUkxfTUFTSywJCU1UNjMzMV9SR19WTUlQSV9PTl9DVFJMX1NISUZULAkJfSwKKyAgICB7TVQ2MzMxX1NZU0xET19DT041LAkJTVQ2MzMxX1JHX1ZNSVBJX1NSQ0xLX0VOX1NFTF9NQVNLLAkJTVQ2MzMxX1JHX1ZNSVBJX1NSQ0xLX0VOX1NFTF9TSElGVCwJCX0sCisgICAge01UNjMzMV9ESUdMRE9fQ09OOCwJCU1UNjMzMV9SR19WU0lNMV9MUF9DVFJMX01BU0ssCQlNVDYzMzFfUkdfVlNJTTFfTFBfQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjMzMV9ESUdMRE9fQ09OOCwJCU1UNjMzMV9SR19WU0lNMV9MUF9NT0RFX1NFVF9NQVNLLAkJTVQ2MzMxX1JHX1ZTSU0xX0xQX01PREVfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzMxX0RJR0xET19DT044LAkJTVQ2MzMxX1JHX1ZTSU0xX0VOX01BU0ssCQlNVDYzMzFfUkdfVlNJTTFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzFfRElHTERPX0NPTjksCQlNVDYzMzFfUkdfVlNJTTJfTFBfQ1RSTF9NQVNLLAkJTVQ2MzMxX1JHX1ZTSU0yX0xQX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzMzFfRElHTERPX0NPTjksCQlNVDYzMzFfUkdfVlNJTTJfTFBfTU9ERV9TRVRfTUFTSywJCU1UNjMzMV9SR19WU0lNMl9MUF9NT0RFX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzMV9ESUdMRE9fQ09OOSwJCU1UNjMzMV9SR19WU0lNMl9FTl9NQVNLLAkJTVQ2MzMxX1JHX1ZTSU0yX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzMxX0RJR0xET19DT04yMSwJCU1UNjMzMV9SR19WU0lNMV9WT1NFTF9NQVNLLAkJTVQ2MzMxX1JHX1ZTSU0xX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzMxX0RJR0xET19DT04yMiwJCU1UNjMzMV9SR19WU0lNMl9WT1NFTF9NQVNLLAkJTVQ2MzMxX1JHX1ZTSU0yX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzMxX0FVWEFEQ19BREMxNSwJCU1UNjMzMV9BVVhBRENfQURDX09VVF9DSDdfQllfTURfTUFTSywJCU1UNjMzMV9BVVhBRENfQURDX09VVF9DSDdfQllfTURfU0hJRlQsCQl9LAorICAgIHtNVDYzMzFfQVVYQURDX0FEQzE1LAkJTVQ2MzMxX0FVWEFEQ19BRENfUkRZX0NIN19CWV9NRF9NQVNLLAkJTVQ2MzMxX0FVWEFEQ19BRENfUkRZX0NIN19CWV9NRF9TSElGVCwJCX0sCisgICAge01UNjMzMV9BVVhBRENfQURDMTcsCQlNVDYzMzFfQVVYQURDX0FEQ19PVVRfQ0g0X0JZX01EX01BU0ssCQlNVDYzMzFfQVVYQURDX0FEQ19PVVRfQ0g0X0JZX01EX1NISUZULAkJfSwKKyAgICB7TVQ2MzMxX0FVWEFEQ19BREMxNywJCU1UNjMzMV9BVVhBRENfQURDX1JEWV9DSDRfQllfTURfTUFTSywJCU1UNjMzMV9BVVhBRENfQURDX1JEWV9DSDRfQllfTURfU0hJRlQsCQl9LAorICAgIHtNVDYzMzFfQVVYQURDX1JRU1QxX1NFVCwJCU1UNjMzMV9BVVhBRENfUlFTVDFfU0VUX01BU0ssCQlNVDYzMzFfQVVYQURDX1JRU1QxX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzMV9BVVhBRENfUlFTVDFfQ0xSLAkJTVQ2MzMxX0FVWEFEQ19SUVNUMV9DTFJfTUFTSywJCU1UNjMzMV9BVVhBRENfUlFTVDFfQ0xSX1NISUZULAkJfSwKK307CisKK2NvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSBwbWljNjMzMl9mbGFnc190YWJsZVtdID0gCit7CisgICAge01UNjMzMl9IV0NJRCwJCU1UNjMzMl9IV0NJRF9NQVNLLAkJTVQ2MzMyX0hXQ0lEX1NISUZULAkJfSwKKyAgICB7TVQ2MzMyX1NXQ0lELAkJTVQ2MzMyX1NXQ0lEX01BU0ssCQlNVDYzMzJfU1dDSURfU0hJRlQsCQl9LAorICAgIHtNVDYzMzJfVE9QX0NLUEROX0NPTjIsCQlNVDYzMzJfVE9QX0NLUEROX0NPTjJfUlNWX01BU0ssCQlNVDYzMzJfVE9QX0NLUEROX0NPTjJfUlNWX1NISUZULAkJfSwKKyAgICB7TVQ2MzMyX1ZSRjFfQ09ONCwJCU1UNjMzMl9SR19WUkYxX01PREVTRVRfTUFTSywJCU1UNjMzMl9SR19WUkYxX01PREVTRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMzJfVlJGMV9DT043LAkJTVQ2MzMyX1ZSRjFfRU5fQ1RSTF9NQVNLLAkJTVQ2MzMyX1ZSRjFfRU5fQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjMzMl9WUkYxX0NPTjcsCQlNVDYzMzJfVlJGMV9WT1NFTF9DVFJMX01BU0ssCQlNVDYzMzJfVlJGMV9WT1NFTF9DVFJMX1NISUZULAkJfSwKKyAgICB7TVQ2MzMyX1ZSRjFfQ09OOCwJCU1UNjMzMl9WUkYxX0VOX1NFTF9NQVNLLAkJTVQ2MzMyX1ZSRjFfRU5fU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzMyX1ZSRjFfQ09OOCwJCU1UNjMzMl9WUkYxX1ZPU0VMX1NFTF9NQVNLLAkJTVQ2MzMyX1ZSRjFfVk9TRUxfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzMyX1ZSRjFfQ09OOSwJCU1UNjMzMl9WUkYxX0VOX01BU0ssCQlNVDYzMzJfVlJGMV9FTl9TSElGVCwJCX0sCisgICAge01UNjMzMl9WUkYxX0NPTjExLAkJTVQ2MzMyX1ZSRjFfVk9TRUxfTUFTSywJCU1UNjMzMl9WUkYxX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzMyX1ZSRjFfQ09OMTIsCQlNVDYzMzJfVlJGMV9WT1NFTF9PTl9NQVNLLAkJTVQ2MzMyX1ZSRjFfVk9TRUxfT05fU0hJRlQsCQl9LAorICAgIHtNVDYzMzJfVlJGMV9DT04xMywJCU1UNjMzMl9WUkYxX1ZPU0VMX1NMRUVQX01BU0ssCQlNVDYzMzJfVlJGMV9WT1NFTF9TTEVFUF9TSElGVCwJCX0sCisgICAge01UNjMzMl9WUkYxX0NPTjE4LAkJTVQ2MzMyX1ZSRjFfVlNMRUVQX0VOX01BU0ssCQlNVDYzMzJfVlJGMV9WU0xFRVBfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzJfVlJGMl9DT040LAkJTVQ2MzMyX1JHX1ZSRjJfTU9ERVNFVF9NQVNLLAkJTVQ2MzMyX1JHX1ZSRjJfTU9ERVNFVF9TSElGVCwJCX0sCisgICAge01UNjMzMl9WUkYyX0NPTjcsCQlNVDYzMzJfVlJGMl9FTl9DVFJMX01BU0ssCQlNVDYzMzJfVlJGMl9FTl9DVFJMX1NISUZULAkJfSwKKyAgICB7TVQ2MzMyX1ZSRjJfQ09ONywJCU1UNjMzMl9WUkYyX1ZPU0VMX0NUUkxfTUFTSywJCU1UNjMzMl9WUkYyX1ZPU0VMX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzMzJfVlJGMl9DT044LAkJTVQ2MzMyX1ZSRjJfRU5fU0VMX01BU0ssCQlNVDYzMzJfVlJGMl9FTl9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMzJfVlJGMl9DT044LAkJTVQ2MzMyX1ZSRjJfVk9TRUxfU0VMX01BU0ssCQlNVDYzMzJfVlJGMl9WT1NFTF9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMzJfVlJGMl9DT045LAkJTVQ2MzMyX1ZSRjJfRU5fTUFTSywJCU1UNjMzMl9WUkYyX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzMyX1ZSRjJfQ09OMTEsCQlNVDYzMzJfVlJGMl9WT1NFTF9NQVNLLAkJTVQ2MzMyX1ZSRjJfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMzJfVlJGMl9DT04xMiwJCU1UNjMzMl9WUkYyX1ZPU0VMX09OX01BU0ssCQlNVDYzMzJfVlJGMl9WT1NFTF9PTl9TSElGVCwJCX0sCisgICAge01UNjMzMl9WUkYyX0NPTjEzLAkJTVQ2MzMyX1ZSRjJfVk9TRUxfU0xFRVBfTUFTSywJCU1UNjMzMl9WUkYyX1ZPU0VMX1NMRUVQX1NISUZULAkJfSwKKyAgICB7TVQ2MzMyX1ZSRjJfQ09OMTgsCQlNVDYzMzJfVlJGMl9WU0xFRVBfRU5fTUFTSywJCU1UNjMzMl9WUkYyX1ZTTEVFUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzMl9WUEFfQ09ONCwJCU1UNjMzMl9SR19WUEFfTU9ERVNFVF9NQVNLLAkJTVQ2MzMyX1JHX1ZQQV9NT0RFU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzMyX1ZQQV9DT045LAkJTVQ2MzMyX1ZQQV9FTl9NQVNLLAkJTVQ2MzMyX1ZQQV9FTl9TSElGVCwJCX0sCisgICAge01UNjMzMl9WUEFfQ09OMTEsCQlNVDYzMzJfVlBBX1ZPU0VMX01BU0ssCQlNVDYzMzJfVlBBX1ZPU0VMX1NISUZULAkJfSwKK307CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgICBXUklURSBBUElzICAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIFdyaXRlIFdob2xlIEJ5dGVzCit2b2lkIGRjbF9wbWljNjMzMV8zMl9ieXRlX3dyaXRlKERDTF9VSU5UMTYgYWRkciwgRENMX1VJTlQxNiB2YWwpCit7CisgICAga2FsX3VpbnQzMiBzYXZlZE1hc2sgPSAwOworI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCisJc2F2ZWRNYXNrID0gU2F2ZUFuZFNldElSUU1hc2soKTsKKyNlbmRpZiAvLyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKSAgICAgCisgICAgCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKyAgICBpZihhZGRyIDw9IFBNSUM2MzMxX01BWF9SRUdfTlVNKQorICAgIHsKKyAgICAgICAgcG1pYzYzMzFfcmVnW2FkZHJdID0gdmFsOworICAgIH0KKworICAgIGlmKGFkZHIgPj0gTVQ2MzMyX1BNSUNfUkVHX0JBU0UgJiYgYWRkciA8PSAoTVQ2MzMyX1BNSUNfUkVHX0JBU0UgKyBQTUlDNjMzMl9NQVhfUkVHX05VTSkpCisgICAgeworICAgICAgICBwbWljNjMzMl9yZWdbYWRkciAtIE1UNjMzMl9QTUlDX1JFR19CQVNFXSA9IHZhbDsKKyAgICB9CisgICAgICAgICAgICAgIAorI2lmIGRlZmluZWQoX19NRDFfXykgICAgCisgICAgRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBhZGRyLCB2YWwsIDB4MDApOworI2Vsc2UKKyAgICBEcnZQV1JBUF9XQUNTMShQTUlDX1dSQVBfV1JJVEUsIGFkZHIsIHZhbCwgMHgwMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKSAgICAKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5zdGFydF90aW1lLCBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZW5kX3RpbWUpOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKQkKKyAgICBSZXN0b3JlSVJRTWFzayhzYXZlZE1hc2spOworI2VuZGlmIC8vI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pICAgCit9CisKKy8vIFdyaXRlIHJlZ2lzdGVyIGZpZWxkCit2b2lkIGRjbF9wbWljNjMzMV9maWVsZF93cml0ZShQTUlDNjMzMV9GTEFHU19MSVNUX0VOVU0gZmxhZywgRENMX1VJTlQxNiBzZWwpCit7CisgICAgY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZICpwVGFibGUgPSBwbWljNjMzMV9mbGFnc190YWJsZTsKKyAgICBrYWxfdWludDMyIHNhdmVkTWFzayA9IDA7CisjaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykKKwlzYXZlZE1hc2sgPSBTYXZlQW5kU2V0SVJRTWFzaygpOworI2VuZGlmIC8vI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pICAKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisgICAgcG1pY19yZWdfbG9nLmNvbW1hbmRfZmxhZyA9IGZsYWc7CisgICAgcG1pY19yZWdfbG9nLnJlZ19iZWZvcmVfd3JpdGUgPSBwbWljNjMzMV9yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF07CisKKyAgICBwbWljNjMzMV9yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gJj0gfihwVGFibGVbZmxhZ10ubWFzayA8PCBwVGFibGVbZmxhZ10uc2hpZnQpOworICAgIHBtaWM2MzMxX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSB8PSAoKGthbF91aW50MTYpc2VsIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCk7ICAgIAorCisjaWYgZGVmaW5lZChfX01EMV9fKSAgICAKKyAgICBEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWM2MzMxX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSwgMHgwMCk7CisjZWxzZQorICAgIERydlBXUkFQX1dBQ1MxKFBNSUNfV1JBUF9XUklURSwgcFRhYmxlW2ZsYWddLm9mZnNldCwgcG1pYzYzMzFfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKyNlbmRpZgorCisgICAgcG1pY19yZWdfbG9nLndyaXRlX3ZhbHVlID0gc2VsOworICAgIHBtaWNfcmVnX2xvZy5hZGRyZXNzX29mZnNldCA9IHBUYWJsZVtmbGFnXS5vZmZzZXQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19tYXNrID0gcFRhYmxlW2ZsYWddLm1hc2s7CisgICAgcG1pY19yZWdfbG9nLnJlZ19zaGlmdCA9IHBUYWJsZVtmbGFnXS5zaGlmdDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2FkZHIgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfZGF0YSA9IHBtaWM2MzMxX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKSAgICAKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5zdGFydF90aW1lLCBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZW5kX3RpbWUpOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKQkKKyAgICBSZXN0b3JlSVJRTWFzayhzYXZlZE1hc2spOworI2VuZGlmIC8vI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pICAKK30KKwordm9pZCBkY2xfcG1pYzYzMzJfZmllbGRfd3JpdGUoUE1JQzYzMzJfRkxBR1NfTElTVF9FTlVNIGZsYWcsIERDTF9VSU5UMTYgc2VsKQoreworICAgIGNvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSAqcFRhYmxlID0gcG1pYzYzMzJfZmxhZ3NfdGFibGU7CisgICAga2FsX3VpbnQzMiBzYXZlZE1hc2sgPSAwOworI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCisJc2F2ZWRNYXNrID0gU2F2ZUFuZFNldElSUU1hc2soKTsKKyNlbmRpZiAvLyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKSAgCisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworICAgIHBtaWNfcmVnX2xvZy5jb21tYW5kX2ZsYWcgPSBmbGFnOworICAgIHBtaWNfcmVnX2xvZy5yZWdfYmVmb3JlX3dyaXRlID0gcG1pYzYzMzJfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdOworCisgICAgcG1pYzYzMzJfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdICY9IH4ocFRhYmxlW2ZsYWddLm1hc2sgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKyAgICBwbWljNjMzMl9yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gfD0gKChrYWxfdWludDE2KXNlbCA8PCBwVGFibGVbZmxhZ10uc2hpZnQpOyAgICAKKworI2lmIGRlZmluZWQoX19NRDFfXykgICAgCisgICAgRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBwVGFibGVbZmxhZ10ub2Zmc2V0LCBwbWljNjMzMl9yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0sIDB4MDApOworI2Vsc2UKKyAgICBEcnZQV1JBUF9XQUNTMShQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWM2MzMyX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSwgMHgwMCk7CisjZW5kaWYKKworICAgIHBtaWNfcmVnX2xvZy53cml0ZV92YWx1ZSA9IHNlbDsKKyAgICBwbWljX3JlZ19sb2cuYWRkcmVzc19vZmZzZXQgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfbWFzayA9IHBUYWJsZVtmbGFnXS5tYXNrOworICAgIHBtaWNfcmVnX2xvZy5yZWdfc2hpZnQgPSBwVGFibGVbZmxhZ10uc2hpZnQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19hZGRyID0gcFRhYmxlW2ZsYWddLm9mZnNldDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2RhdGEgPSBwbWljNjMzMl9yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF07CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykgICAgCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uc3RhcnRfdGltZSwgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykJCisgICAgUmVzdG9yZUlSUU1hc2soc2F2ZWRNYXNrKTsKKyNlbmRpZiAvLyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKSAgCit9CisKKy8vIFdyaXRlIHJlZ2lzdGVyIGZpZWxkIGZvciBHUElPCit2b2lkIGRjbF9wbWljNjMzMV9ncGlvX2ZpZWxkX3dyaXRlKFBNSUM2MzMxX0ZMQUdTX0xJU1RfRU5VTSBmbGFnLCBEQ0xfVUlOVDE2IHNlbCkKK3sKKyAgICBjb25zdCBQTUlDX0ZMQUdfVEFCTEVfRU5UUlkgKnBUYWJsZSA9IHBtaWM2MzMxX2ZsYWdzX3RhYmxlOworICAgIGthbF91aW50MzIgc2F2ZWRNYXNrID0gMDsKKyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKQorCXNhdmVkTWFzayA9IFNhdmVBbmRTZXRJUlFNYXNrKCk7CisjZW5kaWYgLy8jaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykgCisKKyAgICBwbWljX3JlZ19sb2cuY29tbWFuZF9mbGFnID0gZmxhZzsKKyAgICBwbWljX3JlZ19sb2cucmVnX2JlZm9yZV93cml0ZSA9IHBtaWM2MzMxX2dwaW9fcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdOworICAgIAorI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisgICAgcG1pYzYzMzFfZ3Bpb19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gJj0gfihwVGFibGVbZmxhZ10ubWFzayA8PCBwVGFibGVbZmxhZ10uc2hpZnQpOworICAgIHBtaWM2MzMxX2dwaW9fcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdIHw9ICgoa2FsX3VpbnQxNilzZWwgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KTsgICAgCisKKyNpZiBkZWZpbmVkKF9fTUQxX18pCisgICAgLy8gRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBHUElPX0JBU0UgKyBwVGFibGVbZmxhZ10ub2Zmc2V0LCBwbWljNjMzMV9ncGlvX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSwgMHgwMCk7CisjZWxzZQorICAgIC8vIERydlBXUkFQX1dBQ1MxKFBNSUNfV1JBUF9XUklURSwgR1BJT19CQVNFICsgcFRhYmxlW2ZsYWddLm9mZnNldCwgcG1pYzYzMzFfZ3Bpb19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0sIDB4MDApOworI2VuZGlmCisKKyAgICBwbWljX3JlZ19sb2cud3JpdGVfdmFsdWUgPSBzZWw7CisgICAgcG1pY19yZWdfbG9nLmFkZHJlc3Nfb2Zmc2V0ID0gcFRhYmxlW2ZsYWddLm9mZnNldDsKKyAgICBwbWljX3JlZ19sb2cucmVnX21hc2sgPSBwVGFibGVbZmxhZ10ubWFzazsKKyAgICBwbWljX3JlZ19sb2cucmVnX3NoaWZ0ID0gcFRhYmxlW2ZsYWddLnNoaWZ0OworICAgIC8vIHBtaWNfcmVnX2xvZy5yZWdfYWRkciA9IEdQSU9fQkFTRSArIHBUYWJsZVtmbGFnXS5vZmZzZXQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19kYXRhID0gcG1pYzYzMzFfZ3Bpb19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF07CisgICAgCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpICAgIAorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLnN0YXJ0X3RpbWUsIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5lbmRfdGltZSk7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCQorICAgIFJlc3RvcmVJUlFNYXNrKHNhdmVkTWFzayk7CisjZW5kaWYgLy8jaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykgICAgCit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICAgIFJFQUQgQVBJcyAgICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gUmVhZCBXaG9sZSBCeXRlcworRENMX1VJTlQxNiBkY2xfcG1pYzYzMzFfMzJfYnl0ZV9yZXR1cm4oRENMX1VJTlQxNiBhZGRyKQoreworICAgIERDTF9VSU5UMTYgcmVnX3RlbXA7CisgICAga2FsX3VpbnQzMiBzYXZlZE1hc2sgPSAwOyAgICAKKyAgICAKKyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKQorCXNhdmVkTWFzayA9IFNhdmVBbmRTZXRJUlFNYXNrKCk7CisjZW5kaWYgLy8jaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykgCisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19NRDFfXykgICAKKyAgICBEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfUkVBRCwgKERDTF9VSU5UMzIpYWRkciwgMHgwMCwgJnJlZ190ZW1wKTsKKyNlbHNlCisgICAgRHJ2UFdSQVBfV0FDUzEoUE1JQ19XUkFQX1JFQUQsIChEQ0xfVUlOVDMyKWFkZHIsIDB4MDAsICZyZWdfdGVtcCk7ICAgIAorI2VuZGlmCisKKyAgICBpZihhZGRyIDw9IFBNSUM2MzMxX01BWF9SRUdfTlVNKQorICAgIHsKKyAgICAgICAgcG1pYzYzMzFfcmVnW2FkZHJdID0gcmVnX3RlbXA7CisgICAgfQorCisgICAgaWYoYWRkciA+PSBNVDYzMzJfUE1JQ19SRUdfQkFTRSAmJiBhZGRyIDw9IChNVDYzMzJfUE1JQ19SRUdfQkFTRSArIFBNSUM2MzMyX01BWF9SRUdfTlVNKSkKKyAgICB7CisgICAgICAgIHBtaWM2MzMyX3JlZ1thZGRyIC0gTVQ2MzMyX1BNSUNfUkVHX0JBU0VdID0gcmVnX3RlbXA7CisgICAgfQorICAgIAorI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKSAgICAKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5zdGFydF90aW1lLCBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZW5kX3RpbWUpOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKQkKKyAgICBSZXN0b3JlSVJRTWFzayhzYXZlZE1hc2spOworI2VuZGlmIC8vI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pICAgCisKKyAgICByZXR1cm4gcmVnX3RlbXA7Cit9CisKKy8vIFJlYWQgcmVnaXN0ZXIgZmllbGQKK0RDTF9VSU5UMTYgZGNsX3BtaWM2MzMxX2ZpZWxkX3JlYWQoUE1JQzYzMzFfRkxBR1NfTElTVF9FTlVNIGZsYWcpCit7CisgICAgY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZICpwVGFibGUgPSBwbWljNjMzMV9mbGFnc190YWJsZTsKKyAgICBrYWxfdWludDMyIHNhdmVkTWFzayA9IDA7CisgICAgRENMX1VJTlQxNiByZWdfcmV0dXJuID0gMDsKKworI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCisJc2F2ZWRNYXNrID0gU2F2ZUFuZFNldElSUU1hc2soKTsKKyNlbmRpZiAvLyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKSAKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01EMV9fKQorICAgIERydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCBwVGFibGVbZmxhZ10ub2Zmc2V0LCAweDAwLCAmcG1pYzYzMzFfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdKTsKKyNlbHNlCisgICAgRHJ2UFdSQVBfV0FDUzEoUE1JQ19XUkFQX1JFQUQsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIDB4MDAsICZwbWljNjMzMV9yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0pOworI2VuZGlmCisKKyAgICByZWdfcmV0dXJuID0gKChwbWljNjMzMV9yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gJiAocFRhYmxlW2ZsYWddLm1hc2sgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KSkgPj4gcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKyAgICAKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykgICAgCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uc3RhcnRfdGltZSwgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykJCisgICAgUmVzdG9yZUlSUU1hc2soc2F2ZWRNYXNrKTsKKyNlbmRpZiAvLyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKSAgICAKKworICAgIHJldHVybiByZWdfcmV0dXJuOyAgIAorfQorCitEQ0xfVUlOVDE2IGRjbF9wbWljNjMzMl9maWVsZF9yZWFkKFBNSUM2MzMyX0ZMQUdTX0xJU1RfRU5VTSBmbGFnKQoreworICAgIGNvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSAqcFRhYmxlID0gcG1pYzYzMzJfZmxhZ3NfdGFibGU7CisgICAga2FsX3VpbnQzMiBzYXZlZE1hc2sgPSAwOworICAgIERDTF9VSU5UMTYgcmVnX3JldHVybiA9IDA7CisKKyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKQorCXNhdmVkTWFzayA9IFNhdmVBbmRTZXRJUlFNYXNrKCk7CisjZW5kaWYgLy8jaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykgCisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19NRDFfXykKKyAgICBEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfUkVBRCwgcFRhYmxlW2ZsYWddLm9mZnNldCwgMHgwMCwgJnBtaWM2MzMyX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSk7CisjZWxzZQorICAgIERydlBXUkFQX1dBQ1MxKFBNSUNfV1JBUF9SRUFELCBwVGFibGVbZmxhZ10ub2Zmc2V0LCAweDAwLCAmcG1pYzYzMzJfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdKTsKKyNlbmRpZgorCisgICAgcmVnX3JldHVybiA9ICgocG1pYzYzMzJfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdICYgKHBUYWJsZVtmbGFnXS5tYXNrIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCkpID4+IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisgICAgCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpICAgIAorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLnN0YXJ0X3RpbWUsIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5lbmRfdGltZSk7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCQorICAgIFJlc3RvcmVJUlFNYXNrKHNhdmVkTWFzayk7CisjZW5kaWYgLy8jaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykgICAgCisKKyAgICByZXR1cm4gcmVnX3JldHVybjsgICAKK30KKworLy8gRXhwb3J0ZWQgZm9yIEVNIHVzZWQKK3ZvaWQgcG1pYzYzMzFfMzJfRU1fcmVnX3dyaXRlKGthbF91aW50MTYgcmVnLCBrYWxfdWludDE2IHZhbCl7CisgICAgZGNsX3BtaWM2MzMxXzMyX2J5dGVfd3JpdGUocmVnLCB2YWwpOworfQorCitrYWxfdWludDE2IHBtaWM2MzMxXzMyX0VNX3JlZ19yZWFkKGthbF91aW50MTYgcmVnKXsKKyAgICByZXR1cm4gIGRjbF9wbWljNjMzMV8zMl9ieXRlX3JldHVybihyZWcpOworfQorCitQTVVfQ1RSTF9QTUlDX0VDT19WRVJTSU9OX0VOVU0gcG1pYzYzMzFfZ2V0X0VDT192ZXJzaW9uKHZvaWQpCit7CisgICAgcmV0dXJuIHBtaWM2MzMxX2h3X3ZlcnNpb247Cit9CisKK1BNVV9DVFJMX1BNSUNfRUNPX1ZFUlNJT05fRU5VTSBwbWljNjMzMl9nZXRfRUNPX3ZlcnNpb24odm9pZCkKK3sKKyAgICByZXR1cm4gcG1pYzYzMzJfaHdfdmVyc2lvbjsKK30KKworLyoKK2NvbnN0IERDTF9VSU5UMzIgdnBhX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUXzAwXzUwMDAwMF9WLCAgIFBNVV9WT0xUXzAwXzU1MDAwMF9WLCAgIFBNVV9WT0xUXzAwXzYwMDAwMF9WLCAgIFBNVV9WT0xUXzAwXzY1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAwXzcwMDAwMF9WLCAgIFBNVV9WT0xUXzAwXzc1MDAwMF9WLCAgIFBNVV9WT0xUXzAwXzgwMDAwMF9WLCAgIFBNVV9WT0xUXzAwXzg1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAwXzkwMDAwMF9WLCAgIFBNVV9WT0xUXzAwXzk1MDAwMF9WLCAgIFBNVV9WT0xUXzAxXzAwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzA1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAxXzEwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzE1MDAwMF9WLCAgIFBNVV9WT0xUXzAxXzIwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzI1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAxXzMwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzM1MDAwMF9WLCAgIFBNVV9WT0xUXzAxXzQwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzQ1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAxXzUwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzU1MDAwMF9WLCAgIFBNVV9WT0xUXzAxXzYwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzY1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAxXzcwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzc1MDAwMF9WLCAgIFBNVV9WT0xUXzAxXzgwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzg1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAxXzkwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzk1MDAwMF9WLCAgIFBNVV9WT0xUXzAyXzAwMDAwMF9WLCAgIFBNVV9WT0xUXzAyXzA1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAyXzEwMDAwMF9WLCAgIFBNVV9WT0xUXzAyXzE1MDAwMF9WLCAgIFBNVV9WT0xUXzAyXzIwMDAwMF9WLCAgIFBNVV9WT0xUXzAyXzI1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAyXzMwMDAwMF9WLCAgIFBNVV9WT0xUXzAyXzM1MDAwMF9WLCAgIFBNVV9WT0xUXzAyXzQwMDAwMF9WLCAgIFBNVV9WT0xUXzAyXzQ1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAyXzUwMDAwMF9WLCAgIFBNVV9WT0xUXzAyXzU1MDAwMF9WLCAgIFBNVV9WT0xUXzAyXzYwMDAwMF9WLCAgIFBNVV9WT0xUXzAyXzY1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAyXzcwMDAwMF9WLCAgIFBNVV9WT0xUXzAyXzc1MDAwMF9WLCAgIFBNVV9WT0xUXzAyXzgwMDAwMF9WLCAgIFBNVV9WT0xUXzAyXzg1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAyXzkwMDAwMF9WLCAgIFBNVV9WT0xUXzAyXzk1MDAwMF9WLCAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLCAgIFBNVV9WT0xUXzAzXzA1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAzXzEwMDAwMF9WLCAgIFBNVV9WT0xUXzAzXzE1MDAwMF9WLCAgIFBNVV9WT0xUXzAzXzIwMDAwMF9WLCAgIFBNVV9WT0xUXzAzXzI1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAzXzMwMDAwMF9WLCAgIFBNVV9WT0xUXzAzXzM1MDAwMF9WLCAgIFBNVV9WT0xUXzAzXzQwMDAwMF9WLCAgIFBNVV9WT0xUXzAzXzQ1MDAwMF9WLCAgIAorICAgIFBNVV9WT0xUXzAzXzUwMDAwMF9WLCAgIFBNVV9WT0xUXzAzXzU1MDAwMF9WLCAgIFBNVV9WT0xUXzAzXzYwMDAwMF9WLCAgIFBNVV9WT0xUXzAzXzY1MDAwMF9WLCAgIAorCit9OworKi8KKworY29uc3QgRENMX1VJTlQzMiB2cGFfdm9zZWxbXSA9Cit7CisgICAgUE1VX1ZPTFRfMDBfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMF82MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgIFBNVV9WT0xUXzAwXzcwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDBfODAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICBQTVVfVk9MVF8wMF85MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzAwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisgICAgUE1VX1ZPTFRfMDFfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV8yMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgIFBNVV9WT0xUXzAxXzMwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfNDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICBQTVVfVk9MVF8wMV81MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisgICAgUE1VX1ZPTFRfMDFfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgIFBNVV9WT0xUXzAxXzkwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfMDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgCisgICAgUE1VX1ZPTFRfMDJfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl8yMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgIFBNVV9WT0xUXzAyXzMwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfNDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICBQTVVfVk9MVF8wMl81MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisgICAgUE1VX1ZPTFRfMDJfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl84MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgIFBNVV9WT0xUXzAyXzkwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICBQTVVfVk9MVF8wM18xMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzIwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisgICAgUE1VX1ZPTFRfMDNfMzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wM180MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgIFBNVV9WT0xUXzAzXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKworfTsKKworY29uc3QgRENMX1VJTlQzMiB2c2ltMV92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICBQTVVfVk9MVF8wM18wMDAwMDBfViwgIFBNVV9WT0xUXzAxXzgwMDAwMF9WLCAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLCAgCisgICAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICBQTVVfVk9MVF8wM18wMDAwMDBfViwKK307CisKK1BNVV9QQVJBTUVURVJfVEFCTEVfRU5UUlkgcG11X3BhcmFtZXRlcl90YWJsZVtdPQoreworCXtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZQQV9TVyksCQkgICAgdnBhX3Zvc2VsLAkJICAgIE5VTEwsCSAgICAJCUdFVEFSUk5VTSh2cGFfdm9zZWwpCQl9LCAgICAKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWU0lNMSksCQkgICAgdnNpbTFfdm9zZWwsCQlOVUxMLAkgICAgCQlHRVRBUlJOVU0odnNpbTFfdm9zZWwpCQl9LAorICAgIHtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZTSU0yKSwJCSAgICB2c2ltMV92b3NlbCwJCU5VTEwsICAgCQkJR0VUQVJSTlVNKHZzaW0xX3Zvc2VsKQkgICAgfSwgICAgICAgICAgICAKK307CisKK2V4dGVybiBQTVVfQ09OVFJPTF9IQU5ETEVSIHBtdV9jb250cm9sX2hhbmRsZXI7CisKK0RDTF9VSU5UMTYgcG11X3BhcmFtZXRlcl9zaXplID0gMDsKKworRENMX1NUQVRVUyBQTUlDNjMzMV8zMl9jb250cm9sX2hhbmRsZXIoRENMX0hBTkRMRSBoYW5kbGUsRENMX0NUUkxfQ01EIGNtZCxEQ0xfQ1RSTF9EQVRBX1QgKmRhdGEpCit7CisgICAgRENMX1VJTlQxNglyZWdWYWw7CisgICAgRENMX0lOVDMyCXJldHVybl92YWwgPSBTVEFUVVNfRkFJTDsKKworICAgIHN3aXRjaChjbWQpCisgICAgeworICAgICAgICBjYXNlIExET19CVUNLX1NFVF9FTjoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOICpwTGRvQnVja0N0cmw9JihkYXRhLT5yUE1VTGRvQnVja1NldEVuKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlJGMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzMl9maWVsZF93cml0ZShNVDYzMzJfVlJGMV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzJfZmllbGRfd3JpdGUoTVQ2MzMyX1ZSRjJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzFfZmllbGRfd3JpdGUoTVQ2MzMxX1JHX1ZTSU0xX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzMV9maWVsZF93cml0ZShNVDYzMzFfUkdfVlNJTTJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNSVBJOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzMxX2ZpZWxkX3dyaXRlKE1UNjMzMV9SR19WTUlQSV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlBBX1NXOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzMyX2ZpZWxkX3dyaXRlKE1UNjMzMl9WUEFfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9MUF9NT0RFX1NFVCAqcExkb0J1Y2tDdHJsID0mIChkYXRhLT5yUE1VTGRvQnVja1NldExwTW9kZVNldCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzMxX2ZpZWxkX3dyaXRlKE1UNjMzMV9SR19WU0lNMV9MUF9NT0RFX1NFVCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzFfZmllbGRfd3JpdGUoTVQ2MzMxX1JHX1ZTSU0yX0xQX01PREVfU0VULCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIExET19CVUNLX1NFVF9MUF9TRUw6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9MUF9TRUwgKnBMZG9CdWNrQ3RybCA9JiAoZGF0YS0+clBNVUxkb0J1Y2tTZXRMcFNlbCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzMyX2ZpZWxkX3dyaXRlKE1UNjMzMl9WUkYxX1ZTTEVFUF9FTiwgcExkb0J1Y2tDdHJsLT5vblNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzMV9maWVsZF93cml0ZShNVDYzMzFfUkdfVlNJTTFfTFBfTU9ERV9TRVQsIHBMZG9CdWNrQ3RybC0+b25TZWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzFfZmllbGRfd3JpdGUoTVQ2MzMxX1JHX1ZTSU0yX0xQX01PREVfU0VULCBwTGRvQnVja0N0cmwtPm9uU2VsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsgICAgICAgIAorCisgICAgICAgIGNhc2UgTERPX0JVQ0tfU0VUX1ZPTFRBR0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0Vm9sdGFnZSk7CisgICAgICAgICAgICByZWdWYWwgPSBQTVVfUGFyYW1ldGVyX3RvX1ZhbHVlKEVOQyhjbWQsIHBMZG9CdWNrQ3RybC0+bW9kKSwgcExkb0J1Y2tDdHJsLT52b2x0YWdlKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzFfZmllbGRfd3JpdGUoTVQ2MzMxX1JHX1ZTSU0xX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzFfZmllbGRfd3JpdGUoTVQ2MzMxX1JHX1ZTSU0yX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlBBX1NXOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzMyX2ZpZWxkX3dyaXRlKE1UNjMzMl9WUEFfVk9TRUwsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorCQljYXNlIExET19CVUNLX1NFVF9PTl9DVFJMOgorCQl7CisJCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT05fQ1RSTCAqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tTZXRPbkN0cmwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWTUlQSToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIDA6IFNXIGNvbnRyb2wsIDE6IEhXCisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzMV9maWVsZF93cml0ZShNVDYzMzFfUkdfVk1JUElfT05fQ1RSTCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX1NFVF9NT0RFU0VUOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldE1vZGVzZXQpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUEFfU1c6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzJfZmllbGRfd3JpdGUoTVQ2MzMyX1JHX1ZQQV9NT0RFU0VULCBwTGRvQnVja0N0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzJfZmllbGRfd3JpdGUoTVQ2MzMyX1JHX1ZSRjFfTU9ERVNFVCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7ICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzJfZmllbGRfd3JpdGUoTVQ2MzMyX1JHX1ZSRjJfTU9ERVNFVCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7ICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworICAgICAgICAKKwkJY2FzZSBMRE9fQlVDS19TRVRfRU5fQ1RSTDoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0NUUkwgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRFbkN0cmwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUkYxOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzMyX2ZpZWxkX3dyaXRlKE1UNjMzMl9WUkYxX0VOX0NUUkwsIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzMl9maWVsZF93cml0ZShNVDYzMzJfVlJGMl9FTl9DVFJMLCBwTGRvQnVja0N0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfRU5fU0VMOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fU0VMICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0RW5TZWwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUkYxOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzMyX2ZpZWxkX3dyaXRlKE1UNjMzMl9WUkYxX0VOX1NFTCwgcExkb0J1Y2tDdHJsLT5zZWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgICAgCisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzJfZmllbGRfd3JpdGUoTVQ2MzMyX1ZSRjJfRU5fU0VMLCBwTGRvQnVja0N0cmwtPnNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBMRE9fQlVDS19TRVRfU1JDTEtfRU5fU0VMOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfU1JDTEtfRU5fU0VMICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0U3JjbGtFblNlbCk7CisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUkYxOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzMxX2ZpZWxkX3dyaXRlKE1UNjMzMV9SR19WTUlQSV9TUkNMS19FTl9TRUwsIHBMZG9CdWNrQ3RybC0+c2VsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIFZQQV9TRVRfRU46CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX1ZQQV9TRVRfRU4gKnBWcGFTZXRFbiA9ICYoZGF0YS0+clBNVVZwYVNldEVuKTsKKyAgICAgICAgICAgIGRjbF9wbWljNjMzMl9maWVsZF93cml0ZShNVDYzMzJfVlBBX0VOLCBwVnBhU2V0RW4tPmVuYWJsZSk7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlBBX0dFVF9WT0xUQUdFX0xJU1Q6CisJCXsKKwkJCVBNVV9DVFJMX1ZQQV9HRVRfVk9MVEFHRV9MSVNUICpwVnBhQ3RybCA9ICYoZGF0YS0+clBNVVZwYUdldFZvbHRhZ2VMaXN0KTsKKwkJCXBWcGFDdHJsLT5wVm9sdGFnZUxpc3QgPSB2cGFfdm9zZWw7CisJCQlwVnBhQ3RybC0+bnVtYmVyID0gR0VUQVJSTlVNKHZwYV92b3NlbCk7CQkJCisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisgICAgICAgIGNhc2UgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX1ZSRjFfU0VUX01PREVTRVRfQ0tQRE5fU0VUICpwVnJmMUN0cmwgPSAmKGRhdGEtPnJQTVVWcmYxU2V0TW9kZXNldENrcGRuU2V0KTsKKyAgICAgICAgICAgIC8vIE9ubHkgY29udHJvbCBbMTA6N10KKyAgICAgICAgICAgIGRjbF9wbWljNjMzMV8zMl9ieXRlX3dyaXRlKE1UNjMzMl9UT1BfQ0tQRE5fQ09OMl9TRVQgLCAoKHBWcmYxQ3RybC0+cmVndmFsICYgMHhGKSA8PCA3KSk7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOyAgICAgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFZSRjFfU0VUX01PREVTRVRfQ0tQRE5fQ0xSOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9WUkYxX1NFVF9NT0RFU0VUX0NLUEROX0NMUiAqcFZyZjFDdHJsID0gJihkYXRhLT5yUE1VVnJmMVNldE1vZGVzZXRDa3BkbkNscik7CisgICAgICAgICAgICAvLyBPbmx5IGNvbnRyb2wgWzEwOjddCisgICAgICAgICAgICBkY2xfcG1pYzYzMzFfMzJfYnl0ZV93cml0ZShNVDYzMzJfVE9QX0NLUEROX0NPTjJfQ0xSICwgKChwVnJmMUN0cmwtPnJlZ3ZhbCAmIDB4RikgPDwgNykpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsgICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBWUkYxX0dFVF9NT0RFU0VUX0NLUEROOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9WUkYxX0dFVF9NT0RFU0VUX0NLUEROICpwVnJmMUN0cmwgPSAmKGRhdGEtPnJQTVVWcmYxR2V0TW9kZXNldENrcGRuKTsKKyAgICAgICAgICAgIHBWcmYxQ3RybC0+cmVndmFsID0gKGRjbF9wbWljNjMzMV8zMl9ieXRlX3JldHVybihNVDYzMzJfVE9QX0NLUEROX0NPTjIpICYgMHgwNzgwKSA+PiA3OworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIC8qCisgICAgICAgIGNhc2UgQURDX1NFVF9SUVNUOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9BRENfU0VUX1JRU1QgKnBBZGNDdHJsID0gJihkYXRhLT5yUE1VQWRjU2V0UnFzdCk7CisgICAgICAgICAgICBpZigoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9JTklUKSAmJiAoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9EQVRBKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRjbF9wbWljNjMzMV8zMl9ieXRlX3dyaXRlKFRPUF9DS1BETjFfU0VULCAoMHgxIDw8IFJHX0NMS1NRX0VOX0FVWF9NRF9TSElGVCkpOworICAgICAgICAgICAgZGNsX3BtaWM2MzMxXzMyX2J5dGVfd3JpdGUoQVVYQURDX0NPTjI3LCAoMHgwIDw8IDE1KSk7CisgICAgICAgICAgICBkY2xfcG1pYzYzMzFfZmllbGRfd3JpdGUoUkdfTURfUlFTVCwgMHgwKTsgLy8gTmVlZCBTZXQgMCBmaXJzdAorCQkJCisgICAgICAgICAgICBkY2xfcG1pYzYzMzFfZmllbGRfd3JpdGUoUkdfTURfUlFTVCwgcEFkY0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfUkVRVUVTVDsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBBRENfR0VUX1JEWV9NRDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfQURDX0dFVF9SRFlfTUQgKnBBZGNDdHJsID0gJihkYXRhLT5yUE1VQWRjR2V0UmR5TWQpOworI2lmIGRlZmluZWQoRlBHQV9DVFApCisgICAgICAgICAgICBkYmdfcHJpbnQoIltQTUlDX1dSQVBfTURdIEFEQyBEYXRhIFN0YXR1cyA9ICV4XG4iLCBkY2xfcG1pYzYzMzFfZmllbGRfcmVhZChSR19BRENfUkRZX01EKSk7CisjZW5kaWYKKyAgICAgICAgICAgIHBBZGNDdHJsLT5zdGF0dXMgPSAoRENMX0JPT0wpZGNsX3BtaWM2MzMxX2ZpZWxkX3JlYWQoUkdfQURDX1JEWV9NRCk7CisgICAgICAgICAgICBpZigoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9SRVFVRVNUKSAmJiAoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9CVVNZKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmKHBBZGNDdHJsLT5zdGF0dXMgPT0gRENMX1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX1JFQURZOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFVWEFEQ19TdGF0dXMgPSBBVVhBRENfUkVBRF9CVVNZOyAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFEQ19HRVRfT1VUX01EOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9BRENfR0VUX09VVF9NRCAqcEFkY0N0cmwgPSAmKGRhdGEtPnJQTVVBZGNHZXRPdXRNZCk7CisgICAgICAgICAgICBpZihBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX1JFQURZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZGNDdHJsLT5kYXRhID0gKERDTF9VSU5UMzIpZGNsX3BtaWM2MzMxX2ZpZWxkX3JlYWQoUkdfQURDX09VVF9NRCk7IAorICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0RBVEE7CisgICAgICAgICAgICBkY2xfcG1pYzYzMzFfZmllbGRfd3JpdGUoUkdfTURfUlFTVCwgMHgwKTsKKyAgICAgICAgICAgIGRjbF9wbWljNjMzMV8zMl9ieXRlX3dyaXRlKFRPUF9DS1BETjFfQ0xSLCAoMHgxIDw8IFJHX0NMS1NRX0VOX0FVWF9NRF9TSElGVCkpOworICAgICAgICAgICAgZGNsX3BtaWM2MzMxXzMyX2J5dGVfd3JpdGUoQVVYQURDX0NPTjI3LCAoMHgxIDw8IDE1KSk7CisJCQkKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgICovICAgIAorICAgICAgICBjYXNlIE1JU0NfU0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CQkJCisgICAgICAgICAgICBQTVVfQ1RSTF9NSVNDX1NFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmwgPSAmKGRhdGEtPnJQTVVNaXNjU2V0UmVnaXN0ZXJWYWx1ZSk7CisgICAgICAgICAgICBwbWljNjMzMV8zMl9FTV9yZWdfd3JpdGUocENockN0cmwtPm9mZnNldCwgcENockN0cmwtPnZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIE1JU0NfR0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9NSVNDX0dFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmw9JihkYXRhLT5yUE1VTWlzY0dldFJlZ2lzdGVyVmFsdWUpOworICAgICAgICAgICAgcENockN0cmwtPnZhbHVlID0gcG1pYzYzMzFfMzJfRU1fcmVnX3JlYWQocENockN0cmwtPm9mZnNldCk7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CQkJCQorICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldHVybl92YWw7CisKK30KKworZXh0ZXJuIHZvaWQgZGNsX3BtaWM2MzMxX21vZGVtX29ubHlfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGRjbF9wbWljNjMzMl9tb2RlbV9vbmx5X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpOworI2lmIGRlZmluZWQoUE1JQ19VTklUX1RFU1QpCitleHRlcm4gdm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgUE1JQ19Vbml0X1Rlc3Qodm9pZCk7CisjZW5kaWYKKworCit2b2lkIGRjbF9wbWljNjMzMV9pbnRlcm5hbF9pbml0KHZvaWQpCit7Cit9CisKK3ZvaWQgZGNsX3BtaWM2MzMyX2ludGVybmFsX2luaXQodm9pZCkKK3sKK30KKwordm9pZCBkY2xfcG1pYzYzMzFfMzJfaW5pdCh2b2lkKXsKKyAgICBleHRlcm4gdm9pZCBwbWljX3dyYXBfZHVtcF9pbml0KHZvaWQpOworICAgIHBtdV9jb250cm9sX2hhbmRsZXIgPSBQTUlDNjMzMV8zMl9jb250cm9sX2hhbmRsZXI7CisgICAgcG11X3BhcmFtZXRlcl9zaXplID0gR0VUQVJSTlVNKHBtdV9wYXJhbWV0ZXJfdGFibGUpOworICAgIAorICAgIHBtaWNfd3JhcF9kdW1wX2luaXQoKTsKKworI2lmICAhZGVmaW5lZChfX1NNQVJUX1BIT05FX01PREVNX18pICAgIAorICAgIERydlBXUkFQX0luaXQoKTsKKyNlbmRpZiAgICAKKyAgICBwbWljNjMzMV9od192ZXJzaW9uID0gUE1JQ19FQ09fRTE7CisgICAgcG1pYzYzMzFfc3dfdmVyc2lvbiA9IFBNSUNfRUNPX0UxOworICAgIHBtaWM2MzMyX2h3X3ZlcnNpb24gPSBQTUlDX0VDT19FMTsKKyAgICBwbWljNjMzMl9zd192ZXJzaW9uID0gUE1JQ19FQ09fRTE7CisKKyAgICAvLyBHZXQgTVQ2MzMxL01UNjMzMiBFQ08gdmVyc2lvbgorICAgIHsKKyAgICAgICAga2FsX3VpbnQxNiBwbWljNjMzMV9od19lY29fdmVyc2lvbiA9IDA7CisgICAgICAgIGthbF91aW50MTYgcG1pYzYzMzFfc3dfZWNvX3ZlcnNpb24gPSAwOworICAgICAgICBrYWxfdWludDE2IHBtaWM2MzMyX2h3X2Vjb192ZXJzaW9uID0gMDsKKyAgICAgICAga2FsX3VpbnQxNiBwbWljNjMzMl9zd19lY29fdmVyc2lvbiA9IDA7CisgICAgICAgIHBtaWM2MzMxX2h3X2Vjb192ZXJzaW9uID0gZGNsX3BtaWM2MzMxXzMyX2J5dGVfcmV0dXJuKE1UNjMzMV9IV0NJRCk7CisgICAgICAgIHBtaWM2MzMyX2h3X2Vjb192ZXJzaW9uID0gZGNsX3BtaWM2MzMxXzMyX2J5dGVfcmV0dXJuKE1UNjMzMl9IV0NJRCk7CisgICAgICAgIHBtaWM2MzMxX3N3X2Vjb192ZXJzaW9uID0gZGNsX3BtaWM2MzMxXzMyX2J5dGVfcmV0dXJuKE1UNjMzMV9TV0NJRCk7CisgICAgICAgIHBtaWM2MzMyX3N3X2Vjb192ZXJzaW9uID0gZGNsX3BtaWM2MzMxXzMyX2J5dGVfcmV0dXJuKE1UNjMzMl9TV0NJRCk7CisKKyAgICAgICAgaWYgKHBtaWM2MzMxX2h3X2Vjb192ZXJzaW9uID09IE1UNjMzMV9IV19DSURfRTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBtaWM2MzMxX2h3X3ZlcnNpb24gPSBQTUlDX0VDT19FMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBtaWM2MzMxX2h3X3ZlcnNpb24gPSBQTUlDX0VDT19FMjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwbWljNjMzMV9zd19lY29fdmVyc2lvbiA9PSBNVDYzMzFfU1dfQ0lEX0UxKQorICAgICAgICB7CisgICAgICAgICAgICBwbWljNjMzMV9zd192ZXJzaW9uID0gUE1JQ19FQ09fRTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwbWljNjMzMV9zd192ZXJzaW9uID0gUE1JQ19FQ09fRTI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChwbWljNjMzMl9od19lY29fdmVyc2lvbiA9PSBNVDYzMzJfU1dfQ0lEX0UxKQorICAgICAgICB7CisgICAgICAgICAgICBwbWljNjMzMl9od192ZXJzaW9uID0gUE1JQ19FQ09fRTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwbWljNjMzMl9od192ZXJzaW9uID0gUE1JQ19FQ09fRTI7CisgICAgICAgIH0KKworICAgICAgICBpZiAocG1pYzYzMzJfc3dfZWNvX3ZlcnNpb24gPT0gTVQ2MzMxX1NXX0NJRF9FMSkKKyAgICAgICAgeworICAgICAgICAgICAgcG1pYzYzMzJfc3dfdmVyc2lvbiA9IFBNSUNfRUNPX0UxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcG1pYzYzMzJfc3dfdmVyc2lvbiA9IFBNSUNfRUNPX0UyOworICAgICAgICB9ICAgICAgICAKKyAgICAgICAgCisgICAgfQorCisgICAgUE1JQ19SZWFkX0FsbCgpOworCisjaWYgIWRlZmluZWQoX19TTUFSVF9QSE9ORV9NT0RFTV9fKSAgICAKKyAgICBkY2xfcG1pYzYzMzFfbW9kZW1fb25seV9pbml0KCk7CisgICAgZGNsX3BtaWM2MzMyX21vZGVtX29ubHlfaW5pdCgpOworI2VuZGlmCisgICAgZGNsX3BtaWM2MzMxX2ludGVybmFsX2luaXQoKTsKKyAgICBkY2xfcG1pYzYzMzJfaW50ZXJuYWxfaW5pdCgpOworCisgICAgLy8gIHBtaWM2MzMxX2N1c3RvbWl6YXRpb25faW5pdCgpOworICAgIC8vICBwbWljNjMzMl9jdXN0b21pemF0aW9uX2luaXQoKTsKKyNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQorICAgIFBNSUNfUmVhZF9BbGwoKTsKKyAgICBQTUlDX1VuaXRfVGVzdCgpOworICAgIFBNSUNfUmVhZF9BbGwoKTsKKyNlbmRpZiAgICAKKyAgICBwbWljX2luaXRfZG9uZSA9IERDTF9UUlVFOworfQorCitEQ0xfQk9PTCBkY2xfcG1pY19pbml0X2RvbmVfcXVlcnkodm9pZCkKK3sKKyAgICAgICAgaWYocG1pY19pbml0X2RvbmUgPT0gRENMX1RSVUUpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIERDTF9GQUxTRTsKKyAgICAgICAgfQorfQorCitEQ0xfVUlOVDMyIERSVl9SZWFkX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkcikKK3sKKyAgICByZXR1cm4gZGNsX3BtaWM2MzMxXzMyX2J5dGVfcmV0dXJuKHBtaWNfYWRkcik7Cit9CisKK3ZvaWQgRFJWX1dyaXRlX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkciwgRENMX1VJTlQzMiB2YWx1ZSkKK3sKKyAgICBkY2xfcG1pYzYzMzFfMzJfYnl0ZV93cml0ZShwbWljX2FkZHIsIHZhbHVlKTsKK30KKwordm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpCit7CisgICAgdm9sYXRpbGUga2FsX3VpbnQzMiBpOworICAgIGZvciAoaSA9IDA7IGkgPCBQTUlDNjMzMV9NQVhfUkVHX05VTTsgaSArPSAyKXsKKyAgICAgICAgcG1pYzYzMzFfcmVnW2ldID0gZGNsX3BtaWM2MzMxXzMyX2J5dGVfcmV0dXJuKGkpOyAKKyAgICB9CisgICAgZm9yIChpID0gTVQ2MzMyX1BNSUNfUkVHX0JBU0U7IGkgPCAoTVQ2MzMyX1BNSUNfUkVHX0JBU0UgKyBQTUlDNjMzMl9NQVhfUkVHX05VTSk7IGkgKz0gMil7ICAgIAorICAgICAgICBwbWljNjMzMl9yZWdbaSAtIE1UNjMzMl9QTUlDX1JFR19CQVNFXSA9IGRjbF9wbWljNjMzMV8zMl9ieXRlX3JldHVybihpKTsgICAgICAgICAKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQordm9pZCBQTUlDX1VuaXRfVGVzdCh2b2lkKQoreworeworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT05fQ1RSTCB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5tb2RlID0gSFdfQ09OVFJPTDsgLy8gKFNXX0NPTlRST0xfQllfUkVHIC8gSFdfQ09OVFJPTCkKK3ZhbC5tb2QgPSBWTUlQSTsKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX09OX0NUUkwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7Cit2YWwubW9kID0gVk1JUEk7CitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKK3ZhbC5tb2QgPSBWUEFfU1c7CitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLm1vZD1WUEFfU1c7Cit2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOyAKKy8qICAgICBQTVVfVk9MVF8wMF81MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMF82MDAwMDBfViwgICAgICAKKyAgICAgICAgUE1VX1ZPTFRfMDBfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDBfODAwMDAwX1YsICAgICAgCisgICAgICAgIFBNVV9WT0xUXzAwXzkwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAxXzAwMDAwMF9WLCAgICAgIAorICAgICAgICBQTVVfVk9MVF8wMV8xMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV8yMDAwMDBfViwgICAgICAKKyAgICAgICAgUE1VX1ZPTFRfMDFfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfNDAwMDAwX1YsICAgICAgCisgICAgICAgIFBNVV9WT0xUXzAxXzUwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAxXzYwMDAwMF9WLCAgICAgIAorICAgICAgICBQTVVfVk9MVF8wMV83MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICAgICAKKyAgICAgICAgUE1VX1ZPTFRfMDFfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfMDAwMDAwX1YsICAgIAorICAgICAgICBQTVVfVk9MVF8wMl8xMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl8yMDAwMDBfViwgICAgICAKKyAgICAgICAgUE1VX1ZPTFRfMDJfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfNDAwMDAwX1YsICAgICAgCisgICAgICAgIFBNVV9WT0xUXzAyXzUwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAyXzYwMDAwMF9WLCAgICAgIAorICAgICAgICBQTVVfVk9MVF8wMl83MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl84MDAwMDBfViwgICAgICAKKyAgICAgICAgUE1VX1ZPTFRfMDJfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgICAgCisgICAgICAgIFBNVV9WT0xUXzAzXzEwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAzXzIwMDAwMF9WLCAgICAgIAorICAgICAgICBQTVVfVk9MVF8wM18zMDAwMDBfViwgICAgICBQTVVfVk9MVF8wM180MDAwMDBfViwgICAgICAKKyAgICAgICAgUE1VX1ZPTFRfMDNfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfNjAwMDAwX1YsICAgICAgKi8KK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5tb2QgPSBWUEFfU1c7Cit2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9NT0RFU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0NUUkwgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwubW9kZSA9IEhXX0NPTlRST0w7IC8vIChTV19DT05UUk9MX0JZX1JFRyAvIEhXX0NPTlRST0wpCit2YWwubW9kID0gVlJGMTsKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOX0NUUkwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fU0VMIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLnNlbCA9IFNSQ0xLRU5fSU4xX1NFTDsgCisvKiBTUkNMS0VOX0lOMV9TRUwgLyBTUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX09SX1NSQ0xLRU5fSU4yX1NFTC8KKyAgICBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMICovCit2YWwubW9kID0gVlJGMTsKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOX1NFTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLm1vZCA9IFZSRjE7Cit2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9NT0RFU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwucmVndmFsID0gMHg3OyAvLyAoMHgwfjB4RikKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9WUkYxX1NFVF9NT0RFU0VUX0NLUEROX0NMUiB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5yZWd2YWwgPSAweDc7IC8vICgweDB+MHhGKQorRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBWUkYxX1NFVF9NT0RFU0VUX0NLUEROX0NMUiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX1ZSRjFfR0VUX01PREVTRVRfQ0tQRE4gdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisvLyB2YWwucmVndmFsIHdpbGwgYmUgeW91ciByZXF1ZXN0IHZhbHVlICggbm8gbmVlZCBkbyBhbnkgc2hpZnQpCitEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfR0VUX01PREVTRVRfQ0tQRE4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fQ1RSTCB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5tb2RlID0gSFdfQ09OVFJPTDsgLy8gKFNXX0NPTlRST0xfQllfUkVHIC8gSFdfQ09OVFJPTCkKK3ZhbC5tb2QgPSBWUkYyOworRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fQ1RSTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9FTl9TRUwgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwuc2VsID0gU1JDTEtFTl9JTjFfU0VMOyAKKy8qIFNSQ0xLRU5fSU4xX1NFTCAvIFNSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfT1JfU1JDTEtFTl9JTjJfU0VMLworICAgIFNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwgKi8KK3ZhbC5tb2QgPSBWUkYyOworRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fU0VMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLmVuYWJsZSA9IERDTF9UUlVFOyAvLyAoRENMX1RSVUUgLyBEQ0xfRkFMU0UpOwordmFsLm1vZCA9IFZSRjI7CitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLm1vZCA9IFZSRjE7Cit2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9NT0RFU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1NSQ0xLX0VOX1NFTCB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5zZWwgPSBTUkNMS0VOX0lOMV9TRUw7IAorLyogU1JDTEtFTl9JTjFfU0VMIC8gU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMl9TRUwvCisgICAgU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTCAqLwordmFsLm1vZCA9IFZNSVBJOworRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfU1JDTEtfRU5fU0VMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLmVuYWJsZSA9IERDTF9UUlVFOyAvLyAoRENMX1RSVUUgLyBEQ0xfRkFMU0UpOwordmFsLm1vZCA9IFZTSU0xOworRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7Cit2YWwubW9kID0gVlNJTTI7CitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLm1vZD1WU0lNMTsKK3ZhbC52b2x0YWdlID0gUE1VX1ZPTFRfMDFfODAwMDAwX1Y7IAorLyogIFBNVV9WT0xUXzAxXzgwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLCAgICovCitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPTFRBR0UgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwubW9kPVZTSU0yOwordmFsLnZvbHRhZ2UgPSBQTVVfVk9MVF8wMV84MDAwMDBfVjsgCisvKiAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgKi8KK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQorfQorI2VuZGlmIC8vIEVuZCBvZiAjaWYgZGVmaW5lZChQTUlDX1VOSVRfVEVTVCkKKworI2VuZGlmIC8vIEVuZCBvZiAjaWYgZGVmaW5lZChQTUlDXzYzMzFfUkVHX0FQSSkgfHwgZGVmaW5lZChQTUlDXzYzMzJfUkVHX0FQSSkKKwpkaWZmIC0tZ2l0IGEvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzMxXzMyX2luaXQuYyBiL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjMzMV8zMl9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3OGU1MgotLS0gL2Rldi9udWxsCisrKyBiL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjMzMV8zMl9pbml0LmMKQEAgLTAsMCArMSBAQAorLyogRW1wdHkgRmlsZSAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjMzMV9pbml0LmMgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzMzFfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YWMxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzMzFfaW5pdC5jCkBAIC0wLDAgKzEsMjMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTMKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgIGRjbF9wbWljNjMzMV9pbml0LmMKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgICBNT0xZIFNvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgICBUaGlzIGZpbGUgaXMgZm9yIFBNSUMgNjMzMQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpbml0LmgiCisjaW5jbHVkZSAiZGNsLmgiCisKK2V4dGVybiBEQ0xfVUlOVDMyIERSVl9SZWFkX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkcik7CitleHRlcm4gdm9pZCBEUlZfV3JpdGVfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyLCBEQ0xfVUlOVDMyIHZhbHVlKTsKKworc3RhdGljIHZvaWQgUE1JQ19EUlZfU2V0RGF0YShEQ0xfVUlOVDMyIGFkZHIsIERDTF9VSU5UMzIgYml0bWFzaywgRENMX1VJTlQxNiB2YWx1ZSwgRENMX1VJTlQzMiBiYW5rKQoreworICAgRENMX1VJTlQzMiB0ZW1wOworICAgYWRkciB8PSAoYmFuayA8PCAzMSk7CisgICB0ZW1wID0gKH4oYml0bWFzaykpICYgRFJWX1JlYWRfUE1JQ19EYXRhKGFkZHIpOworICAgdGVtcCB8PSAoKHZhbHVlKSAmIChiaXRtYXNrKSk7CisgICBEUlZfV3JpdGVfUE1JQ19EYXRhKGFkZHIsdGVtcCk7Cit9CisKKy8vIE1UNjMzMSBFQ09fRTEKK3ZvaWQgZGNsX3BtaWM2MzMxX21vZGVtX29ubHlfaW5pdCh2b2lkKQoreworCS8vIFJHX0VOX0RSVlNFTFs0OjRdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDQgICAgICAgLCAweDEwICAgICAgLCAweDEwICAgICAgLCAweDApOworCisJLy8gUkdfUlNUQl9EUlZfU0VMWzU6NV0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4NCAgICAgICAsIDB4MjAgICAgICAsIDB4MjAgICAgICAsIDB4MCk7CisKKwkvLyBWRFZGUzExX1BHX0gyTF9FTlswOjBdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweEMgICAgICAgLCAweDEgICAgICAgLCAweDEgICAgICAgLCAweDApOworCisJLy8gVkRWRlMxMl9QR19IMkxfRU5bMToxXSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHhDICAgICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKworCS8vIFZEVkZTMTNfUEdfSDJMX0VOWzI6Ml0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4QyAgICAgICAsIDB4NCAgICAgICAsIDB4NCAgICAgICAsIDB4MCk7CisKKwkvLyBWRFZGUzE0X1BHX0gyTF9FTlszOjNdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweEMgICAgICAgLCAweDggICAgICAgLCAweDggICAgICAgLCAweDApOworCisJLy8gVkNPUkUxX1BHX0gyTF9FTls0OjRdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweEMgICAgICAgLCAweDEwICAgICAgLCAweDEwICAgICAgLCAweDApOworCisJLy8gVkNPUkUyX1BHX0gyTF9FTls1OjVdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweEMgICAgICAgLCAweDIwICAgICAgLCAweDIwICAgICAgLCAweDApOworCisJLy8gVkdQVV9QR19IMkxfRU5bNjo2XSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHhDICAgICAgICwgMHg0MCAgICAgICwgMHg0MCAgICAgICwgMHgwKTsKKworCS8vIFZJTzE4X1BHX0gyTF9FTls3OjddID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweEMgICAgICAgLCAweDgwICAgICAgLCAweDgwICAgICAgLCAweDApOworCisJLy8gVkFVRDMyX1BHX0gyTF9FTls4OjhdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweEMgICAgICAgLCAweDEwMCAgICAgLCAweDEwMCAgICAgLCAweDApOworCisJLy8gVlRDWE8xX1BHX0gyTF9FTls5OjldID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweEMgICAgICAgLCAweDIwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworCisJLy8gVlVTQl9QR19IMkxfRU5bMTA6MTBdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweEMgICAgICAgLCAweDQwMCAgICAgLCAweDQwMCAgICAgLCAweDApOworCisJLy8gVlNSQU1fRFZGUzFfUEdfSDJMX0VOWzExOjExXSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHhDICAgICAgICwgMHg4MDAgICAgICwgMHg4MDAgICAgICwgMHgwKTsKKworCS8vIFZJTzI4X1BHX0gyTF9FTlsxMjoxMl0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4QyAgICAgICAsIDB4MTAwMCAgICAsIDB4MTAwMCAgICAsIDB4MCk7CisKKwkvLyBVVkxPX0wySF9ERUJfRU5bNTo1XSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHgxMCAgICAgICwgMHgyMCAgICAgICwgMHgyMCAgICAgICwgMHgwKTsKKworCS8vIFNUUlVQX1BXUk9GRl9TRVFfRU5bMDowXSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHgxNiAgICAgICwgMHgxICAgICAgICwgMHgxICAgICAgICwgMHgwKTsKKworCS8vIFNUUlVQX1BXUk9GRl9QUkVPRkZfRU5bMToxXSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHgxNiAgICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKworCS8vIFJHX1NSQ0xLRU5fSU4xX0hXX01PREVbNDo0XSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHgxMDYgICAgICwgMHgxMCAgICAgICwgMHgxMCAgICAgICwgMHgwKTsKKworCS8vIFJHX1NSQ0xLRU5fSU4yX0hXX01PREVbNTo1XSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHgxMDYgICAgICwgMHgyMCAgICAgICwgMHgyMCAgICAgICwgMHgwKTsKKworCS8vIFJHX09TQ19TRUxfSFdfTU9ERVs2OjZdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDEwNiAgICAgLCAweDQwICAgICAgLCAweDQwICAgICAgLCAweDApOworCisJLy8gUkdfU01UX1dEVFJTVEJfSU5bMDowXSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHgxMjQgICAgICwgMHgxICAgICAgICwgMHgxICAgICAgICwgMHgwKTsKKworCS8vIFJHX1NNVF9TUkNMS0VOX0lOMVsyOjJdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDEyNCAgICAgLCAweDQgICAgICAgLCAweDQgICAgICAgLCAweDApOworCisJLy8gUkdfU01UX1NSQ0xLRU5fSU4yWzM6M10gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4MTI0ICAgICAsIDB4OCAgICAgICAsIDB4OCAgICAgICAsIDB4MCk7CisKKwkvLyBSR19SVENfNzVLX0NLX1BETlsyOjJdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDEzRSAgICAgLCAweDQgICAgICAgLCAweDQgICAgICAgLCAweDApOworCisJLy8gUkdfUlRDREVUX0NLX1BETlszOjNdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDEzRSAgICAgLCAweDggICAgICAgLCAweDggICAgICAgLCAweDApOworCisJLy8gUkdfU1RSVVBfQVVYQURDX0NLX1BETls2OjZdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDE0NCAgICAgLCAweDQwICAgICAgLCAweDQwICAgICAgLCAweDApOworCisJLy8gUkdfNzVLXzMyS19TRUxbMTA6MTBdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDE0QSAgICAgLCAweDQwMCAgICAgLCAweDQwMCAgICAgLCAweDApOworCisJLy8gVkRWRlMxMV9WT1NFTFs2OjBdID0gMHg0NAorCVBNSUNfRFJWX1NldERhdGEoMHgyNEMgICAgICwgMHg3RiAgICAgICwgMHg0NCAgICAgICwgMHgwKTsKKworCS8vIFZEVkZTMTFfVk9TRUxfT05bNjowXSA9IDB4NDQKKwlQTUlDX0RSVl9TZXREYXRhKDB4MjRFICAgICAsIDB4N0YgICAgICAsIDB4NDQgICAgICAsIDB4MCk7CisKKwkvLyBWQ09SRTJfVk9TRUxbNjowXSA9IDB4NDQKKwlQTUlDX0RSVl9TZXREYXRhKDB4MzZBICAgICAsIDB4N0YgICAgICAsIDB4NDQgICAgICAsIDB4MCk7CisKKwkvLyBWQ09SRTJfVk9TRUxfT05bNjowXSA9IDB4NDQKKwlQTUlDX0RSVl9TZXREYXRhKDB4MzZDICAgICAsIDB4N0YgICAgICAsIDB4NDQgICAgICAsIDB4MCk7CisKKwkvLyBWQ09SRTJfVlNMRUVQX0VOWzg6OF0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4Mzc4ICAgICAsIDB4MTAwICAgICAsIDB4MTAwICAgICAsIDB4MCk7CisKKwkvLyBSR19WU1JBTV9EVkZTMV9WT1NFTFsxNTo5XSA9IDB4NDQKKwlQTUlDX0RSVl9TZXREYXRhKDB4NTM0ICAgICAsIDB4RkUwMCAgICAsIDB4ODgwMCAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDBfU0VMWzE6MF0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4NzNFICAgICAsIDB4MyAgICAgICAsIDB4MSAgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDFfU0VMWzM6Ml0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4NzNFICAgICAsIDB4QyAgICAgICAsIDB4NCAgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDJfU0VMWzU6NF0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4NzNFICAgICAsIDB4MzAgICAgICAsIDB4MTAgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDNfU0VMWzc6Nl0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4NzNFICAgICAsIDB4QzAgICAgICAsIDB4NDAgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDRfU0VMWzk6OF0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4NzNFICAgICAsIDB4MzAwICAgICAsIDB4MTAwICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDVfU0VMWzExOjEwXSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHg3M0UgICAgICwgMHhDMDAgICAgICwgMHg0MDAgICAgICwgMHgwKTsKKworCS8vIEFVWEFEQ19UUklNX0NINl9TRUxbMTM6MTJdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDczRSAgICAgLCAweDMwMDAgICAgLCAweDEwMDAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0g3X1NFTFsxNToxNF0gPSAweDIKKwlQTUlDX0RSVl9TZXREYXRhKDB4NzNFICAgICAsIDB4QzAwMCAgICAsIDB4ODAwMCAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDhfU0VMWzE6MF0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4NzQwICAgICAsIDB4MyAgICAgICAsIDB4MSAgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDlfU0VMWzM6Ml0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4NzQwICAgICAsIDB4QyAgICAgICAsIDB4NCAgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDEwX1NFTFs1OjRdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDc0MCAgICAgLCAweDMwICAgICAgLCAweDEwICAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0gxMV9TRUxbNzo2XSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHg3NDAgICAgICwgMHhDMCAgICAgICwgMHg0MCAgICAgICwgMHgwKTsKKworfQpkaWZmIC0tZ2l0IGEvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzMyX2luaXQuYyBiL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjMzMl9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhOTZhOAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjMzMl9pbml0LmMKQEAgLTAsMCArMSwyMDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxMworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICAgZGNsX3BtaWM2MzMyX2luaXQuYworICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICAgIE1PTFkgU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICAgIFRoaXMgZmlsZSBpcyBmb3IgUE1JQyA2MzMyCisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImluaXQuaCIKKyNpbmNsdWRlICJkY2wuaCIKKworZXh0ZXJuIERDTF9VSU5UMzIgRFJWX1JlYWRfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyKTsKK2V4dGVybiB2b2lkIERSVl9Xcml0ZV9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIsIERDTF9VSU5UMzIgdmFsdWUpOworCitzdGF0aWMgdm9pZCBQTUlDX0RSVl9TZXREYXRhKERDTF9VSU5UMzIgYWRkciwgRENMX1VJTlQzMiBiaXRtYXNrLCBEQ0xfVUlOVDE2IHZhbHVlLCBEQ0xfVUlOVDMyIGJhbmspCit7CisgICBEQ0xfVUlOVDMyIHRlbXA7CisgICBhZGRyIHw9IChiYW5rIDw8IDMxKTsKKyAgIHRlbXAgPSAofihiaXRtYXNrKSkgJiBEUlZfUmVhZF9QTUlDX0RhdGEoYWRkcik7CisgICB0ZW1wIHw9ICgodmFsdWUpICYgKGJpdG1hc2spKTsKKyAgIERSVl9Xcml0ZV9QTUlDX0RhdGEoYWRkcix0ZW1wKTsKK30KKworLy8gTVQ2MzMyIEVDT19FMQordm9pZCBkY2xfcG1pYzYzMzJfbW9kZW1fb25seV9pbml0KHZvaWQpCit7CisJLy8gUkdfU1JDTEtFTl9JTjFfSFdfTU9ERVs0OjRdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDgwMDQgICAgLCAweDEwICAgICAgLCAweDEwICAgICAgLCAweDApOworCisJLy8gUkdfU1JDTEtFTl9JTjJfSFdfTU9ERVs1OjVdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDgwMDQgICAgLCAweDIwICAgICAgLCAweDIwICAgICAgLCAweDApOworCisJLy8gUkdfT1NDX1NFTF9IV19NT0RFWzY6Nl0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4ODAwNCAgICAsIDB4NDAgICAgICAsIDB4NDAgICAgICAsIDB4MCk7CisKKwkvLyBSR19TTVRfV0RUUlNUQl9JTlswOjBdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDgwMUEgICAgLCAweDEgICAgICAgLCAweDEgICAgICAgLCAweDApOworCisJLy8gUkdfQVVYQURDXzEyTV9DS19QRE5bOTo5XSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHg4MDk0ICAgICwgMHgyMDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCS8vIFZEUkFNX1ZTTEVFUF9FTls4OjhdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDg0NUMgICAgLCAweDEwMCAgICAgLCAweDEwMCAgICAgLCAweDApOworCisJLy8gVlNSQU1fRFZGUzJfVlNMRUVQX0VOWzg6OF0gPSAweDAKKwlQTUlDX0RSVl9TZXREYXRhKDB4ODQ5OCAgICAsIDB4MTAwICAgICAsIDB4MCAgICAgICAsIDB4MCk7CisKKwkvLyBWUkYxX0VOX0NUUkxbMDowXSA9IDB4MSA9PiBWUkYxIEZvbGxvdyBTUkNMS0VOMShBMCkKKwlQTUlDX0RSVl9TZXREYXRhKDB4ODRBQSAgICAsIDB4MSAgICAgICAsIDB4MSAgICAgICAsIDB4MCk7CisKKwkvLyBWUkYxX1ZPU0VMWzY6MF0gPSAweDUzID0+IFZSRj0xLjgyOFYKKwlQTUlDX0RSVl9TZXREYXRhKDB4ODRCMiAgICAsIDB4N0YgICAgICAsIDB4NTMgICAgICAsIDB4MCk7CisKKwkvLyBWUkYxX1ZPU0VMX09OWzY6MF0gPSAweDUzID0+IFZSRj0xLjgyOFYKKwlQTUlDX0RSVl9TZXREYXRhKDB4ODRCNCAgICAsIDB4N0YgICAgICAsIDB4NTMgICAgICAsIDB4MCk7CisKKwkvLyBWUkYyX1ZPU0VMWzY6MF0gPSAweDUzID0+IFZSRj0xLjgyOFYKKwlQTUlDX0RSVl9TZXREYXRhKDB4ODRERSAgICAsIDB4N0YgICAgICAsIDB4NTMgICAgICAsIDB4MCk7CisKKwkvLyBWUkYyX1ZPU0VMX09OWzY6MF0gPSAweDUzID0+IFZSRj0xLjgyOFYKKwlQTUlDX0RSVl9TZXREYXRhKDB4ODRFMCAgICAsIDB4N0YgICAgICAsIDB4NTMgICAgICAsIDB4MCk7CisKKwkvLyBWUEFfRFZTX1RSQU5TX0NUUkxbNTo0XSA9IDB4MyA9PiBEVlMgcGVyZm9ybWFuY2UgdHVuaW5nCisJUE1JQ19EUlZfU2V0RGF0YSgweDg1MjYgICAgLCAweDMwICAgICAgLCAweDMwICAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0gyX1NFTFs1OjRdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDg4NkUgICAgLCAweDMwICAgICAgLCAweDEwICAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0gzX1NFTFs3OjZdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDg4NkUgICAgLCAweEMwICAgICAgLCAweDQwICAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0g0X1NFTFs5OjhdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDg4NkUgICAgLCAweDMwMCAgICAgLCAweDEwMCAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0g1X1NFTFsxMToxMF0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4ODg2RSAgICAsIDB4QzAwICAgICAsIDB4NDAwICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDZfU0VMWzEzOjEyXSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHg4ODZFICAgICwgMHgzMDAwICAgICwgMHgxMDAwICAgICwgMHgwKTsKKworCS8vIEFVWEFEQ19UUklNX0NIN19TRUxbMTU6MTRdID0gMHgyCisJUE1JQ19EUlZfU2V0RGF0YSgweDg4NkUgICAgLCAweEMwMDAgICAgLCAweDgwMDAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0g4X1NFTFsxOjBdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDg4NzAgICAgLCAweDMgICAgICAgLCAweDEgICAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0g5X1NFTFszOjJdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDg4NzAgICAgLCAweEMgICAgICAgLCAweDQgICAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0gxMF9TRUxbNTo0XSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHg4ODcwICAgICwgMHgzMCAgICAgICwgMHgxMCAgICAgICwgMHgwKTsKKworCS8vIEFVWEFEQ19UUklNX0NIMTFfU0VMWzc6Nl0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4ODg3MCAgICAsIDB4QzAgICAgICAsIDB4NDAgICAgICAsIDB4MCk7CisKKwkvLyBSR19FTl9EUlZTRUxbNDo0XSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHg4QzBBICAgICwgMHgxMCAgICAgICwgMHgxMCAgICAgICwgMHgwKTsKKworCS8vIFJHX1JTVEJfRFJWX1NFTFs1OjVdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDhDMEEgICAgLCAweDIwICAgICAgLCAweDIwICAgICAgLCAweDApOworCisJLy8gVlNCU1RfUEdfSDJMX0VOWzg6OF0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4OEMxMiAgICAsIDB4MTAwICAgICAsIDB4MTAwICAgICAsIDB4MCk7CisKKwkvLyBWVVNCMzNfUEdfSDJMX0VOWzk6OV0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4OEMxMiAgICAsIDB4MjAwICAgICAsIDB4MjAwICAgICAsIDB4MCk7CisKKwkvLyBWU1JBTV9EVkZTMl9QR19IMkxfRU5bMTA6MTBdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDhDMTIgICAgLCAweDQwMCAgICAgLCAweDQwMCAgICAgLCAweDApOworCisJLy8gVkRSQU1fUEdfSDJMX0VOWzExOjExXSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHg4QzEyICAgICwgMHg4MDAgICAgICwgMHg4MDAgICAgICwgMHgwKTsKKworCS8vIFZEVkZTMl9QR19IMkxfRU5bMTI6MTJdID0gMHgxCisJUE1JQ19EUlZfU2V0RGF0YSgweDhDMTIgICAgLCAweDEwMDAgICAgLCAweDEwMDAgICAgLCAweDApOworCisJLy8gRVhUX1BNSUNfRU5fSU5UX1BHX0gyTF9FTlsxMzoxM10gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4OEMxMiAgICAsIDB4MjAwMCAgICAsIDB4MjAwMCAgICAsIDB4MCk7CisKKwkvLyBWQVVYQjMyX1BHX0gyTF9FTlsxNDoxNF0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4OEMxMiAgICAsIDB4NDAwMCAgICAsIDB4NDAwMCAgICAsIDB4MCk7CisKKwkvLyBTVFJVUF9DT044X1JTVjBbMTQ6OF0gPSAweDEKKwlQTUlDX0RSVl9TZXREYXRhKDB4OEMxNiAgICAsIDB4N0YwMCAgICAsIDB4MTAwICAgICAsIDB4MCk7CisKKwkvLyBTVFJVUF9BVVhBRENfUlNUQl9TRUxbNzo3XSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHg4QzE4ICAgICwgMHg4MCAgICAgICwgMHg4MCAgICAgICwgMHgwKTsKKworCS8vIFNUUlVQX1BXUk9GRl9TRVFfRU5bMDowXSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHg4QzFBICAgICwgMHgxICAgICAgICwgMHgxICAgICAgICwgMHgwKTsKKworCS8vIFNUUlVQX1BXUk9GRl9QUkVPRkZfRU5bMToxXSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHg4QzFBICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZCSUYyOF9PTl9DVFJMWzExOjExXSA9IDB4MQorCVBNSUNfRFJWX1NldERhdGEoMHg4Q0I4ICAgICwgMHg4MDAgICAgICwgMHg4MDAgICAgICwgMHgwKTsKKworfQpkaWZmIC0tZ2l0IGEvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzM1XzM3LmMgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzMzVfMzcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTEyZDFkCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzM1XzM3LmMKQEAgLTAsMCArMSwyNjI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTMKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgIGRjbF9wbWljNjMzNV8zNy5jCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgICAgTU9MWSBTb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgICAgVGhpcyBmaWxlIGlzIGZvciBQTUlDIDYzMzUvNjMzNworICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoRlBHQV9DVFApCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInJlZ19iYXNlLmgiCisjaW5jbHVkZSAiZHJ2X2NvbW0uaCIKKyNpbmNsdWRlICJpbml0LmgiCisjaW5jbHVkZSAiZGNsLmgiCisjaW5jbHVkZSAiZGNsX3BtdV9zdy5oIgorI2luY2x1ZGUgInBtaWNfd3JhcC5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAidXNfdGltZXIuaCIKKworI2lmIGRlZmluZWQoUE1JQ182MzM1X1JFR19BUEkpIHx8IGRlZmluZWQoUE1JQ182MzM3X1JFR19BUEkpCisKKy8vIFN0YXJ0IFBNSUNfVU5JVF9URVNUCisvLyNkZWZpbmUgUE1JQ19VTklUX1RFU1QKKy8vIEFSTSBTZWN0aW9uIFJXL1JPL1pJIFVzZSBJbnRlcm5hbCBTUkFNCisjZGVmaW5lIFBNSUNfSU5URVJOQUxfU1JBTQorCisjaWYgIWRlZmluZWQoX19GVUVfXykKKyNkZWZpbmUgU0FWRUFORFNFVElSUU1BU0soKSAgICAgIFNhdmVBbmRTZXRJUlFNYXNrKCkKKyNkZWZpbmUgUkVTVE9SRUlSUU1BU0sobWFzaykgICAgIFJlc3RvcmVJUlFNYXNrKG1hc2spCisjZWxzZSAvKmRlZmluZWQoX19GVUVfXykqLworI2RlZmluZSBTQVZFQU5EU0VUSVJRTUFTSygpICAgICAgMAorI2RlZmluZSBSRVNUT1JFSVJRTUFTSyhtYXNrKSAgICAge30KKyNlbmRpZiAvKmRlZmluZWQoX19GVUVfXykqLworCisKKyNkZWZpbmUgUE1JQzYzMzVfTUFYX1JFR19OVU0gICAgICAgICAgICAgICAgMHgyQzMwIC8vIDB4MDAwMH4weDJDMkUKKyNkZWZpbmUgUE1JQzYzMzdfTUFYX1JFR19OVU0gICAgICAgICAgICAgICAgMHgxRTEwIC8vIDB4ODAwMH4weDlFMDAKKworCisjZGVmaW5lIE1UNjMzNV9IV19DSURfRTEgICAgICAgICAgICAweDEwMzUKKyNkZWZpbmUgTVQ2MzM1X0hXX0NJRF9FMiAgICAgICAgICAgIDB4MjAzNQorI2RlZmluZSBNVDYzMzVfSFdfQ0lEX0UzICAgICAgICAgICAgMHgzMDM1CisjZGVmaW5lIE1UNjMzNV9TV19DSURfRTEgICAgICAgICAgICAweDEwMzUKKyNkZWZpbmUgTVQ2MzM1X1NXX0NJRF9FMiAgICAgICAgICAgIDB4MjAzNQorI2RlZmluZSBNVDYzMzVfU1dfQ0lEX0UzICAgICAgICAgICAgMHgzMDM1CisjZGVmaW5lIE1UNjMzN19IV19DSURfRTEgICAgICAgICAgICAweDEwMzcKKyNkZWZpbmUgTVQ2MzM3X0hXX0NJRF9FMiAgICAgICAgICAgIDB4MjAzNworI2RlZmluZSBNVDYzMzdfSFdfQ0lEX0UzICAgICAgICAgICAgMHgzMDM3CisjZGVmaW5lIE1UNjMzN19TV19DSURfRTEgICAgICAgICAgICAweDEwMzcKKyNkZWZpbmUgTVQ2MzM3X1NXX0NJRF9FMiAgICAgICAgICAgIDB4MjAzNworI2RlZmluZSBNVDYzMzdfU1dfQ0lEX0UzICAgICAgICAgICAgMHgzMDM3CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgRXhwb3J0ZWQgQVBJcyAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitleHRlcm4ga2FsX2Jvb2wgcG1pYzYzMzVfcmVnX3dyaXRlKGthbF91aW50MTYgcmVnLCBrYWxfdWludDE2IHZhbCk7CitleHRlcm4ga2FsX2Jvb2wgcG1pYzYzMzVfcmVnX3JlYWQoa2FsX3VpbnQxNiByZWcsIGthbF91aW50MTYgKnBWYWwpOworZXh0ZXJuIGthbF9ib29sIHBtaWM2MzM3X3JlZ193cml0ZShrYWxfdWludDE2IHJlZywga2FsX3VpbnQxNiB2YWwpOworZXh0ZXJuIGthbF9ib29sIHBtaWM2MzM3X3JlZ19yZWFkKGthbF91aW50MTYgcmVnLCBrYWxfdWludDE2ICpwVmFsKTsKKworZXh0ZXJuIERDTF9CT09MIGRjbF9wbWljX2luaXRfZG9uZV9xdWVyeSh2b2lkKTsKK3R5cGVkZWYgZW51bQoreworICAgIEFVWEFEQ19SRUFEX0lOSVQgPSAwLAorICAgIEFVWEFEQ19SRUFEX1JFUVVFU1QgPSAxLAorICAgIEFVWEFEQ19SRUFEX1JFQURZID0gMiwKKyAgICBBVVhBRENfUkVBRF9CVVNZID0gMywKKyAgICBBVVhBRENfUkVBRF9EQVRBID0gNAorfUFVWEFEQ19GU007CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiBjb21tYW5kX2ZsYWc7CisgICAga2FsX3VpbnQzMiByZWdfYmVmb3JlX3dyaXRlOworICAgIGthbF91aW50MzIgd3JpdGVfdmFsdWU7CisgICAga2FsX3VpbnQzMiBhZGRyZXNzX29mZnNldDsKKyAgICBrYWxfdWludDMyIHJlZ19tYXNrOworICAgIGthbF91aW50MzIgcmVnX3NoaWZ0OworICAgIGthbF91aW50MzIgcmVnX2FkZHI7CisgICAga2FsX3VpbnQzMiByZWdfZGF0YTsKK31QTUlDX1JFR19MT0c7CisKK0FVWEFEQ19GU00gQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0lOSVQ7CitQTUlDX1JFR19MT0cgcG1pY19yZWdfbG9nOworCisjaWYgKGRlZmluZWQoX19NVEtfVEFSR0VUX18pICYmIGRlZmluZWQoUE1JQ19JTlRFUk5BTF9TUkFNKSkKK19fYXR0cmlidXRlX18gKCh6ZXJvX2luaXQpKQorI2VuZGlmIC8qIF9fTVRLX1RBUkdFVF9fICovCisKK2thbF91aW50OCBwbWljNjMzNV9od192ZXJzaW9uOwora2FsX3VpbnQ4IHBtaWM2MzM1X3N3X3ZlcnNpb247CitrYWxfdWludDggcG1pYzYzMzdfaHdfdmVyc2lvbjsKK2thbF91aW50OCBwbWljNjMzN19zd192ZXJzaW9uOwora2FsX3VpbnQxNiBwbWljNjMzNV9yZWdbUE1JQzYzMzVfTUFYX1JFR19OVU1dOwora2FsX3VpbnQxNiBwbWljNjMzN19yZWdbUE1JQzYzMzdfTUFYX1JFR19OVU1dOworRENMX0JPT0wgcG1pY19pbml0X2RvbmUgPSBEQ0xfRkFMU0U7CisKK2thbF9zcGlubG9ja2lkIGRjbF9wbWljX2FjY2Vzc19zcGlubG9jazsKK2V4dGVybiBrYWxfc3BpbmxvY2tpZCBkY2xfcG1pY19jb250cm9sX3NwaW5sb2NrOworCisjaWYgZGVmaW5lZCAoRFJWX1BNSUNfV1JBUF9FTEJSVVNfUkVHKQorY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZIHBtaWM2MzM1X2ZsYWdzX3RhYmxlW10gPQoreworICAgIHtNVDYzMzVfSFdDSUQsCQlNVDYzMzVfSFdDSURfTUFTSywJCU1UNjMzNV9IV0NJRF9TSElGVCwJCX0sCisgICAge01UNjMzNV9TV0NJRCwJCU1UNjMzNV9TV0NJRF9NQVNLLAkJTVQ2MzM1X1NXQ0lEX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X1RPUF9DT04sCQlNVDYzMzVfUkdfU1JDTEtFTl9JTjBfRU5fTUFTSywJCU1UNjMzNV9SR19TUkNMS0VOX0lOMF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9UT1BfQ09OLAkJTVQ2MzM1X1JHX1NSQ0xLRU5fSU4xX0VOX01BU0ssCQlNVDYzMzVfUkdfU1JDTEtFTl9JTjFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfVE9QX0NPTiwJCU1UNjMzNV9SR19TUkNMS0VOX0lOMF9IV19NT0RFX01BU0ssCQlNVDYzMzVfUkdfU1JDTEtFTl9JTjBfSFdfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjMzNV9UT1BfQ09OLAkJTVQ2MzM1X1JHX1NSQ0xLRU5fSU4xX0hXX01PREVfTUFTSywJCU1UNjMzNV9SR19TUkNMS0VOX0lOMV9IV19NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9DT04wLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9FTl9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNRDFfQ09OMCwJCU1UNjMzNV9SR19CVUNLX1ZNRDFfTFBfTUFTSywJCU1UNjMzNV9SR19CVUNLX1ZNRDFfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTUQxX0NPTjEsCQlNVDYzMzVfUkdfQlVDS19WTUQxX1ZPU0VMX01BU0ssCQlNVDYzMzVfUkdfQlVDS19WTUQxX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9DT04yLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9WT1NFTF9TTEVFUF9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9WT1NFTF9TTEVFUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNRDFfT1BfRU4sCQlNVDYzMzVfUkdfQlVDS19WTUQxX1NXX09QX0VOX01BU0ssCQlNVDYzMzVfUkdfQlVDS19WTUQxX1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9PUF9FTiwJCU1UNjMzNV9SR19CVUNLX1ZNRDFfSFcwX09QX0VOX01BU0ssCQlNVDYzMzVfUkdfQlVDS19WTUQxX0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNRDFfT1BfRU4sCQlNVDYzMzVfUkdfQlVDS19WTUQxX0hXMV9PUF9FTl9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTUQxX09QX0VOLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9IVzJfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19CVUNLX1ZNRDFfSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9PUF9FTl9TRVQsCQlNVDYzMzVfUkdfQlVDS19WTUQxX09QX0VOX1NFVF9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTUQxX09QX0VOX0NMUiwJCU1UNjMzNV9SR19CVUNLX1ZNRDFfT1BfRU5fQ0xSX01BU0ssCQlNVDYzMzVfUkdfQlVDS19WTUQxX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNRDFfT1BfQ0ZHLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9IVzBfT1BfQ0ZHX01BU0ssCQlNVDYzMzVfUkdfQlVDS19WTUQxX0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTUQxX09QX0NGRywJCU1UNjMzNV9SR19CVUNLX1ZNRDFfSFcxX09QX0NGR19NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9PUF9DRkcsCQlNVDYzMzVfUkdfQlVDS19WTUQxX0hXMl9PUF9DRkdfTUFTSywJCU1UNjMzNV9SR19CVUNLX1ZNRDFfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNRDFfT1BfQ0ZHLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9PTl9PUF9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9PTl9PUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNRDFfT1BfQ0ZHLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9MUF9PUF9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9MUF9PUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNRDFfT1BfQ0ZHX1NFVCwJCU1UNjMzNV9SR19CVUNLX1ZNRDFfT1BfQ0ZHX1NFVF9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9PUF9DRkdfQ0xSLAkJTVQ2MzM1X1JHX0JVQ0tfVk1EMV9PUF9DRkdfQ0xSX01BU0ssCQlNVDYzMzVfUkdfQlVDS19WTUQxX09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTUQxX0RCRzAsCQlNVDYzMzVfREFfTklfVk1EMV9WT1NFTF9NQVNLLAkJTVQ2MzM1X0RBX05JX1ZNRDFfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTUQxX0RCRzAsCQlNVDYzMzVfREFfTklfVk1EMV9WT1NFTF9HUkFZX01BU0ssCQlNVDYzMzVfREFfTklfVk1EMV9WT1NFTF9HUkFZX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9EQkcxLAkJTVQ2MzM1X0RBX1FJX1ZNRDFfRU5fTUFTSywJCU1UNjMzNV9EQV9RSV9WTUQxX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1PREVNX0NPTjAsCQlNVDYzMzVfUkdfQlVDS19WTU9ERU1fRU5fTUFTSywJCU1UNjMzNV9SR19CVUNLX1ZNT0RFTV9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9DT04wLAkJTVQ2MzM1X1JHX0JVQ0tfVk1PREVNX0xQX01BU0ssCQlNVDYzMzVfUkdfQlVDS19WTU9ERU1fTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTU9ERU1fQ09OMSwJCU1UNjMzNV9SR19CVUNLX1ZNT0RFTV9WT1NFTF9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1PREVNX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1PREVNX0NPTjIsCQlNVDYzMzVfUkdfQlVDS19WTU9ERU1fVk9TRUxfU0xFRVBfTUFTSywJCU1UNjMzNV9SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9PUF9FTiwJCU1UNjMzNV9SR19CVUNLX1ZNT0RFTV9TV19PUF9FTl9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1PREVNX1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1PREVNX09QX0VOLAkJTVQ2MzM1X1JHX0JVQ0tfVk1PREVNX0hXMF9PUF9FTl9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1PREVNX0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9PUF9FTiwJCU1UNjMzNV9SR19CVUNLX1ZNT0RFTV9IVzFfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19CVUNLX1ZNT0RFTV9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTU9ERU1fT1BfRU4sCQlNVDYzMzVfUkdfQlVDS19WTU9ERU1fSFcyX09QX0VOX01BU0ssCQlNVDYzMzVfUkdfQlVDS19WTU9ERU1fSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1PREVNX09QX0VOX1NFVCwJCU1UNjMzNV9SR19CVUNLX1ZNT0RFTV9PUF9FTl9TRVRfTUFTSywJCU1UNjMzNV9SR19CVUNLX1ZNT0RFTV9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTU9ERU1fT1BfRU5fQ0xSLAkJTVQ2MzM1X1JHX0JVQ0tfVk1PREVNX09QX0VOX0NMUl9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1PREVNX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9PUF9DRkcsCQlNVDYzMzVfUkdfQlVDS19WTU9ERU1fSFcwX09QX0NGR19NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1PREVNX0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJTVQ2MzM1X1JHX0JVQ0tfVk1PREVNX0hXMV9PUF9DRkdfTUFTSywJCU1UNjMzNV9SR19CVUNLX1ZNT0RFTV9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1PREVNX09QX0NGRywJCU1UNjMzNV9SR19CVUNLX1ZNT0RFTV9IVzJfT1BfQ0ZHX01BU0ssCQlNVDYzMzVfUkdfQlVDS19WTU9ERU1fSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9PUF9DRkcsCQlNVDYzMzVfUkdfQlVDS19WTU9ERU1fT05fT1BfTUFTSywJCU1UNjMzNV9SR19CVUNLX1ZNT0RFTV9PTl9PUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9PUF9DRkcsCQlNVDYzMzVfUkdfQlVDS19WTU9ERU1fTFBfT1BfTUFTSywJCU1UNjMzNV9SR19CVUNLX1ZNT0RFTV9MUF9PUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9PUF9DRkdfU0VULAkJTVQ2MzM1X1JHX0JVQ0tfVk1PREVNX09QX0NGR19TRVRfTUFTSywJCU1UNjMzNV9SR19CVUNLX1ZNT0RFTV9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1PREVNX09QX0NGR19DTFIsCQlNVDYzMzVfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX0NMUl9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVk1PREVNX09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTU9ERU1fREJHMCwJCU1UNjMzNV9EQV9OSV9WTU9ERU1fVk9TRUxfTUFTSywJCU1UNjMzNV9EQV9OSV9WTU9ERU1fVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTU9ERU1fREJHMCwJCU1UNjMzNV9EQV9OSV9WTU9ERU1fVk9TRUxfR1JBWV9NQVNLLAkJTVQ2MzM1X0RBX05JX1ZNT0RFTV9WT1NFTF9HUkFZX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1PREVNX0RCRzEsCQlNVDYzMzVfREFfUUlfVk1PREVNX0VOX01BU0ssCQlNVDYzMzVfREFfUUlfVk1PREVNX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVlBBMV9DT04wLAkJTVQ2MzM1X1JHX0JVQ0tfVlBBMV9FTl9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVlBBMV9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZQQTFfQ09OMSwJCU1UNjMzNV9SR19CVUNLX1ZQQTFfVk9TRUxfTUFTSywJCU1UNjMzNV9SR19CVUNLX1ZQQTFfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WUEEyX0NPTjAsCQlNVDYzMzVfUkdfQlVDS19WUEEyX0VOX01BU0ssCQlNVDYzMzVfUkdfQlVDS19WUEEyX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVlBBMl9DT04xLAkJTVQ2MzM1X1JHX0JVQ0tfVlBBMl9WT1NFTF9NQVNLLAkJTVQ2MzM1X1JHX0JVQ0tfVlBBMl9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjMzNV9TTVBTX0FOQV9DT04xMywJCU1UNjMzNV9SR19WTU9ERU1fU0xFRVBfVk9MVEFHRV9NQVNLLAkJTVQ2MzM1X1JHX1ZNT0RFTV9TTEVFUF9WT0xUQUdFX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X1NNUFNfQU5BX0NPTjEzLAkJTVQ2MzM1X1JHX1ZNRDFfU0xFRVBfVk9MVEFHRV9NQVNLLAkJTVQ2MzM1X1JHX1ZNRDFfU0xFRVBfVk9MVEFHRV9TSElGVCwJCX0sCisgICAge01UNjMzNV9TTVBTX0FOQV9DT04xNCwJCU1UNjMzNV9SR19WU1JBTV9WTURfU0xFRVBfVk9MVEFHRV9NQVNLLAkJTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9TTEVFUF9WT0xUQUdFX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X1ZQQTFfQU5BX0NPTjAsCQlNVDYzMzVfUkdfVlBBMV9NT0RFU0VUX01BU0ssCQlNVDYzMzVfUkdfVlBBMV9NT0RFU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X1ZQQTJfQU5BX0NPTjAsCQlNVDYzMzVfUkdfVlBBMl9NT0RFU0VUX01BU0ssCQlNVDYzMzVfUkdfVlBBMl9NT0RFU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMV9DT04wLAkJTVQ2MzM1X1JHX1ZTSU0xX1NXX0VOX01BU0ssCQlNVDYzMzVfUkdfVlNJTTFfU1dfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0xX0NPTjAsCQlNVDYzMzVfUkdfVlNJTTFfU1dfTFBfTUFTSywJCU1UNjMzNV9SR19WU0lNMV9TV19MUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTFfT1BfRU4sCQlNVDYzMzVfUkdfVlNJTTFfU1dfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WU0lNMV9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTFfT1BfRU4sCQlNVDYzMzVfUkdfVlNJTTFfSFcwX09QX0VOX01BU0ssCQlNVDYzMzVfUkdfVlNJTTFfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMV9PUF9FTiwJCU1UNjMzNV9SR19WU0lNMV9IVzFfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WU0lNMV9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0xX09QX0VOLAkJTVQ2MzM1X1JHX1ZTSU0xX0hXMl9PUF9FTl9NQVNLLAkJTVQ2MzM1X1JHX1ZTSU0xX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTFfT1BfRU5fU0VULAkJTVQ2MzM1X1JHX1ZTSU0xX09QX0VOX1NFVF9NQVNLLAkJTVQ2MzM1X1JHX1ZTSU0xX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTFfT1BfRU5fQ0xSLAkJTVQ2MzM1X1JHX1ZTSU0xX09QX0VOX0NMUl9NQVNLLAkJTVQ2MzM1X1JHX1ZTSU0xX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTFfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZTSU0xX0hXMF9PUF9DRkdfTUFTSywJCU1UNjMzNV9SR19WU0lNMV9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMV9PUF9DRkcsCQlNVDYzMzVfUkdfVlNJTTFfSFcxX09QX0NGR19NQVNLLAkJTVQ2MzM1X1JHX1ZTSU0xX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0xX09QX0NGRywJCU1UNjMzNV9SR19WU0lNMV9IVzJfT1BfQ0ZHX01BU0ssCQlNVDYzMzVfUkdfVlNJTTFfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTFfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZTSU0xX0dPX09OX09QX01BU0ssCQlNVDYzMzVfUkdfVlNJTTFfR09fT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0xX09QX0NGRywJCU1UNjMzNV9SR19WU0lNMV9HT19MUF9PUF9NQVNLLAkJTVQ2MzM1X1JHX1ZTSU0xX0dPX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMV9PUF9DRkdfU0VULAkJTVQ2MzM1X1JHX1ZTSU0xX09QX0NGR19TRVRfTUFTSywJCU1UNjMzNV9SR19WU0lNMV9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMV9PUF9DRkdfQ0xSLAkJTVQ2MzM1X1JHX1ZTSU0xX09QX0NGR19DTFJfTUFTSywJCU1UNjMzNV9SR19WU0lNMV9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMV9DT04yLAkJTVQ2MzM1X1JHX1ZTSU0xX09DRkJfRU5fTUFTSywJCU1UNjMzNV9SR19WU0lNMV9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMl9DT04wLAkJTVQ2MzM1X1JHX1ZTSU0yX1NXX0VOX01BU0ssCQlNVDYzMzVfUkdfVlNJTTJfU1dfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0yX0NPTjAsCQlNVDYzMzVfUkdfVlNJTTJfU1dfTFBfTUFTSywJCU1UNjMzNV9SR19WU0lNMl9TV19MUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTJfT1BfRU4sCQlNVDYzMzVfUkdfVlNJTTJfU1dfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WU0lNMl9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTJfT1BfRU4sCQlNVDYzMzVfUkdfVlNJTTJfSFcwX09QX0VOX01BU0ssCQlNVDYzMzVfUkdfVlNJTTJfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMl9PUF9FTiwJCU1UNjMzNV9SR19WU0lNMl9IVzFfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WU0lNMl9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0yX09QX0VOLAkJTVQ2MzM1X1JHX1ZTSU0yX0hXMl9PUF9FTl9NQVNLLAkJTVQ2MzM1X1JHX1ZTSU0yX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTJfT1BfRU5fU0VULAkJTVQ2MzM1X1JHX1ZTSU0yX09QX0VOX1NFVF9NQVNLLAkJTVQ2MzM1X1JHX1ZTSU0yX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTJfT1BfRU5fQ0xSLAkJTVQ2MzM1X1JHX1ZTSU0yX09QX0VOX0NMUl9NQVNLLAkJTVQ2MzM1X1JHX1ZTSU0yX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTJfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZTSU0yX0hXMF9PUF9DRkdfTUFTSywJCU1UNjMzNV9SR19WU0lNMl9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMl9PUF9DRkcsCQlNVDYzMzVfUkdfVlNJTTJfSFcxX09QX0NGR19NQVNLLAkJTVQ2MzM1X1JHX1ZTSU0yX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0yX09QX0NGRywJCU1UNjMzNV9SR19WU0lNMl9IVzJfT1BfQ0ZHX01BU0ssCQlNVDYzMzVfUkdfVlNJTTJfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTJfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZTSU0yX0dPX09OX09QX01BU0ssCQlNVDYzMzVfUkdfVlNJTTJfR09fT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0yX09QX0NGRywJCU1UNjMzNV9SR19WU0lNMl9HT19MUF9PUF9NQVNLLAkJTVQ2MzM1X1JHX1ZTSU0yX0dPX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMl9PUF9DRkdfU0VULAkJTVQ2MzM1X1JHX1ZTSU0yX09QX0NGR19TRVRfTUFTSywJCU1UNjMzNV9SR19WU0lNMl9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMl9PUF9DRkdfQ0xSLAkJTVQ2MzM1X1JHX1ZTSU0yX09QX0NGR19DTFJfTUFTSywJCU1UNjMzNV9SR19WU0lNMl9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMl9DT04yLAkJTVQ2MzM1X1JHX1ZTSU0yX09DRkJfRU5fTUFTSywJCU1UNjMzNV9SR19WU0lNMl9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WTUlQSV9DT04wLAkJTVQ2MzM1X1JHX1ZNSVBJX1NXX0VOX01BU0ssCQlNVDYzMzVfUkdfVk1JUElfU1dfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZNSVBJX0NPTjAsCQlNVDYzMzVfUkdfVk1JUElfU1dfTFBfTUFTSywJCU1UNjMzNV9SR19WTUlQSV9TV19MUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVk1JUElfT1BfRU4sCQlNVDYzMzVfUkdfVk1JUElfU1dfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WTUlQSV9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVk1JUElfT1BfRU4sCQlNVDYzMzVfUkdfVk1JUElfSFcwX09QX0VOX01BU0ssCQlNVDYzMzVfUkdfVk1JUElfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WTUlQSV9PUF9FTiwJCU1UNjMzNV9SR19WTUlQSV9IVzFfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WTUlQSV9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZNSVBJX09QX0VOLAkJTVQ2MzM1X1JHX1ZNSVBJX0hXMl9PUF9FTl9NQVNLLAkJTVQ2MzM1X1JHX1ZNSVBJX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVk1JUElfT1BfRU5fU0VULAkJTVQ2MzM1X1JHX1ZNSVBJX09QX0VOX1NFVF9NQVNLLAkJTVQ2MzM1X1JHX1ZNSVBJX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVk1JUElfT1BfRU5fQ0xSLAkJTVQ2MzM1X1JHX1ZNSVBJX09QX0VOX0NMUl9NQVNLLAkJTVQ2MzM1X1JHX1ZNSVBJX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVk1JUElfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZNSVBJX0hXMF9PUF9DRkdfTUFTSywJCU1UNjMzNV9SR19WTUlQSV9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WTUlQSV9PUF9DRkcsCQlNVDYzMzVfUkdfVk1JUElfSFcxX09QX0NGR19NQVNLLAkJTVQ2MzM1X1JHX1ZNSVBJX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZNSVBJX09QX0NGRywJCU1UNjMzNV9SR19WTUlQSV9IVzJfT1BfQ0ZHX01BU0ssCQlNVDYzMzVfUkdfVk1JUElfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVk1JUElfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZNSVBJX0dPX09OX09QX01BU0ssCQlNVDYzMzVfUkdfVk1JUElfR09fT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZNSVBJX09QX0NGRywJCU1UNjMzNV9SR19WTUlQSV9HT19MUF9PUF9NQVNLLAkJTVQ2MzM1X1JHX1ZNSVBJX0dPX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WTUlQSV9PUF9DRkdfU0VULAkJTVQ2MzM1X1JHX1ZNSVBJX09QX0NGR19TRVRfTUFTSywJCU1UNjMzNV9SR19WTUlQSV9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WTUlQSV9PUF9DRkdfQ0xSLAkJTVQ2MzM1X1JHX1ZNSVBJX09QX0NGR19DTFJfTUFTSywJCU1UNjMzNV9SR19WTUlQSV9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WRkUyOF9DT04wLAkJTVQ2MzM1X1JHX1ZGRTI4X1NXX0VOX01BU0ssCQlNVDYzMzVfUkdfVkZFMjhfU1dfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZGRTI4X0NPTjAsCQlNVDYzMzVfUkdfVkZFMjhfU1dfTFBfTUFTSywJCU1UNjMzNV9SR19WRkUyOF9TV19MUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVkZFMjhfT1BfRU4sCQlNVDYzMzVfUkdfVkZFMjhfU1dfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WRkUyOF9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVkZFMjhfT1BfRU4sCQlNVDYzMzVfUkdfVkZFMjhfSFcwX09QX0VOX01BU0ssCQlNVDYzMzVfUkdfVkZFMjhfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WRkUyOF9PUF9FTiwJCU1UNjMzNV9SR19WRkUyOF9IVzFfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WRkUyOF9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZGRTI4X09QX0VOLAkJTVQ2MzM1X1JHX1ZGRTI4X0hXMl9PUF9FTl9NQVNLLAkJTVQ2MzM1X1JHX1ZGRTI4X0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVkZFMjhfT1BfRU5fU0VULAkJTVQ2MzM1X1JHX1ZGRTI4X09QX0VOX1NFVF9NQVNLLAkJTVQ2MzM1X1JHX1ZGRTI4X09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVkZFMjhfT1BfRU5fQ0xSLAkJTVQ2MzM1X1JHX1ZGRTI4X09QX0VOX0NMUl9NQVNLLAkJTVQ2MzM1X1JHX1ZGRTI4X09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVkZFMjhfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZGRTI4X0hXMF9PUF9DRkdfTUFTSywJCU1UNjMzNV9SR19WRkUyOF9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WRkUyOF9PUF9DRkcsCQlNVDYzMzVfUkdfVkZFMjhfSFcxX09QX0NGR19NQVNLLAkJTVQ2MzM1X1JHX1ZGRTI4X0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZGRTI4X09QX0NGRywJCU1UNjMzNV9SR19WRkUyOF9IVzJfT1BfQ0ZHX01BU0ssCQlNVDYzMzVfUkdfVkZFMjhfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVkZFMjhfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZGRTI4X0dPX09OX09QX01BU0ssCQlNVDYzMzVfUkdfVkZFMjhfR09fT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZGRTI4X09QX0NGRywJCU1UNjMzNV9SR19WRkUyOF9HT19MUF9PUF9NQVNLLAkJTVQ2MzM1X1JHX1ZGRTI4X0dPX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WRkUyOF9PUF9DRkdfU0VULAkJTVQ2MzM1X1JHX1ZGRTI4X09QX0NGR19TRVRfTUFTSywJCU1UNjMzNV9SR19WRkUyOF9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WRkUyOF9PUF9DRkdfQ0xSLAkJTVQ2MzM1X1JHX1ZGRTI4X09QX0NGR19DTFJfTUFTSywJCU1UNjMzNV9SR19WRkUyOF9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8xX0NPTjAsCQlNVDYzMzVfUkdfVlJGMThfMV9TV19FTl9NQVNLLAkJTVQ2MzM1X1JHX1ZSRjE4XzFfU1dfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzFfQ09OMCwJCU1UNjMzNV9SR19WUkYxOF8xX1NXX0xQX01BU0ssCQlNVDYzMzVfUkdfVlJGMThfMV9TV19MUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMV9PUF9FTiwJCU1UNjMzNV9SR19WUkYxOF8xX1NXX09QX0VOX01BU0ssCQlNVDYzMzVfUkdfVlJGMThfMV9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMV9PUF9FTiwJCU1UNjMzNV9SR19WUkYxOF8xX0hXMF9PUF9FTl9NQVNLLAkJTVQ2MzM1X1JHX1ZSRjE4XzFfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8xX09QX0VOLAkJTVQ2MzM1X1JHX1ZSRjE4XzFfSFcxX09QX0VOX01BU0ssCQlNVDYzMzVfUkdfVlJGMThfMV9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzFfT1BfRU4sCQlNVDYzMzVfUkdfVlJGMThfMV9IVzJfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WUkYxOF8xX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMV9PUF9FTl9TRVQsCQlNVDYzMzVfUkdfVlJGMThfMV9PUF9FTl9TRVRfTUFTSywJCU1UNjMzNV9SR19WUkYxOF8xX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMV9PUF9FTl9DTFIsCQlNVDYzMzVfUkdfVlJGMThfMV9PUF9FTl9DTFJfTUFTSywJCU1UNjMzNV9SR19WUkYxOF8xX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMV9PUF9DRkcsCQlNVDYzMzVfUkdfVlJGMThfMV9IVzBfT1BfQ0ZHX01BU0ssCQlNVDYzMzVfUkdfVlJGMThfMV9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8xX09QX0NGRywJCU1UNjMzNV9SR19WUkYxOF8xX0hXMV9PUF9DRkdfTUFTSywJCU1UNjMzNV9SR19WUkYxOF8xX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzFfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZSRjE4XzFfSFcyX09QX0NGR19NQVNLLAkJTVQ2MzM1X1JHX1ZSRjE4XzFfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMV9PUF9DRkcsCQlNVDYzMzVfUkdfVlJGMThfMV9HT19PTl9PUF9NQVNLLAkJTVQ2MzM1X1JHX1ZSRjE4XzFfR09fT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzFfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZSRjE4XzFfR09fTFBfT1BfTUFTSywJCU1UNjMzNV9SR19WUkYxOF8xX0dPX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8xX09QX0NGR19TRVQsCQlNVDYzMzVfUkdfVlJGMThfMV9PUF9DRkdfU0VUX01BU0ssCQlNVDYzMzVfUkdfVlJGMThfMV9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8xX09QX0NGR19DTFIsCQlNVDYzMzVfUkdfVlJGMThfMV9PUF9DRkdfQ0xSX01BU0ssCQlNVDYzMzVfUkdfVlJGMThfMV9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8yX0NPTjAsCQlNVDYzMzVfUkdfVlJGMThfMl9TV19FTl9NQVNLLAkJTVQ2MzM1X1JHX1ZSRjE4XzJfU1dfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzJfQ09OMCwJCU1UNjMzNV9SR19WUkYxOF8yX1NXX0xQX01BU0ssCQlNVDYzMzVfUkdfVlJGMThfMl9TV19MUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMl9PUF9FTiwJCU1UNjMzNV9SR19WUkYxOF8yX1NXX09QX0VOX01BU0ssCQlNVDYzMzVfUkdfVlJGMThfMl9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMl9PUF9FTiwJCU1UNjMzNV9SR19WUkYxOF8yX0hXMF9PUF9FTl9NQVNLLAkJTVQ2MzM1X1JHX1ZSRjE4XzJfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8yX09QX0VOLAkJTVQ2MzM1X1JHX1ZSRjE4XzJfSFcxX09QX0VOX01BU0ssCQlNVDYzMzVfUkdfVlJGMThfMl9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzJfT1BfRU4sCQlNVDYzMzVfUkdfVlJGMThfMl9IVzJfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WUkYxOF8yX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMl9PUF9FTl9TRVQsCQlNVDYzMzVfUkdfVlJGMThfMl9PUF9FTl9TRVRfTUFTSywJCU1UNjMzNV9SR19WUkYxOF8yX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMl9PUF9FTl9DTFIsCQlNVDYzMzVfUkdfVlJGMThfMl9PUF9FTl9DTFJfTUFTSywJCU1UNjMzNV9SR19WUkYxOF8yX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMl9PUF9DRkcsCQlNVDYzMzVfUkdfVlJGMThfMl9IVzBfT1BfQ0ZHX01BU0ssCQlNVDYzMzVfUkdfVlJGMThfMl9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8yX09QX0NGRywJCU1UNjMzNV9SR19WUkYxOF8yX0hXMV9PUF9DRkdfTUFTSywJCU1UNjMzNV9SR19WUkYxOF8yX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzJfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZSRjE4XzJfSFcyX09QX0NGR19NQVNLLAkJTVQ2MzM1X1JHX1ZSRjE4XzJfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMl9PUF9DRkcsCQlNVDYzMzVfUkdfVlJGMThfMl9HT19PTl9PUF9NQVNLLAkJTVQ2MzM1X1JHX1ZSRjE4XzJfR09fT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzJfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZSRjE4XzJfR09fTFBfT1BfTUFTSywJCU1UNjMzNV9SR19WUkYxOF8yX0dPX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8yX09QX0NGR19TRVQsCQlNVDYzMzVfUkdfVlJGMThfMl9PUF9DRkdfU0VUX01BU0ssCQlNVDYzMzVfUkdfVlJGMThfMl9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8yX09QX0NGR19DTFIsCQlNVDYzMzVfUkdfVlJGMThfMl9PUF9DRkdfQ0xSX01BU0ssCQlNVDYzMzVfUkdfVlJGMThfMl9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxMl9DT04wLAkJTVQ2MzM1X1JHX1ZSRjEyX1NXX0VOX01BU0ssCQlNVDYzMzVfUkdfVlJGMTJfU1dfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjEyX0NPTjAsCQlNVDYzMzVfUkdfVlJGMTJfU1dfTFBfTUFTSywJCU1UNjMzNV9SR19WUkYxMl9TV19MUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMTJfT1BfRU4sCQlNVDYzMzVfUkdfVlJGMTJfU1dfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WUkYxMl9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMTJfT1BfRU4sCQlNVDYzMzVfUkdfVlJGMTJfSFcwX09QX0VOX01BU0ssCQlNVDYzMzVfUkdfVlJGMTJfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxMl9PUF9FTiwJCU1UNjMzNV9SR19WUkYxMl9IVzFfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WUkYxMl9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjEyX09QX0VOLAkJTVQ2MzM1X1JHX1ZSRjEyX0hXMl9PUF9FTl9NQVNLLAkJTVQ2MzM1X1JHX1ZSRjEyX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMTJfT1BfRU5fU0VULAkJTVQ2MzM1X1JHX1ZSRjEyX09QX0VOX1NFVF9NQVNLLAkJTVQ2MzM1X1JHX1ZSRjEyX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMTJfT1BfRU5fQ0xSLAkJTVQ2MzM1X1JHX1ZSRjEyX09QX0VOX0NMUl9NQVNLLAkJTVQ2MzM1X1JHX1ZSRjEyX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMTJfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZSRjEyX0hXMF9PUF9DRkdfTUFTSywJCU1UNjMzNV9SR19WUkYxMl9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxMl9PUF9DRkcsCQlNVDYzMzVfUkdfVlJGMTJfSFcxX09QX0NGR19NQVNLLAkJTVQ2MzM1X1JHX1ZSRjEyX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjEyX09QX0NGRywJCU1UNjMzNV9SR19WUkYxMl9IVzJfT1BfQ0ZHX01BU0ssCQlNVDYzMzVfUkdfVlJGMTJfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMTJfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZSRjEyX0dPX09OX09QX01BU0ssCQlNVDYzMzVfUkdfVlJGMTJfR09fT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjEyX09QX0NGRywJCU1UNjMzNV9SR19WUkYxMl9HT19MUF9PUF9NQVNLLAkJTVQ2MzM1X1JHX1ZSRjEyX0dPX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxMl9PUF9DRkdfU0VULAkJTVQ2MzM1X1JHX1ZSRjEyX09QX0NGR19TRVRfTUFTSywJCU1UNjMzNV9SR19WUkYxMl9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxMl9PUF9DRkdfQ0xSLAkJTVQ2MzM1X1JHX1ZSRjEyX09QX0NGR19DTFJfTUFTSywJCU1UNjMzNV9SR19WUkYxMl9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU1JBTV9WTURfQ09OMCwJCU1UNjMzNV9SR19WU1JBTV9WTURfU1dfRU5fTUFTSywJCU1UNjMzNV9SR19WU1JBTV9WTURfU1dfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTUkFNX1ZNRF9DT04wLAkJTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9TV19MUF9NQVNLLAkJTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9TV19MUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX0NPTjEsCQlNVDYzMzVfUkdfVlNSQU1fVk1EX1ZPU0VMX01BU0ssCQlNVDYzMzVfUkdfVlNSQU1fVk1EX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU1JBTV9WTURfQ09OMiwJCU1UNjMzNV9SR19WU1JBTV9WTURfVk9TRUxfU0xFRVBfTUFTSywJCU1UNjMzNV9SR19WU1JBTV9WTURfVk9TRUxfU0xFRVBfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTUkFNX1ZNRF9PUF9FTiwJCU1UNjMzNV9SR19WU1JBTV9WTURfU1dfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WU1JBTV9WTURfU1dfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTUkFNX1ZNRF9PUF9FTiwJCU1UNjMzNV9SR19WU1JBTV9WTURfSFcwX09QX0VOX01BU0ssCQlNVDYzMzVfUkdfVlNSQU1fVk1EX0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX09QX0VOLAkJTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9IVzFfT1BfRU5fTUFTSywJCU1UNjMzNV9SR19WU1JBTV9WTURfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU1JBTV9WTURfT1BfRU4sCQlNVDYzMzVfUkdfVlNSQU1fVk1EX0hXMl9PUF9FTl9NQVNLLAkJTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9IVzJfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTUkFNX1ZNRF9PUF9FTl9TRVQsCQlNVDYzMzVfUkdfVlNSQU1fVk1EX09QX0VOX1NFVF9NQVNLLAkJTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTUkFNX1ZNRF9PUF9FTl9DTFIsCQlNVDYzMzVfUkdfVlNSQU1fVk1EX09QX0VOX0NMUl9NQVNLLAkJTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTUkFNX1ZNRF9PUF9DRkcsCQlNVDYzMzVfUkdfVlNSQU1fVk1EX0hXMF9PUF9DRkdfTUFTSywJCU1UNjMzNV9SR19WU1JBTV9WTURfSFcwX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX09QX0NGRywJCU1UNjMzNV9SR19WU1JBTV9WTURfSFcxX09QX0NGR19NQVNLLAkJTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU1JBTV9WTURfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9IVzJfT1BfQ0ZHX01BU0ssCQlNVDYzMzVfUkdfVlNSQU1fVk1EX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTUkFNX1ZNRF9PUF9DRkcsCQlNVDYzMzVfUkdfVlNSQU1fVk1EX0dPX09OX09QX01BU0ssCQlNVDYzMzVfUkdfVlNSQU1fVk1EX0dPX09OX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU1JBTV9WTURfT1BfQ0ZHLAkJTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9HT19MUF9PUF9NQVNLLAkJTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9HT19MUF9PUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX09QX0NGR19TRVQsCQlNVDYzMzVfUkdfVlNSQU1fVk1EX09QX0NGR19TRVRfTUFTSywJCU1UNjMzNV9SR19WU1JBTV9WTURfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX09QX0NGR19DTFIsCQlNVDYzMzVfUkdfVlNSQU1fVk1EX09QX0NGR19DTFJfTUFTSywJCU1UNjMzNV9SR19WU1JBTV9WTURfT1BfQ0ZHX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX0RCRzAsCQlNVDYzMzVfREFfTklfVlNSQU1fVk1EX1ZPU0VMX0dSQVlfTUFTSywJCU1UNjMzNV9EQV9OSV9WU1JBTV9WTURfVk9TRUxfR1JBWV9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX0RCRzAsCQlNVDYzMzVfREFfTklfVlNSQU1fVk1EX1ZPU0VMX01BU0ssCQlNVDYzMzVfREFfTklfVlNSQU1fVk1EX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU1JBTV9WTURfREJHMSwJCU1UNjMzNV9EQV9RSV9WU1JBTV9WTURfRU5fTUFTSywJCU1UNjMzNV9EQV9RSV9WU1JBTV9WTURfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQUxET18xX0FOQV9DT04zLAkJTVQ2MzM1X1JHX1ZYTzIyX1ZPU0VMX01BU0ssCQlNVDYzMzVfUkdfVlhPMjJfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfRExET19BTkFfQ09ONCwJCU1UNjMzNV9SR19WU0lNMV9WT1NFTF9NQVNLLAkJTVQ2MzM1X1JHX1ZTSU0xX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0RMRE9fQU5BX0NPTjE2LAkJTVQ2MzM1X1JHX1ZTSU0yX1ZPU0VMX01BU0ssCQlNVDYzMzVfUkdfVlNJTTJfVk9TRUxfU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDAsCQlNVDYzMzVfWE9fQkJfTFBNX0VOX01BU0ssCQlNVDYzMzVfWE9fQkJfTFBNX0VOX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAwX1NFVCwJCU1UNjMzNV9EQ1hPX0NXMDBfU0VUX01BU0ssCQlNVDYzMzVfRENYT19DVzAwX1NFVF9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwMF9DTFIsCQlNVDYzMzVfRENYT19DVzAwX0NMUl9NQVNLLAkJTVQ2MzM1X0RDWE9fQ1cwMF9DTFJfU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDIsCQlNVDYzMzVfWE9fRU4zMktfTUFOX01BU0ssCQlNVDYzMzVfWE9fRU4zMktfTUFOX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAyLAkJTVQ2MzM1X1hPX0VOMzJLX01fTUFTSywJCU1UNjMzNV9YT19FTjMyS19NX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAyLAkJTVQ2MzM1X1hPX1hNT0RFX01BTl9NQVNLLAkJTVQ2MzM1X1hPX1hNT0RFX01BTl9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwMiwJCU1UNjMzNV9YT19YTU9ERV9NX01BU0ssCQlNVDYzMzVfWE9fWE1PREVfTV9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwMiwJCU1UNjMzNV9YT19TVFJVUF9NT0RFX01BU0ssCQlNVDYzMzVfWE9fU1RSVVBfTU9ERV9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwMiwJCU1UNjMzNV9YT19BQUNfRlBNX1RJTUVfTUFTSywJCU1UNjMzNV9YT19BQUNfRlBNX1RJTUVfU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDIsCQlNVDYzMzVfWE9fQUFDX01PREVfTFBNX01BU0ssCQlNVDYzMzVfWE9fQUFDX01PREVfTFBNX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAyLAkJTVQ2MzM1X1hPX0FBQ19NT0RFX0ZQTV9NQVNLLAkJTVQ2MzM1X1hPX0FBQ19NT0RFX0ZQTV9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwMiwJCU1UNjMzNV9YT19FTjI2TV9PRkZTUV9FTl9NQVNLLAkJTVQ2MzM1X1hPX0VOMjZNX09GRlNRX0VOX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAyLAkJTVQ2MzM1X1hPX0xET0NBTF9FTl9NQVNLLAkJTVQ2MzM1X1hPX0xET0NBTF9FTl9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwMiwJCU1UNjMzNV9YT19DQkFOS19TWU5DX0RZTl9NQVNLLAkJTVQ2MzM1X1hPX0NCQU5LX1NZTkNfRFlOX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAyLAkJTVQ2MzM1X1hPXzI2TUxQX01BTl9FTl9NQVNLLAkJTVQ2MzM1X1hPXzI2TUxQX01BTl9FTl9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwMiwJCU1UNjMzNV9YT19CVUZMRE9LX0VOX01BU0ssCQlNVDYzMzVfWE9fQlVGTERPS19FTl9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwNCwJCU1UNjMzNV9YT19DREFDX0ZQTV9NQVNLLAkJTVQ2MzM1X1hPX0NEQUNfRlBNX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzA0LAkJTVQ2MzM1X1hPX0NEQUNfTFBNX01BU0ssCQlNVDYzMzVfWE9fQ0RBQ19MUE1fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDUsCQlNVDYzMzVfWE9fMzJLRElWX05GUkFDX0ZQTV9NQVNLLAkJTVQ2MzM1X1hPXzMyS0RJVl9ORlJBQ19GUE1fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDUsCQlNVDYzMzVfWE9fQ09GU1RfRlBNX01BU0ssCQlNVDYzMzVfWE9fQ09GU1RfRlBNX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzA2LAkJTVQ2MzM1X1hPXzMyS0RJVl9ORlJBQ19MUE1fTUFTSywJCU1UNjMzNV9YT18zMktESVZfTkZSQUNfTFBNX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzA2LAkJTVQ2MzM1X1hPX0NPRlNUX0xQTV9NQVNLLAkJTVQ2MzM1X1hPX0NPRlNUX0xQTV9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwOSwJCU1UNjMzNV9YT19DT1JFX0JZUENBU19MUE1fTUFTSywJCU1UNjMzNV9YT19DT1JFX0JZUENBU19MUE1fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDksCQlNVDYzMzVfWE9fQ09SRV9HTVgyX0xQTV9NQVNLLAkJTVQ2MzM1X1hPX0NPUkVfR01YMl9MUE1fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDksCQlNVDYzMzVfWE9fQ09SRV9JREFDX0xQTV9NQVNLLAkJTVQ2MzM1X1hPX0NPUkVfSURBQ19MUE1fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDksCQlNVDYzMzVfWE9fQUFDX0NPTVBfSFZfTFBNX01BU0ssCQlNVDYzMzVfWE9fQUFDX0NPTVBfSFZfTFBNX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzA5LAkJTVQ2MzM1X1hPX0FBQ19WU0VMX0xQTV9NQVNLLAkJTVQ2MzM1X1hPX0FBQ19WU0VMX0xQTV9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwOSwJCU1UNjMzNV9YT19BQUNfSFZfTFBNX01BU0ssCQlNVDYzMzVfWE9fQUFDX0hWX0xQTV9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwOSwJCU1UNjMzNV9YT19BQUNfSUJJQVNfTFBNX01BU0ssCQlNVDYzMzVfWE9fQUFDX0lCSUFTX0xQTV9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwOSwJCU1UNjMzNV9YT19BQUNfVk9GU1RfTFBNX01BU0ssCQlNVDYzMzVfWE9fQUFDX1ZPRlNUX0xQTV9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwOSwJCU1UNjMzNV9YT19BQUNfRlBNX1NXRU5fTUFTSywJCU1UNjMzNV9YT19BQUNfRlBNX1NXRU5fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDksCQlNVDYzMzVfWE9fU1dSU1RfTUFTSywJCU1UNjMzNV9YT19TV1JTVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9BVVhBRENfQURDMTcsCQlNVDYzMzVfQVVYQURDX0FEQ19PVVRfQ0g3X0JZX01EX01BU0ssCQlNVDYzMzVfQVVYQURDX0FEQ19PVVRfQ0g3X0JZX01EX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0FVWEFEQ19BREMxNywJCU1UNjMzNV9BVVhBRENfQURDX1JEWV9DSDdfQllfTURfTUFTSywJCU1UNjMzNV9BVVhBRENfQURDX1JEWV9DSDdfQllfTURfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQVVYQURDX1JRU1QxX1NFVCwJCU1UNjMzNV9BVVhBRENfUlFTVDFfU0VUX01BU0ssCQlNVDYzMzVfQVVYQURDX1JRU1QxX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9BVVhBRENfUlFTVDFfQ0xSLAkJTVQ2MzM1X0FVWEFEQ19SUVNUMV9DTFJfTUFTSywJCU1UNjMzNV9BVVhBRENfUlFTVDFfQ0xSX1NISUZULAkJfSwKK307CisjZWxpZiBkZWZpbmVkIChEUlZfUE1JQ19XUkFQXzY3OTlfUkVHKQorY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZIHBtaWM2MzM1X2ZsYWdzX3RhYmxlW10gPQoreworICAgIHtQTUlDX0hXQ0lEX0FERFIsCQlQTUlDX0hXQ0lEX01BU0ssCQlQTUlDX0hXQ0lEX1NISUZULAkJfSwKKyAgICB7UE1JQ19TV0NJRF9BRERSLAkJUE1JQ19TV0NJRF9NQVNLLAkJUE1JQ19TV0NJRF9TSElGVCwJCX0sCisgICAge01UNjMzNV9UT1BfQ09OLAkJUE1JQ19SR19TUkNMS0VOX0lOMF9FTl9NQVNLLAkJUE1JQ19SR19TUkNMS0VOX0lOMF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9UT1BfQ09OLAkJUE1JQ19SR19TUkNMS0VOX0lOMV9FTl9NQVNLLAkJUE1JQ19SR19TUkNMS0VOX0lOMV9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9UT1BfQ09OLAkJUE1JQ19SR19TUkNMS0VOX0lOMF9IV19NT0RFX01BU0ssCQlQTUlDX1JHX1NSQ0xLRU5fSU4wX0hXX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfVE9QX0NPTiwJCVBNSUNfUkdfU1JDTEtFTl9JTjFfSFdfTU9ERV9NQVNLLAkJUE1JQ19SR19TUkNMS0VOX0lOMV9IV19NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9DT04wLAkJUE1JQ19SR19CVUNLX1ZNRDFfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTUQxX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9DT04wLAkJUE1JQ19SR19CVUNLX1ZNRDFfTFBfTUFTSywJCVBNSUNfUkdfQlVDS19WTUQxX0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9DT04xLAkJUE1JQ19SR19CVUNLX1ZNRDFfVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WTUQxX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9DT04yLAkJUE1JQ19SR19CVUNLX1ZNRDFfVk9TRUxfU0xFRVBfTUFTSywJCVBNSUNfUkdfQlVDS19WTUQxX1ZPU0VMX1NMRUVQX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9PUF9FTiwJCVBNSUNfUkdfQlVDS19WTUQxX1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1EMV9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNRDFfT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1EMV9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTUQxX0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNRDFfT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1EMV9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTUQxX0hXMV9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNRDFfT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1EMV9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTUQxX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNRDFfT1BfRU5fU0VULAkJUE1JQ19SR19CVUNLX1ZNRDFfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1EMV9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTUQxX09QX0VOX0NMUiwJCVBNSUNfUkdfQlVDS19WTUQxX09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNRDFfT1BfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1EMV9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1EMV9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1EMV9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1EMV9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1EMV9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1EMV9IVzJfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1EMV9PTl9PUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNRDFfT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTUQxX09QX0NGRywJCVBNSUNfUkdfQlVDS19WTUQxX0xQX09QX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1EMV9MUF9PUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNRDFfT1BfQ0ZHX1NFVCwJCVBNSUNfUkdfQlVDS19WTUQxX09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfQlVDS19WTUQxX09QX0NGR19TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTUQxX09QX0NGR19DTFIsCQlQTUlDX1JHX0JVQ0tfVk1EMV9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1EMV9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1EMV9EQkcwLAkJUE1JQ19EQV9OSV9WTUQxX1ZPU0VMX01BU0ssCQlQTUlDX0RBX05JX1ZNRDFfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTUQxX0RCRzAsCQlQTUlDX0RBX05JX1ZNRDFfVk9TRUxfR1JBWV9NQVNLLAkJUE1JQ19EQV9OSV9WTUQxX1ZPU0VMX0dSQVlfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTUQxX0RCRzEsCQlQTUlDX0RBX1FJX1ZNRDFfRU5fTUFTSywJCVBNSUNfREFfUUlfVk1EMV9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9DT04wLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9DT04wLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9MUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9MUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9DT04xLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9WT1NFTF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9DT04yLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9PUF9FTiwJCVBNSUNfUkdfQlVDS19WTU9ERU1fU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fU1dfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTU9ERU1fT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMF9PUF9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTU9ERU1fT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMV9PUF9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTU9ERU1fT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzJfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTU9ERU1fT1BfRU5fU0VULAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9FTl9TRVRfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1PREVNX09QX0VOX0NMUiwJCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcwX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMV9PUF9DRkdfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMl9PUF9DRkdfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09OX09QX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09OX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1PREVNX09QX0NGRywJCVBNSUNfUkdfQlVDS19WTU9ERU1fTFBfT1BfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fTFBfT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1PREVNX09QX0NGR19DTFIsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9CVUNLX1ZNT0RFTV9EQkcwLAkJUE1JQ19EQV9OSV9WTU9ERU1fVk9TRUxfTUFTSywJCVBNSUNfREFfTklfVk1PREVNX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1PREVNX0RCRzAsCQlQTUlDX0RBX05JX1ZNT0RFTV9WT1NFTF9HUkFZX01BU0ssCQlQTUlDX0RBX05JX1ZNT0RFTV9WT1NFTF9HUkFZX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0JVQ0tfVk1PREVNX0RCRzEsCQlQTUlDX0RBX1FJX1ZNT0RFTV9FTl9NQVNLLAkJUE1JQ19EQV9RSV9WTU9ERU1fRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WUEExX0NPTjAsCQlQTUlDX1JHX0JVQ0tfVlBBMV9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZQQTFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQlVDS19WUEExX0NPTjEsCQlQTUlDX1JHX0JVQ0tfVlBBMV9WT1NFTF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZQQTFfVk9TRUxfU0hJRlQsCQl9LAorLy8gICAge01UNjMzNV9CVUNLX1ZQQTJfQ09OMCwJCVBNSUNfUkdfQlVDS19WUEEyX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlBBMl9FTl9TSElGVCwJCX0sCisvLyAgICB7TVQ2MzM1X0JVQ0tfVlBBMl9DT04xLAkJUE1JQ19SR19CVUNLX1ZQQTJfVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WUEEyX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X1NNUFNfQU5BX0NPTjEzLAkJUE1JQ19SR19WTU9ERU1fU0xFRVBfVk9MVEFHRV9NQVNLLAkJUE1JQ19SR19WTU9ERU1fU0xFRVBfVk9MVEFHRV9TSElGVCwJCX0sCisgICAge01UNjMzNV9TTVBTX0FOQV9DT04xMywJCVBNSUNfUkdfVk1EMV9TTEVFUF9WT0xUQUdFX01BU0ssCQlQTUlDX1JHX1ZNRDFfU0xFRVBfVk9MVEFHRV9TSElGVCwJCX0sCisgICAge01UNjMzNV9TTVBTX0FOQV9DT04xNCwJCVBNSUNfUkdfVlNSQU1fVk1EX1NMRUVQX1ZPTFRBR0VfTUFTSywJCVBNSUNfUkdfVlNSQU1fVk1EX1NMRUVQX1ZPTFRBR0VfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfVlBBMV9BTkFfQ09OMCwJCVBNSUNfUkdfVlBBMV9NT0RFU0VUX01BU0ssCQlQTUlDX1JHX1ZQQTFfTU9ERVNFVF9TSElGVCwJCX0sCisvLyAgICB7TVQ2MzM1X1ZQQTJfQU5BX0NPTjAsCQlQTUlDX1JHX1ZQQTJfTU9ERVNFVF9NQVNLLAkJUE1JQ19SR19WUEEyX01PREVTRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0xX0NPTjAsCQlQTUlDX1JHX1ZTSU0xX1NXX0VOX01BU0ssCQlQTUlDX1JHX1ZTSU0xX1NXX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMV9DT04wLAkJUE1JQ19SR19WU0lNMV9TV19MUF9NQVNLLAkJUE1JQ19SR19WU0lNMV9TV19MUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTFfT1BfRU4sCQlQTUlDX1JHX1ZTSU0xX1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX1ZTSU0xX1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMV9PUF9FTiwJCVBNSUNfUkdfVlNJTTFfSFcwX09QX0VOX01BU0ssCQlQTUlDX1JHX1ZTSU0xX0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTFfT1BfRU4sCQlQTUlDX1JHX1ZTSU0xX0hXMV9PUF9FTl9NQVNLLAkJUE1JQ19SR19WU0lNMV9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0xX09QX0VOLAkJUE1JQ19SR19WU0lNMV9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfVlNJTTFfSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMV9PUF9FTl9TRVQsCQlQTUlDX1JHX1ZTSU0xX09QX0VOX1NFVF9NQVNLLAkJUE1JQ19SR19WU0lNMV9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0xX09QX0VOX0NMUiwJCVBNSUNfUkdfVlNJTTFfT1BfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX1ZTSU0xX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19WU0lNMV9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX1ZTSU0xX0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0xX09QX0NGRywJCVBNSUNfUkdfVlNJTTFfSFcxX09QX0NGR19NQVNLLAkJUE1JQ19SR19WU0lNMV9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMV9PUF9DRkcsCQlQTUlDX1JHX1ZTSU0xX0hXMl9PUF9DRkdfTUFTSywJCVBNSUNfUkdfVlNJTTFfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19WU0lNMV9HT19PTl9PUF9NQVNLLAkJUE1JQ19SR19WU0lNMV9HT19PTl9PUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19WU0lNMV9HT19MUF9PUF9NQVNLLAkJUE1JQ19SR19WU0lNMV9HT19MUF9PUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTFfT1BfQ0ZHX1NFVCwJCVBNSUNfUkdfVlNJTTFfT1BfQ0ZHX1NFVF9NQVNLLAkJUE1JQ19SR19WU0lNMV9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMV9PUF9DRkdfQ0xSLAkJUE1JQ19SR19WU0lNMV9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX1ZTSU0xX09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0xX0NPTjIsCQlQTUlDX1JHX1ZTSU0xX09DRkJfRU5fTUFTSywJCVBNSUNfUkdfVlNJTTFfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTJfQ09OMCwJCVBNSUNfUkdfVlNJTTJfU1dfRU5fTUFTSywJCVBNSUNfUkdfVlNJTTJfU1dfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0yX0NPTjAsCQlQTUlDX1JHX1ZTSU0yX1NXX0xQX01BU0ssCQlQTUlDX1JHX1ZTSU0yX1NXX0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfVlNJTTJfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfVlNJTTJfU1dfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0yX09QX0VOLAkJUE1JQ19SR19WU0lNMl9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfVlNJTTJfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfVlNJTTJfSFcxX09QX0VOX01BU0ssCQlQTUlDX1JHX1ZTSU0yX0hXMV9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTJfT1BfRU4sCQlQTUlDX1JHX1ZTSU0yX0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19WU0lNMl9IVzJfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0yX09QX0VOX1NFVCwJCVBNSUNfUkdfVlNJTTJfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX1ZTSU0yX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTJfT1BfRU5fQ0xSLAkJUE1JQ19SR19WU0lNMl9PUF9FTl9DTFJfTUFTSywJCVBNSUNfUkdfVlNJTTJfT1BfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMl9PUF9DRkcsCQlQTUlDX1JHX1ZTSU0yX0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfVlNJTTJfSFcwX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTJfT1BfQ0ZHLAkJUE1JQ19SR19WU0lNMl9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX1ZTSU0yX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0yX09QX0NGRywJCVBNSUNfUkdfVlNJTTJfSFcyX09QX0NGR19NQVNLLAkJUE1JQ19SR19WU0lNMl9IVzJfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMl9PUF9DRkcsCQlQTUlDX1JHX1ZTSU0yX0dPX09OX09QX01BU0ssCQlQTUlDX1JHX1ZTSU0yX0dPX09OX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMl9PUF9DRkcsCQlQTUlDX1JHX1ZTSU0yX0dPX0xQX09QX01BU0ssCQlQTUlDX1JHX1ZTSU0yX0dPX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU0lNMl9PUF9DRkdfU0VULAkJUE1JQ19SR19WU0lNMl9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX1ZTSU0yX09QX0NGR19TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTSU0yX09QX0NGR19DTFIsCQlQTUlDX1JHX1ZTSU0yX09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfVlNJTTJfT1BfQ0ZHX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNJTTJfQ09OMiwJCVBNSUNfUkdfVlNJTTJfT0NGQl9FTl9NQVNLLAkJUE1JQ19SR19WU0lNMl9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WTUlQSV9DT04wLAkJUE1JQ19SR19WTUlQSV9TV19FTl9NQVNLLAkJUE1JQ19SR19WTUlQSV9TV19FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVk1JUElfQ09OMCwJCVBNSUNfUkdfVk1JUElfU1dfTFBfTUFTSywJCVBNSUNfUkdfVk1JUElfU1dfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZNSVBJX09QX0VOLAkJUE1JQ19SR19WTUlQSV9TV19PUF9FTl9NQVNLLAkJUE1JQ19SR19WTUlQSV9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVk1JUElfT1BfRU4sCQlQTUlDX1JHX1ZNSVBJX0hXMF9PUF9FTl9NQVNLLAkJUE1JQ19SR19WTUlQSV9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZNSVBJX09QX0VOLAkJUE1JQ19SR19WTUlQSV9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfVk1JUElfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WTUlQSV9PUF9FTiwJCVBNSUNfUkdfVk1JUElfSFcyX09QX0VOX01BU0ssCQlQTUlDX1JHX1ZNSVBJX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVk1JUElfT1BfRU5fU0VULAkJUE1JQ19SR19WTUlQSV9PUF9FTl9TRVRfTUFTSywJCVBNSUNfUkdfVk1JUElfT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WTUlQSV9PUF9FTl9DTFIsCQlQTUlDX1JHX1ZNSVBJX09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19WTUlQSV9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZNSVBJX09QX0NGRywJCVBNSUNfUkdfVk1JUElfSFcwX09QX0NGR19NQVNLLAkJUE1JQ19SR19WTUlQSV9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WTUlQSV9PUF9DRkcsCQlQTUlDX1JHX1ZNSVBJX0hXMV9PUF9DRkdfTUFTSywJCVBNSUNfUkdfVk1JUElfSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVk1JUElfT1BfQ0ZHLAkJUE1JQ19SR19WTUlQSV9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX1ZNSVBJX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZNSVBJX09QX0NGRywJCVBNSUNfUkdfVk1JUElfR09fT05fT1BfTUFTSywJCVBNSUNfUkdfVk1JUElfR09fT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZNSVBJX09QX0NGRywJCVBNSUNfUkdfVk1JUElfR09fTFBfT1BfTUFTSywJCVBNSUNfUkdfVk1JUElfR09fTFBfT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZNSVBJX09QX0NGR19TRVQsCQlQTUlDX1JHX1ZNSVBJX09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfVk1JUElfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVk1JUElfT1BfQ0ZHX0NMUiwJCVBNSUNfUkdfVk1JUElfT1BfQ0ZHX0NMUl9NQVNLLAkJUE1JQ19SR19WTUlQSV9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WRkUyOF9DT04wLAkJUE1JQ19SR19WRkUyOF9TV19FTl9NQVNLLAkJUE1JQ19SR19WRkUyOF9TV19FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVkZFMjhfQ09OMCwJCVBNSUNfUkdfVkZFMjhfU1dfTFBfTUFTSywJCVBNSUNfUkdfVkZFMjhfU1dfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZGRTI4X09QX0VOLAkJUE1JQ19SR19WRkUyOF9TV19PUF9FTl9NQVNLLAkJUE1JQ19SR19WRkUyOF9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVkZFMjhfT1BfRU4sCQlQTUlDX1JHX1ZGRTI4X0hXMF9PUF9FTl9NQVNLLAkJUE1JQ19SR19WRkUyOF9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZGRTI4X09QX0VOLAkJUE1JQ19SR19WRkUyOF9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfVkZFMjhfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WRkUyOF9PUF9FTiwJCVBNSUNfUkdfVkZFMjhfSFcyX09QX0VOX01BU0ssCQlQTUlDX1JHX1ZGRTI4X0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVkZFMjhfT1BfRU5fU0VULAkJUE1JQ19SR19WRkUyOF9PUF9FTl9TRVRfTUFTSywJCVBNSUNfUkdfVkZFMjhfT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WRkUyOF9PUF9FTl9DTFIsCQlQTUlDX1JHX1ZGRTI4X09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19WRkUyOF9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfVkZFMjhfSFcwX09QX0NGR19NQVNLLAkJUE1JQ19SR19WRkUyOF9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WRkUyOF9PUF9DRkcsCQlQTUlDX1JHX1ZGRTI4X0hXMV9PUF9DRkdfTUFTSywJCVBNSUNfUkdfVkZFMjhfSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVkZFMjhfT1BfQ0ZHLAkJUE1JQ19SR19WRkUyOF9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX1ZGRTI4X0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfVkZFMjhfR09fT05fT1BfTUFTSywJCVBNSUNfUkdfVkZFMjhfR09fT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfVkZFMjhfR09fTFBfT1BfTUFTSywJCVBNSUNfUkdfVkZFMjhfR09fTFBfT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZGRTI4X09QX0NGR19TRVQsCQlQTUlDX1JHX1ZGRTI4X09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfVkZFMjhfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVkZFMjhfT1BfQ0ZHX0NMUiwJCVBNSUNfUkdfVkZFMjhfT1BfQ0ZHX0NMUl9NQVNLLAkJUE1JQ19SR19WRkUyOF9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8xX0NPTjAsCQlQTUlDX1JHX1ZSRjE4XzFfU1dfRU5fTUFTSywJCVBNSUNfUkdfVlJGMThfMV9TV19FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMV9DT04wLAkJUE1JQ19SR19WUkYxOF8xX1NXX0xQX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzFfU1dfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzFfT1BfRU4sCQlQTUlDX1JHX1ZSRjE4XzFfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfVlJGMThfMV9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMV9PUF9FTiwJCVBNSUNfUkdfVlJGMThfMV9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfVlJGMThfMV9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzFfT1BfRU4sCQlQTUlDX1JHX1ZSRjE4XzFfSFcxX09QX0VOX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzFfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8xX09QX0VOLAkJUE1JQ19SR19WUkYxOF8xX0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19WUkYxOF8xX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMV9PUF9FTl9TRVQsCQlQTUlDX1JHX1ZSRjE4XzFfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzFfT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8xX09QX0VOX0NMUiwJCVBNSUNfUkdfVlJGMThfMV9PUF9FTl9DTFJfTUFTSywJCVBNSUNfUkdfVlJGMThfMV9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzFfT1BfQ0ZHLAkJUE1JQ19SR19WUkYxOF8xX0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfVlJGMThfMV9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8xX09QX0NGRywJCVBNSUNfUkdfVlJGMThfMV9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzFfSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMV9PUF9DRkcsCQlQTUlDX1JHX1ZSRjE4XzFfSFcyX09QX0NGR19NQVNLLAkJUE1JQ19SR19WUkYxOF8xX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzFfT1BfQ0ZHLAkJUE1JQ19SR19WUkYxOF8xX0dPX09OX09QX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzFfR09fT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzFfT1BfQ0ZHLAkJUE1JQ19SR19WUkYxOF8xX0dPX0xQX09QX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzFfR09fTFBfT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzFfT1BfQ0ZHX1NFVCwJCVBNSUNfUkdfVlJGMThfMV9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzFfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMV9PUF9DRkdfQ0xSLAkJUE1JQ19SR19WUkYxOF8xX09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfVlJGMThfMV9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8yX0NPTjAsCQlQTUlDX1JHX1ZSRjE4XzJfU1dfRU5fTUFTSywJCVBNSUNfUkdfVlJGMThfMl9TV19FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMl9DT04wLAkJUE1JQ19SR19WUkYxOF8yX1NXX0xQX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzJfU1dfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzJfT1BfRU4sCQlQTUlDX1JHX1ZSRjE4XzJfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfVlJGMThfMl9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMl9PUF9FTiwJCVBNSUNfUkdfVlJGMThfMl9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfVlJGMThfMl9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzJfT1BfRU4sCQlQTUlDX1JHX1ZSRjE4XzJfSFcxX09QX0VOX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzJfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8yX09QX0VOLAkJUE1JQ19SR19WUkYxOF8yX0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19WUkYxOF8yX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMl9PUF9FTl9TRVQsCQlQTUlDX1JHX1ZSRjE4XzJfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzJfT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8yX09QX0VOX0NMUiwJCVBNSUNfUkdfVlJGMThfMl9PUF9FTl9DTFJfTUFTSywJCVBNSUNfUkdfVlJGMThfMl9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzJfT1BfQ0ZHLAkJUE1JQ19SR19WUkYxOF8yX0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfVlJGMThfMl9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxOF8yX09QX0NGRywJCVBNSUNfUkdfVlJGMThfMl9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzJfSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMl9PUF9DRkcsCQlQTUlDX1JHX1ZSRjE4XzJfSFcyX09QX0NGR19NQVNLLAkJUE1JQ19SR19WUkYxOF8yX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzJfT1BfQ0ZHLAkJUE1JQ19SR19WUkYxOF8yX0dPX09OX09QX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzJfR09fT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzJfT1BfQ0ZHLAkJUE1JQ19SR19WUkYxOF8yX0dPX0xQX09QX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzJfR09fTFBfT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjE4XzJfT1BfQ0ZHX1NFVCwJCVBNSUNfUkdfVlJGMThfMl9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX1ZSRjE4XzJfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMThfMl9PUF9DRkdfQ0xSLAkJUE1JQ19SR19WUkYxOF8yX09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfVlJGMThfMl9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxMl9DT04wLAkJUE1JQ19SR19WUkYxMl9TV19FTl9NQVNLLAkJUE1JQ19SR19WUkYxMl9TV19FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMTJfQ09OMCwJCVBNSUNfUkdfVlJGMTJfU1dfTFBfTUFTSywJCVBNSUNfUkdfVlJGMTJfU1dfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjEyX09QX0VOLAkJUE1JQ19SR19WUkYxMl9TV19PUF9FTl9NQVNLLAkJUE1JQ19SR19WUkYxMl9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMTJfT1BfRU4sCQlQTUlDX1JHX1ZSRjEyX0hXMF9PUF9FTl9NQVNLLAkJUE1JQ19SR19WUkYxMl9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjEyX09QX0VOLAkJUE1JQ19SR19WUkYxMl9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfVlJGMTJfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxMl9PUF9FTiwJCVBNSUNfUkdfVlJGMTJfSFcyX09QX0VOX01BU0ssCQlQTUlDX1JHX1ZSRjEyX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMTJfT1BfRU5fU0VULAkJUE1JQ19SR19WUkYxMl9PUF9FTl9TRVRfTUFTSywJCVBNSUNfUkdfVlJGMTJfT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxMl9PUF9FTl9DTFIsCQlQTUlDX1JHX1ZSRjEyX09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19WUkYxMl9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjEyX09QX0NGRywJCVBNSUNfUkdfVlJGMTJfSFcwX09QX0NGR19NQVNLLAkJUE1JQ19SR19WUkYxMl9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WUkYxMl9PUF9DRkcsCQlQTUlDX1JHX1ZSRjEyX0hXMV9PUF9DRkdfTUFTSywJCVBNSUNfUkdfVlJGMTJfSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMTJfT1BfQ0ZHLAkJUE1JQ19SR19WUkYxMl9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX1ZSRjEyX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjEyX09QX0NGRywJCVBNSUNfUkdfVlJGMTJfR09fT05fT1BfTUFTSywJCVBNSUNfUkdfVlJGMTJfR09fT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjEyX09QX0NGRywJCVBNSUNfUkdfVlJGMTJfR09fTFBfT1BfTUFTSywJCVBNSUNfUkdfVlJGMTJfR09fTFBfT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZSRjEyX09QX0NGR19TRVQsCQlQTUlDX1JHX1ZSRjEyX09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfVlJGMTJfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlJGMTJfT1BfQ0ZHX0NMUiwJCVBNSUNfUkdfVlJGMTJfT1BfQ0ZHX0NMUl9NQVNLLAkJUE1JQ19SR19WUkYxMl9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU1JBTV9WTURfQ09OMCwJCVBNSUNfUkdfVlNSQU1fVk1EX1NXX0VOX01BU0ssCQlQTUlDX1JHX1ZTUkFNX1ZNRF9TV19FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX0NPTjAsCQlQTUlDX1JHX1ZTUkFNX1ZNRF9TV19MUF9NQVNLLAkJUE1JQ19SR19WU1JBTV9WTURfU1dfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTUkFNX1ZNRF9DT04xLAkJUE1JQ19SR19WU1JBTV9WTURfVk9TRUxfTUFTSywJCVBNSUNfUkdfVlNSQU1fVk1EX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU1JBTV9WTURfQ09OMiwJCVBNSUNfUkdfVlNSQU1fVk1EX1ZPU0VMX1NMRUVQX01BU0ssCQlQTUlDX1JHX1ZTUkFNX1ZNRF9WT1NFTF9TTEVFUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX09QX0VOLAkJUE1JQ19SR19WU1JBTV9WTURfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfVlNSQU1fVk1EX1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU1JBTV9WTURfT1BfRU4sCQlQTUlDX1JHX1ZTUkFNX1ZNRF9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfVlNSQU1fVk1EX0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX09QX0VOLAkJUE1JQ19SR19WU1JBTV9WTURfSFcxX09QX0VOX01BU0ssCQlQTUlDX1JHX1ZTUkFNX1ZNRF9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTUkFNX1ZNRF9PUF9FTiwJCVBNSUNfUkdfVlNSQU1fVk1EX0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19WU1JBTV9WTURfSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU1JBTV9WTURfT1BfRU5fU0VULAkJUE1JQ19SR19WU1JBTV9WTURfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX1ZTUkFNX1ZNRF9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTUkFNX1ZNRF9PUF9FTl9DTFIsCQlQTUlDX1JHX1ZTUkFNX1ZNRF9PUF9FTl9DTFJfTUFTSywJCVBNSUNfUkdfVlNSQU1fVk1EX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX09QX0NGRywJCVBNSUNfUkdfVlNSQU1fVk1EX0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfVlNSQU1fVk1EX0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTUkFNX1ZNRF9PUF9DRkcsCQlQTUlDX1JHX1ZTUkFNX1ZNRF9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX1ZTUkFNX1ZNRF9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU1JBTV9WTURfT1BfQ0ZHLAkJUE1JQ19SR19WU1JBTV9WTURfSFcyX09QX0NGR19NQVNLLAkJUE1JQ19SR19WU1JBTV9WTURfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX09QX0NGRywJCVBNSUNfUkdfVlNSQU1fVk1EX0dPX09OX09QX01BU0ssCQlQTUlDX1JHX1ZTUkFNX1ZNRF9HT19PTl9PUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX09QX0NGRywJCVBNSUNfUkdfVlNSQU1fVk1EX0dPX0xQX09QX01BU0ssCQlQTUlDX1JHX1ZTUkFNX1ZNRF9HT19MUF9PUF9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX09QX0NGR19TRVQsCQlQTUlDX1JHX1ZTUkFNX1ZNRF9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX1ZTUkFNX1ZNRF9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0xET19WU1JBTV9WTURfT1BfQ0ZHX0NMUiwJCVBNSUNfUkdfVlNSQU1fVk1EX09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfVlNSQU1fVk1EX09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTUkFNX1ZNRF9EQkcwLAkJUE1JQ19EQV9OSV9WU1JBTV9WTURfVk9TRUxfR1JBWV9NQVNLLAkJUE1JQ19EQV9OSV9WU1JBTV9WTURfVk9TRUxfR1JBWV9TSElGVCwJCX0sCisgICAge01UNjMzNV9MRE9fVlNSQU1fVk1EX0RCRzAsCQlQTUlDX0RBX05JX1ZTUkFNX1ZNRF9WT1NFTF9NQVNLLAkJUE1JQ19EQV9OSV9WU1JBTV9WTURfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfTERPX1ZTUkFNX1ZNRF9EQkcxLAkJUE1JQ19EQV9RSV9WU1JBTV9WTURfRU5fTUFTSywJCVBNSUNfREFfUUlfVlNSQU1fVk1EX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0FMRE9fMV9BTkFfQ09OMywJCVBNSUNfUkdfVlhPMjJfVk9TRUxfTUFTSywJCVBNSUNfUkdfVlhPMjJfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfRExET19BTkFfQ09ONCwJCVBNSUNfUkdfVlNJTTFfVk9TRUxfTUFTSywJCVBNSUNfUkdfVlNJTTFfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfRExET19BTkFfQ09OMTYsCQlQTUlDX1JHX1ZTSU0yX1ZPU0VMX01BU0ssCQlQTUlDX1JHX1ZTSU0yX1ZPU0VMX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAwLAkJUE1JQ19YT19CQl9MUE1fRU5fTUFTSywJCVBNSUNfWE9fQkJfTFBNX0VOX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAwX1NFVCwJCVBNSUNfRENYT19DVzAwX1NFVF9NQVNLLAkJUE1JQ19EQ1hPX0NXMDBfU0VUX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAwX0NMUiwJCVBNSUNfRENYT19DVzAwX0NMUl9NQVNLLAkJUE1JQ19EQ1hPX0NXMDBfQ0xSX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAyLAkJUE1JQ19YT19FTjMyS19NQU5fTUFTSywJCVBNSUNfWE9fRU4zMktfTUFOX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAyLAkJUE1JQ19YT19FTjMyS19NX01BU0ssCQlQTUlDX1hPX0VOMzJLX01fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDIsCQlQTUlDX1hPX1hNT0RFX01BTl9NQVNLLAkJUE1JQ19YT19YTU9ERV9NQU5fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDIsCQlQTUlDX1hPX1hNT0RFX01fTUFTSywJCVBNSUNfWE9fWE1PREVfTV9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwMiwJCVBNSUNfWE9fU1RSVVBfTU9ERV9NQVNLLAkJUE1JQ19YT19TVFJVUF9NT0RFX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAyLAkJUE1JQ19YT19BQUNfRlBNX1RJTUVfTUFTSywJCVBNSUNfWE9fQUFDX0ZQTV9USU1FX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAyLAkJUE1JQ19YT19BQUNfTU9ERV9MUE1fTUFTSywJCVBNSUNfWE9fQUFDX01PREVfTFBNX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAyLAkJUE1JQ19YT19BQUNfTU9ERV9GUE1fTUFTSywJCVBNSUNfWE9fQUFDX01PREVfRlBNX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzAyLAkJUE1JQ19YT19FTjI2TV9PRkZTUV9FTl9NQVNLLAkJUE1JQ19YT19FTjI2TV9PRkZTUV9FTl9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwMiwJCVBNSUNfWE9fTERPQ0FMX0VOX01BU0ssCQlQTUlDX1hPX0xET0NBTF9FTl9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwMiwJCVBNSUNfWE9fQ0JBTktfU1lOQ19EWU5fTUFTSywJCVBNSUNfWE9fQ0JBTktfU1lOQ19EWU5fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDIsCQlQTUlDX1hPXzI2TUxQX01BTl9FTl9NQVNLLAkJUE1JQ19YT18yNk1MUF9NQU5fRU5fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDIsCQlQTUlDX1hPX0JVRkxET0tfRU5fTUFTSywJCVBNSUNfWE9fQlVGTERPS19FTl9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwNCwJCVBNSUNfWE9fQ0RBQ19GUE1fTUFTSywJCVBNSUNfWE9fQ0RBQ19GUE1fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDQsCQlQTUlDX1hPX0NEQUNfTFBNX01BU0ssCQlQTUlDX1hPX0NEQUNfTFBNX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzA1LAkJUE1JQ19YT18zMktESVZfTkZSQUNfRlBNX01BU0ssCQlQTUlDX1hPXzMyS0RJVl9ORlJBQ19GUE1fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDUsCQlQTUlDX1hPX0NPRlNUX0ZQTV9NQVNLLAkJUE1JQ19YT19DT0ZTVF9GUE1fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDYsCQlQTUlDX1hPXzMyS0RJVl9ORlJBQ19MUE1fTUFTSywJCVBNSUNfWE9fMzJLRElWX05GUkFDX0xQTV9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwNiwJCVBNSUNfWE9fQ09GU1RfTFBNX01BU0ssCQlQTUlDX1hPX0NPRlNUX0xQTV9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwOSwJCVBNSUNfWE9fQ09SRV9CWVBDQVNfTFBNX01BU0ssCQlQTUlDX1hPX0NPUkVfQllQQ0FTX0xQTV9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwOSwJCVBNSUNfWE9fQ09SRV9HTVgyX0xQTV9NQVNLLAkJUE1JQ19YT19DT1JFX0dNWDJfTFBNX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzA5LAkJUE1JQ19YT19DT1JFX0lEQUNfTFBNX01BU0ssCQlQTUlDX1hPX0NPUkVfSURBQ19MUE1fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19DT01QX0hWX0xQTV9NQVNLLAkJUE1JQ19YT19BQUNfQ09NUF9IVl9MUE1fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19WU0VMX0xQTV9NQVNLLAkJUE1JQ19YT19BQUNfVlNFTF9MUE1fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19IVl9MUE1fTUFTSywJCVBNSUNfWE9fQUFDX0hWX0xQTV9TSElGVCwJCX0sCisgICAgLy97TVQ2MzM1X0RDWE9fQ1cwOSwJCVBNSUNfWE9fQUFDX0lCSUFTX0xQTV9NQVNLLAkJUE1JQ19YT19BQUNfSUJJQVNfTFBNX1NISUZULAkJfSwKKyAgICAvL3tNVDYzMzVfRENYT19DVzA5LAkJUE1JQ19YT19BQUNfVk9GU1RfTFBNX01BU0ssCQlQTUlDX1hPX0FBQ19WT0ZTVF9MUE1fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19GUE1fU1dFTl9NQVNLLAkJUE1JQ19YT19BQUNfRlBNX1NXRU5fU0hJRlQsCQl9LAorICAgIC8ve01UNjMzNV9EQ1hPX0NXMDksCQlQTUlDX1hPX1NXUlNUX01BU0ssCQlQTUlDX1hPX1NXUlNUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0FVWEFEQ19BREMxNywJCVBNSUNfQVVYQURDX0FEQ19PVVRfQ0g3X0JZX01EX01BU0ssCQlQTUlDX0FVWEFEQ19BRENfT1VUX0NIN19CWV9NRF9TSElGVCwJCX0sCisgICAge01UNjMzNV9BVVhBRENfQURDMTcsCQlQTUlDX0FVWEFEQ19BRENfUkRZX0NIN19CWV9NRF9NQVNLLAkJUE1JQ19BVVhBRENfQURDX1JEWV9DSDdfQllfTURfU0hJRlQsCQl9LAorICAgIHtNVDYzMzVfQVVYQURDX1JRU1QxX1NFVCwJCVBNSUNfQVVYQURDX1JRU1QxX1NFVF9NQVNLLAkJUE1JQ19BVVhBRENfUlFTVDFfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzM1X0FVWEFEQ19SUVNUMV9DTFIsCQlQTUlDX0FVWEFEQ19SUVNUMV9DTFJfTUFTSywJCVBNSUNfQVVYQURDX1JRU1QxX0NMUl9TSElGVCwJCX0sCit9OworI2VuZGlmCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19NT0RVTEVfQ09OVFJPTCkKK0RDTF9IQU5ETEUgY3VycmVudF9kY2xfaGFuZGxlID0gMDsKKyNlbmRpZgorCisvLyNkZWZpbmUgRENMX1BNSUNfUEVSTUlTU0lPTl9DT05UUk9MCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19QRVJNSVNTSU9OX0NPTlRST0wpCitQTVVfQ1RSTF9NSVNDX1NFVF9SRUdJU1RFUl9WQUxVRQlpbGxlZ2FsX21pc2Nfc2V0X3JlZ2lzdGVyX3ZhbHVlID0gezB9OworI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICAgIFdSSVRFIEFQSXMgICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNpZiBkZWZpbmVkKERDTF9QTUlDX1BFUk1JU1NJT05fQ09OVFJPTCkKK0RDTF9CT09MIGRjbF9wbWljX2NoZWNrX3Blcm1pc3Npb24oa2FsX3VpbnQxNiBvZmZzZXQpCit7CisJRENMX0JPT0wgcmV0ID0gRENMX0ZBTFNFOworCWthbF91aW50OCBjID0gKChvZmZzZXQ+PjgpICYgMHhGRik7CisKKwlzd2l0Y2goYykKKyAgICB7CisJCWNhc2UgMHg4MjoKKyAgICAgICAgeworCQkJLy9DTEsgOiBUT1BfQ0xLU1FfU0VUICgweDgyMjYpLFRPUF9DS1BETl9DT04wX0NMUiAoMHg4MjA0KSxUT1BfQ0xLU1EoMHg4MjI0KQorCQkJaWYob2Zmc2V0ID09IDB4ODIyNiB8fCBvZmZzZXQgPT0gMHg4MjA0IHx8IG9mZnNldCA9PSAweDgyMjQpCisJCQkJcmV0PURDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgMHg5MDoKKyAgICAgICAgeworCQkgICAgLy9MRE9fRElHOiAweDkwMUEsMHg5MDFDLCAweDkwMDYsIDB4OTAwOAorICAgICAgICAgICAgaWYob2Zmc2V0ID09IDB4OTAxQSB8fCBvZmZzZXQgPT0gMHg5MDFDIHx8IG9mZnNldCA9PSAweDkwMDYgfHwgb2Zmc2V0ID09IDB4OTAwOCkKKwkJCQlyZXQ9RENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDk4OgorICAgICAgICB7CisJCQkvL0F1ZGlvIEFuYWxvZyA6IDB4OTgwMH4weDk4NTIKKyAgICAgICAgICAgIGlmKG9mZnNldCA+PSAweDk4MDAgJiYgb2Zmc2V0IDw9IDB4OTg1MikKKwkJCQlyZXQ9RENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSAweDlBOgorICAgICAgICB7CisJCQkvL0F1ZGlvIERSRSA6IDB4OUEwMCB+MHg5QTBBCisJCQlpZihvZmZzZXQgPj0gMHg5QTAwICYmIG9mZnNldCA8PSAweDlBMEEpCisJCQkJcmV0PURDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgMHhFMDoKKwkJY2FzZSAweEUxOgorICAgICAgICB7CisJCQkvL0F1ZGlvIGRpZ2l0YWwgOiAweEUwMDAgfjB4RTEzOAorCQkJaWYob2Zmc2V0ID49IDB4RTAwMCAmJiBvZmZzZXQgPD0gMHhFMTM4KQorCQkJCXJldD1EQ0xfVFJVRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorCQkJcmV0PURDTF9GQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKy8vIFdyaXRlIFdob2xlIEJ5dGVzCit2b2lkIGRjbF9wbWljNjMzNV8zN19ieXRlX3dyaXRlKERDTF9VSU5UMTYgYWRkciwgRENMX1VJTlQxNiB2YWwpCit7CisJRENMX1VJTlQzMiBpZHgsIHR5cGU7CisKKwlrYWxfdGFrZV9zcGlubG9jayhkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2ssIEtBTF9JTkZJTklURV9XQUlUKTsKKworCXR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisJaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworICAgIGlmKGFkZHIgPCBQTUlDNjMzNV9NQVhfUkVHX05VTSkKKyAgICB7CisgICAgICAgIHBtaWM2MzM1X3JlZ1thZGRyXSA9IHZhbDsKKyAgICB9CisKKyAgICBpZihhZGRyID49IE1UNjMzN19QTUlDX1JFR19CQVNFICYmIGFkZHIgPCAoTVQ2MzM3X1BNSUNfUkVHX0JBU0UgKyBQTUlDNjMzN19NQVhfUkVHX05VTSkpCisgICAgeworICAgICAgICBwbWljNjMzN19yZWdbYWRkciAtIE1UNjMzN19QTUlDX1JFR19CQVNFXSA9IHZhbDsKKyAgICB9CisKKwkJRHJ2UFdSQVBfV0FDUzEoUE1JQ19XUkFQX1dSSVRFLCBhZGRyLCB2YWwsIDB4MDApOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUpOworI2VuZGlmCisJa2FsX2dpdmVfc3BpbmxvY2soZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrKTsKK30KKworLy8gV3JpdGUgV2hvbGUgQnl0ZXMKK3ZvaWQgZGNsX3BtaWM2MzM1XzM3X2J5dGVfd3JpdGVfbm9sb2NrKERDTF9VSU5UMTYgYWRkciwgRENMX1VJTlQxNiB2YWwpCit7CisJRENMX1VJTlQzMiBpZHgsIHR5cGU7CisKKwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9IUlRfRE9NQUlOOworCWVsc2UKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKworCWlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisgICAgaWYoYWRkciA8IFBNSUM2MzM1X01BWF9SRUdfTlVNKQorICAgIHsKKyAgICAgICAgcG1pYzYzMzVfcmVnW2FkZHJdID0gdmFsOworICAgIH0KKworICAgIGlmKGFkZHIgPj0gTVQ2MzM3X1BNSUNfUkVHX0JBU0UgJiYgYWRkciA8IChNVDYzMzdfUE1JQ19SRUdfQkFTRSArIFBNSUM2MzM3X01BWF9SRUdfTlVNKSkKKyAgICB7CisgICAgICAgIHBtaWM2MzM3X3JlZ1thZGRyIC0gTVQ2MzM3X1BNSUNfUkVHX0JBU0VdID0gdmFsOworICAgIH0KKworCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCSBEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIGFkZHIsIHZhbCwgMHgwMCk7CisJZWxzZQorCQlEcnZQV1JBUF9XQUNTMShQTUlDX1dSQVBfV1JJVEUsIGFkZHIsIHZhbCwgMHgwMCk7CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lLAorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworfQorCisvLyBXcml0ZSByZWdpc3RlciBmaWVsZAordm9pZCBkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoUE1JQzYzMzVfRkxBR1NfTElTVF9FTlVNIGZsYWcsIERDTF9VSU5UMTYgc2VsKQoreworICAgIGNvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSAqcFRhYmxlID0gcG1pYzYzMzVfZmxhZ3NfdGFibGU7CisJRENMX1VJTlQzMiB0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCURDTF9VSU5UMzIgaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKyAgICBwbWljX3JlZ19sb2cuY29tbWFuZF9mbGFnID0gZmxhZzsKKyAgICBwbWljX3JlZ19sb2cucmVnX2JlZm9yZV93cml0ZSA9IHBtaWM2MzM1X3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworICAgIHBtaWM2MzM1X3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSAmPSB+KHBUYWJsZVtmbGFnXS5tYXNrIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisgICAgcG1pYzYzMzVfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdIHw9ICgoa2FsX3VpbnQxNilzZWwgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKworCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9XUklURSwgcFRhYmxlW2ZsYWddLm9mZnNldCwgcG1pYzYzMzVfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKwllbHNlCisJCURydlBXUkFQX1dBQ1MxKFBNSUNfV1JBUF9XUklURSwgcFRhYmxlW2ZsYWddLm9mZnNldCwgcG1pYzYzMzVfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKworICAgIHBtaWNfcmVnX2xvZy53cml0ZV92YWx1ZSA9IHNlbDsKKyAgICBwbWljX3JlZ19sb2cuYWRkcmVzc19vZmZzZXQgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfbWFzayA9IHBUYWJsZVtmbGFnXS5tYXNrOworICAgIHBtaWNfcmVnX2xvZy5yZWdfc2hpZnQgPSBwVGFibGVbZmxhZ10uc2hpZnQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19hZGRyID0gcFRhYmxlW2ZsYWddLm9mZnNldDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2RhdGEgPSBwbWljNjMzNV9yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF07CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lLCAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUpOworI2VuZGlmCit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICAgIFJFQUQgQVBJcyAgICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gUmVhZCBXaG9sZSBCeXRlcworRENMX1VJTlQxNiBkY2xfcG1pYzYzMzVfMzdfYnl0ZV9yZXR1cm4oRENMX1VJTlQxNiBhZGRyKQoreworICAgIERDTF9VSU5UMTYgcmVnX3RlbXA7CisKKwlEQ0xfVUlOVDMyIGlkeCwgdHlwZTsKKworCWthbF90YWtlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jaywgS0FMX0lORklOSVRFX1dBSVQpOworCisJdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKwlpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCAoRENMX1VJTlQzMilhZGRyLCAweDAwLCAmcmVnX3RlbXApOworCWVsc2UKKwkJRHJ2UFdSQVBfV0FDUzEoUE1JQ19XUkFQX1JFQUQsIChEQ0xfVUlOVDMyKWFkZHIsIDB4MDAsICZyZWdfdGVtcCk7CisKKyAgICBpZihhZGRyIDwgUE1JQzYzMzVfTUFYX1JFR19OVU0pCisgICAgeworICAgICAgICBwbWljNjMzNV9yZWdbYWRkcl0gPSByZWdfdGVtcDsKKyAgICB9CisKKyAgICBpZihhZGRyID49IE1UNjMzN19QTUlDX1JFR19CQVNFICYmIGFkZHIgPCAoTVQ2MzM3X1BNSUNfUkVHX0JBU0UgKyBQTUlDNjMzN19NQVhfUkVHX05VTSkpCisgICAgeworICAgICAgICBwbWljNjMzN19yZWdbYWRkciAtIE1UNjMzN19QTUlDX1JFR19CQVNFXSA9IHJlZ190ZW1wOworICAgIH0KKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworCWthbF9naXZlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jayk7CisKKyAgICByZXR1cm4gcmVnX3RlbXA7Cit9CisKKy8vIFJlYWQgV2hvbGUgQnl0ZXMKK0RDTF9VSU5UMTYgZGNsX3BtaWM2MzM1XzM3X2J5dGVfcmV0dXJuX25vbG9jayhEQ0xfVUlOVDE2IGFkZHIpCit7CisgICAgRENMX1VJTlQxNiByZWdfdGVtcDsKKworCURDTF9VSU5UMzIgaWR4LCB0eXBlOworCisJaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfSFJUX0RPTUFJTjsKKwllbHNlCisJCXR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisKKwlpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCAoRENMX1VJTlQzMilhZGRyLCAweDAwLCAmcmVnX3RlbXApOworCWVsc2UKKwkJRHJ2UFdSQVBfV0FDUzEoUE1JQ19XUkFQX1JFQUQsIChEQ0xfVUlOVDMyKWFkZHIsIDB4MDAsICZyZWdfdGVtcCk7CisKKyAgICBpZihhZGRyIDwgUE1JQzYzMzVfTUFYX1JFR19OVU0pCisgICAgeworICAgICAgICBwbWljNjMzNV9yZWdbYWRkcl0gPSByZWdfdGVtcDsKKyAgICB9CisKKyAgICBpZihhZGRyID49IE1UNjMzN19QTUlDX1JFR19CQVNFICYmIGFkZHIgPCAoTVQ2MzM3X1BNSUNfUkVHX0JBU0UgKyBQTUlDNjMzN19NQVhfUkVHX05VTSkpCisgICAgeworICAgICAgICBwbWljNjMzN19yZWdbYWRkciAtIE1UNjMzN19QTUlDX1JFR19CQVNFXSA9IHJlZ190ZW1wOworICAgIH0KKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworICAgIHJldHVybiByZWdfdGVtcDsKK30KKworLy8gUmVhZCByZWdpc3RlciBmaWVsZAorRENMX1VJTlQxNiBkY2xfcG1pYzYzMzVfZmllbGRfcmVhZChQTUlDNjMzNV9GTEFHU19MSVNUX0VOVU0gZmxhZykKK3sKKyAgICBjb25zdCBQTUlDX0ZMQUdfVEFCTEVfRU5UUlkgKnBUYWJsZSA9IHBtaWM2MzM1X2ZsYWdzX3RhYmxlOworICAgIERDTF9VSU5UMTYgcmVnX3JldHVybiA9IDA7CisJRENMX1VJTlQzMiBpZHgsIHR5cGU7CisKKwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9IUlRfRE9NQUlOOworCWVsc2UKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKworCWlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfUkVBRCwgcFRhYmxlW2ZsYWddLm9mZnNldCwgMHgwMCwgJnBtaWM2MzM1X3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSk7CisJZWxzZQorCQlEcnZQV1JBUF9XQUNTMShQTUlDX1dSQVBfUkVBRCwgcFRhYmxlW2ZsYWddLm9mZnNldCwgMHgwMCwgJnBtaWM2MzM1X3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSk7CisKKyAgICByZWdfcmV0dXJuID0gKChwbWljNjMzNV9yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gJiAocFRhYmxlW2ZsYWddLm1hc2sgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KSkgPj4gcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlZ19yZXR1cm47Cit9CisKKy8vIEV4cG9ydGVkIGZvciBFTSB1c2VkCit2b2lkIHBtaWM2MzM1XzM3X0VNX3JlZ193cml0ZShrYWxfdWludDE2IHJlZywga2FsX3VpbnQxNiB2YWwpeworCSAgZGNsX3BtaWM2MzM1XzM3X2J5dGVfd3JpdGVfbm9sb2NrKHJlZywgdmFsKTsKK30KKwora2FsX3VpbnQxNiBwbWljNjMzNV8zN19FTV9yZWdfcmVhZChrYWxfdWludDE2IHJlZyl7CisJcmV0dXJuICBkY2xfcG1pYzYzMzVfMzdfYnl0ZV9yZXR1cm5fbm9sb2NrKHJlZyk7Cit9CisKK2NvbnN0IERDTF9VSU5UMzIgdnBhX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUXzAwXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDBfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMF83MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAwXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDBfOTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV8wMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAxXzEwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfMjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV8zMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV82MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAxXzcwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV85MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzAwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl8yMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzMwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfNDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl81MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl84MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzkwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wM18xMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzIwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDNfMzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wM180MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAzXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKK307CisKKworY29uc3QgRENMX1VJTlQzMiB2c2ltMV92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF9JTlZBTElELCAgICAgICBQTVVfVk9MVF9JTlZBTElELCAgICAgIFBNVV9WT0xUXzAxXzcwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzgwMDAwMF9WLAorICAgIFBNVV9WT0xUXzAxXzg2MDAwMF9WLCAgIFBNVV9WT0xUXzAyXzc2MDAwMF9WLCAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgUE1VX1ZPTFRfMDNfMTAwMDAwX1YsCit9OworCisvKjInYjAxOiAyLjM3NVYKKyAgMidiMTA6IDIuMlYqLworY29uc3QgRENMX1VJTlQzMiB2eG8yMl92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF9JTlZBTElELCAgICAgICBQTVVfVk9MVF8wMl8zNzUwMDBfViwJUE1VX1ZPTFRfMDJfMjAwMDAwX1YsCit9OworCitjb25zdCBEQ0xfVUlOVDMyIHZtb2RlbV92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF8wMF80MDAwMDBfViwJUE1VX1ZPTFRfMDBfNDUwMDAwX1YsCVBNVV9WT0xUXzAwXzUwMDAwMF9WLAlQTVVfVk9MVF8wMF81NTAwMDBfViwKK307CisKK2NvbnN0IERDTF9VSU5UMzIgdm1kMV92b3NlbFtdID0KK3sKKwlQTVVfVk9MVF8wMF80MDAwMDBfViwJUE1VX1ZPTFRfMDBfNDUwMDAwX1YsCVBNVV9WT0xUXzAwXzUwMDAwMF9WLAlQTVVfVk9MVF8wMF81NTAwMDBfViwKK307CisKK2NvbnN0IERDTF9VSU5UMzIgdnNyYW1fdm1kX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUXzAwXzQwMDAwMF9WLCAgIFBNVV9WT0xUXzAwXzQ1MDAwMF9WLAlQTVVfVk9MVF8wMF81MDAwMDBfViwJUE1VX1ZPTFRfMDBfNTUwMDAwX1YsCisgICAgUE1VX1ZPTFRfMDBfNzAwMDAwX1YsCVBNVV9WT0xUXzAwXzgwMDAwMF9WLAorfTsKKworUE1VX1BBUkFNRVRFUl9UQUJMRV9FTlRSWSBwbXVfcGFyYW1ldGVyX3RhYmxlW109Cit7CisJe0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlBBX1NXKSwJCSAgICAJdnBhX3Zvc2VsLAkJICAgIE5VTEwsCSAgICBHRVRBUlJOVU0odnBhX3Zvc2VsKQkJCX0sCisjaWYgZGVmaW5lZCAoRFJWX1BNSUNfV1JBUF9FTEJSVVNfUkVHKQorCXtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZQQTIpLAkJICAgIAl2cGFfdm9zZWwsCQkgICAgTlVMTCwJICAgIEdFVEFSUk5VTSh2cGFfdm9zZWwpCQkJfSwKKyNlbmRpZgorCXtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZTSU0xKSwJCSAgICAJdnNpbTFfdm9zZWwsCQlOVUxMLAkgICAgR0VUQVJSTlVNKHZzaW0xX3Zvc2VsKQkJCX0sCisgICAge0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlNJTTIpLAkJICAgIAl2c2ltMV92b3NlbCwJCU5VTEwsICAgCUdFVEFSUk5VTSh2c2ltMV92b3NlbCkJICAgIAl9LAorCXtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZYTzIyKSwJCSAgICAJdnhvMjJfdm9zZWwsCQlOVUxMLCAgIAlHRVRBUlJOVU0odnhvMjJfdm9zZWwpCSAgICAJfSwKKwl7RU5DKExET19CVUNLX1NFVF9TTEVFUF9WT0xUQUdFLCBWTU9ERU0pLAkJdm1vZGVtX3Zvc2VsLAkJTlVMTCwJCUdFVEFSUk5VTSh2bW9kZW1fdm9zZWwpCQkJfSwKKwl7RU5DKExET19CVUNLX1NFVF9TTEVFUF9WT0xUQUdFLCBWTU9ERU0pLAkJdm1vZGVtX3Zvc2VsLAkJTlVMTCwJCUdFVEFSUk5VTSh2bW9kZW1fdm9zZWwpCQkJfSwKKwl7RU5DKExET19CVUNLX1NFVF9TTEVFUF9WT0xUQUdFLCBWTUQxKSwJCSAgICB2bWQxX3Zvc2VsLAkJCU5VTEwsCSAgICBHRVRBUlJOVU0odm1kMV92b3NlbCkJCQl9LAorICAgIHtFTkMoTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0UsIFZTUkFNX01EKSwJCXZzcmFtX3ZtZF92b3NlbCwJTlVMTCwgICAJR0VUQVJSTlVNKHZzcmFtX3ZtZF92b3NlbCkJCX0sCit9OworCisKK2V4dGVybiBQTVVfQ09OVFJPTF9IQU5ETEVSIHBtdV9jb250cm9sX2hhbmRsZXI7CisKK0RDTF9VSU5UMTYgcG11X3BhcmFtZXRlcl9zaXplID0gMDsKKworRENMX1NUQVRVUyBQTUlDNjMzNV8zN19jb250cm9sX2hhbmRsZXIoRENMX0hBTkRMRSBoYW5kbGUsRENMX0NUUkxfQ01EIGNtZCxEQ0xfQ1RSTF9EQVRBX1QgKmRhdGEpCit7CisgICAgRENMX1VJTlQxNglyZWdWYWw7CisgICAgRENMX0lOVDMyCXJldHVybl92YWwgPSBTVEFUVVNfRkFJTDsKKyNpZiBkZWZpbmVkKERDTF9QTUlDX01PRFVMRV9DT05UUk9MKQorCWN1cnJlbnRfZGNsX2hhbmRsZSA9IGhhbmRsZTsKKyNlbmRpZgorICAgIHN3aXRjaChjbWQpCisgICAgeworICAgICAgICBjYXNlIExET19CVUNLX1NFVF9FTjoJLy9FbmFibGUgY29udHJvbCBpbiBTVyBtb2RlCisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiAqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tTZXRFbik7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNRDE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoTVQ2MzM1X1JHX0JVQ0tfVk1EMV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKE1UNjMzNV9SR19CVUNLX1ZNT0RFTV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlBBX1NXOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKE1UNjMzNV9SR19CVUNLX1ZQQTFfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyNpZiBkZWZpbmVkIChEUlZfUE1JQ19XUkFQX0VMQlJVU19SRUcpCisgICAgICAgICAgICAgICAgY2FzZSBWUEEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKE1UNjMzNV9SR19CVUNLX1ZQQTJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKwkJCQljYXNlIFZNSVBJOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVk1JUElfU1dfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKE1UNjMzNV9SR19WU0lNMV9TV19FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoTVQ2MzM1X1JHX1ZTSU0yX1NXX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzNV9maWVsZF93cml0ZShNVDYzMzVfUkdfVkZFMjhfU1dfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4XzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoTVQ2MzM1X1JHX1ZSRjE4XzFfU1dfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4XzI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoTVQ2MzM1X1JHX1ZSRjE4XzJfU1dfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKE1UNjMzNV9SR19WUkYxMl9TV19FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNSQU1fTUQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9TV19FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9MUF9NT0RFX1NFVCAqcExkb0J1Y2tDdHJsID0mIChkYXRhLT5yUE1VTGRvQnVja1NldExwTW9kZVNldCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNRDE6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljNjMzNV9maWVsZF93cml0ZShNVDYzMzVfUkdfQlVDS19WTUQxX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWTU9ERU06CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljNjMzNV9maWVsZF93cml0ZSggTVQ2MzM1X1JHX0JVQ0tfVk1PREVNX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKE1UNjMzNV9SR19WU0lNMV9TV19MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljNjMzNV9maWVsZF93cml0ZShNVDYzMzVfUkdfVlNJTTJfU1dfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZNSVBJOgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCSAgICBkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoTVQ2MzM1X1JHX1ZNSVBJX1NXX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWRkUyODoKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKE1UNjMzNV9SR19WRkUyOF9TV19MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlJGMThfMToKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKE1UNjMzNV9SR19WUkYxOF8xX1NXX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWUkYxOF8yOgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCSAgICBkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoTVQ2MzM1X1JHX1ZSRjE4XzJfU1dfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCSAgICBkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19WUkYxMl9TV19MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNSQU1fTUQ6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljNjMzNV9maWVsZF93cml0ZShNVDYzMzVfUkdfVlNSQU1fVk1EX1NXX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQkgY2FzZSBMRE9fQlVDS19TRVRfT0NGQl9FTjoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09DRkJfRU4gKnBMZG9CdWNrQ3RybD0mKGRhdGEtPnJQTVVMZG9CdWNrU2V0T2NmYkVuKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzNV9maWVsZF93cml0ZShNVDYzMzVfUkdfVlNJTTFfT0NGQl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoTVQ2MzM1X1JHX1ZTSU0yX09DRkJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX0dFVF9WT1NFTDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPU0VMICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrR2V0Vm9zZWwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWTUQxOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWM2MzM1X2ZpZWxkX3JlYWQoTVQ2MzM1X1JHX0JVQ0tfVk1EMV9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pYzYzMzVfZmllbGRfcmVhZChNVDYzMzVfUkdfQlVDS19WTU9ERU1fVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNSQU1fTUQ6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pYzYzMzVfZmllbGRfcmVhZChNVDYzMzVfUkdfVlNSQU1fVk1EX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX1ZPU0VMOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9TRUwgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWb3NlbCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZNRDE6CisgICAgICAgICAgICAgICAgeworCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoTVQ2MzM1X1JHX0JVQ0tfVk1EMV9WT1NFTCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljNjMzNV9maWVsZF93cml0ZShNVDYzMzVfUkdfQlVDS19WTU9ERU1fVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU1JBTV9NRDoKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljNjMzNV9maWVsZF93cml0ZShNVDYzMzVfUkdfVlNSQU1fVk1EX1ZPU0VMLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19HRVRfVk9TRUxfU0xFRVA6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1NFTF9TTEVFUCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja0dldFZvc2VsU2xlZXApOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWTUQxOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWM2MzM1X2ZpZWxkX3JlYWQoTVQ2MzM1X1JHX0JVQ0tfVk1EMV9WT1NFTF9TTEVFUCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pYzYzMzVfZmllbGRfcmVhZChNVDYzMzVfUkdfQlVDS19WTU9ERU1fVk9TRUxfU0xFRVApOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNSQU1fTUQ6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pYzYzMzVfZmllbGRfcmVhZChNVDYzMzVfUkdfVlNSQU1fVk1EX1ZPU0VMX1NMRUVQKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX1ZPU0VMX1NMRUVQOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9TRUxfU0xFRVAgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWb3NlbFNsZWVwKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVk1EMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzNV9maWVsZF93cml0ZShNVDYzMzVfUkdfQlVDS19WTUQxX1ZPU0VMX1NMRUVQLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKE1UNjMzNV9SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKE1UNjMzNV9SR19WU1JBTV9WTURfVk9TRUxfU0xFRVAsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX1NFVF9NT0RFU0VUOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldE1vZGVzZXQpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUEFfU1c6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19WUEExX01PREVTRVQsIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWYgZGVmaW5lZCAoRFJWX1BNSUNfV1JBUF9FTEJSVVNfUkVHKQorICAgICAgICAgICAgICAgIGNhc2UgVlBBMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzNV9maWVsZF93cml0ZShNVDYzMzVfUkdfVlBBMl9NT0RFU0VULCBwTGRvQnVja0N0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfT1BfRU46CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9PUF9FTiAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldE9wRW4pOworCisJCQlrYWxfdWludDE2IG1vZGUgPSgocExkb0J1Y2tDdHJsLT5zd19vcF9lbiAgPDwgU1dfT1BfRU5fU0hJRlQpIHwgKHBMZG9CdWNrQ3RybC0+aHcwX29wX2VuIDw8IEhXMF9PUF9FTl9TSElGVCl8CisJCQkJCQkJICAocExkb0J1Y2tDdHJsLT5odzFfb3BfZW4gPDwgSFcxX09QX0VOX1NISUZUKXwgKHBMZG9CdWNrQ3RybC0+aHcyX29wX2VuIDw8IEhXMl9PUF9FTl9TSElGVCkpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWTUQxOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pYzYzMzVfMzdfRU1fcmVnX3dyaXRlKE1UNjMzNV9CVUNLX1ZNRDFfT1BfRU4sIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVk1PREVNOgorCQkJCXsKKwkJCQkgICAgcG1pYzYzMzVfMzdfRU1fcmVnX3dyaXRlKE1UNjMzNV9CVUNLX1ZNT0RFTV9PUF9FTiwgbW9kZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKwkJCQl7CisJCQkJICAgIHBtaWM2MzM1XzM3X0VNX3JlZ193cml0ZShNVDYzMzVfTERPX1ZTSU0xX09QX0VOLCBtb2RlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZTSU0yOgorCQkJCXsKKwkJCQkgICAgcG1pYzYzMzVfMzdfRU1fcmVnX3dyaXRlKE1UNjMzNV9MRE9fVlNJTTJfT1BfRU4sIG1vZGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVk1JUEk6CisJCQkJeworCQkJCSAgICBwbWljNjMzNV8zN19FTV9yZWdfd3JpdGUoTVQ2MzM1X0xET19WTUlQSV9PUF9FTiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWM2MzM1XzM3X0VNX3JlZ193cml0ZShNVDYzMzVfTERPX1ZGRTI4X09QX0VOLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4XzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljNjMzNV8zN19FTV9yZWdfd3JpdGUoTVQ2MzM1X0xET19WUkYxOF8xX09QX0VOLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjE4XzI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljNjMzNV8zN19FTV9yZWdfd3JpdGUoTVQ2MzM1X0xET19WUkYxOF8yX09QX0VOLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pYzYzMzVfMzdfRU1fcmVnX3dyaXRlKE1UNjMzNV9MRE9fVlJGMTJfT1BfRU4sIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNSQU1fTUQ6CisJCQkJeworCQkJCSAgICBwbWljNjMzNV8zN19FTV9yZWdfd3JpdGUoTVQ2MzM1X0xET19WU1JBTV9WTURfT1BfRU4sIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfSFdfT1BfQ0ZHOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfSFdfT1BfQ0ZHICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0SHdPcCk7CisKKwkJCWthbF91aW50MTYgbW9kZSA9KChwTGRvQnVja0N0cmwtPmh3MF9vcF9jZmcgPDwgSFcwX09QX0NGR19TSElGVCkgfAorCQkJCQkJCSAgKHBMZG9CdWNrQ3RybC0+aHcxX29wX2NmZyA8PCBIVzFfT1BfQ0ZHX1NISUZUKSB8CisJCQkJCQkJICAocExkb0J1Y2tDdHJsLT5odzJfb3BfY2ZnIDw8IEhXMl9PUF9DRkdfU0hJRlQpKTsKKworCQkJa2FsX3VpbnQxNiB2YWx1ZSA9MDsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVk1EMToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXZhbHVlID0gcG1pYzYzMzVfMzdfRU1fcmVnX3JlYWQoTVQ2MzM1X0JVQ0tfVk1EMV9PUF9DRkcpOworCQkJCQl2YWx1ZSAmPSB+KCgxPDwgSFcwX09QX0NGR19TSElGVCl8KDE8PCBIVzFfT1BfQ0ZHX1NISUZUKXwoMTw8IEhXMl9PUF9DRkdfU0hJRlQpKTsKKwkJCQkJdmFsdWUgfD0gbW9kZTsKKyAgICAgICAgICAgICAgICAgICAgcG1pYzYzMzVfMzdfRU1fcmVnX3dyaXRlKE1UNjMzNV9CVUNLX1ZNRDFfT1BfQ0ZHLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworCQkJCQl2YWx1ZSA9IHBtaWM2MzM1XzM3X0VNX3JlZ19yZWFkKE1UNjMzNV9CVUNLX1ZNT0RFTV9PUF9DRkcpOworCQkJCQl2YWx1ZSAmPSB+KCgxPDwgSFcwX09QX0NGR19TSElGVCl8KDE8PCBIVzFfT1BfQ0ZHX1NISUZUKXwoMTw8IEhXMl9PUF9DRkdfU0hJRlQpKTsKKwkJCQkJdmFsdWUgfD0gbW9kZTsKKyAgICAgICAgICAgICAgICAgICAgcG1pYzYzMzVfMzdfRU1fcmVnX3dyaXRlKE1UNjMzNV9CVUNLX1ZNT0RFTV9PUF9DRkcsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZNSVBJOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJdmFsdWUgPSBwbWljNjMzNV8zN19FTV9yZWdfcmVhZChNVDYzMzVfTERPX1ZNSVBJX09QX0NGRyk7CisJCQkJCXZhbHVlICY9IH4oKDE8PCBIVzBfT1BfQ0ZHX1NISUZUKXwoMTw8IEhXMV9PUF9DRkdfU0hJRlQpfCgxPDwgSFcyX09QX0NGR19TSElGVCkpOworCQkJCQl2YWx1ZSB8PSBtb2RlOworICAgICAgICAgICAgICAgICAgICBwbWljNjMzNV8zN19FTV9yZWdfd3JpdGUoTVQ2MzM1X0xET19WTUlQSV9PUF9DRkcsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZGRTI4OgorICAgICAgICAgICAgICAgIHsKKwkJCQkJdmFsdWUgPSBwbWljNjMzNV8zN19FTV9yZWdfcmVhZChNVDYzMzVfTERPX1ZGRTI4X09QX0NGRyk7CisJCQkJCXZhbHVlICY9IH4oKDE8PCBIVzBfT1BfQ0ZHX1NISUZUKXwoMTw8IEhXMV9PUF9DRkdfU0hJRlQpfCgxPDwgSFcyX09QX0NGR19TSElGVCkpOworCQkJCQl2YWx1ZSB8PSBtb2RlOworICAgICAgICAgICAgICAgICAgICBwbWljNjMzNV8zN19FTV9yZWdfd3JpdGUoTVQ2MzM1X0xET19WRkUyOF9PUF9DRkcsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjE4XzE6CisgICAgICAgICAgICAgICAgeworCQkJCQl2YWx1ZSA9IHBtaWM2MzM1XzM3X0VNX3JlZ19yZWFkKE1UNjMzNV9MRE9fVlJGMThfMV9PUF9DRkcpOworCQkJCQl2YWx1ZSAmPSB+KCgxPDwgSFcwX09QX0NGR19TSElGVCl8KDE8PCBIVzFfT1BfQ0ZHX1NISUZUKXwoMTw8IEhXMl9PUF9DRkdfU0hJRlQpKTsKKwkJCQkJdmFsdWUgfD0gbW9kZTsKKyAgICAgICAgICAgICAgICAgICAgcG1pYzYzMzVfMzdfRU1fcmVnX3dyaXRlKE1UNjMzNV9MRE9fVlJGMThfMV9PUF9DRkcsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjE4XzI6CisgICAgICAgICAgICAgICAgeworCQkJCQl2YWx1ZSA9IHBtaWM2MzM1XzM3X0VNX3JlZ19yZWFkKE1UNjMzNV9MRE9fVlJGMThfMl9PUF9DRkcpOworCQkJCQl2YWx1ZSAmPSB+KCgxPDwgSFcwX09QX0NGR19TSElGVCl8KDE8PCBIVzFfT1BfQ0ZHX1NISUZUKXwoMTw8IEhXMl9PUF9DRkdfU0hJRlQpKTsKKwkJCQkJdmFsdWUgfD0gbW9kZTsKKyAgICAgICAgICAgICAgICAgICAgcG1pYzYzMzVfMzdfRU1fcmVnX3dyaXRlKE1UNjMzNV9MRE9fVlJGMThfMl9PUF9DRkcsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJdmFsdWUgPSBwbWljNjMzNV8zN19FTV9yZWdfcmVhZChNVDYzMzVfTERPX1ZSRjEyX09QX0NGRyk7CisJCQkJCXZhbHVlICY9IH4oKDE8PCBIVzBfT1BfQ0ZHX1NISUZUKXwoMTw8IEhXMV9PUF9DRkdfU0hJRlQpfCgxPDwgSFcyX09QX0NGR19TSElGVCkpOworCQkJCQl2YWx1ZSB8PSBtb2RlOworICAgICAgICAgICAgICAgICAgICBwbWljNjMzNV8zN19FTV9yZWdfd3JpdGUoTVQ2MzM1X0xET19WUkYxMl9PUF9DRkcsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJdmFsdWUgPSBwbWljNjMzNV8zN19FTV9yZWdfcmVhZChNVDYzMzVfTERPX1ZTUkFNX1ZNRF9PUF9DRkcpOworCQkJCQl2YWx1ZSAmPSB+KCgxPDwgSFcwX09QX0NGR19TSElGVCl8KDE8PCBIVzFfT1BfQ0ZHX1NISUZUKXwoMTw8IEhXMl9PUF9DRkdfU0hJRlQpKTsKKwkJCQkJdmFsdWUgfD0gbW9kZTsKKyAgICAgICAgICAgICAgICAgICAgcG1pYzYzMzVfMzdfRU1fcmVnX3dyaXRlKE1UNjMzNV9MRE9fVlNSQU1fVk1EX09QX0NGRywgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfR09fT05fT1A6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9HT19PTl9PUCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldEdvT25PcCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZNRDE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX09GRikKKwkJCQkJCWRjbF9wbWljNjMzNV9maWVsZF93cml0ZSggTVQ2MzM1X1JHX0JVQ0tfVk1EMV9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfQlVDS19WTUQxX09QX0NGR19DTFIsIDEgPDwgR09fT05fT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9PRkYpCisJCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19CVUNLX1ZNT0RFTV9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVlNJTTFfT1BfQ0ZHX1NFVCwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljNjMzNV9maWVsZF93cml0ZSggTVQ2MzM1X1JHX1ZTSU0xX09QX0NGR19DTFIsIDEgPDwgR09fT05fT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX09GRikKKwkJCQkJCWRjbF9wbWljNjMzNV9maWVsZF93cml0ZSggTVQ2MzM1X1JHX1ZTSU0yX09QX0NGR19TRVQsIDEgPDwgR09fT05fT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19WU0lNMl9PUF9DRkdfQ0xSLCAxIDw8IEdPX09OX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZNSVBJOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9PRkYpCisJCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19WTUlQSV9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVk1JUElfT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVkZFMjhfT1BfQ0ZHX1NFVCwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljNjMzNV9maWVsZF93cml0ZSggTVQ2MzM1X1JHX1ZGRTI4X09QX0NGR19DTFIsIDEgPDwgR09fT05fT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMThfMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVlJGMThfMV9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVlJGMThfMV9PUF9DRkdfQ0xSLCAxIDw8IEdPX09OX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjE4XzI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVlJGMThfMl9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVlJGMThfMl9PUF9DRkdfQ0xSLCAxIDw8IEdPX09OX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9PRkYpCisJCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19WUkYxMl9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVlJGMTJfT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU1JBTV9NRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVlNSQU1fVk1EX09QX0NGR19TRVQsIDEgPDwgR09fT05fT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19WU1JBTV9WTURfT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX1NFVF9HT19MUF9PUDoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0dPX0xQX09QICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0R29McE9wKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVk1EMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19CVUNLX1ZNRDFfT1BfQ0ZHX1NFVCwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljNjMzNV9maWVsZF93cml0ZSggTVQ2MzM1X1JHX0JVQ0tfVk1EMV9PUF9DRkdfQ0xSLCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19CVUNLX1ZNT0RFTV9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19WU0lNMV9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVlNJTTFfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19WU0lNMl9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVlNJTTJfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWTUlQSToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19WTUlQSV9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVk1JUElfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19WRkUyOF9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVkZFMjhfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxOF8xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9OT19MUCkKKwkJCQkJCWRjbF9wbWljNjMzNV9maWVsZF93cml0ZSggTVQ2MzM1X1JHX1ZSRjE4XzFfT1BfQ0ZHX1NFVCwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljNjMzNV9maWVsZF93cml0ZSggTVQ2MzM1X1JHX1ZSRjE4XzFfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxOF8yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX05PX0xQKQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVlJGMThfMl9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfVlJGMThfMl9PUF9DRkdfQ0xSLCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9OT19MUCkKKwkJCQkJCWRjbF9wbWljNjMzNV9maWVsZF93cml0ZSggTVQ2MzM1X1JHX1ZSRjEyX09QX0NGR19TRVQsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19WUkYxMl9PUF9DRkdfQ0xSLCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9OT19MUCkKKwkJCQkJCWRjbF9wbWljNjMzNV9maWVsZF93cml0ZSggTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9PUF9DRkdfU0VULDEgPDwgR09fTFBfT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19WU1JBTV9WTURfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCisgICAgICAgIGNhc2UgTERPX0JVQ0tfU0VUX1ZPTFRBR0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0Vm9sdGFnZSk7CisgICAgICAgICAgICByZWdWYWwgPSBQTVVfUGFyYW1ldGVyX3RvX1ZhbHVlKEVOQyhjbWQsIHBMZG9CdWNrQ3RybC0+bW9kKSwgcExkb0J1Y2tDdHJsLT52b2x0YWdlKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19WU0lNMV9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKE1UNjMzNV9SR19WU0lNMl9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9TVzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzNV9maWVsZF93cml0ZShNVDYzMzVfUkdfQlVDS19WUEExX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworI2lmIGRlZmluZWQgKERSVl9QTUlDX1dSQVBfRUxCUlVTX1JFRykKKwkJCQljYXNlIFZQQTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoTVQ2MzM1X1JHX0JVQ0tfVlBBMl9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKwkJCQljYXNlIFZYTzIyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKE1UNjMzNV9SR19WWE8yMl9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisKKwkgICAgY2FzZSBMRE9fQlVDS19HRVRfVk9MVEFHRToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPTFRBR0UJKnBMZG9CdWNrQ3RybD0mKGRhdGEtPnJQTVVMZG9CdWNrR2V0Vm9sdCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZNRDE6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pYzYzMzVfZmllbGRfcmVhZChNVDYzMzVfREFfTklfVk1EMV9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pYzYzMzVfZmllbGRfcmVhZChNVDYzMzVfREFfTklfVk1PREVNX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWM2MzM1X2ZpZWxkX3JlYWQoIE1UNjMzNV9EQV9OSV9WU1JBTV9WTURfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRToKKwkJeworCQkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0UgKnBMZG9CdWNrQ3RybD0mKGRhdGEtPnJQTVVMZG9CdWNrU2V0U2xlZXBWb2x0YWdlKTsKKwkJCXJlZ1ZhbCA9IFBNVV9QYXJhbWV0ZXJfdG9fVmFsdWUoRU5DKGNtZCwgcExkb0J1Y2tDdHJsLT5tb2QpLCBwTGRvQnVja0N0cmwtPnNsZWVwVm9sdGFnZSk7CisKKwkJCXN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzNV9maWVsZF93cml0ZSggTVQ2MzM1X1JHX1ZNT0RFTV9TTEVFUF9WT0xUQUdFLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVk1EMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzNV9maWVsZF93cml0ZSggTVQ2MzM1X1JHX1ZNRDFfU0xFRVBfVk9MVEFHRSwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCAgTVQ2MzM1X1JHX1ZTUkFNX1ZNRF9TTEVFUF9WT0xUQUdFLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJLyoKKyAgICAgICAgY2FzZSBWUEFfU0VUX0VOOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9WUEFfU0VUX0VOICpwVnBhU2V0RW4gPSAmKGRhdGEtPnJQTVVWcGFTZXRFbik7CisgICAgICAgICAgICBkY2xfcG1pYzYzMzJfZmllbGRfd3JpdGUoTVQ2MzMyX1ZQQV9FTiwgcFZwYVNldEVuLT5lbmFibGUpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwkJKi8KKworCQljYXNlIFZQQV9HRVRfVk9MVEFHRV9MSVNUOgorCQl7CisJCQlQTVVfQ1RSTF9WUEFfR0VUX1ZPTFRBR0VfTElTVCAqcFZwYUN0cmwgPSAmKGRhdGEtPnJQTVVWcGFHZXRWb2x0YWdlTGlzdCk7CisJCQlwVnBhQ3RybC0+cFZvbHRhZ2VMaXN0ID0gdnBhX3Zvc2VsOworCQkJcFZwYUN0cmwtPm51bWJlciA9IEdFVEFSUk5VTSh2cGFfdm9zZWwpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworICAgICAgICAgY2FzZSBBRENfU0VUX1JRU1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0FEQ19TRVRfUlFTVCAqcEFkY0N0cmwgPSAmKGRhdGEtPnJQTVVBZGNTZXRScXN0KTsKKyAgICAgICAgICAgIGlmKChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0lOSVQpICYmIChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0RBVEEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEVuYWJsZSBDTEtTUSBmb3IgTUQgKFNXIG1vZGUpIFJHX0NMS1NRX0VOX0FVWF9NRAorI2lmIGRlZmluZWQgKERSVl9QTUlDX1dSQVBfRUxCUlVTX1JFRykKKyAgICAgICAgICAgIHBtaWM2MzM1XzM3X0VNX3JlZ193cml0ZShNVDYzMzVfVE9QX0NMS1NRX1NFVCwgKDB4MSA8PCBNVDYzMzVfUkdfQ0xLU1FfRU5fQVVYX01EX1NISUZUKSk7CisgICAgICAgICAgICBwbWljNjMzNV8zN19FTV9yZWdfd3JpdGUoTVQ2MzM1X0FVWEFEQ19SUVNUMV9DTFIsIChwQWRjQ3RybC0+ZW5hYmxlIDw8IE1UNjMzNV9BVVhBRENfUlFTVF9DSDdfQllfTURfU0hJRlQpKTsKKyAgICAgICAgICAgIHBtaWM2MzM1XzM3X0VNX3JlZ193cml0ZShNVDYzMzVfQVVYQURDX1JRU1QxX1NFVCwgKDB4MSA8PCBNVDYzMzVfQVVYQURDX1JRU1RfQ0g3X0JZX01EX1NISUZUKSk7CisjZWxzZQorICAgICAgICAgICAgcG1pYzYzMzVfMzdfRU1fcmVnX3dyaXRlKFBNSUNfVE9QX0NMS1NRX1NFVF9BRERSLCAoMHgxIDw8IFBNSUNfUkdfQ0xLU1FfRU5fQVVYX01EX1NISUZUKSk7CisgICAgICAgICAgICBwbWljNjMzNV8zN19FTV9yZWdfd3JpdGUoUE1JQ19BVVhBRENfUlFTVDFfQ0xSX0FERFIsIChwQWRjQ3RybC0+ZW5hYmxlIDw8IFBNSUNfQVVYQURDX1JRU1RfQ0g3X0JZX01EX1NISUZUKSk7CisgICAgICAgICAgICBwbWljNjMzNV8zN19FTV9yZWdfd3JpdGUoUE1JQ19BVVhBRENfUlFTVDFfU0VUX0FERFIsICgweDEgPDwgUE1JQ19BVVhBRENfUlFTVF9DSDdfQllfTURfU0hJRlQpKTsKKyNlbmRpZgorICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX1JFUVVFU1Q7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgY2FzZSBBRENfR0VUX1JEWV9NRDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfQURDX0dFVF9SRFlfTUQgKnBBZGNDdHJsID0gJihkYXRhLT5yUE1VQWRjR2V0UmR5TWQpOworICAgICAgICAgICAgcEFkY0N0cmwtPnN0YXR1cyA9IChEQ0xfQk9PTClkY2xfcG1pYzYzMzVfZmllbGRfcmVhZChNVDYzMzVfQVVYQURDX0FEQ19SRFlfQ0g3X0JZX01EKTsKKyAgICAgICAgICAgIGlmKChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX1JFUVVFU1QpICYmIChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0JVU1kpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYocEFkY0N0cmwtPnN0YXR1cyA9PSBEQ0xfVFJVRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfUkVBRFk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0JVU1k7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBBRENfR0VUX09VVF9NRDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfQURDX0dFVF9PVVRfTUQgKnBBZGNDdHJsID0gJihkYXRhLT5yUE1VQWRjR2V0T3V0TWQpOworICAgICAgICAgICAgaWYoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9SRUFEWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWRjQ3RybC0+ZGF0YSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljNjMzNV9maWVsZF9yZWFkKE1UNjMzNV9BVVhBRENfQURDX09VVF9DSDdfQllfTUQpOworICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0RBVEE7CisjaWYgZGVmaW5lZCAoRFJWX1BNSUNfV1JBUF9FTEJSVVNfUkVHKQorICAgICAgICAgICAgcG1pYzYzMzVfMzdfRU1fcmVnX3dyaXRlKE1UNjMzNV9BVVhBRENfUlFTVDFfQ0xSLCAoMHgxIDw8IE1UNjMzNV9BVVhBRENfUlFTVF9DSDdfQllfTURfU0hJRlQpKTsKKyAgICAgICAgICAgIC8vIERpc2FibGUgQ0xLU1EgZm9yIE1EIChTVyBtb2RlKSBSR19DTEtTUV9FTl9BVVhfTUQKKyAgICAgICAgICAgIHBtaWM2MzM1XzM3X0VNX3JlZ193cml0ZShNVDYzMzVfVE9QX0NMS1NRX0NMUiwgKDB4MSA8PCBNVDYzMzVfUkdfQ0xLU1FfRU5fQVVYX01EX1NISUZUKSk7CisjZWxzZQorICAgICAgICAgICAgcG1pYzYzMzVfMzdfRU1fcmVnX3dyaXRlKFBNSUNfQVVYQURDX1JRU1QxX0NMUl9BRERSLCAoMHgxIDw8IFBNSUNfQVVYQURDX1JRU1RfQ0g3X0JZX01EX1NISUZUKSk7CisgICAgICAgICAgICAvLyBEaXNhYmxlIENMS1NRIGZvciBNRCAoU1cgbW9kZSkgUkdfQ0xLU1FfRU5fQVVYX01ECisgICAgICAgICAgICBwbWljNjMzNV8zN19FTV9yZWdfd3JpdGUoUE1JQ19UT1BfQ0xLU1FfQ0xSX0FERFIsICgweDEgPDwgUE1JQ19SR19DTEtTUV9FTl9BVVhfTURfU0hJRlQpKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIFRPUF9TRVRfU1JDTEtFTl9JTl9FTjoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfVE9QX1NFVF9TUkNMS0VOX0lOX0VOICpwVG9wU3JjbGtlbkN0cmwgPSAmKGRhdGEtPnJQTVVUb3BTZXRTcmNsa2VuSW5Fbik7CisKKyAgICAgICAgICAgIHN3aXRjaChwVG9wU3JjbGtlbkN0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBNSUNfU1JDTEtFTl9JTjA6CisgICAgICAgICAgICAgICAgeworCQkJCQlkY2xfcG1pYzYzMzVfZmllbGRfd3JpdGUoIE1UNjMzNV9SR19TUkNMS0VOX0lOMF9FTiwgcFRvcFNyY2xrZW5DdHJsLT4gbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBQTUlDX1NSQ0xLRU5fSU4xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfU1JDTEtFTl9JTjFfRU4sIHBUb3BTcmNsa2VuQ3RybC0+IG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBUT1BfU0VUX1NSQ0xLRU5fSU5fTU9ERToKKwkJeworICAgIAkgICAgUE1VX0NUUkxfVE9QX1NFVF9TUkNMS0VOX0lOX01PREUgKnBUb3BTcmNsa2VuQ3RybCA9ICYoZGF0YS0+clBNVVRvcFNldFNyY2xrZW5Jbk1vZGUpOworCisgICAgICAgICAgICBzd2l0Y2gocFRvcFNyY2xrZW5DdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBQTUlDX1NSQ0xLRU5fSU4wOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfU1JDTEtFTl9JTjBfSFdfTU9ERSwgcFRvcFNyY2xrZW5DdHJsLT4gbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBQTUlDX1NSQ0xLRU5fSU4xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM1X2ZpZWxkX3dyaXRlKCBNVDYzMzVfUkdfU1JDTEtFTl9JTjFfSFdfTU9ERSwgcFRvcFNyY2xrZW5DdHJsLT4gbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIERDWE9fU0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9EQ1hPX1NFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmwgPSAmKGRhdGEtPnJQTVVEY3hvU2V0UmVnaXN0ZXJWYWx1ZSk7CisKKwkJCS8qMHgyMjAwICwgMHgyMjAyICwweDIyMDQsIDB4MjIwOCwgMHgyMjBDLDB4MjIwRSwweDIyMTAsMHgyMjE2LCAweDIyMkMsIDB4MjIxMiovCisgICAgICAgICAgICBpZiggcENockN0cmwtPm9mZnNldCA9PSAweDIyMDAgfHwgcENockN0cmwtPm9mZnNldCA9PSAweDIyMDIgfHwgcENockN0cmwtPm9mZnNldCA9PSAweDIyMDQgfHwgcENockN0cmwtPm9mZnNldCA9PSAweDIyMDggfHwgcENockN0cmwtPm9mZnNldCA9PSAweDIyMEMgfHwKKwkJCQlwQ2hyQ3RybC0+b2Zmc2V0ID09IDB4MjIwRSB8fCBwQ2hyQ3RybC0+b2Zmc2V0ID09IDB4MjIxMCB8fCBwQ2hyQ3RybC0+b2Zmc2V0ID09IDB4MjIxNiB8fCBwQ2hyQ3RybC0+b2Zmc2V0ID09IDB4MjIyQyB8fCBwQ2hyQ3RybC0+b2Zmc2V0ID09IDB4MjIxMiApCisJCQl7CisJCQkJcG1pYzYzMzVfMzdfRU1fcmVnX3dyaXRlKHBDaHJDdHJsLT5vZmZzZXQsIHBDaHJDdHJsLT52YWx1ZSk7CisJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCX0KKwkJCWVsc2UKKwkJCQlBU1NFUlQoMCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBEQ1hPX0dFVF9SRUdJU1RFUl9WQUxVRToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfRENYT19HRVRfUkVHSVNURVJfVkFMVUUJKnBDaHJDdHJsPSYoZGF0YS0+clBNVURjeG9HZXRSZWdpc3RlclZhbHVlKTsKKyAgICAgICAgICAgIHBDaHJDdHJsLT52YWx1ZSA9IHBtaWM2MzM1XzM3X0VNX3JlZ19yZWFkKHBDaHJDdHJsLT5vZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1JU0NfU0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9NSVNDX1NFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmwgPSAmKGRhdGEtPnJQTVVNaXNjU2V0UmVnaXN0ZXJWYWx1ZSk7CisjaWYgZGVmaW5lZChEQ0xfUE1JQ19QRVJNSVNTSU9OX0NPTlRST0wpCisJCQlpZihkY2xfcG1pY19jaGVja19wZXJtaXNzaW9uKHBDaHJDdHJsLT5vZmZzZXQpPT0gRENMX1RSVUUpCisjZW5kaWYKKwkJCXsKKwkJCQlwbWljNjMzNV8zN19FTV9yZWdfd3JpdGUocENockN0cmwtPm9mZnNldCwgcENockN0cmwtPnZhbHVlKTsKKwkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJfQorI2lmIGRlZmluZWQoRENMX1BNSUNfUEVSTUlTU0lPTl9DT05UUk9MKQorCQkJZWxzZQorCQkJeworCQkJCWlsbGVnYWxfbWlzY19zZXRfcmVnaXN0ZXJfdmFsdWUub2Zmc2V0ID0gcENockN0cmwtPm9mZnNldDsKKwkJCQlpbGxlZ2FsX21pc2Nfc2V0X3JlZ2lzdGVyX3ZhbHVlLnZhbHVlID0gcENockN0cmwtPnZhbHVlOworCQkJCUFTU0VSVCgwKTsKKwkJCX0KKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUlTQ19HRVRfUkVHSVNURVJfVkFMVUU6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX01JU0NfR0VUX1JFR0lTVEVSX1ZBTFVFCSpwQ2hyQ3RybD0mKGRhdGEtPnJQTVVNaXNjR2V0UmVnaXN0ZXJWYWx1ZSk7CisgICAgICAgICAgICBwQ2hyQ3RybC0+dmFsdWUgPSBwbWljNjMzNV8zN19FTV9yZWdfcmVhZChwQ2hyQ3RybC0+b2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNpZiBkZWZpbmVkKERDTF9QTUlDX01PRFVMRV9DT05UUk9MKQorCWN1cnJlbnRfZGNsX2hhbmRsZSA9IDA7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0dXJuX3ZhbDsKKworfQorCitleHRlcm4gdm9pZCBkY2xfcG1pYzYzMzVfbW9kZW1fb25seV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZGNsX3BtaWM2MzM1X21vZGVtX29ubHlfaW5pdF92MSh2b2lkKTsKK2V4dGVybiB2b2lkIGRjbF9wbWljNjMzN19tb2RlbV9vbmx5X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpOworI2lmIGRlZmluZWQoUE1JQ19VTklUX1RFU1QpCitleHRlcm4gdm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgUE1JQ19Vbml0X1Rlc3Qodm9pZCk7CisjZW5kaWYKK0RDTF9VSU5UMzIgRFJWX1JlYWRfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyKQoreworICAgIHJldHVybiBkY2xfcG1pYzYzMzVfMzdfYnl0ZV9yZXR1cm4ocG1pY19hZGRyKTsKK30KKwordm9pZCBEUlZfV3JpdGVfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyLCBEQ0xfVUlOVDMyIHZhbHVlKQoreworICAgIGRjbF9wbWljNjMzNV8zN19ieXRlX3dyaXRlKHBtaWNfYWRkciwgdmFsdWUpOworfQorCisKKyNpZiBkZWZpbmVkIChEUlZfUE1JQ19XUkFQX0VMQlJVU19SRUcpCit2b2lkIERSVl9Db25maWd1cmVfTW9kZW1fUmVsYXRlZF9CdWNrKHZvaWQpCit7CisJLy9Db25maWd1cmUgVl9NRDEgYXMgMC44ViwgVl9NT0RFTSBhcyAwLjhWLCBWX1NSQU0gYXMgMC45VgorCS8vMHgwRTVFIFJHX0JVQ0tfVk1EMV9WT1NFTCAweDQwICgweDQwKjAuMDA2MjUrMC40ID0wLjhWKQorCS8vMHgwRTYwIFJHX0JVQ0tfVk1EMV9WT1NFTF9TTEVFUCAweDAgKDB4MCAqMC4wMDYyNSswLjQgPTAuNFYpCisJLy8weDBFODAgUkdfQlVDS19WTU9ERU1fVk9TRUwgMHg0MCAoMHg0MCowLjAwNjI1KzAuNCA9MC44VgorCS8vMHgwRTgyIFJHX0JVQ0tfVk1PREVNX1ZPU0VMX1NMRUVQICAweDAgKDB4MCAqMC4wMDYyNSswLjQgPTAuNFYpCisJLy8weDE3MUEgUkdfVlNSQU1fVk1EX1ZPU0VMIDB4NTAgKDB4NTAqMC4wMDYyNSswLjQgPTAuOVYpCisJLy8weDE3MUMgUkdfVlNSQU1fVk1EX1ZPU0VMX1NMRUVQICAweDAgKDB4MCAqMC4wMDYyNSswLjQgPTAuNFYpCisKKwlEUlZfV3JpdGVfUE1JQ19EYXRhKDB4MEU1RSwgMHg0MCk7CisJRFJWX1dyaXRlX1BNSUNfRGF0YSgweDBFODAsIDB4NDApOworCURSVl9Xcml0ZV9QTUlDX0RhdGEoMHgxNzFBLCAweDUwKTsKK30KKwora2FsX3VpbnQzMiB2bWQxLCB2bW9kZW0sIHZzcmFtX3ZtZDsKK3ZvaWQgRFJWX0R1bXBfTW9kZW1fUmVsYXRlZF9CdWNrKHZvaWQpCit7CisvLwlrYWxfdWludDMyIHZtZDEsdm1vZGVtLHZzcmFtX3ZtZDsKKworCS8vMHgwRTc4IDYgMCBEQV9OSV9WTUQxX1ZPU0VMIFJPIFBSSVZBVEUgICAgIEJVQ0sgVk1EMSBWT1VUIHNlbGVjdGlvbiBpbiBiaW5hcnkgZm9ybWF0ICAgVk9VVCA9IDAuNFYgKyA2LjI1bVYgKiBWT1NFTAorCS8vMHgwRTlBIDYgMCBEQV9OSV9WTU9ERU1fVk9TRUwgUk8gUFJJVkFURSAgIEJVQ0sgVk1PREVNIFZPVVQgc2VsZWN0aW9uIGluIGJpbmFyeSBmb3JtYXQgVk9VVCA9IDAuNFYgKyA2LjI1bVYgKiBWT1NFTAorCS8vMHgxNzM0IExET19WU1JBTV9WTURfREJHMCAxNiBMRE8gVlNSQU1fVk1EIERFQlVHIDAgICBEQV9OSV9WU1JBTV9WTURfVk9TRUxfR1JBWSBSTyBQUklWQVRFCisKKwl2bWQxID0gRFJWX1JlYWRfUE1JQ19EYXRhKDB4MEU3OCk7CisJdm1vZGVtID0gRFJWX1JlYWRfUE1JQ19EYXRhKDB4MEU5QSk7CisJdnNyYW1fdm1kID0gRFJWX1JlYWRfUE1JQ19EYXRhKDB4MTczNCk7Cit9CisjZW5kaWYKK3ZvaWQgZGNsX3BtaWM2MzM1XzM3X2luaXQodm9pZCl7CisgICAgZXh0ZXJuIHZvaWQgcG1pY193cmFwX2R1bXBfaW5pdCh2b2lkKTsKKyAgICBwbXVfY29udHJvbF9oYW5kbGVyID0gUE1JQzYzMzVfMzdfY29udHJvbF9oYW5kbGVyOworICAgIHBtdV9wYXJhbWV0ZXJfc2l6ZSA9IEdFVEFSUk5VTShwbXVfcGFyYW1ldGVyX3RhYmxlKTsKKworICAgIHBtaWNfd3JhcF9kdW1wX2luaXQoKTsKKworCWRjbF9wbWljX2FjY2Vzc19zcGlubG9jayA9IGthbF9jcmVhdGVfc3BpbmxvY2soInBtaWMgYWNjZXNzIik7CisJZGNsX3BtaWNfY29udHJvbF9zcGlubG9jayA9IGthbF9jcmVhdGVfc3BpbmxvY2soInBtaWMgY29udHJvbCIpOworCisjaWYgICFkZWZpbmVkKF9fU01BUlRfUEhPTkVfTU9ERU1fXykKKyAgICBEcnZQV1JBUF9Jbml0KCk7CisjZW5kaWYKKyAgICBwbWljNjMzNV9od192ZXJzaW9uID0gUE1JQ19FQ09fRTE7CisgICAgcG1pYzYzMzVfc3dfdmVyc2lvbiA9IFBNSUNfRUNPX0UxOworICAgIHBtaWM2MzM3X2h3X3ZlcnNpb24gPSBQTUlDX0VDT19FMTsKKyAgICBwbWljNjMzN19zd192ZXJzaW9uID0gUE1JQ19FQ09fRTE7CisKKyAgICAvLyBHZXQgTVQ2MzM1L01UNjMzNyBFQ08gdmVyc2lvbgorICAgIHsKKyAgICAgICAga2FsX3VpbnQxNiBwbWljNjMzNV9od19lY29fdmVyc2lvbiA9IDA7CisgICAgICAgIGthbF91aW50MTYgcG1pYzYzMzVfc3dfZWNvX3ZlcnNpb24gPSAwOworICAgICAgICBrYWxfdWludDE2IHBtaWM2MzM3X2h3X2Vjb192ZXJzaW9uID0gMDsKKyAgICAgICAga2FsX3VpbnQxNiBwbWljNjMzN19zd19lY29fdmVyc2lvbiA9IDA7CisgICAgICAgIHBtaWM2MzM1X2h3X2Vjb192ZXJzaW9uID0gZGNsX3BtaWM2MzM1XzM3X2J5dGVfcmV0dXJuKE1UNjMzNV9IV0NJRCk7CisgICAgICAgIHBtaWM2MzM3X2h3X2Vjb192ZXJzaW9uID0gZGNsX3BtaWM2MzM1XzM3X2J5dGVfcmV0dXJuKE1UNjMzN19IV0NJRCk7CisgICAgICAgIHBtaWM2MzM1X3N3X2Vjb192ZXJzaW9uID0gZGNsX3BtaWM2MzM1XzM3X2J5dGVfcmV0dXJuKE1UNjMzNV9TV0NJRCk7CisgICAgICAgIHBtaWM2MzM3X3N3X2Vjb192ZXJzaW9uID0gZGNsX3BtaWM2MzM1XzM3X2J5dGVfcmV0dXJuKE1UNjMzN19TV0NJRCk7CisKKyAgICAgICAgaWYgKHBtaWM2MzM1X2h3X2Vjb192ZXJzaW9uID09IE1UNjMzNV9IV19DSURfRTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBtaWM2MzM1X2h3X3ZlcnNpb24gPSBQTUlDX0VDT19FMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBtaWM2MzM1X2h3X3ZlcnNpb24gPSBQTUlDX0VDT19FMjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwbWljNjMzNV9zd19lY29fdmVyc2lvbiA9PSBNVDYzMzVfU1dfQ0lEX0UxKQorICAgICAgICB7CisgICAgICAgICAgICBwbWljNjMzNV9zd192ZXJzaW9uID0gUE1JQ19FQ09fRTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwbWljNjMzNV9zd192ZXJzaW9uID0gUE1JQ19FQ09fRTI7CisgICAgICAgIH0KKworICAgICAgICBpZiAocG1pYzYzMzdfaHdfZWNvX3ZlcnNpb24gPT0gTVQ2MzM3X1NXX0NJRF9FMSkKKyAgICAgICAgeworICAgICAgICAgICAgcG1pYzYzMzdfaHdfdmVyc2lvbiA9IFBNSUNfRUNPX0UxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcG1pYzYzMzdfaHdfdmVyc2lvbiA9IFBNSUNfRUNPX0UyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBtaWM2MzM3X3N3X2Vjb192ZXJzaW9uID09IE1UNjMzNV9TV19DSURfRTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBtaWM2MzM3X3N3X3ZlcnNpb24gPSBQTUlDX0VDT19FMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBtaWM2MzM3X3N3X3ZlcnNpb24gPSBQTUlDX0VDT19FMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBNSUNfUmVhZF9BbGwoKTsKKworI2lmICFkZWZpbmVkKF9fU01BUlRfUEhPTkVfTU9ERU1fXykKKworLyoKKwlpZihEcnZQV1JBUF9DaGVja0NJUEhFUigpID09IDEpCisgICAgZGNsX3BtaWM2MzM1X21vZGVtX29ubHlfaW5pdCgpOworCWVsc2UKKyovCisJZGNsX3BtaWM2MzM1X21vZGVtX29ubHlfaW5pdF92MSgpOworCisJZGNsX3BtaWM2MzM3X21vZGVtX29ubHlfaW5pdCgpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQorICAgIFBNSUNfUmVhZF9BbGwoKTsKKyAgICBQTUlDX1VuaXRfVGVzdCgpOworICAgIFBNSUNfUmVhZF9BbGwoKTsKKyNlbmRpZgorICAgIHBtaWNfaW5pdF9kb25lID0gRENMX1RSVUU7CisjaWYgZGVmaW5lZCAoRFJWX1BNSUNfV1JBUF9FTEJSVVNfUkVHKQorCURSVl9Db25maWd1cmVfTW9kZW1fUmVsYXRlZF9CdWNrKCk7CisgICAgRFJWX0R1bXBfTW9kZW1fUmVsYXRlZF9CdWNrKCk7CisjZW5kaWYKKworfQorCisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZWxzZQorCit2b2lkIFBNSUNfUmVhZF9BbGwodm9pZCkKK3sKKworICAgIHZvbGF0aWxlIGthbF91aW50MzIgaSxqOworICAgIGo9MDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgUE1JQzYzMzVfTUFYX1JFR19OVU07IGkgKz0gMil7CisgICAgICAgIHBtaWM2MzM1X3JlZ1tpXSA9IGRjbF9wbWljNjMzNV8zN19ieXRlX3JldHVybihpKTsKKyAgICAJd2hpbGUoaiE9MHgyMDApe2orKzt9CisgICAgCWo9MDsKKyAgICB9CisKKyAgICBmb3IgKGkgPSBNVDYzMzdfUE1JQ19SRUdfQkFTRTsgaSA8IChNVDYzMzdfUE1JQ19SRUdfQkFTRSArIFBNSUM2MzM3X01BWF9SRUdfTlVNKTsgaSArPSAyKXsKKyAgICAgICAgcG1pYzYzMzdfcmVnW2kgLSBNVDYzMzdfUE1JQ19SRUdfQkFTRV0gPSBkY2xfcG1pYzYzMzVfMzdfYnl0ZV9yZXR1cm4oaSk7CisgICAgICAgIHdoaWxlKGohPTB4MjAwKXtqKys7fQorICAgIAlqPTA7CisgICAgfQorfQorI2VuZGlmCisjaWYgZGVmaW5lZChQTUlDX1VOSVRfVEVTVCkKK3ZvaWQgUE1JQ19Vbml0X1Rlc3Qodm9pZCkKK3sKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT05fQ1RSTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kZSA9IEhXX0NPTlRST0w7IC8vIChTV19DT05UUk9MX0JZX1JFRyAvIEhXX0NPTlRST0wpCisJCXZhbC5tb2QgPSBWTUlQSTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfT05fQ1RSTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLmVuYWJsZSA9IERDTF9UUlVFOyAvLyAoRENMX1RSVUUgLyBEQ0xfRkFMU0UpOworCQl2YWwubW9kID0gVk1JUEk7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWUEFfU1c7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2Q9VlBBX1NXOworCQl2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworCQkvKiAgICAgUE1VX1ZPTFRfMDBfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDBfNjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDBfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDBfODAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDBfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfMDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfMjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfNDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfNjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfMDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfNDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfNjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfODAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDNfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfNDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDNfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfNjAwMDAwX1YsICAgICAgKi8KKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kID0gVlBBX1NXOworCQl2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX01PREVTRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTl9DVFJMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2RlID0gSFdfQ09OVFJPTDsgLy8gKFNXX0NPTlRST0xfQllfUkVHIC8gSFdfQ09OVFJPTCkKKwkJdmFsLm1vZCA9IFZSRjE7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOX0NUUkwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX1NFTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuc2VsID0gU1JDTEtFTl9JTjFfU0VMOworCQkvKiBTUkNMS0VOX0lOMV9TRUwgLyBTUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX09SX1NSQ0xLRU5fSU4yX1NFTC8KKwkJCVNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwgKi8KKwkJdmFsLm1vZCA9IFZSRjE7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOX1NFTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kID0gVlJGMTsKKwkJdmFsLm1vZGUgPSBGT1JDRV9QV01fTU9ERTsgLy8gKEFVVE9fTU9ERSAvIEZPUkNFX1BXTV9NT0RFKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9NT0RFU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX1ZSRjFfU0VUX01PREVTRVRfQ0tQRE5fU0VUIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5yZWd2YWwgPSAweDc7IC8vICgweDB+MHhGKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfU0VUX01PREVTRVRfQ0tQRE5fU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX1ZSRjFfU0VUX01PREVTRVRfQ0tQRE5fQ0xSIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5yZWd2YWwgPSAweDc7IC8vICgweDB+MHhGKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfU0VUX01PREVTRVRfQ0tQRE5fQ0xSLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX1ZSRjFfR0VUX01PREVTRVRfQ0tQRE4gdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJLy8gdmFsLnJlZ3ZhbCB3aWxsIGJlIHlvdXIgcmVxdWVzdCB2YWx1ZSAoIG5vIG5lZWQgZG8gYW55IHNoaWZ0KQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfR0VUX01PREVTRVRfQ0tQRE4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0NUUkwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLm1vZGUgPSBIV19DT05UUk9MOyAvLyAoU1dfQ09OVFJPTF9CWV9SRUcgLyBIV19DT05UUk9MKQorCQl2YWwubW9kID0gVlJGMjsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fQ1RSTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fU0VMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5zZWwgPSBTUkNMS0VOX0lOMV9TRUw7CisJCS8qIFNSQ0xLRU5fSU4xX1NFTCAvIFNSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfT1JfU1JDTEtFTl9JTjJfU0VMLworCQkJU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTCAqLworCQl2YWwubW9kID0gVlJGMjsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fU0VMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWUkYyOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kID0gVlJGMTsKKwkJdmFsLm1vZGUgPSBGT1JDRV9QV01fTU9ERTsgLy8gKEFVVE9fTU9ERSAvIEZPUkNFX1BXTV9NT0RFKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9NT0RFU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9TUkNMS19FTl9TRUwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLnNlbCA9IFNSQ0xLRU5fSU4xX1NFTDsKKwkJLyogU1JDTEtFTl9JTjFfU0VMIC8gU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMl9TRUwvCisJCQlTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMICovCisJCXZhbC5tb2QgPSBWTUlQSTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfU1JDTEtfRU5fU0VMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWU0lNMTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKKwkJdmFsLm1vZCA9IFZTSU0yOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kPVZTSU0xOworCQl2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworCQkvKiAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgKi8KKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kPVZTSU0yOworCQl2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworCQkvKiAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgKi8KKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9Cit9CisjZW5kaWYgLy8gRW5kIG9mICNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQorCisjZW5kaWYgLy8gRW5kIG9mICNpZiBkZWZpbmVkKFBNSUNfNjMzNV9SRUdfQVBJKSB8fCBkZWZpbmVkKFBNSUNfNjMzN19SRUdfQVBJKQorCmRpZmYgLS1naXQgYS9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzMzVfaW5pdC5jIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzM1X2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjVmMmVkCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzM1X2luaXQuYwpAQCAtMCwwICsxLDE1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEzCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgICBkY2xfcG1pYzYzMzVfaW5pdC5jCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgICAgTU9MWSBTb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgICAgVGhpcyBmaWxlIGlzIGZvciBQTUlDIDYzMzUKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpbml0LmgiCisjaW5jbHVkZSAiZGNsLmgiCisKK2V4dGVybiBEQ0xfVUlOVDMyIERSVl9SZWFkX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkcik7CitleHRlcm4gdm9pZCBEUlZfV3JpdGVfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyLCBEQ0xfVUlOVDMyIHZhbHVlKTsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisvLyBNVDYzMzUgRUNPX0UxCit2b2lkIGRjbF9wbWljNjMzNV9tb2RlbV9vbmx5X2luaXQodm9pZCkKK3sKKwkvKiBjaGFuZ2UgUE1JQyBpbml0aWFsIHNldHRpbmcgdG8gcHJlbG9hZGVyIGZvciBhbGwgU1cgbG9hZC4KKwkgICAgSWYgeW91IHdhbnQgdG8gY2hhbmdlIHBtaWMgc2V0dGluZywgcGxlYXNlIGNvbnRhY3QgUFQgTGVhZCAmIFBNSUMgQVAgU1cgKi8KK30KKwordm9pZCBkY2xfcG1pYzYzMzVfbW9kZW1fb25seV9pbml0X3YxKHZvaWQpCit7CisJLyogY2hhbmdlIFBNSUMgaW5pdGlhbCBzZXR0aW5nIHRvIHByZWxvYWRlciBmb3IgYWxsIFNXIGxvYWQuCisJICAgIElmIHlvdSB3YW50IHRvIGNoYW5nZSBwbWljIHNldHRpbmcsIHBsZWFzZSBjb250YWN0IFBUIExlYWQgJiBQTUlDIEFQIFNXICovCit9CmRpZmYgLS1naXQgYS9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzMzdfaW5pdC5jIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzM3X2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODAxYTc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzM3X2luaXQuYwpAQCAtMCwwICsxLDE3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEzCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgICBkY2xfcG1pYzYzMzdfaW5pdC5jCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgICAgTU9MWSBTb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgICAgVGhpcyBmaWxlIGlzIGZvciBQTUlDIDYzMzcKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiaW5pdC5oIgorI2luY2x1ZGUgImRjbC5oIgorCitleHRlcm4gRENMX1VJTlQzMiBEUlZfUmVhZF9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIpOworZXh0ZXJuIHZvaWQgRFJWX1dyaXRlX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkciwgRENMX1VJTlQzMiB2YWx1ZSk7CisKK3N0YXRpYyB2b2lkIFBNSUNfRFJWX1NldERhdGEoRENMX1VJTlQzMiBhZGRyLCBEQ0xfVUlOVDMyIGJpdG1hc2ssIERDTF9VSU5UMTYgdmFsdWUsIERDTF9VSU5UMzIgYmFuaykKK3sKKyAgIERDTF9VSU5UMzIgdGVtcDsKKyAgIGFkZHIgfD0gKGJhbmsgPDwgMzEpOworICAgdGVtcCA9ICh+KGJpdG1hc2spKSAmIERSVl9SZWFkX1BNSUNfRGF0YShhZGRyKTsKKyAgIHRlbXAgfD0gKCh2YWx1ZSkgJiAoYml0bWFzaykpOworICAgRFJWX1dyaXRlX1BNSUNfRGF0YShhZGRyLHRlbXApOworfQorCit2b2lkIGRjbF9wbWljNjMzN19tb2RlbV9vbmx5X2luaXQodm9pZCkKK3sKKwkvLyBSR19TUkNMS0VOX0lOMF9IV19NT0RFWzQ6NF0gPSAweDEgPT4gSm9zZXBoLyBPU0MgQ0xLIHdpIFNSQ0xLRU4KKwlQTUlDX0RSVl9TZXREYXRhKDB4ODAwNiAgICAsIDB4MTAgICAgICAsIDB4MTAgICAgICAsIDB4MCk7CisKKwkvLyBSR19WT1dFTl9IV19NT0RFWzU6NV0gPSAweDEgPT4gSm9zZXBoLyBPU0MgQ0xLIHdpIFNSQ0xLRU4KKwlQTUlDX0RSVl9TZXREYXRhKDB4ODAwNiAgICAsIDB4MjAgICAgICAsIDB4MjAgICAgICAsIDB4MCk7CisKKwkvLyBSR19PU0NfU0VMX0hXX01PREVbNjo2XSA9IDB4MSA9PiBKb3NlcGgvIE9TQyBDTEsgd2kgU1JDTEtFTgorCVBNSUNfRFJWX1NldERhdGEoMHg4MDA2ICAgICwgMHg0MCAgICAgICwgMHg0MCAgICAgICwgMHgwKTsKKworCS8vIFJHX1RSSU1fNzVLX0NLX1BETls0OjRdID0gMHgxID0+IEpvc2VwaC9wb3dlciBkb3duIChGVCB0cmltIHVzZSkKKwlQTUlDX0RSVl9TZXREYXRhKDB4ODIwMCAgICAsIDB4MTAgICAgICAsIDB4MTAgICAgICAsIDB4MCk7CisKKwkvLyBSR19BVURJRl9DS19QRE5bMTE6MTFdID0gMHgxID0+IEpvc2VwaC9wb3dlciBkb3duCisJUE1JQ19EUlZfU2V0RGF0YSgweDgyMDAgICAgLCAweDgwMCAgICAgLCAweDgwMCAgICAgLCAweDApOworCisJLy8gUkdfSU5UUlBfUFJFX09DX0NLX1BETlszOjNdID0gMHgxID0+IEpvc2VwaC9wb3dlciBkb3duICgzNyBubyB1c2UpCisJUE1JQ19EUlZfU2V0RGF0YSgweDgyMDYgICAgLCAweDggICAgICAgLCAweDggICAgICAgLCAweDApOworCisJLy8gUkdfTERPX0NBTElfNzVLX0NLX1BETls4OjhdID0gMHgxID0+IEpvc2VwaC9wb3dlciBkb3duICgzNyBubyB1c2UpCisJUE1JQ19EUlZfU2V0RGF0YSgweDgyMDYgICAgLCAweDEwMCAgICAgLCAweDEwMCAgICAgLCAweDApOworCisJLy8gUkdfQUNDREVUX0NLX1BETlsxMToxMV0gPSAweDAgPT4gSm9zZXBoL3Bvd2VyIG9uIChBQ0NERVQgdXNlKQorCVBNSUNfRFJWX1NldERhdGEoMHg4MjA2ICAgICwgMHg4MDAgICAgICwgMHgwICAgICAgICwgMHgwKTsKKworCS8vIFJHX1JFR19DS19QRE5fSFdFTls3OjddID0gMHgxID0+IEpvc2VwaC9SRyBDTEsgSFcKKwlQTUlDX0RSVl9TZXREYXRhKDB4ODIxOCAgICAsIDB4ODAgICAgICAsIDB4ODAgICAgICAsIDB4MCk7CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKwkvLyBSR19WQTE4X0hXMF9PUF9FTlsxOjFdID0gMHgxID0+IEpvc2VwaC9MRE8gTFAgd2kgU1JDTEtFTgorCVBNSUNfRFJWX1NldERhdGEoMHg5MDA4ICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZBMThfSFcwX09QX0NGR1sxOjFdID0gMHgxID0+IEpvc2VwaC9MRE8gTFAgd2kgU1JDTEtFTgorCVBNSUNfRFJWX1NldERhdGEoMHg5MDBFICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKworCS8vIEFVWEFEQ19BVkdfTlVNX0xBUkdFWzU6M10gPSAweDcgPT4gSnl1bi1KaWEvMjU2IGF2ZXJhZ2UKKwlQTUlDX0RSVl9TZXREYXRhKDB4OTQzQSAgICAsIDB4MzggICAgICAsIDB4MzggICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDNfU0VMWzc6Nl0gPSAweDAgPT4gSnl1bi1KaWEvIGVmdXNlIGNoMAorCVBNSUNfRFJWX1NldERhdGEoMHg5NDQ0ICAgICwgMHhDMCAgICAgICwgMHgwICAgICAgICwgMHgwKTsKKworCS8vIEFVWEFEQ19UUklNX0NINF9TRUxbOTo4XSA9IDB4MSA9PiBKeXVuLUppYS8gZWZ1c2UgY2g0CisJUE1JQ19EUlZfU2V0RGF0YSgweDk0NDQgICAgLCAweDMwMCAgICAgLCAweDEwMCAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0g1X1NFTFsxMToxMF0gPSAweDIgPT4gSnl1bi1KaWEvIGVmdXNlIGNoNworCVBNSUNfRFJWX1NldERhdGEoMHg5NDQ0ICAgICwgMHhDMDAgICAgICwgMHg4MDAgICAgICwgMHgwKTsKKworCS8vIEFVWEFEQ19UUklNX0NINl9TRUxbMTM6MTJdID0gMHgwID0+IEp5dW4tSmlhLyBlZnVzZSBjaDAKKwlQTUlDX0RSVl9TZXREYXRhKDB4OTQ0NCAgICAsIDB4MzAwMCAgICAsIDB4MCAgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDdfU0VMWzE1OjE0XSA9IDB4MiA9PiBKeXVuLUppYS8gZWZ1c2UgY2g3CisJUE1JQ19EUlZfU2V0RGF0YSgweDk0NDQgICAgLCAweEMwMDAgICAgLCAweDgwMDAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0g5X1NFTFszOjJdID0gMHgyID0+IEp5dW4tSmlhLyBlZnVzZSBjaDcKKwlQTUlDX0RSVl9TZXREYXRhKDB4OTQ0NiAgICAsIDB4QyAgICAgICAsIDB4OCAgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDEyX1NFTFs5OjhdID0gMHgyID0+IEp5dW4tSmlhLyBlZnVzZSBjaDcKKwlQTUlDX0RSVl9TZXREYXRhKDB4OTQ0NiAgICAsIDB4MzAwICAgICAsIDB4MjAwICAgICAsIDB4MCk7CisKKwkvLyBHUElPX1BVTExFTjBbMTA6MF0gPSAweDAgPT4gSm9zZXBoLyBubyBwdWxsCisJUE1JQ19EUlZfU2V0RGF0YSgweDlDMDYgICAgLCAweDdGRiAgICAgLCAweDAgICAgICAgLCAweDApOworCisJLy8gR1BJTzhfTU9ERVsxMTo5XSA9IDB4MSA9PiBKb3NlcGgvIE1US0lGCisJUE1JQ19EUlZfU2V0RGF0YSgweDlDMjggICAgLCAweEUwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworCisJLy8gR1BJTzlfTU9ERVsxNDoxMl0gPSAweDEgPT4gSm9zZXBoLyBNVEtJRgorCVBNSUNfRFJWX1NldERhdGEoMHg5QzI4ICAgICwgMHg3MDAwICAgICwgMHgxMDAwICAgICwgMHgwKTsKKworfQpkaWZmIC0tZ2l0IGEvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzM5LmMgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzMzkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTY2NWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzM5LmMKQEAgLTAsMCArMSw3MzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxMQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLiAKKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogIGRjbF9wbWljNjMzOS5jCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgTU9MWQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKglUaGlzIGlzIHBtaWM2MzM5IGRyaXZlcgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAicmVnX2Jhc2UuaCIKKyNpbmNsdWRlICJpbnRyQ3RybC5oIgorI2luY2x1ZGUgImRjbC5oIgorI2luY2x1ZGUgImRjbF9wbXVfc3cuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgImRydl9ic2kuaCIKKyNpbmNsdWRlICJpMmNfcG1pYy5oIgorCisjZGVmaW5lIFBNSUNfTUFYX1JFR19OVU0JUE1JQ19SRUdfTlVNCisKKyNpZmRlZiBQTUlDXzYzMzlfREVCVUcKK3N0YXRpYyBrYWxfdWludDE2IHBtaWM2MzM5X3JlZ1tQTUlDX01BWF9SRUdfTlVNXTsKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgRENMX1VJTlQzMiB2aW8yOF92b3NlbFtdID0KK3sKKwlQTVVfVk9MVF8wMV8yMDAwMDBfViwgUE1VX1ZPTFRfMDFfMzAwMDAwX1YsIFBNVV9WT0xUXzAxXzUwMDAwMF9WLCBQTVVfVk9MVF8wMV84MDAwMDBfViwKKwlQTVVfVk9MVF8wMl81MDAwMDBfViwgUE1VX1ZPTFRfMDJfODAwMDAwX1YsIFBNVV9WT0xUXzAzXzAwMDAwMF9WLCBQTVVfVk9MVF8wM18zMDAwMDBfViwKK307CisKK3N0YXRpYyBjb25zdCBEQ0xfVUlOVDMyIHZjb3JlX3Zvc2VsW109Cit7CisgICAgICBQTVVfVk9MVF8wMF83MDAwMDBfViwgUE1VX1ZPTFRfMDBfNzI1MDAwX1YsIFBNVV9WT0xUXzAwXzc3NTAwMF9WLCBQTVVfVk9MVF8wMF83NTAwMDBfViwKKyAgICAgIFBNVV9WT0xUXzAwXzg3NTAwMF9WLCBQTVVfVk9MVF8wMF84NTAwMDBfViwgUE1VX1ZPTFRfMDBfODAwMDAwX1YsIFBNVV9WT0xUXzAwXzgyNTAwMF9WLAorICAgICAgUE1VX1ZPTFRfMDFfMDc1MDAwX1YsIFBNVV9WT0xUXzAxXzA1MDAwMF9WLCBQTVVfVk9MVF8wMV8wMDAwMDBfViwgUE1VX1ZPTFRfMDFfMDI1MDAwX1YsCisgICAgICBQTVVfVk9MVF8wMF85MDAwMDBfViwgUE1VX1ZPTFRfMDBfOTI1MDAwX1YsIFBNVV9WT0xUXzAwXzk3NTAwMF9WLCBQTVVfVk9MVF8wMF85NTAwMDBfViwKKyAgICAgIFBNVV9WT0xUXzAxXzQ3NTAwMF9WLCBQTVVfVk9MVF8wMV80NTAwMDBfViwgUE1VX1ZPTFRfMDFfNDAwMDAwX1YsIFBNVV9WT0xUXzAxXzQyNTAwMF9WLAorICAgICAgUE1VX1ZPTFRfMDFfMzAwMDAwX1YsIFBNVV9WT0xUXzAxXzMyNTAwMF9WLCBQTVVfVk9MVF8wMV8zNzUwMDBfViwgUE1VX1ZPTFRfMDFfMzUwMDAwX1YsCisgICAgICBQTVVfVk9MVF8wMV8xMDAwMDBfViwgUE1VX1ZPTFRfMDFfMTI1MDAwX1YsIFBNVV9WT0xUXzAxXzE3NTAwMF9WLCBQTVVfVk9MVF8wMV8xNTAwMDBfViwgICAgICAKKyAgICAgIFBNVV9WT0xUXzAxXzI3NTAwMF9WLCBQTVVfVk9MVF8wMV8yNTAwMDBfViwgUE1VX1ZPTFRfMDFfMjAwMDAwX1YsIFBNVV9WT0xUXzAxXzIyNTAwMF9WLCAgICAgICAgICAgCit9OworCitzdGF0aWMgY29uc3QgRENMX1VJTlQzMiB2c2ltX3Zvc2VsW10gPQoreworCVBNVV9WT0xUXzAxXzIwMDAwMF9WLCBQTVVfVk9MVF8wMV8zMDAwMDBfViwgUE1VX1ZPTFRfMDFfNTAwMDAwX1YsIFBNVV9WT0xUXzAxXzgwMDAwMF9WLAorCVBNVV9WT0xUXzAyXzUwMDAwMF9WLCBQTVVfVk9MVF8wMl84MDAwMDBfViwgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsIFBNVV9WT0xUXzAzXzMwMDAwMF9WLAorfTsKKworc3RhdGljIGNvbnN0IERDTF9VSU5UMzIgdm1jX2lvX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUXzAxXzIwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzMwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzUwMDAwMF9WLCAgIFBNVV9WT0xUXzAxXzgwMDAwMF9WLAorICAgIFBNVV9WT0xUXzAyXzAwMDAwMF9WLCAgIFBNVV9WT0xUXzAyXzgwMDAwMF9WLCAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLCAgIFBNVV9WT0xUXzAzXzMwMDAwMF9WLAorfTsKKworc3RhdGljIGNvbnN0IERDTF9VSU5UMzIgdm1jaF92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF8wMV8yMDAwMDBfViwgICBQTVVfVk9MVF8wMV8zMDAwMDBfViwgICBQTVVfVk9MVF8wMV81MDAwMDBfViwgICBQTVVfVk9MVF8wMV84MDAwMDBfViwKKyAgICBQTVVfVk9MVF8wMl81MDAwMDBfViwgICBQTVVfVk9MVF8wMl84MDAwMDBfViwgICBQTVVfVk9MVF8wM18wMDAwMDBfViwgICBQTVVfVk9MVF8wM18zMDAwMDBfViwKK307CisKK3N0YXRpYyBjb25zdCBEQ0xfVUlOVDMyIHZwYV92b3NlbFtdID0KK3sKKyAgICAgICAgUE1VX1ZPTFRfMDBfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMF82MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgICAgICBQTVVfVk9MVF8wMF83MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAwXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisgICAgICAgIFBNVV9WT0xUXzAwXzkwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfMDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICAgICAgUE1VX1ZPTFRfMDFfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV8yMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgICAgICBQTVVfVk9MVF8wMV8zMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisgICAgICAgIFBNVV9WT0xUXzAxXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICAgICAgUE1VX1ZPTFRfMDFfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgICAgICBQTVVfVk9MVF8wMV85MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzAwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsIAorICAgICAgICBQTVVfVk9MVF8wMl8xMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzIwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisgICAgICAgIFBNVV9WT0xUXzAyXzMwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfNDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICAgICAgUE1VX1ZPTFRfMDJfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl82MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgICAgICBQTVVfVk9MVF8wMl83MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisgICAgICAgIFBNVV9WT0xUXzAyXzkwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKyAgICAgICAgUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wM18yMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIAorICAgICAgICBQTVVfVk9MVF8wM18zMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgCisgICAgICAgIFBNVV9WT0xUXzAzXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICAKKworfTsKKworUE1VX1BBUkFNRVRFUl9UQUJMRV9FTlRSWSBwbXVfcGFyYW1ldGVyX3RhYmxlW109Cit7CisgICAgICAgIHtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZJTzI4KSwJCXZpbzI4X3Zvc2VsLAkJTlVMTCwJCQkJR0VUQVJSTlVNKHZpbzI4X3Zvc2VsKX0sCisgICAgICAgIHtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZDT1JFKSwJCXZjb3JlX3Zvc2VsLAkJTlVMTCwJCQkJR0VUQVJSTlVNKHZjb3JlX3Zvc2VsKX0sICAgICAgICAgICAgICAgIAorCXtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZTSU0pLAkJdnNpbV92b3NlbCwJCU5VTEwsCQkJCUdFVEFSUk5VTSh2c2ltX3Zvc2VsKX0sCisJe0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlNJTTIpLAkJdnNpbV92b3NlbCwJCU5VTEwsCQkJCUdFVEFSUk5VTSh2c2ltX3Zvc2VsKX0sCisJe0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVk1DKSwJCXZtY19pb192b3NlbCwJCU5VTEwsCQkJR0VUQVJSTlVNKHZtY19pb192b3NlbCkJfSwKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWTUNIKSwJCXZtY2hfdm9zZWwsCQlOVUxMLAkJCQlHRVRBUlJOVU0odm1jaF92b3NlbCkJfSwKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWUEEpLAkJdnBhX3Zvc2VsLAkJTlVMTCwJCQkJR0VUQVJSTlVNKHZwYV92b3NlbCkJfSwgICAgICAgICAgICAgICAgCisgICAgICAgIHtFTkMoVlBBX1NFVF9WT0xUQUdFX1NFTEVDVElPTl9UQUJMRSwgVlBBKSwgICAgIHZwYV92b3NlbCwJCU5VTEwsCQkJCUdFVEFSUk5VTSh2cGFfdm9zZWwpCX0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK307CitEQ0xfVUlOVDE2IHBtdV9wYXJhbWV0ZXJfc2l6ZT0wOworRENMX1VJTlQxNiBwbWljX0NJRDAgPSAweEZGRkY7CitEQ0xfVUlOVDE2IHBtaWNfRUNPX1ZFUlNJT04gPSAweEZGRkY7CisKKworY29uc3QgUE1VX0ZMQUdfVEFCTEVfRU5UUlkgcG1pY19mbGFnc190YWJsZVtdID0gCit7CisgICAgICAgIHtDSUQwLAkJICAgICAgICAgICAgICAgIENJRDBfQUREUiwJCSAgICAgICAgQ0lEMF9NQVNLLAkJQ0lEMF9TSElGVH0sICAgICAgICAKKyAgICAgICAge0VDT19WRVJTSU9OLCAgICAgICAgICAgICAgICAgICBFQ09fVkVSU0lPTl9BRERSLCAgICAgICAgICAgICAgIEVDT19WRVJTSU9OX01BU0ssICAgICAgIAlFQ09fVkVSU0lPTl9TSElGVH0sCisgICAgICAgIHtSR19WSU8yOF9WT1NFTCwJCVJHX1ZJTzI4X1ZPU0VMX0FERFIsCQlSR19WSU8yOF9WT1NFTF9NQVNLLAkJUkdfVklPMjhfVk9TRUxfU0hJRlR9LAorICAgICAgICB7UkdfVklPMjhfRU4sCQkgICAgICAgIFJHX1ZJTzI4X0VOX0FERFIsCQlSR19WSU8yOF9FTl9NQVNLLAkJUkdfVklPMjhfRU5fU0hJRlR9LCAgICAgICAgICAgICAgICAKKyAgICAgICAge1JHX1ZVU0IxMV9FTiwJCSAgICAgICAgUkdfVlVTQjExX0VOX0FERFIsCQlSR19WVVNCMTFfRU5fTUFTSywJCVJHX1ZVU0IxMV9FTl9TSElGVH0sICAgICAgICAgICAgICAgIAorICAgICAgICB7UkdfVkNPUkVfVk9TRUwsCQlSR19WQ09SRV9WT1NFTF9BRERSLAkJUkdfVkNPUkVfVk9TRUxfTUFTSywJCVJHX1ZDT1JFX1ZPU0VMX1NISUZUfSwgICAgICAgICAgICAgICAgCisJe1JHX1ZSRjE4X01PREVTRVQsICAgICAgUkdfVlJGMThfTU9ERVNFVF9BRERSLAkJUkdfVlJGMThfTU9ERVNFVF9NQVNLLAkJUkdfVlJGMThfTU9ERVNFVF9TSElGVH0sCisJe1JHX1ZSRjE4X09OX0NUUkwsCQlSR19WUkYxOF9PTl9DVFJMX0FERFIsICAgICAgUkdfVlJGMThfT05fQ1RSTF9NQVNLLAkJUkdfVlJGMThfT05fQ1RSTF9TSElGVH0sCisJe1JHX1ZSRjE4X0VOLAkJCVJHX1ZSRjE4X0VOX0FERFIsICAgICAgCQlSR19WUkYxOF9FTl9NQVNLLCAgICAgIAkJUkdfVlJGMThfRU5fU0hJRlR9LAorCXtWUkYxOF9zcmNsa2VuX3NlbCwJCVZSRjE4X3NyY2xrZW5fc2VsX0FERFIsICAgICBWUkYxOF9zcmNsa2VuX3NlbF9NQVNLLAkJVlJGMThfc3JjbGtlbl9zZWxfU0hJRlR9LAorCXtSR19WUkYxOF8yX01PREVTRVQsCVJHX1ZSRjE4XzJfTU9ERVNFVF9BRERSLAlSR19WUkYxOF8yX01PREVTRVRfTUFTSywJUkdfVlJGMThfMl9NT0RFU0VUX1NISUZUfSwKKwl7UkdfVlJGMThfMl9PTl9DVFJMLAlSR19WUkYxOF8yX09OX0NUUkxfQUREUiwJUkdfVlJGMThfMl9PTl9DVFJMX01BU0ssCVJHX1ZSRjE4XzJfT05fQ1RSTF9TSElGVH0sCisJe1JHX1ZSRjE4XzJfRU4sCQkJUkdfVlJGMThfMl9FTl9BRERSLCAgICAgIAlSR19WUkYxOF8yX0VOX01BU0ssICAgICAgCVJHX1ZSRjE4XzJfRU5fU0hJRlR9LAorCXtWUkYxOF8yX3NyY2xrZW5fc2VsLAlWUkYxOF8yX3NyY2xrZW5fc2VsX0FERFIsCVZSRjE4XzJfc3JjbGtlbl9zZWxfTUFTSywJVlJGMThfMl9zcmNsa2VuX3NlbF9TSElGVH0sCisJe1JHX1ZQQV9NT0RFU0VULAkJUkdfVlBBX01PREVTRVRfQUREUiwgCQlSR19WUEFfTU9ERVNFVF9NQVNLLAkJUkdfVlBBX01PREVTRVRfU0hJRlR9LAorCXtWUEFfVk9TRUxfTUFQX0VOLCAgICAgICAgICAgICAgVlBBX1ZPU0VMX01BUF9FTl9BRERSLCAgICAgICAgICBWUEFfVk9TRUxfTUFQX0VOX01BU0ssICAgICAgICAgIFZQQV9WT1NFTF9NQVBfRU5fU0hJRlR9LCAgICAgICAgICAgICAgICAKKwl7UkdfVlBBX0VOLAkJCQlSR19WUEFfRU5fQUREUiwgICAgICAJCVJHX1ZQQV9FTl9NQVNLLAkJCQlSR19WUEFfRU5fU0hJRlR9LAorCXtWUEFfVk9TRUwsCQkJCVZQQV9WT1NFTF9BRERSLCAgICAgIAkJVlBBX1ZPU0VMX01BU0ssCQkJCVZQQV9WT1NFTF9TSElGVH0sCisJe1JHX1ZSRjE4X0JLX0xETywJCVJHX1ZSRjE4X0JLX0xET19BRERSLAkJUkdfVlJGMThfQktfTERPX01BU0ssCQlSR19WUkYxOF9CS19MRE9fU0hJRlR9LAorCXtSR19WUkYxOF8yX0JLX0xETywJCVJHX1ZSRjE4XzJfQktfTERPX0FERFIsCQlSR19WUkYxOF8yX0JLX0xET19NQVNLLAkJUkdfVlJGMThfMl9CS19MRE9fU0hJRlR9LAorCXtSR19WU0lNMV9FTiwJCQlSR19WU0lNMV9FTl9BRERSLAkJCVJHX1ZTSU0xX0VOX01BU0ssCQkJUkdfVlNJTTFfRU5fU0hJRlR9LAorCXtSR19WU0lNMl9FTiwJCQlSR19WU0lNMl9FTl9BRERSLAkJCVJHX1ZTSU0yX0VOX01BU0ssCQkJUkdfVlNJTTJfRU5fU0hJRlR9LAorCXtSR19WU0lNMV9WT1NFTCwJCVJHX1ZTSU0xX1ZPU0VMX0FERFIsCQlSR19WU0lNMV9WT1NFTF9NQVNLLAkJUkdfVlNJTTFfVk9TRUxfU0hJRlR9LAorCXtSR19WU0lNMl9WT1NFTCwJCVJHX1ZTSU0yX1ZPU0VMX0FERFIsCQlSR19WU0lNMl9WT1NFTF9NQVNLLAkJUkdfVlNJTTJfVk9TRUxfU0hJRlR9LAorCXtSR19WTUNfVk9TRUwsCQkJUkdfVk1DX1ZPU0VMX0FERFIsCQkJUkdfVk1DX1ZPU0VMX01BU0ssCQkJUkdfVk1DX1ZPU0VMX1NISUZUfSwKKwl7UkdfVk1DX0VOLAkJCQlSR19WTUNfRU5fQUREUiwJCQkJUkdfVk1DX0VOX01BU0ssCQkJCVJHX1ZNQ19FTl9TSElGVH0sCisJe1JHX1ZNQ0hfVk9TRUwsCQkJUkdfVk1DSF9WT1NFTF9BRERSLAkJCVJHX1ZNQ0hfVk9TRUxfTUFTSywJCQlSR19WTUNIX1ZPU0VMX1NISUZUfSwKKwl7UkdfVk1DSF9FTiwJCQlSR19WTUNIX0VOX0FERFIsCQkJUkdfVk1DSF9FTl9NQVNLLAkJCVJHX1ZNQ0hfRU5fU0hJRlR9LAorCXtSR19WTUlQSV9FTiwJCQlSR19WTUlQSV9FTl9BRERSLAkJCVJHX1ZNSVBJX0VOX01BU0ssCQkJUkdfVk1JUElfRU5fU0hJRlR9LCAgICAgICAgICAgICAgICAKKyAgICAgICAge1ZQQV9UQUJMRTAsICAgICAgICAgICAgICAgICAgICBWUEFfVEFCTEUwX0FERFIsICAgICAgICAgICAgICAgICAgICAgICAgVlBBX1RBQkxFMF9NQVNLLCAgICAgICAgICAgICAgICAgICAgICAgIFZQQV9UQUJMRTBfU0hJRlR9LAorICAgICAgICB7VlBBX1RBQkxFMSwgICAgICAgICAgICAgICAgICAgIFZQQV9UQUJMRTFfQUREUiwgICAgICAgICAgICAgICAgICAgICAgICBWUEFfVEFCTEUxX01BU0ssICAgICAgICAgICAgICAgICAgICAgICAgVlBBX1RBQkxFMV9TSElGVH0sCisgICAgICAgIHtWUEFfVEFCTEUyLCAgICAgICAgICAgICAgICAgICAgVlBBX1RBQkxFMl9BRERSLCAgICAgICAgICAgICAgICAgICAgICAgIFZQQV9UQUJMRTJfTUFTSywgICAgICAgICAgICAgICAgICAgICAgICBWUEFfVEFCTEUyX1NISUZUfSwKKyAgICAgICAge1ZQQV9UQUJMRTMsICAgICAgICAgICAgICAgICAgICBWUEFfVEFCTEUzX0FERFIsICAgICAgICAgICAgICAgICAgICAgICAgVlBBX1RBQkxFM19NQVNLLCAgICAgICAgICAgICAgICAgICAgICAgIFZQQV9UQUJMRTNfU0hJRlR9LAorICAgICAgICB7VlBBX1RBQkxFNCwgICAgICAgICAgICAgICAgICAgIFZQQV9UQUJMRTRfQUREUiwgICAgICAgICAgICAgICAgICAgICAgICBWUEFfVEFCTEU0X01BU0ssICAgICAgICAgICAgICAgICAgICAgICAgVlBBX1RBQkxFNF9TSElGVH0sCisgICAgICAgIHtWUEFfVEFCTEU1LCAgICAgICAgICAgICAgICAgICAgVlBBX1RBQkxFNV9BRERSLCAgICAgICAgICAgICAgICAgICAgICAgIFZQQV9UQUJMRTVfTUFTSywgICAgICAgICAgICAgICAgICAgICAgICBWUEFfVEFCTEU1X1NISUZUfSwKKyAgICAgICAge1ZQQV9UQUJMRTYsICAgICAgICAgICAgICAgICAgICBWUEFfVEFCTEU2X0FERFIsICAgICAgICAgICAgICAgICAgICAgICAgVlBBX1RBQkxFNl9NQVNLLCAgICAgICAgICAgICAgICAgICAgICAgIFZQQV9UQUJMRTZfU0hJRlR9LAorICAgICAgICB7VlBBX1RBQkxFNywgICAgICAgICAgICAgICAgICAgIFZQQV9UQUJMRTdfQUREUiwgICAgICAgICAgICAgICAgICAgICAgICBWUEFfVEFCTEU3X01BU0ssICAgICAgICAgICAgICAgICAgICAgICAgVlBBX1RBQkxFN19TSElGVH0sICAgICAgICAgICAgICAgIAorICAgICAgICB7VlBBX01BUF9TRUwsCQkJVlBBX01BUF9TRUxfQUREUiwJCQlWUEFfTUFQX1NFTF9NQVNLLAkJCVZQQV9NQVBfU0VMX1NISUZUfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICAgIFdSSVRFIEFQSXMgICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFdyaXRlIFdob2xlIEJ5dGVzCitzdGF0aWMgdm9pZCBkY2xfcG1pYzYzMzlfd3JpdGVfcmVnKERDTF9VSU5UOCBhZGRyLCBEQ0xfVUlOVDE2IHZhbCkKK3sKKwlkcnZfYnNpX3BtaWM2MzM5X3JlZ193cml0ZShhZGRyLHZhbCk7CisgICAgI2lmZGVmIFBNSUNfNjMzOV9ERUJVRworCXBtaWM2MzM5X3JlZ1thZGRyXT12YWw7CisJI2VuZGlmCit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICAgIFJFQUQgQVBJcyAgICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gUmVhZCBXaG9sZSBCeXRlcworc3RhdGljIERDTF9VSU5UMTYgZGNsX3BtaWM2MzM5X3JlYWRfcmVnKERDTF9VSU5UOCBhZGRyKQoreworCWthbF91aW50MTYgdmFsOworCXZhbD1kcnZfYnNpX3BtaWM2MzM5X3JlZ19yZWFkKGFkZHIpOworCSNpZmRlZiBQTUlDXzYzMzlfREVCVUcKKwlwbWljNjMzOV9yZWdbYWRkcl09dmFsOworCSNlbmRpZgorICAgIHJldHVybiB2YWw7Cit9CisKKy8vIFdyaXRlIHJlZ2lzdGVyIGZpZWxkCitzdGF0aWMgdm9pZCBkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoUE1VX0ZMQUdTX0xJU1RfRU5VTSBmbGFnLCBrYWxfdWludDE2IHNlbCkKK3sKKwlrYWxfdWludDMyIGksIHRhYmxlX3NpemUgPSAwLG1hc2s7CisJa2FsX3VpbnQxNiB2YWw7CisKKwl0YWJsZV9zaXplID0gR0VUQVJSTlVNKHBtaWNfZmxhZ3NfdGFibGUpOworCWZvciAoaSA9IDA7IGkgPCB0YWJsZV9zaXplOyBpKyspCisJeworCQlpZiAoZmxhZyA9PSBwbWljX2ZsYWdzX3RhYmxlW2ldLmZsYWduYW1lKQorCQl7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoaSA+PSB0YWJsZV9zaXplKXsgQVNTRVJUKDApOyB9Ly8gRmxhZyBVbmtub3duCisJCisJbWFzaz1TYXZlQW5kU2V0SVJRTWFzaygpOworCXZhbD1kY2xfcG1pYzYzMzlfcmVhZF9yZWcocG1pY19mbGFnc190YWJsZVtpXS5vZmZzZXQpJih+KHBtaWNfZmxhZ3NfdGFibGVbaV0ubWFzaykpOworCXZhbHw9KHNlbDw8cG1pY19mbGFnc190YWJsZVtpXS5zaGlmdCkmcG1pY19mbGFnc190YWJsZVtpXS5tYXNrOworCWRjbF9wbWljNjMzOV93cml0ZV9yZWcocG1pY19mbGFnc190YWJsZVtpXS5vZmZzZXQsdmFsKTsKKwlSZXN0b3JlSVJRTWFzayhtYXNrKTsKKwlyZXR1cm47Cit9CitEQ0xfU1RBVFVTIFBNSUM2MzM5X2NvbnRyb2xfaGFuZGxlcihEQ0xfSEFORExFIGhhbmRsZSxEQ0xfQ1RSTF9DTUQgY21kLERDTF9DVFJMX0RBVEFfVCAqZGF0YSkKK3sKKwlEQ0xfVUlOVDE2CXJlZ1ZhbDsKKwlEQ0xfSU5UMzIJcmV0dXJuX3ZhbCA9IFNUQVRVU19GQUlMOworCXN3aXRjaChjbWQpCisgICAgeworICAgIAljYXNlIExET19CVUNLX1NFVF9FTjoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOICpwTGRvQnVja0N0cmw9JihkYXRhLT5yUE1VTGRvQnVja1NldEVuKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVlJGMTg6CisJCQkJeworCQkJCQlkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoUkdfVlJGMThfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQkJY2FzZSBWUkYxOF8yOgorCQkJCXsKKwkJCQkJZGNsX3BtaWM2MzM5X2ZpZWxkX3dyaXRlKFJHX1ZSRjE4XzJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWU0lNOgorCQkJCXsKKwkJCQkJZGNsX3BtaWM2MzM5X2ZpZWxkX3dyaXRlKFJHX1ZTSU0xX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworCQkJCQlkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoUkdfVlNJTTJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisgICAgICAgICAgICAgICAgYnJlYWs7CisJCQkJY2FzZSBWTUM6CisJCQkJeworCQkJCQlkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoUkdfVk1DX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCQkJCWNhc2UgVk1DSDoKKwkJCQl7CisJCQkJCWRjbF9wbWljNjMzOV9maWVsZF93cml0ZShSR19WTUNIX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCQkJCWNhc2UgVk1JUEk6CisJCQkJeworCQkJCQlkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoUkdfVk1JUElfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJCQlkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExET19CVUNLX1NFVF9WT0xUQUdFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvbHRhZ2UpOworICAgICAgICAgICAgcmVnVmFsID0gUE1VX1BhcmFtZXRlcl90b19WYWx1ZShFTkMoY21kLCBwTGRvQnVja0N0cmwtPm1vZCksIHBMZG9CdWNrQ3RybC0+dm9sdGFnZSk7CisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWSU8yODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzOV9maWVsZF93cml0ZShSR19WSU8yOF9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVkNPUkU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoUkdfVkNPUkVfVk9TRUwsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoUkdfVlNJTTFfVk9TRUwsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoUkdfVlNJTTJfVk9TRUwsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCQljYXNlIFZNQzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzOV9maWVsZF93cml0ZShSR19WTUNfVk9TRUwsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCQljYXNlIFZNQ0g6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoUkdfVk1DSF9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWUEE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoVlBBX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWUkYxOF9TRVRfQlVDS19MRE9fTU9ERToKKyAgICAgICAgeworICAgICAgICAJUE1VX0NUUkxfVlJGMThfU0VUX0JVQ0tfTERPX01PREUgKnBWcmYxOEN0cmwgPSAmKGRhdGEtPnJQTVVWcmYxOFNldEJ1Y2tMZG9Nb2RlKTsKKwkJCXN3aXRjaChwVnJmMThDdHJsLT52cmYxOElkeCkKKwkJCXsKKwkJCQljYXNlIFBNSUNfVlJGMThfMToKKwkJCQl7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzOV9maWVsZF93cml0ZShSR19WUkYxOF9CS19MRE8sIHBWcmYxOEN0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKwkJCQljYXNlIFBNSUNfVlJGMThfMjoKKwkJCQl7CisJCQkJCWRjbF9wbWljNjMzOV9maWVsZF93cml0ZShSR19WUkYxOF8yX0JLX0xETywgcFZyZjE4Q3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKwkJCQlicmVhazsKKwkJCX0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwkJY2FzZSBWUkYxOF9TRVRfRlBXTToKKwkJeworCQkJUE1VX0NUUkxfVlJGMThfU0VUX0ZQV00gKnBWcmYxOFNldEZwd20gPSAoUE1VX0NUUkxfVlJGMThfU0VUX0ZQV00gKilkYXRhOworCQkJZGNsX3BtaWM2MzM5X2ZpZWxkX3dyaXRlKFJHX1ZSRjE4X01PREVTRVQsIHBWcmYxOFNldEZwd20tPmVuYWJsZSk7CisJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCQljYXNlIFZSRjE4XzJfU0VUX0ZQV006CisJCXsKKwkJCVBNVV9DVFJMX1ZSRjE4X1NFVF9GUFdNICpwVnJmMThTZXRGcHdtID0gKFBNVV9DVFJMX1ZSRjE4X1NFVF9GUFdNICopZGF0YTsKKwkJCWRjbF9wbWljNjMzOV9maWVsZF93cml0ZShSR19WUkYxOF8yX01PREVTRVQsIHBWcmYxOFNldEZwd20tPmVuYWJsZSk7CisJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworICAgICAgICBjYXNlIFZQQV9TRVRfRlBXTToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfVlBBX1NFVF9GUFdNICpwVnBhU2V0RnB3bSA9IChQTVVfQ1RSTF9WUEFfU0VUX0ZQV00gKilkYXRhOworICAgICAgICAgICAgZGNsX3BtaWM2MzM5X2ZpZWxkX3dyaXRlKFJHX1ZQQV9NT0RFU0VULCBwVnBhU2V0RnB3bS0+ZW5hYmxlKTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTERPX0JVQ0tfU0VUX09OX1NFTDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09OX1NFTCAqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tTZXRPblNlbCk7CisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUkYxODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgCS8vIEVOQUJMRV9XSVRIX1NSQ0xLRU4gPSAwLCBidXQgNjMyOSBTUkNMS0VOID0gMSwgdGhlcmVmb3JlIHdlIG5lZWQgTk9UIHBMZG9CdWNrQ3RybC0+b25zZWwKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM5X2ZpZWxkX3dyaXRlKFJHX1ZSRjE4X09OX0NUUkwsICEocExkb0J1Y2tDdHJsLT5vblNlbCkpOworCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4XzI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIAkvLyBFTkFCTEVfV0lUSF9TUkNMS0VOID0gMCwgYnV0IDYzMjkgU1JDTEtFTiA9IDEsIHRoZXJlZm9yZSB3ZSBuZWVkIE5PVCBwTGRvQnVja0N0cmwtPm9uc2VsCisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzOV9maWVsZF93cml0ZShSR19WUkYxOF8yX09OX0NUUkwsICEocExkb0J1Y2tDdHJsLT5vblNlbCkpOworCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExET19CVUNLX1NFVF9TUkNMS0VOX1NFTDoKKyAgICAgICAgeworCQkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1NSQ0xLRU5fU0VMICpwTGRvQnVja0N0cmw9JihkYXRhLT5yUE1VTGRvQnVja1NldFNyY2xrZW5TZWwpOworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTg6CisgICAgICAgICAgICAgICAgeworCQkJCQlkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoVlJGMThfc3JjbGtlbl9zZWwsIHBMZG9CdWNrQ3RybC0+U3JjbGtlblNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfMjoKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljNjMzOV9maWVsZF93cml0ZShWUkYxOF8yX3NyY2xrZW5fc2VsLCBwTGRvQnVja0N0cmwtPlNyY2xrZW5TZWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZQQV9TRVRfRU46CisJCXsKKwkJCVBNVV9DVFJMX1ZQQV9TRVRfRU4gKnBWcGFDdHJsID0gJihkYXRhLT5yUE1VVnBhU2V0RW4pOworCQkJZGNsX3BtaWM2MzM5X2ZpZWxkX3dyaXRlKFJHX1ZQQV9FTiwgcFZwYUN0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworICAgICAgICBjYXNlIFZQQV9TRVRfVk9TRUxfTUFQX0VOOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBNVV9DVFJMX1ZQQV9TRVRfVk9TRUxfTUFQX0VOICpwVnBhQ3RybCA9ICYoZGF0YS0+clBNVVZwYVNldFZvc2VsTWFwRW4pOworICAgICAgICAJCWRjbF9wbWljNjMzOV9maWVsZF93cml0ZShWUEFfVk9TRUxfTUFQX0VOLCBwVnBhQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKwljYXNlIFZQQV9HRVRfVk9MVEFHRV9MSVNUOgorCQl7CisJCQlQTVVfQ1RSTF9WUEFfR0VUX1ZPTFRBR0VfTElTVCAqcFZwYUN0cmwgPSAmKGRhdGEtPnJQTVVWcGFHZXRWb2x0YWdlTGlzdCk7CisJCQlwVnBhQ3RybC0+cFZvbHRhZ2VMaXN0ID0gdnBhX3Zvc2VsOworCQkJcFZwYUN0cmwtPm51bWJlciA9IEdFVEFSUk5VTSh2cGFfdm9zZWwpOwkJCQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCWJyZWFrOyAgIAorICAgICAgICBjYXNlIFZQQV9TRVRfVk9MVEFHRV9TRUxFQ1RJT05fVEFCTEU6CisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQTVVfQ1RSTF9WUEFfU0VUX1ZPTFRBR0VfU0VMRUNUSU9OX1RBQkxFICpwVnBhQ3RybCA9ICYoZGF0YS0+clBNVVZwYVNldFZvbHRhZ2VTZWxlY3Rpb25UYWJsZSk7CisgICAgICAgICAgICAgICAgcmVnVmFsID0gUE1VX1BhcmFtZXRlcl90b19WYWx1ZShFTkMoVlBBX1NFVF9WT0xUQUdFX1NFTEVDVElPTl9UQUJMRSwgVlBBKSwgcFZwYUN0cmwtPnZvbHRhZ2UpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2gocFZwYUN0cmwtPnRhYmxlX2VudHJ5KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUE1VX1ZQQTA6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzOV9maWVsZF93cml0ZShWUEFfVEFCTEUwLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUE1VX1ZQQTE6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzOV9maWVsZF93cml0ZShWUEFfVEFCTEUxLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUE1VX1ZQQTI6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzOV9maWVsZF93cml0ZShWUEFfVEFCTEUyLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQTVVfVlBBMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM5X2ZpZWxkX3dyaXRlKFZQQV9UQUJMRTMsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBNVV9WUEE0OgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoVlBBX1RBQkxFNCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBNVV9WUEE1OgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoVlBBX1RBQkxFNSwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBNVV9WUEE2OgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoVlBBX1RBQkxFNiwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBNVV9WUEE3OgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoVlBBX1RBQkxFNywgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAorCisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBWUEFfU0VUX01BUF9TRUw6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgUE1VX0NUUkxfVlBBX1NFVF9NQVBfU0VMICpwVnBhQ3RybCA9ICYoZGF0YS0+clBNVVZwYVNldE1hcFNlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoVlBBX01BUF9TRUwsIHBWcGFDdHJsLT50YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICAKKy8qCQljYXNlIFZQQV9TRVRfVk9MVEFHRTogLy8gVlBBIHZvbHRhZ2Ugd2lsbCBiZSBhdXRvIHNldCBieSBIVywgdGhpcyBjb21tYW5kIGlzIG5vdCBuZWNlc3NhcnkgZm9yIEhXIGRyaXZlcgorCQl7CQkKKwkJCVBNVV9DVFJMX1ZQQV9TRVRfVk9MVEFHRSAqcFZwYUN0cmwgPSAmKGRhdGEtPnJQTVVWcGFTZXRWb2x0YWdlKTsKKwkJCQorCQkJcmVnVmFsID0gUE1VX1BhcmFtZXRlcl90b19WYWx1ZShFTkMoY21kLDApLCBwVnBhQ3RybC0+dm9sdGFnZSk7CisJCQlkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoVlBBX1ZPU0VMLCByZWdWYWwpOworCQl9CisJCWJyZWFrOyovCisgICAgICAgIGNhc2UgTUlTQ19HRVRfQ0lEOgorICAgICAgICB7CQkJCisgICAgICAgICAgICBQTVVfQ1RSTF9NSVNDX0dFVF9DSUQJKnBNaXNjQ3RybCA9ICYoZGF0YS0+clBNVU1pc2NHZXRDaWQpOworICAgICAgICAgICAgcE1pc2NDdHJsLT5jaWRfdmFsdWUgPSBwbWljX0NJRDA7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBNSVNDX0dFVF9FQ09fVkVSU0lPTjoKKyAgICAgICAgewkJCQorICAgICAgICAgICAgUE1VX0NUUkxfTUlTQ19HRVRfRUNPX1ZFUlNJT04gKnBNaXNjQ3RybCA9ICYoZGF0YS0+clBNVU1pc2NHZXRFY29WZXJzaW9uKTsKKyAgICAgICAgICAgIHBNaXNjQ3RybC0+ZWNvX3ZlcnNpb24gPSBwbWljX0VDT19WRVJTSU9OOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgTUlTQ19TRVRfUkVHSVNURVJfVkFMVUU6CisgICAgICAgIHsJCQkKKyAgICAgICAgICAgIFBNVV9DVFJMX01JU0NfU0VUX1JFR0lTVEVSX1ZBTFVFCSpwQ2hyQ3RybCA9ICYoZGF0YS0+clBNVU1pc2NTZXRSZWdpc3RlclZhbHVlKTsKKyAgICAgICAgICAgIGRjbF9wbWljNjMzOV93cml0ZV9yZWcocENockN0cmwtPm9mZnNldCwgcENockN0cmwtPnZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIE1JU0NfR0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9NSVNDX0dFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmw9JihkYXRhLT5yUE1VTWlzY0dldFJlZ2lzdGVyVmFsdWUpOworICAgICAgICAgICAgcENockN0cmwtPnZhbHVlID0gZGNsX3BtaWM2MzM5X3JlYWRfcmVnKHBDaHJDdHJsLT5vZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsJCQorICAgICAgICBkZWZhdWx0OgkJCQkKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKwlyZXR1cm4gcmV0dXJuX3ZhbDsKKworfQorCisvLyBleHRlcm4gdm9pZCBkY2xfcG1pYzYzMzlfaW50ZXJuYWxfaW5pdCh2b2lkKTsgLy8gTW92ZSB0byBib290bG9hZGVyCitleHRlcm4gdm9pZCBwbXVfZHJ2X3Rvb2xfY3VzdG9taXphdGlvbl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgUE1JQ19SZWFkX0FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIFBNSUNfVkNPUkVfSU5JVChrYWxfdWludDMyIHZhbHVlLCBrYWxfdWludDMyIHZlcik7CisKK2V4dGVybiBQTVVfQ09OVFJPTF9IQU5ETEVSIHBtdV9jb250cm9sX2hhbmRsZXI7CisvL0RDTF9VSU5UMTYgcG11X3BhcmFtZXRlcl9zaXplPTA7CisKK3ZvaWQgZGNsX3BtaWM2MzM5X2luaXQodm9pZCl7CisJc3RhdGljIGthbF91aW50OCBwbWljNjMzOV9pbml0PTA7CisJaWYoMD09cG1pYzYzMzlfaW5pdCl7CisJCXBtdV9jb250cm9sX2hhbmRsZXIgPSBQTUlDNjMzOV9jb250cm9sX2hhbmRsZXI7CisJCXBtdV9wYXJhbWV0ZXJfc2l6ZSA9IEdFVEFSUk5VTShwbXVfcGFyYW1ldGVyX3RhYmxlKTsKKwkJcG1pYzYzMzlfaW5pdD0xOworCQlkcnZfYnNpX3BtaWNfaW5pdCgpOy8vaW5pdCBCU0kKKwkJcG1pY19DSUQwID0gZGNsX3BtaWM2MzM5X3JlYWRfcmVnKENJRDBfQUREUik7CisJCXBtaWNfRUNPX1ZFUlNJT04gPSBkY2xfcG1pYzYzMzlfcmVhZF9yZWcoRUNPX1ZFUlNJT05fQUREUik7CisgICAgICAgICAgICAgICAgaWYocG1pY19FQ09fVkVSU0lPTiA9PSAweDAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVHVybiBvbiBWSU8yOF9FTiBhcyBsb25nIGFzIEUxLgorICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzlfZmllbGRfd3JpdGUoUkdfVklPMjhfRU4sIDB4MDEpOworICAgICAgICAgICAgICAgIH0KKyNpZiBkZWZpbmVkKFBNSUNfSU5JVF9QSE9ORSkKKyNpZiAhZGVmaW5lZChNVDYyOTBNX1NQX0JCKSAmJiAhZGVmaW5lZChNVDYyOTBNRTJfU1ApCisgICAgICAgICAgICAgICAgLy8gVHVybiBvZmYgVlVTQjExIGZvciBDdXN0b20gUGhvbmUgUHJvamVjdAorICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzOV9maWVsZF93cml0ZShSR19WVVNCMTFfRU4sIDB4MDApOworI2VuZGlmCisjZW5kaWYKKyAgICAgICAgICAgICAgICAvLyBkY2xfcG1pYzYzMzlfaW50ZXJuYWxfaW5pdCgpOyAvLyBNb3ZlIHRvIGJvb3Rsb2FkZXIKKy8vCQlwbWljNjMzOV9jdXN0b21pemF0aW9uX2luaXQoKTsKKwkJcG11X2Rydl90b29sX2N1c3RvbWl6YXRpb25faW5pdCgpOworCQkjaWZkZWYgUE1JQ182MzM5X0RFQlVHCisJCXsKKwkJCWthbF91aW50MzIgaTsKKwkJCWZvciAoaSA9IDA7aSA8IFBNSUNfTUFYX1JFR19OVU07aSsrKXsKKwkJCQlwbWljNjMzOV9yZWdbaV0gPSBkY2xfcG1pYzYzMzlfcmVhZF9yZWcoaSk7IAorCQkgICAgfQorCQl9CisJCSNlbmRpZgorICAgIH0KK30KKworCit2b2lkIFBNSUNfUmVhZF9BbGwodm9pZCkKK3sKKyAgICB2b2xhdGlsZSBrYWxfdWludDMyIGk7CisgICAgZm9yIChpID0gMDsgaSA8IFBNSUNfTUFYX1JFR19OVU07IGkrKyl7CisgICAgICAgIHBtaWM2MzM5X3JlZ1tpXSA9IGRjbF9wbWljNjMzOV9yZWFkX3JlZyhpKTsgCisgICAgfQorfQorI2lmIGRlZmluZWQoTVQ2MjkwX0RFTU9fQkIpIHx8IGRlZmluZWQoTVQ2MjkwTV9ERU1PX0JCKSB8fCBkZWZpbmVkKE1UNjI5MEUyX0VWQikgfHwgZGVmaW5lZChNVDYyOTBNRTJfRVZCKSAvLyBFVkIKK3ZvaWQgUE1JQ19WQ09SRV9JTklUKGthbF91aW50MzIgdmFsdWUsIGthbF91aW50MzIgdmVyKQoreworICAgIHZhbHVlID0gMDsKKyAgICB2ZXIgPSAwOworfQorI2Vsc2UKK2V4dGVybiBjb25zdCBjaGFyIEVYVGJ1Y2tfaTJjZGV2X2V4aXN0Owordm9pZCBQTUlDX1ZDT1JFX0lOSVQoa2FsX3VpbnQzMiB2YWx1ZSwga2FsX3VpbnQzMiB2ZXIpCit7CisjaW5jbHVkZSAiaTJjX3BtaWMuaCIKKyNkZWZpbmUgTkNQNjMzNV9TTEFWRV9BRERSICAgIDB4MUMKKyAgICAgICAga2FsX3VpbnQ4IHZhbDsKKyAgICAgICAgSTJDX1NUQVRVUyBzdHM7CisgICAgICAgIGludCBncGlvMTU7CisgICAgICAgIEdQSU9fQ1RSTF9SRUFEX1QgZGF0YTsKKyAgICAgICAgRENMX0hBTkRMRSBoYW5kbGUgPSBEY2xHUElPX09wZW4oRENMX0dQSU8sIEVYVGJ1Y2tfaTJjZGV2X2V4aXN0ICYgKH4weDgwKSk7CisgICAgICAgIERjbEdQSU9fQ29udHJvbChoYW5kbGUsIEdQSU9fQ01EX1JFQUQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmZGF0YSk7CisgICAgICAgIGdwaW8xNSA9IGRhdGEudTFJT0RhdGE7CisgICAgICAgIAorICAgICAgICBpZihncGlvMTUgPT0gMSkgCisgICAgICAgIHsKKyAgICAgICAgICAgIERjbEdQSU9fQ29udHJvbChoYW5kbGUsR1BJT19DTURfU0VUX1BVTExfSElHSCwgKERDTF9DVFJMX0RBVEFfVCAqKSZkYXRhKTsKKyAgICAgICAgfQorICAgICAgICAvKiByZWFkIE5DUDYzMzUgcmVnIDAqLworICAgICAgICBzdHMgPSBpMmNfcG1pY19yZWdfcmVhZChOQ1A2MzM1X1NMQVZFX0FERFIgLCAweDAgLCAmdmFsKTsKKyAgICAgICAgaWYgKHN0cyA9PSBJMkNfQUNLRVJSKSAgCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIAorICAgICAgICAgICAgICogRXJyb3IgSGFuZGluZy4KKyAgICAgICAgICAgICAqIKjSpnAgpnCqR6xPQUNLX0VSUiAsIKVppUimQcWqpECmuGRvdWJsZSBjaGVjayCkQKRVIKFBIKZwqkfB2axPQUNLX0VSUiAsIKVpu3ussCBzbGF2ZSCko6ZzpmIKKyAgICAgICAgICAgICovCisgICAgICAgICAgICAgc3RzID0gaTJjX3BtaWNfcmVnX3JlYWQoTkNQNjMzNV9TTEFWRV9BRERSICwgMHgwICwgJnZhbCk7CisgICAgICAgICAgICAgaWYoc3RzID09IEkyQ19BQ0tFUlIpICAKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYodmVyID09IDEgJiYgZ3BpbzE1ID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7IAorICAgICAgICAgICAgICAgICAgICAvLyBOQ1A2MzM1IE5vdCBFeGlzdAorICAgICAgICAgICAgICAgICAgICBzd2l0Y2godmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzMzlfd3JpdGVfcmVnKDB4NjUsIDB4MDkpOyAvLyAxLjA1VgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjMzOV93cml0ZV9yZWcoMHg2NSwgMHgwQSk7IC8vIDEuMFYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKDApOworICAgICAgICAgICAgfSAgICAKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHN0cyA9PSBJMkNfUEFTUykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTkNQNjMzNSBFeGlzdAorICAgICAgICAgICAgLy8gMS4wNVYsIERlcGVuZCBvbiBiaW5uaW5nIElDIEUtZnVzZQorICAgICAgICAgICAgaTJjX3BtaWNfcmVnX3dyaXRlKE5DUDYzMzVfU0xBVkVfQUREUiwgMHgxMCwgMHhDOCk7CisgICAgICAgICAgICAvLyAwLjg1ViwgaW5pdGlhbCBzZXR0aW5nCisgICAgICAgICAgICBpMmNfcG1pY19yZWdfd3JpdGUoTkNQNjMzNV9TTEFWRV9BRERSLCAweDExLCAweEE4KTsKKyAgICAgICAgICAgIC8vIENvbW1vbiByZWdpc3RlciBpbml0aWFsCisgICAgICAgICAgICBpMmNfcG1pY19yZWdfd3JpdGUoTkNQNjMzNV9TTEFWRV9BRERSLCAweDE0LCAweDAxKTsKKyAgICAgICAgICAgIHN3aXRjaCh2YWx1ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICBpMmNfcG1pY19yZWdfd3JpdGUoTkNQNjMzNV9TTEFWRV9BRERSLCAweDEwLCAweEM4KTsgLy8gMS4wNVYKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM5X3dyaXRlX3JlZygweDY1LCAweDA5KTsgLy8gMS4wNVYKKyAgICAgICAgICAgICAgICAgICAgLy9kY2xfcG1pYzYzMzlfd3JpdGVfcmVnKDB4NjMsIDB4MDApOyAvLyBTaHV0ZG93biBWQ09SRQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICBpMmNfcG1pY19yZWdfd3JpdGUoTkNQNjMzNV9TTEFWRV9BRERSLCAweDEwLCAweEMwKTsgLy8gMS4wMFYKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzM5X3dyaXRlX3JlZygweDY1LCAweDBBKTsgLy8gMS4wVgorICAgICAgICAgICAgICAgICAgICAvL2RjbF9wbWljNjMzOV93cml0ZV9yZWcoMHg2MywgMHgwMCk7IC8vIFNodXRkb3duIFZDT1JFCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoc3RzID09IEkyQ19GQUlMKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgIH0KKworfQorI2VuZGlmIC8vIEVuZCBvZiAjaWYgZGVmaW5lZChNVDYyOTBfREVNT19CQikgfHwgZGVmaW5lZChNVDYyOTBNX0RFTU9fQkIpIHx8IGRlZmluZWQoTVQ2MjkwRTJfRVZCKSB8fCBkZWZpbmVkKE1UNjI5ME1FMl9FVkIpIC8vIEVWQgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjMzOV9pbml0LmMgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzMzlfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZjZhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzMzlfaW5pdC5jCkBAIC0wLDAgKzEsNDQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDYKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICBwbXVfaW5pdC5jCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIGZpbGUgcHJvdmlkZSBmb3IgcG11IGluaXRpYWwgc2V0dGluZworICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqICAgICAgICAgICAgIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJpbml0LmgiCisjaW5jbHVkZSAiZGNsLmgiCisjaW5jbHVkZSAiZHJ2X2JzaS5oIgorCisvLyNkZWZpbmUgUE1JQ19JTklUX0ZPUl9EUlZURVNUCisKK3N0YXRpYyB2b2lkIFBNSUNfRFJWX1NldERhdGEoRENMX1VJTlQzMiBhZGRyLCBEQ0xfVUlOVDMyIGJpdG1hc2ssIERDTF9VSU5UMTYgdmFsdWUsIERDTF9VSU5UMzIgYmFuaykKK3sKKwlEQ0xfVUlOVDMyIHRlbXA7CisJdGVtcCA9ICh+KGJpdG1hc2spKSAmIGRydl9ic2lfcG1pYzYzMzlfcmVnX3JlYWQoYWRkcik7CisJdGVtcCB8PSAoKHZhbHVlKSAmIChiaXRtYXNrKSk7CisJZHJ2X2JzaV9wbWljNjMzOV9yZWdfd3JpdGUoYWRkcix0ZW1wKTsKK30KKworLy9NVDYzMzlfRTFfMjAxMzA3MjJfSV9waG9uZV9pbml0aWFsX3NldHRpbmdfTFBHLnR4dAordm9pZCBkY2xfcG1pY19pbnRlcm5hbF9pbml0KHZvaWQpCit7CisjaWYgZGVmaW5lZChQTUlDX0lOSVRfUEhPTkUpCisvL2RlYnVnX01UNjMzOSBSZWdpc3RlciBNYXBwaW5nIEUxIDIwMTMwNzI0X0lfcGhvbmVfaW5pdGlhbF9zZXR0aW5nX0xQRy50eHQKKwl7CisJLy88RUNPX0UxPgorCS8vYWRkcmVzcyxtYXNrLHZhbHVlLGFwIHNoaWZ0LGFwIG1hc2ssYXAgdmFsdWUsICAgIGJhbmsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwMTAsMHgxLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAxNSwweDMsMHgyLDB4MCk7IC8vIFVWTE8gMi42VgorCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAyMSwweDIsMHgyLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDI0LDB4MTAsMHgxMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAyNCwweDIwLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAyOSwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDJBLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwMkIsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAzMiwweDEsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDM4LDB4MSwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwM0IsMHgxLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0NCwweDQwLDB4NDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNDQsMHg4MCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNDgsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0OSwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDRCLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNEMsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0RSwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDU2LDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNTcsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NiwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY2LDB4MiwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjYsMHg0LDB4NCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NiwweDgsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY2LDB4MTAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY3LDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjcsMHg0LDB4NCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2QywweDQsMHg0LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdDLDB4MSwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwN0MsMHgyLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA3QywweDQsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdDLDB4MTAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdDLDB4MjAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdELDB4NDAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdELDB4ODAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDgxLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwODEsMHgyLDB4MiwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA4MSwweDQsMHg0LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDgxLDB4OCwweDgsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwODEsMHgxMCwweDEwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDkwLDB4MTAwLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5MCwweDIwMCwweDIwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5MCwweDQwMDAsMHg0MDAwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDkwLDB4ODAwMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTUsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5NSwweDIsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDk1LDB4ODAsMHg4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5NSwweDEwMCwweDEwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5NSwweDIwMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTUsMHg4MDAwLDB4ODAwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5QywweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEFBLDB4NCwweDQsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzAsMHgxMCwweDEwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEMwLDB4NDAsMHg0MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDMCwweDEwMDAsMHgxMDAwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEMwLDB4NDAwMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzIsMHg0LDB4NCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDMiwweDEwMCwweDEwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDMiwweDQwMCwweDQwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDMiwweDQwMDAsMHg0MDAwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEM4LDB4MjAsMHgyMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBENiwweDEwLDB4MTAsMHgwKTsKKwl9CisjZWxpZiBkZWZpbmVkKFBNSUNfSU5JVF9ET05HTEUpCisvL2RlYnVnX01UNjMzOSBSZWdpc3RlciBNYXBwaW5nIEUxIDIwMTMwNzI0X0lfZG9uZ2xlX2ludGlhbF9zZXR0aW5nX0xQRy50eHQKKwl7CisJLy88RUNPX0UxPgorCS8vYWRkcmVzcyxtYXNrLHZhbHVlLGFwIHNoaWZ0LGFwIG1hc2ssYXAgdmFsdWUsICAgIGJhbmsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwMTAsMHgxLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAyMSwweDIsMHgyLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDI0LDB4MTAsMHgxMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAyNCwweDIwLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAyOSwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDJBLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwMkIsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAzQiwweDEsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDQ0LDB4NDAsMHg0MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0NCwweDgwLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0OCwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDQ5LDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNEIsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0QywweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDRFLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNTQsMHgxLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA1NiwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDU3LDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjYsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NiwweDIsMHgyLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY2LDB4NCwweDQsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjYsMHg4LDB4OCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NiwweDEwLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NywweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY3LDB4NCwweDQsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNkMsMHg0LDB4NCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5MCwweDEwMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTAsMHgyMDAsMHgyMDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTAsMHg0MDAwLDB4NDAwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5MCwweDgwMDAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDk1LDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTUsMHgyLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5NSwweDgwLDB4ODAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTUsMHgxMDAsMHgxMDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTUsMHgyMDAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDk1LDB4ODAwMCwweDgwMDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOUMsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBBQSwweDQsMHg0LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEMwLDB4MTAsMHgxMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDMCwweDQwLDB4NDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzAsMHgxMDAwLDB4MTAwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDMCwweDQwMDAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEMyLDB4NCwweDQsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzIsMHgxMDAsMHgxMDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzIsMHg0MDAsMHg0MDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzIsMHg0MDAwLDB4NDAwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDOCwweDIwLDB4MjAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwRDYsMHgxMCwweDEwLDB4MCk7CisJfQorI2VsaWYgZGVmaW5lZChQTUlDX0lOSVRfRE9OR0xFX09OX0VWQikKKy8vZGVidWdfTVQ2MzM5IFJlZ2lzdGVyIE1hcHBpbmcgRTEgMjAxMzA3MjRfSV9FVkJfZG9uZ2xlX2luaXRpYWxfc2V0dGluZ19MUEcudHh0CisJeworCS8vPEVDT19FMT4KKwkvL2FkZHJlc3MsbWFzayx2YWx1ZSxhcCBzaGlmdCxhcCBtYXNrLGFwIHZhbHVlLCAgICBiYW5rCisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDEwLDB4MSwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwMjEsMHgyLDB4MiwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAyNCwweDEwLDB4MTAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwMjQsMHgyMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwMjksMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAyQSwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDJCLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwM0IsMHgxLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0NCwweDQwLDB4NDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNDQsMHg4MCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNDgsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0OSwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDRCLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNEMsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0RSwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDU2LDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNTcsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NSwweDEsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY1LDB4MiwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjUsMHg0LDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NSwweDgsMHg4LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY1LDB4MTAsMHgxMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NiwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY2LDB4MiwweDIsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjYsMHg0LDB4NCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NiwweDgsMHg4LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY2LDB4MTAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY3LDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjcsMHg0LDB4NCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2QywweDQsMHg0LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdDLDB4MSwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwN0MsMHgyLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA3QywweDQsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdDLDB4MTAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdDLDB4MjAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdELDB4NDAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdELDB4ODAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDgxLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwODEsMHgyLDB4MiwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA4MSwweDQsMHg0LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDgxLDB4OCwweDgsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwODEsMHgxMCwweDEwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDkwLDB4MTAwLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5MCwweDIwMCwweDIwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5MCwweDQwMDAsMHg0MDAwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDkwLDB4ODAwMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTUsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5NSwweDIsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDk1LDB4ODAsMHg4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5NSwweDEwMCwweDEwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5NSwweDIwMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTUsMHg4MDAwLDB4ODAwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5QywweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEFBLDB4NCwweDQsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzAsMHgxMCwweDEwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEMwLDB4NDAsMHg0MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDMCwweDEwMDAsMHgxMDAwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEMwLDB4NDAwMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzIsMHg0LDB4NCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDMiwweDEwMCwweDEwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDMiwweDQwMCwweDQwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDMiwweDQwMDAsMHg0MDAwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEM4LDB4MjAsMHgyMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBENiwweDEwLDB4MTAsMHgwKTsKKwl9CisjZWxpZiBkZWZpbmVkKFBNSUNfSU5JVF9ST1VURVJfT05fRVZCKQorLy9kZWJ1Z19NVDYzMzkgUmVnaXN0ZXIgTWFwcGluZyBFMSAyMDEzMDcyNF9JX0VWQl9ob3RzcG90X2luaXRpYWxfc2V0dGluZ19MUEcudHh0CisJeworCS8vPEVDT19FMT4KKwkvL2FkZHJlc3MsbWFzayx2YWx1ZSxhcCBzaGlmdCxhcCBtYXNrLGFwIHZhbHVlLCAgICBiYW5rCisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDEwLDB4MSwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwMjEsMHgyLDB4MiwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAyNCwweDEwLDB4MTAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwMjQsMHgyMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwMjksMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAyQSwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDJCLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwM0IsMHgxLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0NCwweDQwLDB4NDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNDQsMHg4MCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNDgsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0OSwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDRCLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNEMsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0RSwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDU2LDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNTcsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NSwweDEsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY1LDB4MiwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjUsMHg0LDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NSwweDgsMHg4LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY1LDB4MTAsMHgxMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NiwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY2LDB4MiwweDIsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjYsMHg0LDB4NCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NiwweDgsMHg4LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY2LDB4MTAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY3LDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjcsMHg0LDB4NCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2QywweDQsMHg0LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdDLDB4MSwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwN0MsMHgyLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA3QywweDQsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdDLDB4MTAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdDLDB4MjAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdELDB4NDAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdELDB4ODAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDgxLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwODEsMHgyLDB4MiwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA4MSwweDQsMHg0LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDgxLDB4OCwweDgsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwODEsMHgxMCwweDEwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDkwLDB4MTAwLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5MCwweDIwMCwweDIwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5MCwweDQwMDAsMHg0MDAwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDkwLDB4ODAwMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTUsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5NSwweDIsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDk1LDB4ODAsMHg4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5NSwweDEwMCwweDEwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5NSwweDIwMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTUsMHg4MDAwLDB4ODAwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5QywweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEFBLDB4NCwweDQsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzAsMHgxMCwweDEwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEMwLDB4NDAsMHg0MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDMCwweDEwMDAsMHgxMDAwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEMwLDB4NDAwMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzIsMHgxMDAsMHgxMDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzIsMHg0MDAsMHg0MDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzIsMHg0MDAwLDB4NDAwMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDOCwweDIwLDB4MjAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwRDYsMHgxMCwweDEwLDB4MCk7CisJfQorI2Vsc2UKKy8vZGVidWdfTVQ2MzM5IFJlZ2lzdGVyIE1hcHBpbmcgRTEgMjAxMzA3MjRfSV9FVkJfcGhvbmVfaW5pdGlhbF9zZXR0aW5nX0xQRy50eHQKKwl7CisJLy88RUNPX0UxPgorCS8vYWRkcmVzcyxtYXNrLHZhbHVlLGFwIHNoaWZ0LGFwIG1hc2ssYXAgdmFsdWUsICAgIGJhbmsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwMTAsMHgxLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAyMSwweDIsMHgyLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDI0LDB4MTAsMHgxMCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAyNCwweDIwLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAyOSwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDJBLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwMkIsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDAzQiwweDEsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDQ0LDB4NDAsMHg0MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0NCwweDgwLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0OCwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDQ5LDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNEIsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA0QywweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDRFLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNTYsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA1NywweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY1LDB4MSwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjUsMHgyLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NSwweDQsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY1LDB4OCwweDgsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjUsMHgxMCwweDEwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY2LDB4MSwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjYsMHgyLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NiwweDQsMHg0LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDY2LDB4OCwweDgsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjYsMHgxMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwNjcsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA2NywweDQsMHg0LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDZDLDB4NCwweDQsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwN0MsMHgxLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA3QywweDIsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDdDLDB4NCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwN0MsMHgxMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwN0MsMHgyMCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwN0QsMHg0MCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwN0QsMHg4MCwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwODEsMHgxLDB4MSwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA4MSwweDIsMHgyLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDgxLDB4NCwweDQsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwODEsMHg4LDB4OCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA4MSwweDEwLDB4MTAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTAsMHgxMDAsMHgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDkwLDB4MjAwLDB4MjAwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDkwLDB4NDAwMCwweDQwMDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTAsMHg4MDAwLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5NSwweDEsMHgxLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDk1LDB4MiwweDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwOTUsMHg4MCwweDgwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDk1LDB4MTAwLDB4MTAwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDk1LDB4MjAwLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDA5NSwweDgwMDAsMHg4MDAwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMDlDLDB4MSwweDEsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQUEsMHg0LDB4NCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDMCwweDEwLDB4MTAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzAsMHg0MCwweDQwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEMwLDB4MTAwMCwweDEwMDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzAsMHg0MDAwLDB4MCwweDApOworCQlQTUlDX0RSVl9TZXREYXRhKDB4MDBDMiwweDQsMHg0LDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEMyLDB4MTAwLDB4MTAwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEMyLDB4NDAwLDB4NDAwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEMyLDB4NDAwMCwweDQwMDAsMHgwKTsKKwkJUE1JQ19EUlZfU2V0RGF0YSgweDAwQzgsMHgyMCwweDIwLDB4MCk7CisJCVBNSUNfRFJWX1NldERhdGEoMHgwMEQ2LDB4MTAsMHgxMCwweDApOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoTVQ2MjkwTV9TUF9CQikgfHwgZGVmaW5lZChNVDYyOTBNRTJfU1ApCisgICAgICAgIC8vIEZvciBEdWFsIFRhbGsKKyAgICAgICAgUE1JQ19EUlZfU2V0RGF0YSgweDAwMjQsMHgyLDB4MiwweDApOworI2VuZGlmCit9CisJCmRpZmYgLS1naXQgYS9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTEuYyBiL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjM1MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NzgyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTEuYwpAQCAtMCwwICsxLDE5NTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxNAorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICAgZGNsX3BtaWM2MzUxLmMKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgICBNT0xZIFNvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgICBUaGlzIGZpbGUgaXMgZm9yIFBNSUMgNjM1MQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoRlBHQV9DVFApCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInJlZ19iYXNlLmgiCisjaW5jbHVkZSAiZHJ2X2NvbW0uaCIKKyNpbmNsdWRlICJpbml0LmgiCisjaW5jbHVkZSAiZGNsLmgiCisjaW5jbHVkZSAiZGNsX3BtdV9zdy5oIgorI2luY2x1ZGUgInBtaWNfd3JhcC5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAidXNfdGltZXIuaCIKKyNpbmNsdWRlICJkaGxfdHJhY2UuaCIKKyNpZiBkZWZpbmVkKFBNSUNfNjM1MV9SRUdfQVBJKQorCisvLyBTdGFydCBQTUlDX1VOSVRfVEVTVAorLy8jZGVmaW5lIFBNSUNfVU5JVF9URVNUCisvLyBBUk0gU2VjdGlvbiBSVy9STy9aSSBVc2UgSW50ZXJuYWwgU1JBTQorLy8jZGVmaW5lIFBNSUNfSU5URVJOQUxfU1JBTQorI2lmICFkZWZpbmVkKF9fRlVFX18pCisjZGVmaW5lIFNBVkVBTkRTRVRJUlFNQVNLKCkgICAgICBTYXZlQW5kU2V0SVJRTWFzaygpCisjZGVmaW5lIFJFU1RPUkVJUlFNQVNLKG1hc2spICAgICBSZXN0b3JlSVJRTWFzayhtYXNrKQorI2Vsc2UgLypkZWZpbmVkKF9fRlVFX18pKi8KKyNkZWZpbmUgU0FWRUFORFNFVElSUU1BU0soKSAgICAgIDAKKyNkZWZpbmUgUkVTVE9SRUlSUU1BU0sobWFzaykgICAgIHt9CisjZW5kaWYgLypkZWZpbmVkKF9fRlVFX18pKi8KKworI2RlZmluZSBCQU5LU19OVU0gICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUE1JQzYzNTFfTUFYX1JFR19OVU0gICAgICAgICAgICAgICAgMHgwRkYwIC8vIDB4MDAwMH4weDBGNDgKKy8vI2RlZmluZSBQTUlDX01BWF9SRUdfTlVNICAgICAgICAgICAgICAgIDB4NDBGRiAvLyBSZWdpc3RlciBCVUNLMSwgUmVnaXN0ZXIgQU5BTERPLCBSZWdpc3RlciBESUdMRE8gKDB4MDQ3MCkKKworI2RlZmluZSBNVDYzNTFfSFdfQ0lEX0UxICAgICAgICAgICAgMHg1MTEwCisjZGVmaW5lIE1UNjM1MV9IV19DSURfRTIgICAgICAgICAgICAweDUxMjAKKyNkZWZpbmUgTVQ2MzUxX0hXX0NJRF9FMyAgICAgICAgICAgIDB4NTEzMAorI2RlZmluZSBNVDYzNTFfU1dfQ0lEX0UxICAgICAgICAgICAgMHg1MTEwCisjZGVmaW5lIE1UNjM1MV9TV19DSURfRTIgICAgICAgICAgICAweDUxMjAKKyNkZWZpbmUgTVQ2MzUxX1NXX0NJRF9FMyAgICAgICAgICAgIDB4NTEzMAorCisjZGVmaW5lIFBNSUNfUkVBRCAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBNSUNfV1JJVEUgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgUE1JQ182MzUxICAgICAgICAgICAgICAgICAgIDB4NjM1MQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgRXhwb3J0ZWQgQVBJcyAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitleHRlcm4ga2FsX2Jvb2wgcG1pYzYzNTFfcmVnX3dyaXRlKGthbF91aW50MTYgcmVnLCBrYWxfdWludDE2IHZhbCk7CitleHRlcm4ga2FsX2Jvb2wgcG1pYzYzNTFfcmVnX3JlYWQoa2FsX3VpbnQxNiByZWcsIGthbF91aW50MTYgKnBWYWwpOworCitleHRlcm4gRENMX0JPT0wgZGNsX3BtaWNfaW5pdF9kb25lX3F1ZXJ5KHZvaWQpOwordHlwZWRlZiBlbnVtCit7CisgICAgQVVYQURDX1JFQURfSU5JVCA9IDAsCisgICAgQVVYQURDX1JFQURfUkVRVUVTVCA9IDEsCisgICAgQVVYQURDX1JFQURfUkVBRFkgPSAyLAorICAgIEFVWEFEQ19SRUFEX0JVU1kgPSAzLAorICAgIEFVWEFEQ19SRUFEX0RBVEEgPSA0Cit9QVVYQURDX0ZTTTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBrYWxfdWludDMyIGNvbW1hbmRfZmxhZzsKKyAgICBrYWxfdWludDMyIHJlZ19iZWZvcmVfd3JpdGU7CisgICAga2FsX3VpbnQzMiB3cml0ZV92YWx1ZTsKKyAgICBrYWxfdWludDMyIGFkZHJlc3Nfb2Zmc2V0OworICAgIGthbF91aW50MzIgcmVnX21hc2s7CisgICAga2FsX3VpbnQzMiByZWdfc2hpZnQ7CisgICAga2FsX3VpbnQzMiByZWdfYWRkcjsKKyAgICBrYWxfdWludDMyIHJlZ19kYXRhOworfVBNSUNfUkVHX0xPRzsKKworQVVYQURDX0ZTTSBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfSU5JVDsKK1BNSUNfUkVHX0xPRyBwbWljX3JlZ19sb2c7CisKKy8vI2lmIChkZWZpbmVkKF9fTVRLX1RBUkdFVF9fKSAmJiBkZWZpbmVkKFBNSUNfSU5URVJOQUxfU1JBTSkpCisvL19fYXR0cmlidXRlX18gKCh6ZXJvX2luaXQpKQorLy8jZW5kaWYgLyogX19NVEtfVEFSR0VUX18gKi8KK2thbF91aW50OCBwbWljNjM1MV9od192ZXJzaW9uOwora2FsX3VpbnQ4IHBtaWM2MzUxX3N3X3ZlcnNpb247CitrYWxfdWludDE2IHBtaWM2MzUxX3JlZ1tQTUlDNjM1MV9NQVhfUkVHX05VTV07CitEQ0xfQk9PTCBwbWljX2luaXRfZG9uZSA9IERDTF9GQUxTRTsKKworY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZIHBtaWM2MzUxX2ZsYWdzX3RhYmxlW10gPQoreworICAgIHtNVDYzNTFfSFdDSUQsCQlNVDYzNTFfSFdDSURfTUFTSywJCU1UNjM1MV9IV0NJRF9TSElGVCwJCX0sCisgICAge01UNjM1MV9TV0NJRCwJCU1UNjM1MV9TV0NJRF9NQVNLLAkJTVQ2MzUxX1NXQ0lEX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX1ZQQV9BTkFfQ09OMCwJCU1UNjM1MV9SR19WUEFfTU9ERVNFVF9NQVNLLAkJTVQ2MzUxX1JHX1ZQQV9NT0RFU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JVQ0tfVk1PREVNX0NPTjAsCQlNVDYzNTFfQlVDS19WTU9ERU1fRU5fQ1RSTF9NQVNLLAkJTVQ2MzUxX0JVQ0tfVk1PREVNX0VOX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WTU9ERU1fQ09OMCwJCU1UNjM1MV9CVUNLX1ZNT0RFTV9WT1NFTF9DVFJMX01BU0ssCQlNVDYzNTFfQlVDS19WTU9ERU1fVk9TRUxfQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9CVUNLX1ZNT0RFTV9DT04yLAkJTVQ2MzUxX0JVQ0tfVk1PREVNX0VOX01BU0ssCQlNVDYzNTFfQlVDS19WTU9ERU1fRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WTU9ERU1fQ09OMiwJCU1UNjM1MV9EQV9RSV9WTU9ERU1fRU5fTUFTSywJCU1UNjM1MV9EQV9RSV9WTU9ERU1fRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WTU9ERU1fQ09ONCwJCU1UNjM1MV9CVUNLX1ZNT0RFTV9WT1NFTF9NQVNLLAkJTVQ2MzUxX0JVQ0tfVk1PREVNX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JVQ0tfVk1PREVNX0NPTjUsCQlNVDYzNTFfQlVDS19WTU9ERU1fVk9TRUxfT05fTUFTSywJCU1UNjM1MV9CVUNLX1ZNT0RFTV9WT1NFTF9PTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9CVUNLX1ZNT0RFTV9DT042LAkJTVQ2MzUxX0JVQ0tfVk1PREVNX1ZPU0VMX1NMRUVQX01BU0ssCQlNVDYzNTFfQlVDS19WTU9ERU1fVk9TRUxfU0xFRVBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WTU9ERU1fQ09OOCwJCU1UNjM1MV9EQV9OSV9WTU9ERU1fVk9TRUxfU1lOQ19NQVNLLAkJTVQ2MzUxX0RBX05JX1ZNT0RFTV9WT1NFTF9TWU5DX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JVQ0tfVk1EMV9DT04wLAkJTVQ2MzUxX0JVQ0tfVk1EMV9FTl9DVFJMX01BU0ssCQlNVDYzNTFfQlVDS19WTUQxX0VOX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WTUQxX0NPTjAsCQlNVDYzNTFfQlVDS19WTUQxX1ZPU0VMX0NUUkxfTUFTSywJCU1UNjM1MV9CVUNLX1ZNRDFfVk9TRUxfQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9CVUNLX1ZNRDFfQ09OMiwJCU1UNjM1MV9CVUNLX1ZNRDFfRU5fTUFTSywJCU1UNjM1MV9CVUNLX1ZNRDFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WTUQxX0NPTjIsCQlNVDYzNTFfREFfUUlfVk1EMV9FTl9NQVNLLAkJTVQ2MzUxX0RBX1FJX1ZNRDFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WTUQxX0NPTjQsCQlNVDYzNTFfQlVDS19WTUQxX1ZPU0VMX01BU0ssCQlNVDYzNTFfQlVDS19WTUQxX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JVQ0tfVk1EMV9DT041LAkJTVQ2MzUxX0JVQ0tfVk1EMV9WT1NFTF9PTl9NQVNLLAkJTVQ2MzUxX0JVQ0tfVk1EMV9WT1NFTF9PTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9CVUNLX1ZNRDFfQ09ONiwJCU1UNjM1MV9CVUNLX1ZNRDFfVk9TRUxfU0xFRVBfTUFTSywJCU1UNjM1MV9CVUNLX1ZNRDFfVk9TRUxfU0xFRVBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WTUQxX0NPTjgsCQlNVDYzNTFfREFfTklfVk1EMV9WT1NFTF9TWU5DX01BU0ssCQlNVDYzNTFfREFfTklfVk1EMV9WT1NFTF9TWU5DX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JVQ0tfVlNSQU1fTURfQ09OMCwJCU1UNjM1MV9CVUNLX1ZTUkFNX01EX0VOX0NUUkxfTUFTSywJCU1UNjM1MV9CVUNLX1ZTUkFNX01EX0VOX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WU1JBTV9NRF9DT04wLAkJTVQ2MzUxX0JVQ0tfVlNSQU1fTURfVk9TRUxfQ1RSTF9NQVNLLAkJTVQ2MzUxX0JVQ0tfVlNSQU1fTURfVk9TRUxfQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9CVUNLX1ZTUkFNX01EX0NPTjIsCQlNVDYzNTFfQlVDS19WU1JBTV9NRF9FTl9NQVNLLAkJTVQ2MzUxX0JVQ0tfVlNSQU1fTURfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WU1JBTV9NRF9DT04yLAkJTVQ2MzUxX0RBX1FJX1ZTUkFNX01EX0VOX01BU0ssCQlNVDYzNTFfREFfUUlfVlNSQU1fTURfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WU1JBTV9NRF9DT040LAkJTVQ2MzUxX0JVQ0tfVlNSQU1fTURfVk9TRUxfTUFTSywJCU1UNjM1MV9CVUNLX1ZTUkFNX01EX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JVQ0tfVlNSQU1fTURfQ09ONSwJCU1UNjM1MV9CVUNLX1ZTUkFNX01EX1ZPU0VMX09OX01BU0ssCQlNVDYzNTFfQlVDS19WU1JBTV9NRF9WT1NFTF9PTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9CVUNLX1ZTUkFNX01EX0NPTjYsCQlNVDYzNTFfQlVDS19WU1JBTV9NRF9WT1NFTF9TTEVFUF9NQVNLLAkJTVQ2MzUxX0JVQ0tfVlNSQU1fTURfVk9TRUxfU0xFRVBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WU1JBTV9NRF9DT044LAkJTVQ2MzUxX0RBX05JX1ZTUkFNX01EX1ZPU0VMX1NZTkNfTUFTSywJCU1UNjM1MV9EQV9OSV9WU1JBTV9NRF9WT1NFTF9TWU5DX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JVQ0tfVlBBX0NPTjAsCQlNVDYzNTFfQlVDS19WUEFfRU5fQ1RSTF9NQVNLLAkJTVQ2MzUxX0JVQ0tfVlBBX0VOX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WUEFfQ09OMCwJCU1UNjM1MV9CVUNLX1ZQQV9WT1NFTF9DVFJMX01BU0ssCQlNVDYzNTFfQlVDS19WUEFfVk9TRUxfQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9CVUNLX1ZQQV9DT04xLAkJTVQ2MzUxX0JVQ0tfVlBBX0VOX1NFTF9NQVNLLAkJTVQ2MzUxX0JVQ0tfVlBBX0VOX1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9CVUNLX1ZQQV9DT04xLAkJTVQ2MzUxX0JVQ0tfVlBBX1ZPU0VMX1NFTF9NQVNLLAkJTVQ2MzUxX0JVQ0tfVlBBX1ZPU0VMX1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9CVUNLX1ZQQV9DT04yLAkJTVQ2MzUxX0JVQ0tfVlBBX0VOX01BU0ssCQlNVDYzNTFfQlVDS19WUEFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WUEFfQ09ONCwJCU1UNjM1MV9CVUNLX1ZQQV9WT1NFTF9NQVNLLAkJTVQ2MzUxX0JVQ0tfVlBBX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JVQ0tfVlBBX0NPTjUsCQlNVDYzNTFfQlVDS19WUEFfVk9TRUxfT05fTUFTSywJCU1UNjM1MV9CVUNLX1ZQQV9WT1NFTF9PTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9CVUNLX1ZQQV9DT042LAkJTVQ2MzUxX0JVQ0tfVlBBX1ZPU0VMX1NMRUVQX01BU0ssCQlNVDYzNTFfQlVDS19WUEFfVk9TRUxfU0xFRVBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WUEFfQ09OOCwJCU1UNjM1MV9EQV9OSV9WUEFfVk9TRUxfU1lOQ19NQVNLLAkJTVQ2MzUxX0RBX05JX1ZQQV9WT1NFTF9TWU5DX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JVQ0tfVlBBX0NPTjksCQlNVDYzNTFfREFfUUlfVlBBX0RWU19FTl9NQVNLLAkJTVQ2MzUxX0RBX1FJX1ZQQV9EVlNfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WUEFfQ09OOSwJCU1UNjM1MV9CVUNLX1ZQQV9WU0xFRVBfRU5fTUFTSywJCU1UNjM1MV9CVUNLX1ZQQV9WU0xFRVBfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQlVDS19WUEFfQ09OOSwJCU1UNjM1MV9CVUNLX1ZQQV9SMlJfUEROX01BU0ssCQlNVDYzNTFfQlVDS19WUEFfUjJSX1BETl9TSElGVCwJCX0sCisgICAge01UNjM1MV9CVUNLX1ZQQV9DT045LAkJTVQ2MzUxX0JVQ0tfVlBBX1ZTTEVFUF9TRUxfTUFTSywJCU1UNjM1MV9CVUNLX1ZQQV9WU0xFRVBfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WQTE4X0NPTjAsCQlNVDYzNTFfUkdfVkExOF9NT0RFX0NUUkxfTUFTSywJCU1UNjM1MV9SR19WQTE4X01PREVfQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVkExOF9DT04wLAkJTVQ2MzUxX1JHX1ZBMThfT05fQ1RSTF9NQVNLLAkJTVQ2MzUxX1JHX1ZBMThfT05fQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVkExOF9DT04wLAkJTVQ2MzUxX1JHX1ZBMThfU1JDTEtfTU9ERV9TRUxfTUFTSywJCU1UNjM1MV9SR19WQTE4X1NSQ0xLX01PREVfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WQTE4X0NPTjAsCQlNVDYzNTFfREFfUUlfVkExOF9NT0RFX01BU0ssCQlNVDYzNTFfREFfUUlfVkExOF9NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WVENYTzI0X0NPTjAsCQlNVDYzNTFfUkdfVlRDWE8yNF9NT0RFX1NFVF9NQVNLLAkJTVQ2MzUxX1JHX1ZUQ1hPMjRfTU9ERV9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZUQ1hPMjRfQ09OMCwJCU1UNjM1MV9SR19WVENYTzI0X0VOX01BU0ssCQlNVDYzNTFfUkdfVlRDWE8yNF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlRDWE8yNF9DT04wLAkJTVQ2MzUxX1JHX1ZUQ1hPMjRfTU9ERV9DVFJMX01BU0ssCQlNVDYzNTFfUkdfVlRDWE8yNF9NT0RFX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZUQ1hPMjRfQ09OMCwJCU1UNjM1MV9SR19WVENYTzI0X09OX0NUUkxfTUFTSywJCU1UNjM1MV9SR19WVENYTzI0X09OX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZUQ1hPMjRfQ09OMCwJCU1UNjM1MV9SR19WVENYTzI0X1NXSVRDSF9NQVNLLAkJTVQ2MzUxX1JHX1ZUQ1hPMjRfU1dJVENIX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WVENYTzI0X0NPTjAsCQlNVDYzNTFfUkdfVlRDWE8yNF9TUkNMS19NT0RFX1NFTF9NQVNLLAkJTVQ2MzUxX1JHX1ZUQ1hPMjRfU1JDTEtfTU9ERV9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZUQ1hPMjRfQ09OMCwJCU1UNjM1MV9EQV9RSV9WVENYTzI0X01PREVfTUFTSywJCU1UNjM1MV9EQV9RSV9WVENYTzI0X01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZUQ1hPMjRfQ09OMCwJCU1UNjM1MV9SR19WVENYTzI0X1NUQlREX01BU0ssCQlNVDYzNTFfUkdfVlRDWE8yNF9TVEJURF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlRDWE8yNF9DT04wLAkJTVQ2MzUxX1JHX1ZUQ1hPMjRfU1JDTEtfRU5fU0VMX01BU0ssCQlNVDYzNTFfUkdfVlRDWE8yNF9TUkNMS19FTl9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZUQ1hPMjRfQ09OMCwJCU1UNjM1MV9EQV9RSV9WVENYTzI0X0VOX01BU0ssCQlNVDYzNTFfREFfUUlfVlRDWE8yNF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlRDWE8yOF9DT04wLAkJTVQ2MzUxX1JHX1ZUQ1hPMjhfTU9ERV9TRVRfTUFTSywJCU1UNjM1MV9SR19WVENYTzI4X01PREVfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WVENYTzI4X0NPTjAsCQlNVDYzNTFfUkdfVlRDWE8yOF9FTl9NQVNLLAkJTVQ2MzUxX1JHX1ZUQ1hPMjhfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZUQ1hPMjhfQ09OMCwJCU1UNjM1MV9SR19WVENYTzI4X01PREVfQ1RSTF9NQVNLLAkJTVQ2MzUxX1JHX1ZUQ1hPMjhfTU9ERV9DVFJMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WVENYTzI4X0NPTjAsCQlNVDYzNTFfUkdfVlRDWE8yOF9PTl9DVFJMX01BU0ssCQlNVDYzNTFfUkdfVlRDWE8yOF9PTl9DVFJMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WVENYTzI4X0NPTjAsCQlNVDYzNTFfUkdfVlRDWE8yOF9TUkNMS19NT0RFX1NFTF9NQVNLLAkJTVQ2MzUxX1JHX1ZUQ1hPMjhfU1JDTEtfTU9ERV9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZUQ1hPMjhfQ09OMCwJCU1UNjM1MV9EQV9RSV9WVENYTzI4X01PREVfTUFTSywJCU1UNjM1MV9EQV9RSV9WVENYTzI4X01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZUQ1hPMjhfQ09OMCwJCU1UNjM1MV9SR19WVENYTzI4X1NUQlREX01BU0ssCQlNVDYzNTFfUkdfVlRDWE8yOF9TVEJURF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlRDWE8yOF9DT04wLAkJTVQ2MzUxX1JHX1ZUQ1hPMjhfU1JDTEtfRU5fU0VMX01BU0ssCQlNVDYzNTFfUkdfVlRDWE8yOF9TUkNMS19FTl9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZUQ1hPMjhfQ09OMCwJCU1UNjM1MV9EQV9RSV9WVENYTzI4X0VOX01BU0ssCQlNVDYzNTFfREFfUUlfVlRDWE8yOF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlRDWE8yOF9DT04xLAkJTVQ2MzUxX0RBX1FJX1ZUQ1hPMjhfT0NGQl9FTl9NQVNLLAkJTVQ2MzUxX0RBX1FJX1ZUQ1hPMjhfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVkNBTUFfQ09OMCwJCU1UNjM1MV9SR19WQ0FNQV9PTl9DVFJMX01BU0ssCQlNVDYzNTFfUkdfVkNBTUFfT05fQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVkNBTUFfQ09OMSwJCU1UNjM1MV9SR19WQ0FNQV9PQ0ZCX0VOX01BU0ssCQlNVDYzNTFfUkdfVkNBTUFfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVkNBTUFfQ09OMSwJCU1UNjM1MV9EQV9RSV9WQ0FNQV9PQ0ZCX0VOX01BU0ssCQlNVDYzNTFfREFfUUlfVkNBTUFfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlNJTTFfQ09OMCwJCU1UNjM1MV9SR19WU0lNMV9NT0RFX1NFVF9NQVNLLAkJTVQ2MzUxX1JHX1ZTSU0xX01PREVfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WU0lNMV9DT04wLAkJTVQ2MzUxX1JHX1ZTSU0xX0VOX01BU0ssCQlNVDYzNTFfUkdfVlNJTTFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZTSU0xX0NPTjAsCQlNVDYzNTFfUkdfVlNJTTFfTU9ERV9DVFJMX01BU0ssCQlNVDYzNTFfUkdfVlNJTTFfTU9ERV9DVFJMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WU0lNMV9DT04wLAkJTVQ2MzUxX1JHX1ZTSU0xX09OX0NUUkxfTUFTSywJCU1UNjM1MV9SR19WU0lNMV9PTl9DVFJMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WU0lNMV9DT04wLAkJTVQ2MzUxX1JHX1ZTSU0xX1NSQ0xLX01PREVfU0VMX01BU0ssCQlNVDYzNTFfUkdfVlNJTTFfU1JDTEtfTU9ERV9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZTSU0xX0NPTjAsCQlNVDYzNTFfUkdfVlNJTTFfU1RCVERfTUFTSywJCU1UNjM1MV9SR19WU0lNMV9TVEJURF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlNJTTFfQ09OMCwJCU1UNjM1MV9SR19WU0lNMV9TUkNMS19FTl9TRUxfTUFTSywJCU1UNjM1MV9SR19WU0lNMV9TUkNMS19FTl9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZTSU0xX0NPTjEsCQlNVDYzNTFfUkdfVlNJTTFfT0NGQl9FTl9NQVNLLAkJTVQ2MzUxX1JHX1ZTSU0xX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZTSU0xX0NPTjEsCQlNVDYzNTFfREFfUUlfVlNJTTFfT0NGQl9FTl9NQVNLLAkJTVQ2MzUxX0RBX1FJX1ZTSU0xX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZTSU0yX0NPTjAsCQlNVDYzNTFfUkdfVlNJTTJfTU9ERV9TRVRfTUFTSywJCU1UNjM1MV9SR19WU0lNMl9NT0RFX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlNJTTJfQ09OMCwJCU1UNjM1MV9SR19WU0lNMl9FTl9NQVNLLAkJTVQ2MzUxX1JHX1ZTSU0yX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WU0lNMl9DT04wLAkJTVQ2MzUxX1JHX1ZTSU0yX01PREVfQ1RSTF9NQVNLLAkJTVQ2MzUxX1JHX1ZTSU0yX01PREVfQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlNJTTJfQ09OMCwJCU1UNjM1MV9SR19WU0lNMl9PTl9DVFJMX01BU0ssCQlNVDYzNTFfUkdfVlNJTTJfT05fQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlNJTTJfQ09OMCwJCU1UNjM1MV9SR19WU0lNMl9TUkNMS19NT0RFX1NFTF9NQVNLLAkJTVQ2MzUxX1JHX1ZTSU0yX1NSQ0xLX01PREVfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WU0lNMl9DT04wLAkJTVQ2MzUxX1JHX1ZTSU0yX1NUQlREX01BU0ssCQlNVDYzNTFfUkdfVlNJTTJfU1RCVERfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZTSU0yX0NPTjAsCQlNVDYzNTFfUkdfVlNJTTJfU1JDTEtfRU5fU0VMX01BU0ssCQlNVDYzNTFfUkdfVlNJTTJfU1JDTEtfRU5fU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WU0lNMl9DT04xLAkJTVQ2MzUxX1JHX1ZTSU0yX09DRkJfRU5fTUFTSywJCU1UNjM1MV9SR19WU0lNMl9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WU0lNMl9DT04xLAkJTVQ2MzUxX0RBX1FJX1ZTSU0yX09DRkJfRU5fTUFTSywJCU1UNjM1MV9EQV9RSV9WU0lNMl9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WSUJSX0NPTjAsCQlNVDYzNTFfUkdfVklCUl9NT0RFX1NFVF9NQVNLLAkJTVQ2MzUxX1JHX1ZJQlJfTU9ERV9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZJQlJfQ09OMCwJCU1UNjM1MV9SR19WSUJSX0VOX01BU0ssCQlNVDYzNTFfUkdfVklCUl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVklCUl9DT04wLAkJTVQ2MzUxX1JHX1ZJQlJfTU9ERV9DVFJMX01BU0ssCQlNVDYzNTFfUkdfVklCUl9NT0RFX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZJQlJfQ09OMCwJCU1UNjM1MV9SR19WSUJSX09OX0NUUkxfTUFTSywJCU1UNjM1MV9SR19WSUJSX09OX0NUUkxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZJQlJfQ09OMCwJCU1UNjM1MV9SR19WSUJSX1RIRVJfU0ROX0VOX01BU0ssCQlNVDYzNTFfUkdfVklCUl9USEVSX1NETl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVklCUl9DT04xLAkJTVQ2MzUxX1JHX1ZJQlJfT0NGQl9FTl9NQVNLLAkJTVQ2MzUxX1JHX1ZJQlJfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVklCUl9DT04yLAkJTVQ2MzUxX1JHX1ZJQlJfRFVNTVlfTE9BRF9NQVNLLAkJTVQ2MzUxX1JHX1ZJQlJfRFVNTVlfTE9BRF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVklCUl9DT04yLAkJTVQ2MzUxX0RBX1FJX1ZJQlJfRFVNTVlfTE9BRF9NQVNLLAkJTVQ2MzUxX0RBX1FJX1ZJQlJfRFVNTVlfTE9BRF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVkNBTURfQ09OMCwJCU1UNjM1MV9SR19WQ0FNRF9NT0RFX1NFVF9NQVNLLAkJTVQ2MzUxX1JHX1ZDQU1EX01PREVfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WQ0FNRF9DT04wLAkJTVQ2MzUxX1JHX1ZDQU1EX0VOX01BU0ssCQlNVDYzNTFfUkdfVkNBTURfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZDQU1EX0NPTjAsCQlNVDYzNTFfUkdfVkNBTURfU1RCVERfTUFTSywJCU1UNjM1MV9SR19WQ0FNRF9TVEJURF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVkNBTURfQ09OMCwJCU1UNjM1MV9EQV9RSV9WQ0FNRF9TVEJfTUFTSywJCU1UNjM1MV9EQV9RSV9WQ0FNRF9TVEJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZDQU1EX0NPTjAsCQlNVDYzNTFfREFfUUlfVkNBTURfRU5fTUFTSywJCU1UNjM1MV9EQV9RSV9WQ0FNRF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVkNBTURfQ09OMSwJCU1UNjM1MV9EQV9RSV9WQ0FNRF9PQ0ZCX0VOX01BU0ssCQlNVDYzNTFfREFfUUlfVkNBTURfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVkNBTURfQ09OMiwJCU1UNjM1MV9SR19WQ0FNRF9EVU1NWV9MT0FEX1NSQ0xLRU5fU0VMX01BU0ssCQlNVDYzNTFfUkdfVkNBTURfRFVNTVlfTE9BRF9TUkNMS0VOX1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlJGMThfQ09OMCwJCU1UNjM1MV9SR19WUkYxOF9NT0RFX1NFVF9NQVNLLAkJTVQ2MzUxX1JHX1ZSRjE4X01PREVfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WUkYxOF9DT04wLAkJTVQ2MzUxX1JHX1ZSRjE4X0VOX01BU0ssCQlNVDYzNTFfUkdfVlJGMThfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZSRjE4X0NPTjAsCQlNVDYzNTFfUkdfVlJGMThfTU9ERV9DVFJMX01BU0ssCQlNVDYzNTFfUkdfVlJGMThfTU9ERV9DVFJMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WUkYxOF9DT04wLAkJTVQ2MzUxX1JHX1ZSRjE4X09OX0NUUkxfTUFTSywJCU1UNjM1MV9SR19WUkYxOF9PTl9DVFJMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WUkYxOF9DT04wLAkJTVQ2MzUxX1JHX1ZSRjE4X1NSQ0xLX01PREVfU0VMX01BU0ssCQlNVDYzNTFfUkdfVlJGMThfU1JDTEtfTU9ERV9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZSRjE4X0NPTjAsCQlNVDYzNTFfREFfUUlfVlJGMThfTU9ERV9NQVNLLAkJTVQ2MzUxX0RBX1FJX1ZSRjE4X01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZSRjE4X0NPTjAsCQlNVDYzNTFfUkdfVlJGMThfU1RCVERfTUFTSywJCU1UNjM1MV9SR19WUkYxOF9TVEJURF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlJGMThfQ09OMCwJCU1UNjM1MV9SR19WUkYxOF9TUkNMS19FTl9TRUxfTUFTSywJCU1UNjM1MV9SR19WUkYxOF9TUkNMS19FTl9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZSRjE4X0NPTjAsCQlNVDYzNTFfREFfUUlfVlJGMThfU1RCX01BU0ssCQlNVDYzNTFfREFfUUlfVlJGMThfU1RCX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WUkYxOF9DT04wLAkJTVQ2MzUxX0RBX1FJX1ZSRjE4X0VOX01BU0ssCQlNVDYzNTFfREFfUUlfVlJGMThfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZSRjEyX0NPTjAsCQlNVDYzNTFfUkdfVlJGMTJfTU9ERV9TRVRfTUFTSywJCU1UNjM1MV9SR19WUkYxMl9NT0RFX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlJGMTJfQ09OMCwJCU1UNjM1MV9SR19WUkYxMl9FTl9NQVNLLAkJTVQ2MzUxX1JHX1ZSRjEyX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WUkYxMl9DT04wLAkJTVQ2MzUxX1JHX1ZSRjEyX01PREVfQ1RSTF9NQVNLLAkJTVQ2MzUxX1JHX1ZSRjEyX01PREVfQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlJGMTJfQ09OMCwJCU1UNjM1MV9SR19WUkYxMl9PTl9DVFJMX01BU0ssCQlNVDYzNTFfUkdfVlJGMTJfT05fQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVlJGMTJfQ09OMCwJCU1UNjM1MV9SR19WUkYxMl9TUkNMS19NT0RFX1NFTF9NQVNLLAkJTVQ2MzUxX1JHX1ZSRjEyX1NSQ0xLX01PREVfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WUkYxMl9DT04wLAkJTVQ2MzUxX0RBX1FJX1ZSRjEyX01PREVfTUFTSywJCU1UNjM1MV9EQV9RSV9WUkYxMl9NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WUkYxMl9DT04wLAkJTVQ2MzUxX1JHX1ZSRjEyX1NUQlREX01BU0ssCQlNVDYzNTFfUkdfVlJGMTJfU1RCVERfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZSRjEyX0NPTjAsCQlNVDYzNTFfUkdfVlJGMTJfU1JDTEtfRU5fU0VMX01BU0ssCQlNVDYzNTFfUkdfVlJGMTJfU1JDTEtfRU5fU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WUkYxMl9DT04wLAkJTVQ2MzUxX0RBX1FJX1ZSRjEyX0VOX01BU0ssCQlNVDYzNTFfREFfUUlfVlJGMTJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZNSVBJX0NPTjAsCQlNVDYzNTFfUkdfVk1JUElfTU9ERV9TRVRfTUFTSywJCU1UNjM1MV9SR19WTUlQSV9NT0RFX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVk1JUElfQ09OMCwJCU1UNjM1MV9SR19WTUlQSV9FTl9NQVNLLAkJTVQ2MzUxX1JHX1ZNSVBJX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WTUlQSV9DT04wLAkJTVQ2MzUxX1JHX1ZNSVBJX01PREVfQ1RSTF9NQVNLLAkJTVQ2MzUxX1JHX1ZNSVBJX01PREVfQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVk1JUElfQ09OMCwJCU1UNjM1MV9SR19WTUlQSV9PTl9DVFJMX01BU0ssCQlNVDYzNTFfUkdfVk1JUElfT05fQ1RSTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9MRE9fVk1JUElfQ09OMCwJCU1UNjM1MV9SR19WTUlQSV9TUkNMS19NT0RFX1NFTF9NQVNLLAkJTVQ2MzUxX1JHX1ZNSVBJX1NSQ0xLX01PREVfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WTUlQSV9DT04wLAkJTVQ2MzUxX0RBX1FJX1ZNSVBJX01PREVfTUFTSywJCU1UNjM1MV9EQV9RSV9WTUlQSV9NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WTUlQSV9DT04wLAkJTVQ2MzUxX1JHX1ZNSVBJX1NUQlREX01BU0ssCQlNVDYzNTFfUkdfVk1JUElfU1RCVERfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZNSVBJX0NPTjAsCQlNVDYzNTFfUkdfVk1JUElfU1JDTEtfRU5fU0VMX01BU0ssCQlNVDYzNTFfUkdfVk1JUElfU1JDTEtfRU5fU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0xET19WTUlQSV9DT04wLAkJTVQ2MzUxX0RBX1FJX1ZNSVBJX0VOX01BU0ssCQlNVDYzNTFfREFfUUlfVk1JUElfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfTERPX1ZNSVBJX0NPTjEsCQlNVDYzNTFfREFfUUlfVk1JUElfT0NGQl9FTl9NQVNLLAkJTVQ2MzUxX0RBX1FJX1ZNSVBJX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfVlRDWE8yOF9BTkFfQ09OMCwJCU1UNjM1MV9SR19WVENYTzI4X1ZPU0VMX01BU0ssCQlNVDYzNTFfUkdfVlRDWE8yOF9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9WVENYTzI0X0FOQV9DT04wLAkJTVQ2MzUxX1JHX1ZUQ1hPMjRfVk9TRUxfTUFTSywJCU1UNjM1MV9SR19WVENYTzI0X1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX1ZTSU0xX0FOQV9DT04wLAkJTVQ2MzUxX1JHX1ZTSU0xX1ZPU0VMX01BU0ssCQlNVDYzNTFfUkdfVlNJTTFfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfVlNJTTJfQU5BX0NPTjAsCQlNVDYzNTFfUkdfVlNJTTJfQ0FMX01BU0ssCQlNVDYzNTFfUkdfVlNJTTJfQ0FMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX1ZTSU0yX0FOQV9DT04wLAkJTVQ2MzUxX1JHX1ZTSU0yX1ZPU0VMX01BU0ssCQlNVDYzNTFfUkdfVlNJTTJfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfVlNJTTJfQU5BX0NPTjEsCQlNVDYzNTFfUkdfVlNJTTJfU1RCX1NFTF9NQVNLLAkJTVQ2MzUxX1JHX1ZTSU0yX1NUQl9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfVlNJTTJfQU5BX0NPTjEsCQlNVDYzNTFfUkdfVlNJTTJfT0NfVFJJTV9NQVNLLAkJTVQ2MzUxX1JHX1ZTSU0yX09DX1RSSU1fU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfVkVGVVNFX0FOQV9DT04wLAkJTVQ2MzUxX1JHX1ZFRlVTRV9DQUxfTUFTSywJCU1UNjM1MV9SR19WRUZVU0VfQ0FMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX1ZFRlVTRV9BTkFfQ09OMSwJCU1UNjM1MV9SR19WRUZVU0VfU1RCX1NFTF9NQVNLLAkJTVQ2MzUxX1JHX1ZFRlVTRV9TVEJfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX1ZFRlVTRV9BTkFfQ09OMSwJCU1UNjM1MV9SR19WRUZVU0VfT0NfVFJJTV9NQVNLLAkJTVQ2MzUxX1JHX1ZFRlVTRV9PQ19UUklNX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX1ZSRjE4X0FOQV9DT04wLAkJTVQ2MzUxX1JHX1ZSRjE4X1ZPU0VMX01BU0ssCQlNVDYzNTFfUkdfVlJGMThfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfVlJGMTJfQU5BX0NPTjAsCQlNVDYzNTFfUkdfVlJGMTJfVk9TRUxfTUFTSywJCU1UNjM1MV9SR19WUkYxMl9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1MV9WTUlQSV9BTkFfQ09OMCwJCU1UNjM1MV9SR19WTUlQSV9WT1NFTF9NQVNLLAkJTVQ2MzUxX1JHX1ZNSVBJX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JJRl9DT04zMCwJCU1UNjM1MV9CSUZfVEVTVF9NT0RFMF9NQVNLLAkJTVQ2MzUxX0JJRl9URVNUX01PREUwX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JJRl9DT04zMCwJCU1UNjM1MV9CSUZfVEVTVF9NT0RFNF9NQVNLLAkJTVQ2MzUxX0JJRl9URVNUX01PREU0X1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JJRl9DT04zMCwJCU1UNjM1MV9CSUZfVEVTVF9NT0RFNV9NQVNLLAkJTVQ2MzUxX0JJRl9URVNUX01PREU1X1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JJRl9DT04zMCwJCU1UNjM1MV9CSUZfQkFUX0xPU1RfU1dfTUFTSywJCU1UNjM1MV9CSUZfQkFUX0xPU1RfU1dfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQklGX0NPTjMxLAkJTVQ2MzUxX0JJRl9JUlFfTUFTSywJCU1UNjM1MV9CSUZfSVJRX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0JJRl9DT04zMSwJCU1UNjM1MV9CSUZfVElNRU9VVF9NQVNLLAkJTVQ2MzUxX0JJRl9USU1FT1VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0FVWEFEQ19BREMxNywJCU1UNjM1MV9BVVhBRENfQURDX09VVF9DSDdfQllfTURfTUFTSywJCU1UNjM1MV9BVVhBRENfQURDX09VVF9DSDdfQllfTURfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQVVYQURDX0FEQzE3LAkJTVQ2MzUxX0FVWEFEQ19BRENfUkRZX0NIN19CWV9NRF9NQVNLLAkJTVQ2MzUxX0FVWEFEQ19BRENfUkRZX0NIN19CWV9NRF9TSElGVCwJCX0sCisgICAge01UNjM1MV9BVVhBRENfQURDMTksCQlNVDYzNTFfQVVYQURDX0FEQ19PVVRfQ0g0X0JZX01EX01BU0ssCQlNVDYzNTFfQVVYQURDX0FEQ19PVVRfQ0g0X0JZX01EX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0FVWEFEQ19BREMxOSwJCU1UNjM1MV9BVVhBRENfQURDX1JEWV9DSDRfQllfTURfTUFTSywJCU1UNjM1MV9BVVhBRENfQURDX1JEWV9DSDRfQllfTURfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQVVYQURDX0FEQzIyLAkJTVQ2MzUxX0FVWEFEQ19BRENfT1VUX0NIMF9CWV9NRF9NQVNLLAkJTVQ2MzUxX0FVWEFEQ19BRENfT1VUX0NIMF9CWV9NRF9TSElGVCwJCX0sCisgICAge01UNjM1MV9BVVhBRENfQURDMjIsCQlNVDYzNTFfQVVYQURDX0FEQ19SRFlfQ0gwX0JZX01EX01BU0ssCQlNVDYzNTFfQVVYQURDX0FEQ19SRFlfQ0gwX0JZX01EX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0FVWEFEQ19BREMyNCwJCU1UNjM1MV9BVVhBRENfQURDX09VVF9DSDFfQllfTURfTUFTSywJCU1UNjM1MV9BVVhBRENfQURDX09VVF9DSDFfQllfTURfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQVVYQURDX0FEQzI0LAkJTVQ2MzUxX0FVWEFEQ19BRENfUkRZX0NIMV9CWV9NRF9NQVNLLAkJTVQ2MzUxX0FVWEFEQ19BRENfUkRZX0NIMV9CWV9NRF9TSElGVCwJCX0sCisgICAge01UNjM1MV9BVVhBRENfQURDMzYsCQlNVDYzNTFfQVVYQURDX0FEQ19PVVRfRENYT19CWV9NRF9NQVNLLAkJTVQ2MzUxX0FVWEFEQ19BRENfT1VUX0RDWE9fQllfTURfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQVVYQURDX0FEQzM2LAkJTVQ2MzUxX0FVWEFEQ19BRENfUkRZX0RDWE9fQllfTURfTUFTSywJCU1UNjM1MV9BVVhBRENfQURDX1JEWV9EQ1hPX0JZX01EX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0FVWEFEQ19SUVNUMSwJCU1UNjM1MV9BVVhBRENfUlFTVF9DSDBfQllfTURfTUFTSywJCU1UNjM1MV9BVVhBRENfUlFTVF9DSDBfQllfTURfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQVVYQURDX1JRU1QxLAkJTVQ2MzUxX0FVWEFEQ19SUVNUX0NIMV9CWV9NRF9NQVNLLAkJTVQ2MzUxX0FVWEFEQ19SUVNUX0NIMV9CWV9NRF9TSElGVCwJCX0sCisgICAge01UNjM1MV9BVVhBRENfUlFTVDEsCQlNVDYzNTFfQVVYQURDX1JRU1RfQ0g0X0JZX01EX01BU0ssCQlNVDYzNTFfQVVYQURDX1JRU1RfQ0g0X0JZX01EX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0FVWEFEQ19SUVNUMSwJCU1UNjM1MV9BVVhBRENfUlFTVF9DSDdfQllfTURfTUFTSywJCU1UNjM1MV9BVVhBRENfUlFTVF9DSDdfQllfTURfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQVVYQURDX1JRU1QxLAkJTVQ2MzUxX0FVWEFEQ19SUVNUX0RDWE9fQllfTURfTUFTSywJCU1UNjM1MV9BVVhBRENfUlFTVF9EQ1hPX0JZX01EX1NISUZULAkJfSwKKyAgICB7TVQ2MzUxX0FVWEFEQ19SUVNUMV9TRVQsCQlNVDYzNTFfQVVYQURDX1JRU1QxX1NFVF9NQVNLLAkJTVQ2MzUxX0FVWEFEQ19SUVNUMV9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTFfQVVYQURDX1JRU1QxX0NMUiwJCU1UNjM1MV9BVVhBRENfUlFTVDFfQ0xSX01BU0ssCQlNVDYzNTFfQVVYQURDX1JRU1QxX0NMUl9TSElGVCwJCX0sCit9OworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICAgICAgICAgICAgICAgICAgV1JJVEUgQVBJcyAgICAgICAgICAgICAgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBXcml0ZSBXaG9sZSBCeXRlcwordm9pZCBkY2xfcG1pYzYzNTFfYnl0ZV93cml0ZShEQ0xfVUlOVDE2IGFkZHIsIERDTF9VSU5UMTYgdmFsKQoreworICAgIGthbF91aW50MzIgc2F2ZWRNYXNrID0gMDsKKyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKQorCXNhdmVkTWFzayA9IFNhdmVBbmRTZXRJUlFNYXNrKCk7CisjZW5kaWYgLy8jaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorICAgIGlmKGFkZHIgPD0gUE1JQzYzNTFfTUFYX1JFR19OVU0pCisgICAgeworICAgICAgICBwbWljNjM1MV9yZWdbYWRkcl0gPSB2YWw7CisgICAgfQorCisgICAgRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBhZGRyLCB2YWwsIDB4MDApOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uc3RhcnRfdGltZSwgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykKKyAgICBSZXN0b3JlSVJRTWFzayhzYXZlZE1hc2spOworI2VuZGlmIC8vI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCit9CisKKy8vIFdyaXRlIHJlZ2lzdGVyIGZpZWxkCit2b2lkIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShQTUlDNjM1MV9GTEFHU19MSVNUX0VOVU0gZmxhZywgRENMX1VJTlQxNiBzZWwpCit7CisgICAgY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZICpwVGFibGUgPSBwbWljNjM1MV9mbGFnc190YWJsZTsKKyAgICBrYWxfdWludDMyIHNhdmVkTWFzayA9IDA7CisjaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykKKwlzYXZlZE1hc2sgPSBTYXZlQW5kU2V0SVJRTWFzaygpOworI2VuZGlmIC8vI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworICAgIHBtaWNfcmVnX2xvZy5jb21tYW5kX2ZsYWcgPSBmbGFnOworICAgIHBtaWNfcmVnX2xvZy5yZWdfYmVmb3JlX3dyaXRlID0gcG1pYzYzNTFfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdOworCisgICAgcG1pYzYzNTFfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdICY9IH4ocFRhYmxlW2ZsYWddLm1hc2sgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKyAgICBwbWljNjM1MV9yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gfD0gKChrYWxfdWludDE2KXNlbCA8PCBwVGFibGVbZmxhZ10uc2hpZnQpOworCisgICAgRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBwVGFibGVbZmxhZ10ub2Zmc2V0LCBwbWljNjM1MV9yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0sIDB4MDApOworCisgICAgcG1pY19yZWdfbG9nLndyaXRlX3ZhbHVlID0gc2VsOworICAgIHBtaWNfcmVnX2xvZy5hZGRyZXNzX29mZnNldCA9IHBUYWJsZVtmbGFnXS5vZmZzZXQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19tYXNrID0gcFRhYmxlW2ZsYWddLm1hc2s7CisgICAgcG1pY19yZWdfbG9nLnJlZ19zaGlmdCA9IHBUYWJsZVtmbGFnXS5zaGlmdDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2FkZHIgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfZGF0YSA9IHBtaWM2MzUxX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLnN0YXJ0X3RpbWUsIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5lbmRfdGltZSk7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCisgICAgUmVzdG9yZUlSUU1hc2soc2F2ZWRNYXNrKTsKKyNlbmRpZiAvLyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgICBSRUFEIEFQSXMgICAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIFJlYWQgV2hvbGUgQnl0ZXMKK0RDTF9VSU5UMTYgZGNsX3BtaWM2MzUxX2J5dGVfcmV0dXJuKERDTF9VSU5UMTYgYWRkcikKK3sKKyAgICBEQ0xfVUlOVDE2IHJlZ190ZW1wOworICAgIGthbF91aW50MzIgc2F2ZWRNYXNrID0gMDsKKworI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCisJc2F2ZWRNYXNrID0gU2F2ZUFuZFNldElSUU1hc2soKTsKKyNlbmRpZiAvLyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKQorCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKyAgICBEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfUkVBRCwgKERDTF9VSU5UMzIpYWRkciwgMHgwMCwgJnJlZ190ZW1wKTsKKworICAgIGlmKGFkZHIgPD0gUE1JQzYzNTFfTUFYX1JFR19OVU0pCisgICAgeworICAgICAgICBwbWljNjM1MV9yZWdbYWRkcl0gPSByZWdfdGVtcDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1tQTUlDX0lOVEVSRkFDRV9EQkddW3BtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4XS5zdGFydF90aW1lLCBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZW5kX3RpbWUpOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX1VCTF9fKSAmJiAhZGVmaW5lZChfX0ZVRV9fKQorICAgIFJlc3RvcmVJUlFNYXNrKHNhdmVkTWFzayk7CisjZW5kaWYgLy8jaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykKKworICAgIHJldHVybiByZWdfdGVtcDsKK30KKworLy8gUmVhZCByZWdpc3RlciBmaWVsZAorRENMX1VJTlQxNiBkY2xfcG1pYzYzNTFfZmllbGRfcmVhZChQTUlDNjM1MV9GTEFHU19MSVNUX0VOVU0gZmxhZykKK3sKKyAgICBjb25zdCBQTUlDX0ZMQUdfVEFCTEVfRU5UUlkgKnBUYWJsZSA9IHBtaWM2MzUxX2ZsYWdzX3RhYmxlOworICAgIGthbF91aW50MzIgc2F2ZWRNYXNrID0gMDsKKyAgICBEQ0xfVUlOVDE2IHJlZ19yZXR1cm4gPSAwOworCisjaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykKKwlzYXZlZE1hc2sgPSBTYXZlQW5kU2V0SVJRTWFzaygpOworI2VuZGlmIC8vI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworICAgIERydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCBwVGFibGVbZmxhZ10ub2Zmc2V0LCAweDAwLCAmcG1pYzYzNTFfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdKTsKKworICAgIHJlZ19yZXR1cm4gPSAoKHBtaWM2MzUxX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSAmIChwVGFibGVbZmxhZ10ubWFzayA8PCBwVGFibGVbZmxhZ10uc2hpZnQpKSA+PiBwVGFibGVbZmxhZ10uc2hpZnQpOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19JTlRFUkZBQ0VfREJHXVtwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleF0uc3RhcnRfdGltZSwgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW1BNSUNfSU5URVJGQUNFX0RCR11bcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19VQkxfXykgJiYgIWRlZmluZWQoX19GVUVfXykKKyAgICBSZXN0b3JlSVJRTWFzayhzYXZlZE1hc2spOworI2VuZGlmIC8vI2lmICFkZWZpbmVkKF9fVUJMX18pICYmICFkZWZpbmVkKF9fRlVFX18pCisKKyAgICByZXR1cm4gcmVnX3JldHVybjsKK30KKworCisvLyBFeHBvcnRlZCBmb3IgRU0gdXNlZAordm9pZCBwbWljNjM1MV9FTV9yZWdfd3JpdGUoa2FsX3VpbnQxNiByZWcsIGthbF91aW50MTYgdmFsKXsKKyAgICBkY2xfcG1pYzYzNTFfYnl0ZV93cml0ZShyZWcsIHZhbCk7Cit9CisKK2thbF91aW50MTYgcG1pYzYzNTFfRU1fcmVnX3JlYWQoa2FsX3VpbnQxNiByZWcpeworICAgIHJldHVybiAgZGNsX3BtaWM2MzUxX2J5dGVfcmV0dXJuKHJlZyk7Cit9CisKK1BNVV9DVFJMX1BNSUNfRUNPX1ZFUlNJT05fRU5VTSBwbWljNjM1MV9nZXRfSFdfRUNPX3ZlcnNpb24odm9pZCkKK3sKKyAgICByZXR1cm4gcG1pYzYzNTFfaHdfdmVyc2lvbjsKK30KKworUE1VX0NUUkxfUE1JQ19FQ09fVkVSU0lPTl9FTlVNIHBtaWM2MzUxX2dldF9TV192ZXJzaW9uKHZvaWQpCit7CisgICAgcmV0dXJuIHBtaWM2MzUxX3N3X3ZlcnNpb247Cit9CisKK2NvbnN0IERDTF9VSU5UMzIgdnBhX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUXzAwXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDBfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMF83MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAwXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDBfOTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV8wMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAxXzEwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfMjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV8zMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV82MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAxXzcwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV85MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzAwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl8yMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzMwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfNDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl81MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl84MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzkwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wM18xMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzIwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDNfMzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wM180MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAzXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKworfTsKKworY29uc3QgRENMX1VJTlQzMiB2c2ltMV92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF9JTlZBTElELCAgICAgICBQTVVfVk9MVF9JTlZBTElELCAgUE1VX1ZPTFRfMDFfNzAwMDAwX1YsICAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsCisgICAgUE1VX1ZPTFRfMDFfODYwMDAwX1YsICAgICAgIFBNVV9WT0xUXzAyXzc2MDAwMF9WLCAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgUE1VX1ZPTFRfMDNfMTAwMDAwX1YsCit9OworCitQTVVfUEFSQU1FVEVSX1RBQkxFX0VOVFJZIHBtdV9wYXJhbWV0ZXJfdGFibGVbXT0KK3sKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWUEFfU1cpLAkJICAgIHZwYV92b3NlbCwJCSAgICBOVUxMLAkgICAgCQlHRVRBUlJOVU0odnBhX3Zvc2VsKQkJfSwKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWU0lNMSksCQkgICAgdnNpbTFfdm9zZWwsCQlOVUxMLAkgICAgCQlHRVRBUlJOVU0odnNpbTFfdm9zZWwpCQl9LAorICAgIHtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZTSU0yKSwJCSAgICB2c2ltMV92b3NlbCwJCU5VTEwsICAgCQkJR0VUQVJSTlVNKHZzaW0xX3Zvc2VsKQkgICAgfSwKK307CisKK2V4dGVybiBQTVVfQ09OVFJPTF9IQU5ETEVSIHBtdV9jb250cm9sX2hhbmRsZXI7CisKK0RDTF9VSU5UMTYgcG11X3BhcmFtZXRlcl9zaXplID0gMDsKKworRENMX1NUQVRVUyBQTUlDNjM1MV9jb250cm9sX2hhbmRsZXIoRENMX0hBTkRMRSBoYW5kbGUsRENMX0NUUkxfQ01EIGNtZCxEQ0xfQ1RSTF9EQVRBX1QgKmRhdGEpCit7CisgICAgRENMX1VJTlQxNglyZWdWYWw7CisgICAgRENMX0lOVDMyCXJldHVybl92YWwgPSBTVEFUVVNfRkFJTDsKKworCXN3aXRjaChjbWQpCisgICAgeworICAgICAgICBjYXNlIExET19CVUNLX1NFVF9FTjoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOICpwTGRvQnVja0N0cmw9JihkYXRhLT5yUE1VTGRvQnVja1NldEVuKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTg6CisvLyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4XzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZSRjE4X0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxMjoKKy8vICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVlJGMTJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WU0lNMV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZTSU0yX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTUlQSToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVk1JUElfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9TVzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfQlVDS19WUEFfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9CVUNLX1ZTUkFNX01EX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTUQxOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9CVUNLX1ZNRDFfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfQlVDS19WTU9ERU1fRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZUQ1hPMjQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZUQ1hPMjRfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisJCWJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWVENYTzI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WVENYTzI4X0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorCQlicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTERPX0JVQ0tfU0VUX09DRkJfRU46CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9PQ0ZCX0VOICpwTGRvQnVja0N0cmw9JihkYXRhLT5yUE1VTGRvQnVja1NldE9jZmJFbik7CisKKyAgICAgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZTSU0xX09DRkJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WU0lNMl9PQ0ZCX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9MUF9NT0RFX1NFVCAqcExkb0J1Y2tDdHJsID0mIChkYXRhLT5yUE1VTGRvQnVja1NldExwTW9kZVNldCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4OgorLy8gICAgICAgICAgICAgICAgY2FzZSBWUkYxOF8xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZSRjE4X01PREVfU0VULCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxMjoKKy8vICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WUkYxMl9NT0RFX1NFVCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVlNJTTFfTU9ERV9TRVQsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZTSU0yX01PREVfU0VULCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTUlQSToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WTUlQSV9NT0RFX1NFVCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlRDWE8yNDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVlRDWE8yNF9NT0RFX1NFVCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKwkJYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZUQ1hPMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZUQ1hPMjhfTU9ERV9TRVQsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisJCWJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMRE9fQlVDS19TRVRfTFBfU0VMOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTFBfU0VMICpwTGRvQnVja0N0cmwgPSYgKGRhdGEtPnJQTVVMZG9CdWNrU2V0THBTZWwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUkYxODoKKy8vICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIDEnYjA6IFNXIGNvbnRyb2wgYnkgVlNJTTFfTU9ERV9TRVQsIDEnYjE6IEhXIGNvbnRyb2wgYnkgU1JDTEtFTgorICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZSRjE4X01PREVfQ1RSTCwgcExkb0J1Y2tDdHJsLT5vblNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTI6CisvLyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4XzI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZSRjEyX01PREVfQ1RSTCwgcExkb0J1Y2tDdHJsLT5vblNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gMSdiMDogU1cgY29udHJvbCBieSBWU0lNMV9NT0RFX1NFVCwgMSdiMTogSFcgY29udHJvbCBieSBTUkNMS0VOCisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVlNJTTFfTU9ERV9DVFJMLCBwTGRvQnVja0N0cmwtPm9uU2VsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WU0lNMl9NT0RFX0NUUkwsIHBMZG9CdWNrQ3RybC0+b25TZWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVk1JUEk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZNSVBJX01PREVfQ1RSTCwgcExkb0J1Y2tDdHJsLT5vblNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWVENYTzI0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WVENYTzI0X01PREVfQ1RSTCwgcExkb0J1Y2tDdHJsLT5vblNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorCQlicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlRDWE8yODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVlRDWE8yOF9NT0RFX0NUUkwsIHBMZG9CdWNrQ3RybC0+b25TZWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKwkJYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIExET19CVUNLX1NFVF9WT0xUQUdFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvbHRhZ2UpOworICAgICAgICAgICAgcmVnVmFsID0gUE1VX1BhcmFtZXRlcl90b19WYWx1ZShFTkMoY21kLCBwTGRvQnVja0N0cmwtPm1vZCksIHBMZG9CdWNrQ3RybC0+dm9sdGFnZSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WU0lNMV9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WU0lNMl9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9TVzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfQlVDS19WUEFfVk9TRUwsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWVENYTzI0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WVENYTzI0X1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKwkJYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZUQ1hPMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZUQ1hPMjhfVk9TRUwsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorCQlicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTERPX0JVQ0tfR0VUX1ZPTFRBR0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT0xUQUdFCSpwTGRvQnVja0N0cmw9JihkYXRhLT5yUE1VTGRvQnVja0dldFZvbHQpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWU1JBTV9NRDoKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljNjM1MV9maWVsZF9yZWFkKE1UNjM1MV9EQV9OSV9WU1JBTV9NRF9WT1NFTF9TWU5DKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNRDE6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pYzYzNTFfZmllbGRfcmVhZChNVDYzNTFfREFfTklfVk1EMV9WT1NFTF9TWU5DKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljNjM1MV9maWVsZF9yZWFkKE1UNjM1MV9EQV9OSV9WTU9ERU1fVk9TRUxfU1lOQyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX0dFVF9WT1NFTF9DVFJMOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9TRUxfQ1RSTCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja0dldFZvc2VsQ3RybCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5tb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWM2MzUxX2ZpZWxkX3JlYWQoTVQ2MzUxX0JVQ0tfVlNSQU1fTURfVk9TRUxfQ1RSTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVk1EMToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+bW9kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljNjM1MV9maWVsZF9yZWFkKE1UNjM1MV9CVUNLX1ZNRDFfVk9TRUxfQ1RSTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5tb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWM2MzUxX2ZpZWxkX3JlYWQoTVQ2MzUxX0JVQ0tfVk1PREVNX1ZPU0VMX0NUUkwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisgICAgICAgIGNhc2UgTERPX0JVQ0tfR0VUX1ZPU0VMOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9TRUwgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWb3NlbCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWM2MzUxX2ZpZWxkX3JlYWQoTVQ2MzUxX0JVQ0tfVlNSQU1fTURfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVk1EMToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljNjM1MV9maWVsZF9yZWFkKE1UNjM1MV9CVUNLX1ZNRDFfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWM2MzUxX2ZpZWxkX3JlYWQoTVQ2MzUxX0JVQ0tfVk1PREVNX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTERPX0JVQ0tfR0VUX1ZPU0VMX09OOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9TRUxfT04gKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWb3NlbE9uKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlNSQU1fTUQ6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pYzYzNTFfZmllbGRfcmVhZChNVDYzNTFfQlVDS19WU1JBTV9NRF9WT1NFTF9PTik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTUQxOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWM2MzUxX2ZpZWxkX3JlYWQoTVQ2MzUxX0JVQ0tfVk1EMV9WT1NFTF9PTik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pYzYzNTFfZmllbGRfcmVhZChNVDYzNTFfQlVDS19WTU9ERU1fVk9TRUxfT04pOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMRE9fQlVDS19HRVRfVk9TRUxfU0xFRVA6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1NFTF9TTEVFUCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja0dldFZvc2VsU2xlZXApOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWU1JBTV9NRDoKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljNjM1MV9maWVsZF9yZWFkKE1UNjM1MV9CVUNLX1ZTUkFNX01EX1ZPU0VMX1NMRUVQKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNRDE6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pYzYzNTFfZmllbGRfcmVhZChNVDYzNTFfQlVDS19WTUQxX1ZPU0VMX1NMRUVQKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljNjM1MV9maWVsZF9yZWFkKE1UNjM1MV9CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX1ZPU0VMX0NUUkw6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1NFTF9DVFJMICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0Vm9zZWxDdHJsKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlNSQU1fTUQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAwOiBTVyBjb250cm9sLCAxOiBIVworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX0JVQ0tfVlNSQU1fTURfVk9TRUxfQ1RSTCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWTUQxOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gMDogU1cgY29udHJvbCwgMTogSFcKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9CVUNLX1ZNRDFfVk9TRUxfQ1RSTCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAwOiBTVyBjb250cm9sLCAxOiBIVworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX0JVQ0tfVk1PREVNX1ZPU0VMX0NUUkwsIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKyAgICAgICAgY2FzZSBMRE9fQlVDS19TRVRfVk9TRUw6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1NFTCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvc2VsKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlNSQU1fTUQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX0JVQ0tfVlNSQU1fTURfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTUQxOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9CVUNLX1ZNRDFfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX0JVQ0tfVk1PREVNX1ZPU0VMLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMRE9fQlVDS19TRVRfVk9TRUxfT046CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1NFTF9PTiAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvc2VsT24pOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWU1JBTV9NRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfQlVDS19WU1JBTV9NRF9WT1NFTF9PTiwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNRDE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX0JVQ0tfVk1EMV9WT1NFTF9PTiwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfQlVDS19WTU9ERU1fVk9TRUxfT04sIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIExET19CVUNLX1NFVF9WT1NFTF9TTEVFUDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPU0VMX1NMRUVQICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0Vm9zZWxTbGVlcCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9CVUNLX1ZTUkFNX01EX1ZPU0VMX1NMRUVQLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVk1EMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfQlVDS19WTUQxX1ZPU0VMX1NMRUVQLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX0VOX0NUUkw6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9FTl9DVFJMICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0RW5DdHJsKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVlJGMTg6CisvLyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4XzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAwOiBTVyBjb250cm9sMTogSFcgY29udHJvbAorICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZSRjE4X09OX0NUUkwsIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxMjoKKy8vICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVlJGMTJfT05fQ1RSTCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNSVBJOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gMDogU1cgY29udHJvbCwgMTogSFcKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WTUlQSV9PTl9DVFJMLCBwTGRvQnVja0N0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNSQU1fTUQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAwOiBTVyBjb250cm9sLCAxOiBIVworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX0JVQ0tfVlNSQU1fTURfRU5fQ1RSTCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWTUQxOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gMDogU1cgY29udHJvbCwgMTogSFcKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9CVUNLX1ZNRDFfRU5fQ1RSTCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAwOiBTVyBjb250cm9sLCAxOiBIVworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX0JVQ0tfVk1PREVNX0VOX0NUUkwsIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVlRDWE8yNDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIDA6IFNXIGNvbnRyb2wsIDE6IEhXCisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVlRDWE8yNF9PTl9DVFJMLCBwTGRvQnVja0N0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZUQ1hPMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAwOiBTVyBjb250cm9sLCAxOiBIVworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZUQ1hPMjhfT05fQ1RSTCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCisKKwkJY2FzZSBMRE9fQlVDS19TRVRfRU5fU0VMOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fU0VMICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0RW5TZWwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWUkYxODoKKy8vICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVlJGMThfU1JDTEtfRU5fU0VMLCBwTGRvQnVja0N0cmwtPnNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxMjoKKy8vICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVlJGMTJfU1JDTEtfRU5fU0VMLCBwTGRvQnVja0N0cmwtPnNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVlNJTTFfU1JDTEtfRU5fU0VMLCBwTGRvQnVja0N0cmwtPnNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVlNJTTJfU1JDTEtfRU5fU0VMLCBwTGRvQnVja0N0cmwtPnNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTUlQSToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVk1JUElfU1JDTEtfRU5fU0VMLCBwTGRvQnVja0N0cmwtPnNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWVENYTzI0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WVENYTzI0X1NSQ0xLX0VOX1NFTCwgcExkb0J1Y2tDdHJsLT5zZWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKwkJYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZUQ1hPMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZUQ1hPMjhfU1JDTEtfRU5fU0VMLCBwTGRvQnVja0N0cmwtPnNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorCQlicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisgICAgICAgIGNhc2UgTERPX0JVQ0tfU0VUX1NSQ0xLX01PREVfU0VMOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfU1JDTEtfTU9ERV9TRUwgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRTcmNsa01vZGVTZWwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUkYxODoKKy8vICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVlJGMThfU1JDTEtfTU9ERV9TRUwsIHBMZG9CdWNrQ3RybC0+c2VsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWUkYxMjoKKy8vICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVlJGMTJfU1JDTEtfTU9ERV9TRUwsIHBMZG9CdWNrQ3RybC0+c2VsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WU0lNMV9TUkNMS19NT0RFX1NFTCwgcExkb0J1Y2tDdHJsLT5zZWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZTSU0yX1NSQ0xLX01PREVfU0VMLCBwTGRvQnVja0N0cmwtPnNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTUlQSToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljNjM1MV9maWVsZF93cml0ZShNVDYzNTFfUkdfVk1JUElfU1JDTEtfTU9ERV9TRUwsIHBMZG9CdWNrQ3RybC0+c2VsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZUQ1hPMjQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pYzYzNTFfZmllbGRfd3JpdGUoTVQ2MzUxX1JHX1ZUQ1hPMjRfU1JDTEtfTU9ERV9TRUwsIHBMZG9CdWNrQ3RybC0+c2VsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisJCWJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWVENYTzI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WVENYTzI4X1NSQ0xLX01PREVfU0VMLCBwTGRvQnVja0N0cmwtPnNlbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorCQlicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwkJYnJlYWs7CisKKyAgICAgICAgY2FzZSBMRE9fQlVDS19TRVRfVlRDWE8yNF9TV0lUQ0g6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19TRVRfVlRDWE8yNF9TV0lUQ0hfRU4gKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWdGN4b1N3aXRoKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCisgICAgICAgICAgICAgICAgY2FzZSBWVENYTzI0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WVENYTzI0X1NXSVRDSCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKwkJYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwljYXNlIExET19CVUNLX1NFVF9NT0RFU0VUOgorCXsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX01PREVTRVQgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRNb2Rlc2V0KTsKKworCisJCXN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKwkJeworCSAgICAgICAgICAgICAgICBjYXNlIFZQQV9TVzoKKwkgICAgICAgICAgICAgICAgeworCSAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9SR19WUEFfTU9ERVNFVCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKwkgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJICAgICAgICAgICAgICAgIH0KKwkgICAgICAgICAgICAgICAgYnJlYWs7CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKwkJCWJyZWFrOworCQl9CisJfQorCWJyZWFrOworCisgICAgICAgIGNhc2UgVlBBX1NFVF9FTjoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfVlBBX1NFVF9FTiAqcFZwYVNldEVuID0gJihkYXRhLT5yUE1VVnBhU2V0RW4pOworICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2ZpZWxkX3dyaXRlKE1UNjM1MV9CVUNLX1ZQQV9FTiwgcFZwYVNldEVuLT5lbmFibGUpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIFZQQV9HRVRfVk9MVEFHRV9MSVNUOgorCQl7CisJCQlQTVVfQ1RSTF9WUEFfR0VUX1ZPTFRBR0VfTElTVCAqcFZwYUN0cmwgPSAmKGRhdGEtPnJQTVVWcGFHZXRWb2x0YWdlTGlzdCk7CisJCQlwVnBhQ3RybC0+cFZvbHRhZ2VMaXN0ID0gdnBhX3Zvc2VsOworCQkJcFZwYUN0cmwtPm51bWJlciA9IEdFVEFSUk5VTSh2cGFfdm9zZWwpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworICAgICAgICAvKgorICAgICAgICAxLglBVVhBRENfUlFTVDFfQ0xSWzddCTEnaDEKKyAgICAgICAgMi4JQVVYQURDX1JRU1QxX1NFVFs3XQkxJ2gxCisgICAgICAgIDMuCUFmdGVyIDEwdXMKKyAgICAgICAgNC4JUG9sbGluZyByZWFkeSwgQVVYQURDX0FEQ19SRFlfQ2g3X0JZX01ECisgICAgICAgIDUuCUFmdGVyIEFVWEFEQ19BRENfUkRZX0NoN19CWV9NRCA9IDEsIGdldCBkYXRhIGJ5IEFVWEFEQ19BRENfT1VUX0NIN19CWV9NRAorICAgICAgICA2LglBVVhBRENfUlFTVDFfQ0xSWzddCTEnaDEKKyAgICAgICAgKi8KKyAgICAgICAgY2FzZSBBRENfU0VUX1JRU1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0FEQ19TRVRfUlFTVCAqcEFkY0N0cmwgPSAmKGRhdGEtPnJQTVVBZGNTZXRScXN0KTsKKyAgICAgICAgICAgIGlmKChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0lOSVQpICYmIChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0RBVEEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEVuYWJsZSBDTEtTUSBmb3IgTUQgKFNXIG1vZGUpIFJHX0NMS1NRX0VOX0FVWF9NRAorICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2J5dGVfd3JpdGUoTVQ2MzUxX1RPUF9DTEtTUV9TRVQsICgweDEgPDwgMykpOworICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2J5dGVfd3JpdGUoTVQ2MzUxX0FVWEFEQ19SUVNUMV9DTFIsIChwQWRjQ3RybC0+ZW5hYmxlIDw8IDcpKTsKKyAgICAgICAgICAgIGRjbF9wbWljNjM1MV9ieXRlX3dyaXRlKE1UNjM1MV9BVVhBRENfUlFTVDFfU0VULCAoMHgxIDw8IDcpKTsKKyAgICAgICAgICAgIEFVWEFEQ19TdGF0dXMgPSBBVVhBRENfUkVBRF9SRVFVRVNUOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEFEQ19HRVRfUkRZX01EOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9BRENfR0VUX1JEWV9NRCAqcEFkY0N0cmwgPSAmKGRhdGEtPnJQTVVBZGNHZXRSZHlNZCk7CisKKyAgICAgICAgICAgIHBBZGNDdHJsLT5zdGF0dXMgPSAoRENMX0JPT0wpZGNsX3BtaWM2MzUxX2ZpZWxkX3JlYWQoTVQ2MzUxX0FVWEFEQ19BRENfUkRZX0NIN19CWV9NRCk7CisgICAgICAgICAgICBpZigoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9SRVFVRVNUKSAmJiAoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9CVVNZKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKHBBZGNDdHJsLT5zdGF0dXMgPT0gRENMX1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX1JFQURZOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFVWEFEQ19TdGF0dXMgPSBBVVhBRENfUkVBRF9CVVNZOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQURDX0dFVF9PVVRfTUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0FEQ19HRVRfT1VUX01EICpwQWRjQ3RybCA9ICYoZGF0YS0+clBNVUFkY0dldE91dE1kKTsKKyAgICAgICAgICAgIGlmKEFVWEFEQ19TdGF0dXMgIT0gQVVYQURDX1JFQURfUkVBRFkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEFkY0N0cmwtPmRhdGEgPSAoRENMX1VJTlQzMilkY2xfcG1pYzYzNTFfZmllbGRfcmVhZChNVDYzNTFfQVVYQURDX0FEQ19PVVRfQ0g3X0JZX01EKTsKKyAgICAgICAgICAgIEFVWEFEQ19TdGF0dXMgPSBBVVhBRENfUkVBRF9EQVRBOworICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2J5dGVfd3JpdGUoTVQ2MzUxX0FVWEFEQ19SUVNUMV9DTFIsICgweDEgPDwgNykpOworICAgICAgICAgICAgLy8gRGlzYWJsZSBDTEtTUSBmb3IgTUQgKFNXIG1vZGUpIFJHX0NMS1NRX0VOX0FVWF9NRAorICAgICAgICAgICAgZGNsX3BtaWM2MzUxX2J5dGVfd3JpdGUoTVQ2MzUxX1RPUF9DTEtTUV9DTFIsICgweDEgPDwgMykpOworCisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUlTQ19HRVRfSFdfVkVSU0lPTjoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTUlTQ19HRVRfSFdfVkVSU0lPTgkqcE1pc2NDdHJsID0gJihkYXRhLT5yUE1VTWlzY0dldEh3VmVyc2lvbik7CisgICAgICAgICAgICBpZihwTWlzY0N0cmwtPmNoaXBfbmFtZSA9PSBQTUlDXzYzNTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcE1pc2NDdHJsLT52ZXJzaW9uID0gcG1pYzYzNTFfaHdfdmVyc2lvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTUlTQ19TRVRfUkVHSVNURVJfVkFMVUU6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX01JU0NfU0VUX1JFR0lTVEVSX1ZBTFVFCSpwQ2hyQ3RybCA9ICYoZGF0YS0+clBNVU1pc2NTZXRSZWdpc3RlclZhbHVlKTsKKyAgICAgICAgICAgIHBtaWM2MzUxX0VNX3JlZ193cml0ZShwQ2hyQ3RybC0+b2Zmc2V0LCBwQ2hyQ3RybC0+dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1JU0NfR0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9NSVNDX0dFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmw9JihkYXRhLT5yUE1VTWlzY0dldFJlZ2lzdGVyVmFsdWUpOworICAgICAgICAgICAgcENockN0cmwtPnZhbHVlID0gcG1pYzYzNTFfRU1fcmVnX3JlYWQocENockN0cmwtPm9mZnNldCk7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbDsKK30KKworZXh0ZXJuIHZvaWQgZGNsX3BtaWM2MzUxX21vZGVtX29ubHlfaW5pdCh2b2lkKTsKK2V4dGVybiBEQ0xfVUlOVDMyIERSVl9SZWFkX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkcik7CitleHRlcm4gdm9pZCBEUlZfV3JpdGVfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyLCBEQ0xfVUlOVDMyIHZhbHVlKTsKK2V4dGVybiBrYWxfdWludDMyIFBNSUNfQ29uZmlnX0ludGVyZmFjZShrYWxfYm9vbCBhY3Rpb24sIGthbF91aW50MzIgYWRkcmVzcywga2FsX3VpbnQzMiB3ZGF0YSwga2FsX3VpbnQzMiAqcmRhdGEsIGthbF91aW50MzIgY2hpcF9uYW1lKTsKK2V4dGVybiB2b2lkIFBNSUNfUmVhZF9BbGwodm9pZCk7CisjaWYgZGVmaW5lZChQTUlDX1VOSVRfVEVTVCkKK2V4dGVybiB2b2lkIFBNSUNfUmVhZF9BbGwodm9pZCk7CitleHRlcm4gdm9pZCBQTUlDX1VuaXRfVGVzdCh2b2lkKTsKKyNlbmRpZgorCisKK3ZvaWQgZGNsX3BtaWM2MzUxX2ludGVybmFsX2luaXQodm9pZCkKK3sKK30KKworI2lmIGRlZmluZWQoX19ESExfTU9EVUxFX18pCitleHRlcm4ga2FsX2Jvb2wgZGhsX3JlZ2lzdGVyX2N1c3RvbV9tZW1fcmVhZChESExfQ1VTVE9NX01FTV9UWVBFIG1lbV90eXBlLCBESExfQ1VTVE9NX1JFQURfTUVNX0NBTExCQUNLIHJlYWRfY2IpOworZXh0ZXJuIGthbF9ib29sIGRobF9yZWdpc3Rlcl9jdXN0b21fbWVtX3dyaXRlKERITF9DVVNUT01fTUVNX1RZUEUgbWVtX3R5cGUsIERITF9DVVNUT01fV1JJVEVfTUVNX0NBTExCQUNLIHdyaXRlX2NiKTsKK2V4dGVybiB2b2lkIFBNSUNfUmVhZF9DYWxsYmFja19Gb3JfREhMKHZvaWQqIHJlYWRfYWRkciwga2FsX3VpbnQzMiBsZW4sIGthbF91aW50MzIgb3B0aW9uLCB2b2lkKiogcmVhZF9idWZmZXJfYWRkciwga2FsX3VpbnQzMiAqcmVhZF9idWZmZXJfbGVuKTsKK2V4dGVybiB2b2lkIFBNSUNfV3JpdGVfQ2FsbGJhY2tfRm9yX0RITCh2b2lkKiB3cml0ZV9hZGRyLCBrYWxfdWludDMyIGxlbiwga2FsX3VpbnQzMiBvcHRpb24sIHZvaWQqIHdyaXRlX2J1ZmZlcl9hZGRyKTsKKyNlbmRpZgorCit2b2lkIGRjbF9wbWljNjM1MV9pbml0KHZvaWQpeworICAgIGV4dGVybiB2b2lkIHBtaWNfd3JhcF9kdW1wX2luaXQodm9pZCk7CisgICAgcG11X2NvbnRyb2xfaGFuZGxlciA9IFBNSUM2MzUxX2NvbnRyb2xfaGFuZGxlcjsKKyAgICBwbXVfcGFyYW1ldGVyX3NpemUgPSBHRVRBUlJOVU0ocG11X3BhcmFtZXRlcl90YWJsZSk7CisjaWYgZGVmaW5lZChfX0RITF9NT0RVTEVfXykKKyAgICBkaGxfcmVnaXN0ZXJfY3VzdG9tX21lbV9yZWFkKERITF9DVVNUT01fTUVNX1BNSUMsIFBNSUNfUmVhZF9DYWxsYmFja19Gb3JfREhMKTsKKyAgICBkaGxfcmVnaXN0ZXJfY3VzdG9tX21lbV93cml0ZShESExfQ1VTVE9NX01FTV9QTUlDLCBQTUlDX1dyaXRlX0NhbGxiYWNrX0Zvcl9ESEwpOworI2VuZGlmCisgICAgcG1pY193cmFwX2R1bXBfaW5pdCgpOworCisjaWYgICFkZWZpbmVkKF9fU01BUlRfUEhPTkVfTU9ERU1fXykKKyAgICBEcnZQV1JBUF9Jbml0KCk7CisjZW5kaWYKKyAgICBwbWljNjM1MV9od192ZXJzaW9uID0gUE1JQ19FQ09fRTE7CisgICAgcG1pYzYzNTFfc3dfdmVyc2lvbiA9IFBNSUNfRUNPX0UxOworCisgICAgLy8gR2V0IE1UNjM1MSBFQ08gdmVyc2lvbgorICAgIHsKKyAgICAgICAga2FsX3VpbnQxNiBwbWljNjM1MV9od19lY29fdmVyc2lvbiA9IDA7CisgICAgICAgIGthbF91aW50MTYgcG1pYzYzNTFfc3dfZWNvX3ZlcnNpb24gPSAwOworICAgICAgICBwbWljNjM1MV9od19lY29fdmVyc2lvbiA9IGRjbF9wbWljNjM1MV9ieXRlX3JldHVybihNVDYzNTFfSFdDSUQpOworICAgICAgICBwbWljNjM1MV9zd19lY29fdmVyc2lvbiA9IGRjbF9wbWljNjM1MV9ieXRlX3JldHVybihNVDYzNTFfU1dDSUQpOworCisgICAgICAgIGlmIChwbWljNjM1MV9od19lY29fdmVyc2lvbiA9PSBNVDYzNTFfSFdfQ0lEX0UxKQorICAgICAgICB7CisgICAgICAgICAgICBwbWljNjM1MV9od192ZXJzaW9uID0gUE1JQ19FQ09fRTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocG1pYzYzNTFfaHdfZWNvX3ZlcnNpb24gPT0gTVQ2MzUxX0hXX0NJRF9FMikKKyAgICAgICAgeworICAgICAgICAgICAgcG1pYzYzNTFfaHdfdmVyc2lvbiA9IFBNSUNfRUNPX0UyOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcG1pYzYzNTFfaHdfdmVyc2lvbiA9IFBNSUNfRUNPX0UzOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBtaWM2MzUxX3N3X2Vjb192ZXJzaW9uID09IE1UNjM1MV9TV19DSURfRTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBtaWM2MzUxX3N3X3ZlcnNpb24gPSBQTUlDX0VDT19FMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwbWljNjM1MV9zd19lY29fdmVyc2lvbiA9PSBNVDYzNTFfU1dfQ0lEX0UyKQorICAgICAgICB7CisgICAgICAgICAgICBwbWljNjM1MV9zd192ZXJzaW9uID0gUE1JQ19FQ09fRTI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisJCQlwbWljNjM1MV9zd192ZXJzaW9uID0gUE1JQ19FQ09fRTM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQTUlDX1JlYWRfQWxsKCk7CisKKyNpZiAhZGVmaW5lZChfX1NNQVJUX1BIT05FX01PREVNX18pCisgICAgZGNsX3BtaWM2MzUxX21vZGVtX29ubHlfaW5pdCgpOworI2VuZGlmCisgICAgZGNsX3BtaWM2MzUxX2ludGVybmFsX2luaXQoKTsKKworICAgIC8vICBwbWljNjM1MV9jdXN0b21pemF0aW9uX2luaXQoKTsKKyNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQorICAgIFBNSUNfUmVhZF9BbGwoKTsKKyAgICBQTUlDX1VuaXRfVGVzdCgpOworICAgIFBNSUNfUmVhZF9BbGwoKTsKKyNlbmRpZgorICAgIHBtaWNfaW5pdF9kb25lID0gRENMX1RSVUU7CisKK30KKworI2lmIGRlZmluZWQoX19ESExfTU9EVUxFX18pCitrYWxfdWludDMyIHBtaWNfcmVhZF9kYXRhOwordm9pZCBQTUlDX1JlYWRfQ2FsbGJhY2tfRm9yX0RITCh2b2lkKiByZWFkX2FkZHIsIGthbF91aW50MzIgbGVuLCBrYWxfdWludDMyIG9wdGlvbiwgdm9pZCoqIHJlYWRfYnVmZmVyX2FkZHIsIGthbF91aW50MzIgKnJlYWRfYnVmZmVyX2xlbikKK3sKKyAgICBrYWxfdWludDMyIHdyaXRlX2J1ZmZlcl9hZGRyID0gMDsKKyAgICBrYWxfdWludDMyIHJlYWRfZGF0YV9hZGRyID0gKGthbF91aW50MzIpcmVhZF9hZGRyOworICAgIC8vIFdyaXRlIFdvcmthcm91bmQKKyAgICBpZihyZWFkX2RhdGFfYWRkciAmIDB4MDAwMDAwMDEpCisgICAgeworICAgICAgICAgd3JpdGVfYnVmZmVyX2FkZHIgPSAocmVhZF9kYXRhX2FkZHIgJiAweEZGRkYwMDAwKSA+PiAxNjsKKyAgICAgICAgIHJlYWRfZGF0YV9hZGRyID0gKHJlYWRfZGF0YV9hZGRyICYgMHgwMDAwRkZGRSk7CisgICAgICAgICBQTUlDX0NvbmZpZ19JbnRlcmZhY2UoUE1JQ19XUklURSwgcmVhZF9kYXRhX2FkZHIsIChrYWxfdWludDMyKXdyaXRlX2J1ZmZlcl9hZGRyLCBOVUxMLCBvcHRpb24pOworICAgIH0KKyAgICBQTUlDX0NvbmZpZ19JbnRlcmZhY2UoUE1JQ19SRUFELCByZWFkX2RhdGFfYWRkciwgMCwgJnBtaWNfcmVhZF9kYXRhLCBvcHRpb24pOworICAgICpyZWFkX2J1ZmZlcl9hZGRyID0gKGthbF91aW50MzIqKSZwbWljX3JlYWRfZGF0YTsKKyAgICAqcmVhZF9idWZmZXJfbGVuID0gNDsKK30KKwordm9pZCBQTUlDX1dyaXRlX0NhbGxiYWNrX0Zvcl9ESEwodm9pZCogd3JpdGVfYWRkciwga2FsX3VpbnQzMiBsZW4sIGthbF91aW50MzIgb3B0aW9uLCB2b2lkKiB3cml0ZV9idWZmZXJfYWRkcikKK3sKKyAgICBQTUlDX0NvbmZpZ19JbnRlcmZhY2UoUE1JQ19XUklURSwgKGthbF91aW50MzIpd3JpdGVfYWRkciwgKGthbF91aW50MzIpd3JpdGVfYnVmZmVyX2FkZHIsIE5VTEwsIG9wdGlvbik7Cit9CisjZW5kaWYgLy8gRW5kIG9mICNpZiBkZWZpbmVkKF9fREhMX01PRFVMRV9fKQora2FsX3VpbnQzMiBQTUlDX0NvbmZpZ19JbnRlcmZhY2Uoa2FsX2Jvb2wgYWN0aW9uLCBrYWxfdWludDMyIGFkZHJlc3MsIGthbF91aW50MzIgd2RhdGEsIGthbF91aW50MzIgKnJkYXRhLCBrYWxfdWludDMyIGNoaXBfbmFtZSkKK3sKKyAgICAvLyBDaGVjayBhcmd1bWVudCB2YWxpZGF0aW9uCisgICAgaWYoKGFjdGlvbiAgJiB+KDB4MSkpICAgICE9IDApICByZXR1cm4gMDsgLy8gV3JpdGUgc2hvdWxkIGJlIDEgYml0CisgICAgaWYoKGFkZHJlc3MgJiB+KDB4ZmZmZikpICE9IDApICByZXR1cm4gMDsgLy8gQWRkcmVzcyBzaG91bGQgbm8gbGFyZ2VyIHRoYW4gMHhGRkZGCisgICAgaWYoKHdkYXRhICAgJiB+KDB4ZmZmZikpICE9IDApICByZXR1cm4gMDsgLy8gV3JpdGUgREFUQSBzaG91bGQgYmUgbm8gbGFyZ2VyIHRoYW4gMHhGRkZGCisKKyAgICBpZihhY3Rpb24gPT0gUE1JQ19SRUFEKQorICAgIHsKKyAgICAgICAgaWYoY2hpcF9uYW1lID09IFBNSUNfNjM1MSkKKyAgICAgICAgeworICAgICAgICAgICAgKnJkYXRhID0gKGthbF91aW50MzIpRFJWX1JlYWRfUE1JQ19EYXRhKGFkZHJlc3MpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKDApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYoYWN0aW9uID09IFBNSUNfV1JJVEUpCisgICAgeworICAgICAgICBpZihjaGlwX25hbWUgPT0gUE1JQ182MzUxKQorICAgICAgICB7CisgICAgICAgICAgICBEUlZfV3JpdGVfUE1JQ19EYXRhKGFkZHJlc3MsIHdkYXRhKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworRENMX0JPT0wgZGNsX3BtaWNfaW5pdF9kb25lX3F1ZXJ5KHZvaWQpCit7CisgICAgICAgIGlmKHBtaWNfaW5pdF9kb25lID09IERDTF9UUlVFKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIERDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBEQ0xfRkFMU0U7CisgICAgICAgIH0KK30KKworRENMX1VJTlQzMiBEUlZfUmVhZF9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIpCit7CisgICAgcmV0dXJuIGRjbF9wbWljNjM1MV9ieXRlX3JldHVybihwbWljX2FkZHIpOworfQorCit2b2lkIERSVl9Xcml0ZV9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIsIERDTF9VSU5UMzIgdmFsdWUpCit7CisgICAgZGNsX3BtaWM2MzUxX2J5dGVfd3JpdGUocG1pY19hZGRyLCB2YWx1ZSk7Cit9CisKK3ZvaWQgUE1JQ19SZWFkX0FsbCh2b2lkKQoreworICAgIHZvbGF0aWxlIGthbF91aW50MzIgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgUE1JQzYzNTFfTUFYX1JFR19OVU07IGkgKz0gMil7CisgICAgICAgIHBtaWM2MzUxX3JlZ1tpXSA9IGRjbF9wbWljNjM1MV9ieXRlX3JldHVybihpKTsKKyAgICB9Cit9CisKKyNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQordm9pZCBQTUlDX1VuaXRfVGVzdCh2b2lkKQoreworeworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT05fQ1RSTCB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5tb2RlID0gSFdfQ09OVFJPTDsgLy8gKFNXX0NPTlRST0xfQllfUkVHIC8gSFdfQ09OVFJPTCkKK3ZhbC5tb2QgPSBWTUlQSTsKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX09OX0NUUkwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7Cit2YWwubW9kID0gVk1JUEk7CitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKK3ZhbC5tb2QgPSBWUEFfU1c7CitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLm1vZD1WUEFfU1c7Cit2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworLyogICAgIFBNVV9WT0xUXzAwXzUwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAwXzYwMDAwMF9WLAorICAgICAgICBQTVVfVk9MVF8wMF83MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMF84MDAwMDBfViwKKyAgICAgICAgUE1VX1ZPTFRfMDBfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfMDAwMDAwX1YsCisgICAgICAgIFBNVV9WT0xUXzAxXzEwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAxXzIwMDAwMF9WLAorICAgICAgICBQTVVfVk9MVF8wMV8zMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV80MDAwMDBfViwKKyAgICAgICAgUE1VX1ZPTFRfMDFfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfNjAwMDAwX1YsCisgICAgICAgIFBNVV9WT0xUXzAxXzcwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAxXzgwMDAwMF9WLAorICAgICAgICBQTVVfVk9MVF8wMV85MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl8wMDAwMDBfViwKKyAgICAgICAgUE1VX1ZPTFRfMDJfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsCisgICAgICAgIFBNVV9WT0xUXzAyXzMwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAyXzQwMDAwMF9WLAorICAgICAgICBQTVVfVk9MVF8wMl81MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl82MDAwMDBfViwKKyAgICAgICAgUE1VX1ZPTFRfMDJfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfODAwMDAwX1YsCisgICAgICAgIFBNVV9WT0xUXzAyXzkwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLAorICAgICAgICBQTVVfVk9MVF8wM18xMDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18yMDAwMDBfViwKKyAgICAgICAgUE1VX1ZPTFRfMDNfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfNDAwMDAwX1YsCisgICAgICAgIFBNVV9WT0xUXzAzXzUwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAzXzYwMDAwMF9WLCAgICAgICovCitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX01PREVTRVQgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwubW9kID0gVlBBX1NXOwordmFsLm1vZGUgPSBGT1JDRV9QV01fTU9ERTsgLy8gKEFVVE9fTU9ERSAvIEZPUkNFX1BXTV9NT0RFKQorRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfTU9ERVNFVCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9FTl9DVFJMIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLm1vZGUgPSBIV19DT05UUk9MOyAvLyAoU1dfQ09OVFJPTF9CWV9SRUcgLyBIV19DT05UUk9MKQordmFsLm1vZCA9IFZSRjE7CitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTl9DVFJMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX1NFTCB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5zZWwgPSBTUkNMS0VOX0lOMV9TRUw7CisvKiBTUkNMS0VOX0lOMV9TRUwgLyBTUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX09SX1NSQ0xLRU5fSU4yX1NFTC8KKyAgICBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMICovCit2YWwubW9kID0gVlJGMTsKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOX1NFTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLm1vZCA9IFZSRjE7Cit2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9NT0RFU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwucmVndmFsID0gMHg3OyAvLyAoMHgwfjB4RikKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9WUkYxX1NFVF9NT0RFU0VUX0NLUEROX0NMUiB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5yZWd2YWwgPSAweDc7IC8vICgweDB+MHhGKQorRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBWUkYxX1NFVF9NT0RFU0VUX0NLUEROX0NMUiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX1ZSRjFfR0VUX01PREVTRVRfQ0tQRE4gdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisvLyB2YWwucmVndmFsIHdpbGwgYmUgeW91ciByZXF1ZXN0IHZhbHVlICggbm8gbmVlZCBkbyBhbnkgc2hpZnQpCitEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfR0VUX01PREVTRVRfQ0tQRE4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fQ1RSTCB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5tb2RlID0gSFdfQ09OVFJPTDsgLy8gKFNXX0NPTlRST0xfQllfUkVHIC8gSFdfQ09OVFJPTCkKK3ZhbC5tb2QgPSBWUkYyOworRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fQ1RSTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9FTl9TRUwgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwuc2VsID0gU1JDTEtFTl9JTjFfU0VMOworLyogU1JDTEtFTl9JTjFfU0VMIC8gU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMl9TRUwvCisgICAgU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTCAqLwordmFsLm1vZCA9IFZSRjI7CitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTl9TRUwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7Cit2YWwubW9kID0gVlJGMjsKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX01PREVTRVQgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwubW9kID0gVlJGMTsKK3ZhbC5tb2RlID0gRk9SQ0VfUFdNX01PREU7IC8vIChBVVRPX01PREUgLyBGT1JDRV9QV01fTU9ERSkKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX01PREVTRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfU1JDTEtfRU5fU0VMIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLnNlbCA9IFNSQ0xLRU5fSU4xX1NFTDsKKy8qIFNSQ0xLRU5fSU4xX1NFTCAvIFNSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfT1JfU1JDTEtFTl9JTjJfU0VMLworICAgIFNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwgKi8KK3ZhbC5tb2QgPSBWTUlQSTsKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX1NSQ0xLX0VOX1NFTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKK3ZhbC5tb2QgPSBWU0lNMTsKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKK2hhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOwordmFsLmVuYWJsZSA9IERDTF9UUlVFOyAvLyAoRENMX1RSVUUgLyBEQ0xfRkFMU0UpOwordmFsLm1vZCA9IFZTSU0yOworRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKK0RjbFBNVV9DbG9zZShoYW5kbGUpOworfQoreworRENMX0hBTkRMRSBoYW5kbGU7CitQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSB2YWw7CitoYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKK3ZhbC5tb2Q9VlNJTTE7Cit2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworLyogIFBNVV9WT0xUXzAxXzgwMDAwMF9WLCAgICAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLCAgICovCitEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK3sKK0RDTF9IQU5ETEUgaGFuZGxlOworUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPTFRBR0UgdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwubW9kPVZTSU0yOwordmFsLnZvbHRhZ2UgPSBQTVVfVk9MVF8wMV84MDAwMDBfVjsKKy8qICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18wMDAwMDBfViwgICAqLworRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworRGNsUE1VX0Nsb3NlKGhhbmRsZSk7Cit9Cit7CitEQ0xfSEFORExFIGhhbmRsZTsKK1BNVV9DVFJMX0xET19TRVRfVlRDWE8yNF9TV0lUQ0hfRU4gdmFsOworaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7Cit2YWwubW9kID0gVlRDWE8yNDsKK3ZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKK0RjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX1ZUQ1hPMjRfU1dJVENILCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CitEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKK30KK30KKyNlbmRpZiAvLyBFbmQgb2YgI2lmIGRlZmluZWQoUE1JQ19VTklUX1RFU1QpCisKKyNlbmRpZiAvLyBFbmQgb2YgI2lmIGRlZmluZWQoUE1JQ182MzUxX1JFR19BUEkpCisKZGlmZiAtLWdpdCBhL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjM1MV9pbml0LmMgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTFfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NzZhNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTFfaW5pdC5jCkBAIC0wLDAgKzEsODA0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgIGRjbF9wbWljNjM1MV9pbml0LmMKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgICBNT0xZIFNvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgICBUaGlzIGZpbGUgaXMgZm9yIFBNSUMgNjM1MQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiaW5pdC5oIgorI2luY2x1ZGUgImRjbC5oIgorCitleHRlcm4gRENMX1VJTlQzMiBEUlZfUmVhZF9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIpOworZXh0ZXJuIHZvaWQgRFJWX1dyaXRlX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkciwgRENMX1VJTlQzMiB2YWx1ZSk7CisKK3ZvaWQgUE1JQ19EUlZfU2V0RGF0YShEQ0xfVUlOVDMyIGFkZHIsIERDTF9VSU5UMzIgYml0bWFzaywgRENMX1VJTlQxNiB2YWx1ZSwgRENMX1VJTlQzMiBiYW5rKQoreworICAgRENMX1VJTlQzMiB0ZW1wOworICAgYWRkciB8PSAoYmFuayA8PCAzMSk7CisgICB0ZW1wID0gKH4oYml0bWFzaykpICYgRFJWX1JlYWRfUE1JQ19EYXRhKGFkZHIpOworICAgdGVtcCB8PSAoKHZhbHVlKSAmIChiaXRtYXNrKSk7CisgICBEUlZfV3JpdGVfUE1JQ19EYXRhKGFkZHIsdGVtcCk7Cit9CisvLyBNVDYzNTEgRUNPX0UxCit2b2lkIGRjbF9wbWljNjM1MV9tb2RlbV9vbmx5X2luaXQodm9pZCkKK3sKKwkvLyBERFVWTE9fREVCX0VOWzA6MF0gPSAweDEgPT4gNi8xLFNldmVuCisJUE1JQ19EUlZfU2V0RGF0YSgweDggICAgICAgLCAweDEgICAgICAgLCAweDEgICAgICAgLCAweDApOworCisJLy8gUkdfU1RSVVBfVlVTQjMzX1BHX0gyTF9FTlsxOjFdID0gMHgxID0+IDYvMSxTZXZlbgorCVBNSUNfRFJWX1NldERhdGEoMHhBICAgICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKworCS8vIFJHX1NUUlVQX1ZHUFVfUEdfSDJMX0VOWzI6Ml0gPSAweDEgPT4gNi8xLFNldmVuCisJUE1JQ19EUlZfU2V0RGF0YSgweEEgICAgICAgLCAweDQgICAgICAgLCAweDQgICAgICAgLCAweDApOworCisJLy8gUkdfU1RSVVBfVkRSQU1fUEdfSDJMX0VOWzM6M10gPSAweDEgPT4gNi8xLFNldmVuCisJUE1JQ19EUlZfU2V0RGF0YSgweEEgICAgICAgLCAweDggICAgICAgLCAweDggICAgICAgLCAweDApOworCisJLy8gUkdfU1RSVVBfVlNSQU1fUFJPQ19QR19IMkxfRU5bNDo0XSA9IDB4MSA9PiA2LzEsU2V2ZW4KKwlQTUlDX0RSVl9TZXREYXRhKDB4QSAgICAgICAsIDB4MTAgICAgICAsIDB4MTAgICAgICAsIDB4MCk7CisKKwkvLyBSR19TVFJVUF9WU1JBTV9NRF9QR19IMkxfRU5bNTo1XSA9IDB4MSA9PiA2LzEsU2V2ZW4KKwlQTUlDX0RSVl9TZXREYXRhKDB4QSAgICAgICAsIDB4MjAgICAgICAsIDB4MjAgICAgICAsIDB4MCk7CisKKwkvLyBSR19TVFJVUF9WQTEwX1BHX0gyTF9FTls3OjddID0gMHgxID0+IDYvMSxTZXZlbgorCVBNSUNfRFJWX1NldERhdGEoMHhBICAgICAgICwgMHg4MCAgICAgICwgMHg4MCAgICAgICwgMHgwKTsKKworCS8vIFJHX1NUUlVQX1ZFTUNfUEdfSDJMX0VOWzg6OF0gPSAweDEgPT4gNi8xLFNldmVuCisJUE1JQ19EUlZfU2V0RGF0YSgweEEgICAgICAgLCAweDEwMCAgICAgLCAweDEwMCAgICAgLCAweDApOworCisJLy8gUkdfU1RSVVBfVlMyX1BHX0gyTF9FTlsxMDoxMF0gPSAweDEgPT4gNi8xLFNldmVuCisJUE1JQ19EUlZfU2V0RGF0YSgweEEgICAgICAgLCAweDQwMCAgICAgLCAweDQwMCAgICAgLCAweDApOworCisJLy8gUkdfU1RSVVBfVk1PREVNX1BHX0gyTF9FTlsxMToxMV0gPSAweDEgPT4gNi8xLFNldmVuCisJUE1JQ19EUlZfU2V0RGF0YSgweEEgICAgICAgLCAweDgwMCAgICAgLCAweDgwMCAgICAgLCAweDApOworCisJLy8gUkdfU1RSVVBfVk1EMV9QR19IMkxfRU5bMTI6MTJdID0gMHgxID0+IDYvMSxTZXZlbgorCVBNSUNfRFJWX1NldERhdGEoMHhBICAgICAgICwgMHgxMDAwICAgICwgMHgxMDAwICAgICwgMHgwKTsKKworCS8vIFJHX1NUUlVQX1ZDT1JFX1BHX0gyTF9FTlsxMzoxM10gPSAweDEgPT4gNi8xLFNldmVuCisJUE1JQ19EUlZfU2V0RGF0YSgweEEgICAgICAgLCAweDIwMDAgICAgLCAweDIwMDAgICAgLCAweDApOworCisJLy8gUkdfU1RSVVBfVkExOF9QR19IMkxfRU5bMTQ6MTRdID0gMHgxID0+IDYvMSxTZXZlbgorCVBNSUNfRFJWX1NldERhdGEoMHhBICAgICAgICwgMHg0MDAwICAgICwgMHg0MDAwICAgICwgMHgwKTsKKworCS8vIFJHX1NUUlVQX1ZTMV9QR19IMkxfRU5bMTU6MTVdID0gMHgxID0+IDYvMSxTZXZlbgorCVBNSUNfRFJWX1NldERhdGEoMHhBICAgICAgICwgMHg4MDAwICAgICwgMHg4MDAwICAgICwgMHgwKTsKKworCS8vIFVWTE9fTDJIX0RFQl9FTls1OjVdID0gMHgxID0+IDYvMSxTZXZlbgorCVBNSUNfRFJWX1NldERhdGEoMHgxOCAgICAgICwgMHgyMCAgICAgICwgMHgyMCAgICAgICwgMHgwKTsKKworCS8vIFNUUlVQX0FVWEFEQ19SU1RCX1NFTFs3OjddID0gMHgxID0+IDYvMixEZW5uaXMKKwlQTUlDX0RSVl9TZXREYXRhKDB4MUMgICAgICAsIDB4ODAgICAgICAsIDB4ODAgICAgICAsIDB4MCk7CisKKwkvLyBTVFJVUF9QV1JPRkZfU0VRX0VOWzA6MF0gPSAweDEgPT4gNi8xLFNldmVuCisJUE1JQ19EUlZfU2V0RGF0YSgweDFFICAgICAgLCAweDEgICAgICAgLCAweDEgICAgICAgLCAweDApOworCisJLy8gU1RSVVBfUFdST0ZGX1BSRU9GRl9FTlsxOjFdID0gMHgxID0+IDYvMSxTZXZlbgorCVBNSUNfRFJWX1NldERhdGEoMHgxRSAgICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKworCS8vIFJHX1NUUlVQX0VOVlRFTV9DVFJMWzE1OjE1XSA9IDB4MSA9PiA2LzEsU2V2ZW4KKwlQTUlDX0RSVl9TZXREYXRhKDB4MkMgICAgICAsIDB4ODAwMCAgICAsIDB4ODAwMCAgICAsIDB4MCk7CisKKwkvLyBSR19FTl9EUlZTRUxbMjoyXSA9IDB4MSA9PiA2LzEsU2V2ZW4sUE1VIEVOIERyaXZlciBBYmlsaXR5CisJUE1JQ19EUlZfU2V0RGF0YSgweDMyICAgICAgLCAweDQgICAgICAgLCAweDQgICAgICAgLCAweDApOworCisJLy8gUkdfUlNUX0RSVlNFTFszOjNdID0gMHgxID0+IDYvMSxTZXZlbixSRVNFVEIgRHJpdmVyIEFiaWxpdHkKKwlQTUlDX0RSVl9TZXREYXRhKDB4MzIgICAgICAsIDB4OCAgICAgICAsIDB4OCAgICAgICAsIDB4MCk7CisKKwkvLyBSR19TUkNMS0VOX0lOMF9IV19NT0RFWzQ6NF0gPSAweDEgPT4gSnVpbm4tVGluZworCVBNSUNfRFJWX1NldERhdGEoMHgyMDQgICAgICwgMHgxMCAgICAgICwgMHgxMCAgICAgICwgMHgwKTsKKworCS8vIFJHX1NSQ0xLRU5fSU4xX0hXX01PREVbNTo1XSA9IDB4MSA9PiBKdWlubi1UaW5nCisJUE1JQ19EUlZfU2V0RGF0YSgweDIwNCAgICAgLCAweDIwICAgICAgLCAweDIwICAgICAgLCAweDApOworCisJLy8gUkdfT1NDX1NFTF9IV19NT0RFWzY6Nl0gPSAweDEgPT4gSnVpbm4tVGluZworCVBNSUNfRFJWX1NldERhdGEoMHgyMDQgICAgICwgMHg0MCAgICAgICwgMHg0MCAgICAgICwgMHgwKTsKKworCS8vIFJHX1NNVF9XRFRSU1RCX0lOWzA6MF0gPSAweDEgPT4gNi8xLFNldmVuCisJUE1JQ19EUlZfU2V0RGF0YSgweDIyNiAgICAgLCAweDEgICAgICAgLCAweDEgICAgICAgLCAweDApOworCisJLy8gUkdfU01UX1NQSV9DTEtbMDowXSA9IDB4MSA9PiA2LzEsQ2hlY2sgd2l0aCBKdWlubi1UaW5nCisJUE1JQ19EUlZfU2V0RGF0YSgweDIyOCAgICAgLCAweDEgICAgICAgLCAweDEgICAgICAgLCAweDApOworCisJLy8gUkdfU01UX1NQSV9DU05bMToxXSA9IDB4MSA9PiA2LzEsQ2hlY2sgd2l0aCBKdWlubi1UaW5nCisJUE1JQ19EUlZfU2V0RGF0YSgweDIyOCAgICAgLCAweDIgICAgICAgLCAweDIgICAgICAgLCAweDApOworCisJLy8gUkdfU01UX1NQSV9NT1NJWzI6Ml0gPSAweDEgPT4gNi8xLENoZWNrIHdpdGggSnVpbm4tVGluZworCVBNSUNfRFJWX1NldERhdGEoMHgyMjggICAgICwgMHg0ICAgICAgICwgMHg0ICAgICAgICwgMHgwKTsKKworCS8vIFJHX1NNVF9TUElfTUlTT1szOjNdID0gMHgxID0+IDYvMSxDaGVjayB3aXRoIEp1aW5uLVRpbmcKKwlQTUlDX0RSVl9TZXREYXRhKDB4MjI4ICAgICAsIDB4OCAgICAgICAsIDB4OCAgICAgICAsIDB4MCk7CisJCisJLy8gUkdfQVVYQURDX1NNUFNfQ0tfUEROWzk6OV0gPSAweDAgPT4gOS83IFBldGVyIFNXLGZvciBBVVhBREMgbmVlZCBhbHdheXMgb24KKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4MjNBICAgICAsIDB4MjAwICAgICAsIDB4MCAgICAgICAsIDB4MCk7CisgCisgICAgLy8gUkdfQVVYQURDXzI2TV9DS19QRE5bMTE6MTFdID0gMHgxCisgICAgUE1JQ19EUlZfU2V0RGF0YSgweDIzQSAgICAgLCAweDgwMCAgICAgLCAweDgwMCAgICAgLCAweDApOworCisJLy8gUkdfUlRDXzc1S19DS19QRE5bMjoyXSA9IDB4MSA9PiBKdWlubi1UaW5nCisJUE1JQ19EUlZfU2V0RGF0YSgweDI0MCAgICAgLCAweDQgICAgICAgLCAweDQgICAgICAgLCAweDApOworCisJLy8gUkdfUlRDREVUX0NLX1BETlszOjNdID0gMHgxID0+IEp1aW5uLVRpbmcKKwlQTUlDX0RSVl9TZXREYXRhKDB4MjQwICAgICAsIDB4OCAgICAgICAsIDB4OCAgICAgICAsIDB4MCk7CisJCisJLy8gUkdfQVVYQURDX0NLX1BETlsxMDoxMF0gPSAweDAKKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4MjQwICAgICAsIDB4NDAwICAgICAsIDB4MCAgICAgICAsIDB4MCk7CisKKwkvLyBSR19SVENfRU9TQzMyX0NLX1BETlsxMzoxM10gPSAweDEgPT4gSnVpbm4tVGluZyhpZiAzMiBsZXNzIGtlZXAgZGVmYXVsdCBWYWx1ZSkKKwlQTUlDX0RSVl9TZXREYXRhKDB4MjQ2ICAgICAsIDB4MjAwMCAgICAsIDB4MjAwMCAgICAsIDB4MCk7CisKKwkvLyBSR19UUklNXzc1S19DS19QRE5bMTQ6MTRdID0gMHgxID0+IEp1aW5uLVRpbmcKKwlQTUlDX0RSVl9TZXREYXRhKDB4MjQ2ICAgICAsIDB4NDAwMCAgICAsIDB4NDAwMCAgICAsIDB4MCk7CisJCisJLy8gUkdfRUZVU0VfQ0tfUEROWzI6Ml0gPSAweDAKKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4MjRDICAgICAsIDB4NCAgICAgICAsIDB4MCAgICAgICAsIDB4MCk7CisgCisgICAgLy8gUkdfQlVDS19WU1JBTV9NRF85TV9DS19QRE5bNTo1XSA9IDB4MAorICAgIFBNSUNfRFJWX1NldERhdGEoMHgyNTggICAgICwgMHgyMCAgICAgICwgMHgwICAgICAgICwgMHgwKTsKKyAKKyAgICAvLyBSR19BVUQxOE1fQ0tfUEROWzg6OF0gPSAweDEKKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4MjU4ICAgICAsIDB4MTAwICAgICAsIDB4MTAwICAgICAsIDB4MCk7CisgCisgICAgLy8gUkdfQlVDS19BVURfMU1fQ0tfUEROWzE0OjE0XSA9IDB4MAorICAgIFBNSUNfRFJWX1NldERhdGEoMHgyNTggICAgICwgMHg0MDAwICAgICwgMHgwICAgICAgICwgMHgwKTsKKworCS8vIFJHXzc1S18zMktfU0VMWzk6OV0gPSAweDEgPT4gQW5nZWxhCisJUE1JQ19EUlZfU2V0RGF0YSgweDI1RSAgICAgLCAweDIwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworCQorCS8vIFJHX0FVWEFEQ19DS19DS1NFTFsxMDoxMF0gPSAweDAKKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4MjVFICAgICAsIDB4NDAwICAgICAsIDB4MCAgICAgICAsIDB4MCk7CisgCisgICAgLy8gUkdfQVVYQURDX0NLX1BETl9IV0VOWzM6M10gPSAweDAKKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4MjgyICAgICAsIDB4OCAgICAgICAsIDB4MCAgICAgICAsIDB4MCk7CisgCisgICAgLy8gUkdfQVVYQURDX1NNUFNfQ0tfUEROX0hXRU5bNDo0XSA9IDB4MCA9PiA5LzcsUGV0ZXIgU1csRm9yIEF1eGFkYyBuZWVkIGFsd2F5cyBvbgorICAgIFBNSUNfRFJWX1NldERhdGEoMHgyODIgICAgICwgMHgxMCAgICAgICwgMHgwICAgICAgICwgMHgwKTsKKworCS8vIFJHX0FVWEFEQ18yNk1fQ0tfUEROX0hXRU5bMTA6MTBdID0gMHgwID0+IFpGCisJUE1JQ19EUlZfU2V0RGF0YSgweDI4MiAgICAgLCAweDQwMCAgICAgLCAweDAgICAgICAgLCAweDApOworCisJLy8gUkdfQVVYQURDX0NLX0NLU0VMX0hXRU5bMTE6MTFdID0gMHgwID0+IFpGCisJUE1JQ19EUlZfU2V0RGF0YSgweDI4MiAgICAgLCAweDgwMCAgICAgLCAweDAgICAgICAgLCAweDApOworCQorCS8vIFJHX0FVRDE4TV9DS19QRE5fSFdFTls0OjRdID0gMHgwCisgICAgUE1JQ19EUlZfU2V0RGF0YSgweDI4RSAgICAgLCAweDEwICAgICAgLCAweDAgICAgICAgLCAweDApOworIAorCS8vIEJVQ0tfVlBBX1ZPU0VMX0RMQzAwMVsxMzo4XSA9IDB4OCA9PiA2LzI0LFBhdWwKKwlQTUlDX0RSVl9TZXREYXRhKDB4NDEwICAgICAsIDB4M0YwMCAgICAsIDB4ODAwICAgICAsIDB4MCk7CisKKwkvLyBCVUNLX1ZQQV9EVlNfVFJBTlNfQ1RSTFs1OjRdID0gMHgzID0+IDYvMjQsUGF1bAorCVBNSUNfRFJWX1NldERhdGEoMHg0MTQgICAgICwgMHgzMCAgICAgICwgMHgzMCAgICAgICwgMHgwKTsKKworICAgIC8vIEJVQ0tfVlBBX0VOX09DX1NETl9TRUxbNzo3XSA9IDB4MSA9PiA5LzE0LFN0ZXBoZW4gUEEgT0MgU2h1dGRvd24gYnkgRmlsZWQgVGVzdCBuZWVkIGRpc2FibGUKKwlQTUlDX0RSVl9TZXREYXRhKDB4NDIyICAgICAsIDB4ODAgICAgICAsIDB4ODAgICAgICAsIDB4MCk7CisKKwkvLyBCVUNLX1ZQQV9PQ19XTkRbMzoyXSA9IDB4MCA9PiA2LzEgUGF1bCBPQyBTaHV0ZGl3biBkZWJvdW5jZSBUaW1lIDE2dXMgdG8gMTI4dXMKKwlQTUlDX0RSVl9TZXREYXRhKDB4NDM2ICAgICAsIDB4QyAgICAgICAsIDB4MCAgICAgICAsIDB4MCk7CisKKwkvLyBSR19WQ09SRV9DU0xbMTQ6MTFdID0gMHhGID0+IDYvMSxUaW0sT0MgTGV2ZWwgQWRqdXN0CisJUE1JQ19EUlZfU2V0RGF0YSgweDQ1MCAgICAgLCAweDc4MDAgICAgLCAweDc4MDAgICAgLCAweDApOworCisJLy8gUkdfVkNPUkVfQURSQ19GRU5bMzozXSA9IDB4MSA9PiA2LzEsVGltLEJhbmR3aWR0aCBFeHRlbmQKKwlQTUlDX0RSVl9TZXREYXRhKDB4NDUyICAgICAsIDB4OCAgICAgICAsIDB4OCAgICAgICAsIDB4MCk7CisJCisJLy8gUkdfVkNPUkVfTkxJTV9HQVRJTkdbNzo3XSA9IDB4MSA9PiA4LzE3LFRpbQorICAgIFBNSUNfRFJWX1NldERhdGEoMHg0NTYgICAgICwgMHg4MCAgICAgICwgMHg4MCAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZDT1JFX1ZESUZGX0VOTE9XSVFbMToxXSA9IDB4MSA9PiA2LzEsVGltLFVsdHJhIExvdyBJcQorCVBNSUNfRFJWX1NldERhdGEoMHg0NUMgICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZDT1JFX1JTVlsxNTowXSA9IDB4NDAwID0+IDYvMSxUaW0sRW5hYmxlIFByZS1PQworCVBNSUNfRFJWX1NldERhdGEoMHg0NUUgICAgICwgMHhGRkZGICAgICwgMHg0MDAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZHUFVfQ1NMWzE0OjExXSA9IDB4RiA9PiA2LzEsVGltLE9DIExldmVsIEFkanVzdAorCVBNSUNfRFJWX1NldERhdGEoMHg0NjQgICAgICwgMHg3ODAwICAgICwgMHg3ODAwICAgICwgMHgwKTsKKworCS8vIFJHX1ZHUFVfQURSQ19GRU5bMzozXSA9IDB4MSA9PiA2LzEsVGltLEJhbmR3aWR0aCBFeHRlbmQKKwlQTUlDX0RSVl9TZXREYXRhKDB4NDY2ICAgICAsIDB4OCAgICAgICAsIDB4OCAgICAgICAsIDB4MCk7CisJCisJLy8gUkdfVkdQVV9QRk1PQ1sxMTo5XSA9IDB4NSA9PiA4LzI0LFRpbSBQRk0gT0MgQWRqdXN0IGZvciBEVlMgUGVyZm9ybWFuY2UKKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4NDY2ICAgICAsIDB4RTAwICAgICAsIDB4QTAwICAgICAsIDB4MCk7CisgCisgICAgLy8gUkdfVkdQVV9OTElNX0dBVElOR1s3OjddID0gMHgxID0+IDgvMTcsVGltCisgICAgUE1JQ19EUlZfU2V0RGF0YSgweDQ2QSAgICAgLCAweDgwICAgICAgLCAweDgwICAgICAgLCAweDApOworCisJLy8gUkdfVkdQVV9WRElGRl9FTkxPV0lRWzE6MV0gPSAweDEgPT4gNi8xLFRpbSxVbHRyYSBMb3cgSXEKKwlQTUlDX0RSVl9TZXREYXRhKDB4NDcwICAgICAsIDB4MiAgICAgICAsIDB4MiAgICAgICAsIDB4MCk7CisKKwkvLyBSR19WR1BVX1JTVlsxNTowXSA9IDB4NDAwID0+IDYvMSxUaW0sRW5hYmxlIFByZS1PQworCVBNSUNfRFJWX1NldERhdGEoMHg0NzIgICAgICwgMHhGRkZGICAgICwgMHg0MDAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZTUkFNX01EX0NTTFsxNDoxMV0gPSAweEYgPT4gNi8xLCBKb2huc29uLCBPQyBwZXJmb3JtYW5jZSBmaW5lIHR1bmUKKwlQTUlDX0RSVl9TZXREYXRhKDB4NDc4ICAgICAsIDB4NzgwMCAgICAsIDB4NzgwMCAgICAsIDB4MCk7CisKKwkvLyBSR19WU1JBTV9NRF9QRk1PQ1s4OjZdID0gMHgyID0+IDYvMSwgSm9obnNvbiwgUEZNIHJpcHBsZSBwZXJmb3JtYW5jZSBmaW5lIHR1bmUKKwlQTUlDX0RSVl9TZXREYXRhKDB4NDdBICAgICAsIDB4MUMwICAgICAsIDB4ODAgICAgICAsIDB4MCk7CisKKwkvLyBSR19WU1JBTV9NRF9OTElNX0dBVElOR1sxOjFdID0gMHgxID0+IDYvMjQsSm9obnNvbixmb3IgdHJhbnNpZW50IG1vZGUgdHJhbnNpdGlvbiBWbyByaW5naW5nLCBwZXJmb3JtYW5jZSBjb25jZXJuLgorCVBNSUNfRFJWX1NldERhdGEoMHg0N0UgICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZTUkFNX01EX1BGTV9SSVBbNjo0XSA9IDB4MSA9PiA2LzEsIEpvaG5zb24sIHBlcmZvcm1hbmNlIGZpbmUgdHVuZS4oUEZNIHJpcHBsZSkKKwlQTUlDX0RSVl9TZXREYXRhKDB4NDgwICAgICAsIDB4NzAgICAgICAsIDB4MTAgICAgICAsIDB4MCk7CisKKwkvLyBSR19WU1JBTV9NRF9WRElGRl9FTkxPV0lRWzE6MV0gPSAweDEgPT4gNi8xLCBKb2huc29uLCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gKGlxLCBtb2RlIHRyYW5zaXRpb24gYW5kIHBmbSByaXBwbGUgSC9MCisJUE1JQ19EUlZfU2V0RGF0YSgweDQ4NCAgICAgLCAweDIgICAgICAgLCAweDIgICAgICAgLCAweDApOworCisJLy8gUkdfVk1PREVNX0NTTFsxNDoxMV0gPSAweEYgPT4gNi8xLCBKb2huc29uLCBPQyBwZXJmb3JtYW5jZSBmaW5lIHR1bmUKKwlQTUlDX0RSVl9TZXREYXRhKDB4NDhDICAgICAsIDB4NzgwMCAgICAsIDB4NzgwMCAgICAsIDB4MCk7CisKKwkvLyBSR19WTU9ERU1fUEZNT0NbODo2XSA9IDB4MiA9PiA2LzEsIEpvaG5zb24sIFBGTSByaXBwbGUgcGVyZm9ybWFuY2UgZmluZSB0dW5lCisJUE1JQ19EUlZfU2V0RGF0YSgweDQ4RSAgICAgLCAweDFDMCAgICAgLCAweDgwICAgICAgLCAweDApOworCisJLy8gUkdfVk1PREVNX05MSU1fR0FUSU5HWzE6MV0gPSAweDEgPT4gNi8yNCxKb2huc29uLGZvciB0cmFuc2llbnQgbW9kZSB0cmFuc2l0aW9uIFZvIHJpbmdpbmcsIHBlcmZvcm1hbmNlIGNvbmNlcm4uCisJUE1JQ19EUlZfU2V0RGF0YSgweDQ5MiAgICAgLCAweDIgICAgICAgLCAweDIgICAgICAgLCAweDApOworCisJLy8gUkdfVk1PREVNX1BGTV9SSVBbNjo0XSA9IDB4MSA9PiA2LzEsIEpvaG5zb24sIHBlcmZvcm1hbmNlIGZpbmUgdHVuZS4oUEZNIHJpcHBsZSkKKwlQTUlDX0RSVl9TZXREYXRhKDB4NDk0ICAgICAsIDB4NzAgICAgICAsIDB4MTAgICAgICAsIDB4MCk7CisKKwkvLyBSR19WTU9ERU1fVkRJRkZfRU5MT1dJUVsxOjFdID0gMHgxID0+IDYvMSwgSm9obnNvbiwgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIChpcSwgbW9kZSB0cmFuc2l0aW9uIGFuZCBwZm0gcmlwcGxlIEgvTAorCVBNSUNfRFJWX1NldERhdGEoMHg0OTggICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZNRDFfQ1NMWzE0OjExXSA9IDB4RiA9PiA2LzEsIEpvaG5zb24sIE9DIHBlcmZvcm1hbmNlIGZpbmUgdHVuZQorCVBNSUNfRFJWX1NldERhdGEoMHg0QTAgICAgICwgMHg3ODAwICAgICwgMHg3ODAwICAgICwgMHgwKTsKKworCS8vIFJHX1ZNRDFfUEZNT0NbODo2XSA9IDB4MiA9PiA2LzEsIEpvaG5zb24sIFBGTSByaXBwbGUgcGVyZm9ybWFuY2UgZmluZSB0dW5lCisJUE1JQ19EUlZfU2V0RGF0YSgweDRBMiAgICAgLCAweDFDMCAgICAgLCAweDgwICAgICAgLCAweDApOworCisJLy8gUkdfVk1EMV9OTElNX0dBVElOR1sxOjFdID0gMHgxID0+IDYvMjQsSm9obnNvbixmb3IgdHJhbnNpZW50IG1vZGUgdHJhbnNpdGlvbiBWbyByaW5naW5nLCBwZXJmb3JtYW5jZSBjb25jZXJuLgorCVBNSUNfRFJWX1NldERhdGEoMHg0QTYgICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZNRDFfUEZNX1JJUFs2OjRdID0gMHgxID0+IDYvMSwgSm9obnNvbiwgcGVyZm9ybWFuY2UgZmluZSB0dW5lLihQRk0gcmlwcGxlKQorCVBNSUNfRFJWX1NldERhdGEoMHg0QTggICAgICwgMHg3MCAgICAgICwgMHgxMCAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZNRDFfVkRJRkZfRU5MT1dJUVsxOjFdID0gMHgxID0+IDYvMSwgSm9obnNvbiwgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIChpcSwgbW9kZSB0cmFuc2l0aW9uIGFuZCBwZm0gcmlwcGxlIEgvTAorCVBNSUNfRFJWX1NldERhdGEoMHg0QUMgICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKwkKKwkvLyBSR19WUzFfUEZNT0NbODo2XSA9IDB4NiA9PiA3LzE1LExhbiBpbXByb3ZlIFpYT1MgRGV0ZWN0CisgICAgUE1JQ19EUlZfU2V0RGF0YSgweDRCNiAgICAgLCAweDFDMCAgICAgLCAweDE4MCAgICAgLCAweDApOworCisJLy8gUkdfVlMxX1JTVlsxNTowXSA9IDB4MTAgPT4gNi8yLCBIdW5nIE11IENob3UsIE9DIExldmVsIEFkanVzdAorCVBNSUNfRFJWX1NldERhdGEoMHg0QzIgICAgICwgMHhGRkZGICAgICwgMHgxMCAgICAgICwgMHgwKTsKKwkKKwkvLyBSR19WUzJfQ1NMWzE0OjExXSA9IDB4RiA9PiA3LzE1LExhbiBpbXByb3ZlIFpYT1MgRGV0ZWN0CisgICAgUE1JQ19EUlZfU2V0RGF0YSgweDRDOCAgICAgLCAweDc4MDAgICAgLCAweDc4MDAgICAgLCAweDApOworIAorICAgIC8vIFJHX1ZTMl9QRk1PQ1s4OjZdID0gMHg1ID0+IDcvMTUsTGFuIGltcHJvdmUgWlhPUyBEZXRlY3QKKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4NENBICAgICAsIDB4MUMwICAgICAsIDB4MTQwICAgICAsIDB4MCk7CisKKwkvLyBSR19WUzJfTkxJTV9HQVRJTkdbMToxXSA9IDB4MSA9PiA2LzEgTGFuIE5MSU1fR2F0aW5nIEVuYWJsZQorCVBNSUNfRFJWX1NldERhdGEoMHg0Q0UgICAgICwgMHgyICAgICAgICwgMHgyICAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZTMl9QRk1fUklQWzY6NF0gPSAweDEgPT4gNi8xIExhbiBQV00vUEZNIE91dHB1dCBhY2N1cmFjeSBhZGp1c3QKKwlQTUlDX0RSVl9TZXREYXRhKDB4NEQwICAgICAsIDB4NzAgICAgICAsIDB4MTAgICAgICAsIDB4MCk7CisKKwkvLyBSR19WUEFfQ0NbMTowXSA9IDB4MyA9PiA2LzI0IFBhdWwgVlBBIGNvbXBlbnNhdGlvbiBDIGFkanVzdAorCVBNSUNfRFJWX1NldERhdGEoMHg0REMgICAgICwgMHgzICAgICAgICwgMHgzICAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZQQV9DU01JUls1OjRdID0gMHgyID0+IDgvMjcsUGF1bCByZWR1Y2UgMjAlIEN1cnJlbnQgc2Vuc2luZyByYXRpbworICAgIFBNSUNfRFJWX1NldERhdGEoMHg0REMgICAgICwgMHgzMCAgICAgICwgMHgyMCAgICAgICwgMHgwKTsKKyAKKyAgICAvLyBSR19WUEFfQVpDX0VOWzEwOjEwXSA9IDB4MCA9PiA2LzMsUGF1bAorICAgIFBNSUNfRFJWX1NldERhdGEoMHg0REMgICAgICwgMHg0MDAgICAgICwgMHgwICAgICAgICwgMHgwKTsKKyAKKyAgICAvLyBSR19WUEFfUlpTRUxbMTU6MTRdID0gMHgxID0+IDgvMjcsUGF1bCBDb21wZW5zYXRpb24gcmVzaXN0YW5jZSAzMTBrPjIxMEsKKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4NERDICAgICAsIDB4QzAwMCAgICAsIDB4NDAwMCAgICAsIDB4MCk7CisKKwkvLyBSR19WUEFfTUlOX1BLWzE1OjE0XSA9IDB4MCA9PiA2LzEgUGF1bCBNSU4gUGVhayBDdXJyZW50IDI1MG1BIHRvIDEwMG1BCisJUE1JQ19EUlZfU2V0RGF0YSgweDRFMCAgICAgLCAweEMwMDAgICAgLCAweDAgICAgICAgLCAweDApOworCisJLy8gUkdfVlBBX1JTVjJbMTU6OF0gPSAweDg4ID0+IDgvMTAsUGF1bCwgQXV0byBDaGFuZ2UgU2xvcGUgY29tcGVuc2F0aW9uCisgICAgUE1JQ19EUlZfU2V0RGF0YSgweDRFMiAgICAgLCAweEZGMDAgICAgLCAweDg4MDAgICAgLCAweDApOworCisJLy8gQlVDS19WQ09SRV9WT1NFTF9DVFJMWzE6MV0gPSAweDEgPT4gNi8xLFRpbSxTbGVlcCBtb2RlIGJ5IEhXIENvbnRyb2wKKwlQTUlDX0RSVl9TZXREYXRhKDB4NjAwICAgICAsIDB4MiAgICAgICAsIDB4MiAgICAgICAsIDB4MCk7CisKKwkvLyBCVUNLX1ZDT1JFX1NGQ0hHX0ZSQVRFWzY6MF0gPSAweDExID0+IDYvMSxUaW0sRFZTIEZhbGxpbmcgU2xldyBSYXRlCisJUE1JQ19EUlZfU2V0RGF0YSgweDYwNiAgICAgLCAweDdGICAgICAgLCAweDExICAgICAgLCAweDApOworCisJLy8gQlVDS19WQ09SRV9TRkNIR19SUkFURVsxNDo4XSA9IDB4NCA9PiA2LzEsVGltLERWUyBSaXNpbmcgU2xldyBSYXRlCisJUE1JQ19EUlZfU2V0RGF0YSgweDYwNiAgICAgLCAweDdGMDAgICAgLCAweDQwMCAgICAgLCAweDApOworCisJLy8gQlVDS19WQ09SRV9WT1NFTF9TTEVFUFs2OjBdID0gMHgxMCA9PiA2LzEsVGltIFNsZWVwIG1vZGUgdm9sdGFnZSBmb3IgSkFERSgwLjdWKQorCVBNSUNfRFJWX1NldERhdGEoMHg2MEMgICAgICwgMHg3RiAgICAgICwgMHgxMCAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVkNPUkVfVFJBTlNfVERbMTowXSA9IDB4MyA9PiA2LzEsVGltCisJUE1JQ19EUlZfU2V0RGF0YSgweDYxMiAgICAgLCAweDMgICAgICAgLCAweDMgICAgICAgLCAweDApOworCisJLy8gQlVDS19WQ09SRV9UUkFOU19DVFJMWzU6NF0gPSAweDEgPT4gOC8xNyxUaW0KKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4NjEyICAgICAsIDB4MzAgICAgICAsIDB4MTAgICAgICAsIDB4MCk7CisgCisgICAgLy8gQlVDS19WQ09SRV9WU0xFRVBfRU5bODo4XSA9IDB4MSA9PiA2LzEsVGltLFNsZWVwIG1vZGUgYnkgSFcgQ29udHJvbAorICAgIFBNSUNfRFJWX1NldERhdGEoMHg2MTIgICAgICwgMHgxMDAgICAgICwgMHgxMDAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVkdQVV9TRkNIR19GUkFURVs2OjBdID0gMHgxMSA9PiA2LzEsVGltLERWUyBGYWxsaW5nIFNsZXcgUmF0ZQorCVBNSUNfRFJWX1NldERhdGEoMHg2MUEgICAgICwgMHg3RiAgICAgICwgMHgxMSAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVkdQVV9TRkNIR19SUkFURVsxNDo4XSA9IDB4NCA9PiA2LzEsVGltLERWUyBSaXNpbmcgU2xldyBSYXRlCisJUE1JQ19EUlZfU2V0RGF0YSgweDYxQSAgICAgLCAweDdGMDAgICAgLCAweDQwMCAgICAgLCAweDApOworCisJLy8gQlVDS19WR1BVX1ZPU0VMX1NMRUVQWzY6MF0gPSAweDEwID0+IDYvMSxUaW0gU2xlZXAgbW9kZSB2b2x0YWdlIGZvciBKQURFKDAuN1YpCisJUE1JQ19EUlZfU2V0RGF0YSgweDYyMCAgICAgLCAweDdGICAgICAgLCAweDEwICAgICAgLCAweDApOworCisJLy8gQlVDS19WR1BVX1RSQU5TX1REWzE6MF0gPSAweDMgPT4gNi8xLFRpbQorCVBNSUNfRFJWX1NldERhdGEoMHg2MjYgICAgICwgMHgzICAgICAgICwgMHgzICAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVkdQVV9UUkFOU19DVFJMWzU6NF0gPSAweDEgPT4gOC8xNyxUaW0KKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4NjI2ICAgICAsIDB4MzAgICAgICAsIDB4MTAgICAgICAsIDB4MCk7CisgCisJLy8gQlVDS19WTU9ERU1fU0ZDSEdfRlJBVEVbNjowXSA9IDB4MTEgPT4gNi8xLCBKb2huc29uLHNvZnRjaGFuZ2UgZm9yIERWUy9EVkZTIHNsZXcgcmF0ZSBmYWxsaW5nIDIuMHVzL3N0ZXAKKwlQTUlDX0RSVl9TZXREYXRhKDB4NjJFICAgICAsIDB4N0YgICAgICAsIDB4MTEgICAgICAsIDB4MCk7CisKKwkvLyBCVUNLX1ZNT0RFTV9TRkNIR19SUkFURVsxNDo4XSA9IDB4NCA9PiA2LzEsIEpvaG5zb24sc29mdGNoYW5nZSBmb3IgRFZTL0RWRlMgc2xldyByYXRlIHJpc2luZyAwLjV1cy9zdGVwCisJUE1JQ19EUlZfU2V0RGF0YSgweDYyRSAgICAgLCAweDdGMDAgICAgLCAweDQwMCAgICAgLCAweDApOworCisJLy8gQlVDS19WTU9ERU1fVk9TRUxfU0xFRVBbNjowXSA9IDB4MTAgPT4gNi8xLCBKb2huc29uIFNSQ0xLRU4gc2xlZXAgViBpcyAwLjdWCisJUE1JQ19EUlZfU2V0RGF0YSgweDYzNCAgICAgLCAweDdGICAgICAgLCAweDEwICAgICAgLCAweDApOworCisJLy8gQlVDS19WTU9ERU1fVFJBTlNfVERbMTowXSA9IDB4MyA9PiA2LzEsIEpvaG5zb24sIGZhbGxpbmcgZm9yIERWRlMvRFZTIGRpc2NoYXJnZSBleHRlbnNpb24gdGltZSBjb250cm9sCisJUE1JQ19EUlZfU2V0RGF0YSgweDYzQSAgICAgLCAweDMgICAgICAgLCAweDMgICAgICAgLCAweDApOworCisJLy8gQlVDS19WTU9ERU1fVFJBTlNfQ1RSTFs1OjRdID0gMHgxID0+IDYvMSwgSm9obnNvbiwgZmFsbGluZyBmb3IgRFZGUy9EVlMgZGlzY2hhcmdlIHNsZXcgcmF0ZSBjb250cm9sCisJUE1JQ19EUlZfU2V0RGF0YSgweDYzQSAgICAgLCAweDMwICAgICAgLCAweDEwICAgICAgLCAweDApOworCisJLy8gQlVDS19WTU9ERU1fVlNMRUVQX0VOWzg6OF0gPSAweDEgPT4gNi8xLCBKb2huc29uLCByMnIgcG93ZXIgZG93biB3aXRoIHNyY2xrZW4gc2xlZXAgaHcgbW9kZQorCVBNSUNfRFJWX1NldERhdGEoMHg2M0EgICAgICwgMHgxMDAgICAgICwgMHgxMDAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVk1EMV9TRkNIR19GUkFURVs2OjBdID0gMHgxMSA9PiA2LzEsIEpvaG5zb24sc29mdGNoYW5nZSBmb3IgRFZTL0RWRlMgc2xldyByYXRlIGZhbGxpbmcgMi4wdXMvc3RlcAorCVBNSUNfRFJWX1NldERhdGEoMHg2NDIgICAgICwgMHg3RiAgICAgICwgMHgxMSAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVk1EMV9TRkNIR19SUkFURVsxNDo4XSA9IDB4NCA9PiA2LzEsIEpvaG5zb24sc29mdGNoYW5nZSBmb3IgRFZTL0RWRlMgc2xldyByYXRlIHJpc2luZyAwLjV1cy9zdGVwCisJUE1JQ19EUlZfU2V0RGF0YSgweDY0MiAgICAgLCAweDdGMDAgICAgLCAweDQwMCAgICAgLCAweDApOworCisJLy8gQlVDS19WTUQxX1ZPU0VMX09OWzY6MF0gPSAweDMwID0+IDYvMSwgSm9obnNvbiBTUkNMS0VOIG5vcm1hbCB2IGlzIDAuOVYKKwlQTUlDX0RSVl9TZXREYXRhKDB4NjQ2ICAgICAsIDB4N0YgICAgICAsIDB4MzAgICAgICAsIDB4MCk7CisKKwkvLyBCVUNLX1ZNRDFfVk9TRUxfU0xFRVBbNjowXSA9IDB4MTAgPT4gNi8xLCBKb2huc29uIFNSQ0xLRU4gc2xlZXAgViBpcyAwLjdWCisJUE1JQ19EUlZfU2V0RGF0YSgweDY0OCAgICAgLCAweDdGICAgICAgLCAweDEwICAgICAgLCAweDApOworCisJLy8gQlVDS19WTUQxX1RSQU5TX1REWzE6MF0gPSAweDMgPT4gNi8xLCBKb2huc29uLCBmYWxsaW5nIGZvciBEVkZTL0RWUyBkaXNjaGFyZ2UgZXh0ZW5zaW9uIHRpbWUgY29udHJvbAorCVBNSUNfRFJWX1NldERhdGEoMHg2NEUgICAgICwgMHgzICAgICAgICwgMHgzICAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVk1EMV9UUkFOU19DVFJMWzU6NF0gPSAweDEgPT4gNi8xLCBKb2huc29uLCBmYWxsaW5nIGZvciBEVkZTL0RWUyBkaXNjaGFyZ2Ugc2xldyByYXRlIGNvbnRyb2wKKwlQTUlDX0RSVl9TZXREYXRhKDB4NjRFICAgICAsIDB4MzAgICAgICAsIDB4MTAgICAgICAsIDB4MCk7CisKKwkvLyBCVUNLX1ZNRDFfVlNMRUVQX0VOWzg6OF0gPSAweDEgPT4gNi8xLCBKb2huc29uLCByMnIgcG93ZXIgZG93biB3aXRoIHNyY2xrZW4gc2xlZXAgaHcgbW9kZSwgYWZ0ZXIgdm8gc2VsCisJUE1JQ19EUlZfU2V0RGF0YSgweDY0RSAgICAgLCAweDEwMCAgICAgLCAweDEwMCAgICAgLCAweDApOworCisJLy8gQlVDS19WU1JBTV9NRF9TRkNIR19GUkFURVs2OjBdID0gMHgxMSA9PiA2LzEsIEpvaG5zb24sc29mdGNoYW5nZSBmb3IgRFZTL0RWRlMgc2xldyByYXRlIGZhbGxpbmcgMi4wdXMvc3RlcAorCVBNSUNfRFJWX1NldERhdGEoMHg2NTYgICAgICwgMHg3RiAgICAgICwgMHgxMSAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVlNSQU1fTURfU0ZDSEdfUlJBVEVbMTQ6OF0gPSAweDQgPT4gNi8xLCBKb2huc29uLHNvZnRjaGFuZ2UgZm9yIERWUy9EVkZTIHNsZXcgcmF0ZSByaXNpbmcgMC41dXMvc3RlcAorCVBNSUNfRFJWX1NldERhdGEoMHg2NTYgICAgICwgMHg3RjAwICAgICwgMHg0MDAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVlNSQU1fTURfVk9TRUxfU0xFRVBbNjowXSA9IDB4MTAgPT4gNi8xLCBKb2huc29uIFNSQ0xLRU4gc2xlZXAgViBpcyAwLjdWCisJUE1JQ19EUlZfU2V0RGF0YSgweDY1QyAgICAgLCAweDdGICAgICAgLCAweDEwICAgICAgLCAweDApOworCisJLy8gQlVDS19WU1JBTV9NRF9UUkFOU19URFsxOjBdID0gMHgzID0+IDYvMSwgSm9obnNvbiwgZmFsbGluZyBmb3IgRFZGUy9EVlMgZGlzY2hhcmdlIGV4dGVuc2lvbiB0aW1lIGNvbnRyb2wKKwlQTUlDX0RSVl9TZXREYXRhKDB4NjYyICAgICAsIDB4MyAgICAgICAsIDB4MyAgICAgICAsIDB4MCk7CisKKwkvLyBCVUNLX1ZTUkFNX01EX1RSQU5TX0NUUkxbNTo0XSA9IDB4MSA9PiA2LzEsIEpvaG5zb24sIGZhbGxpbmcgZm9yIERWRlMvRFZTIGRpc2NoYXJnZSBzbGV3IHJhdGUgY29udHJvbAorCVBNSUNfRFJWX1NldERhdGEoMHg2NjIgICAgICwgMHgzMCAgICAgICwgMHgxMCAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVlNSQU1fTURfVlNMRUVQX0VOWzg6OF0gPSAweDEgPT4gNi8xLCBKb2huc29uLCByMnIgcG93ZXIgZG93biB3aXRoIHNyY2xrZW4gc2xlZXAgaHcgbW9kZSwgYWZ0ZXIgdm8gc2VsCisJUE1JQ19EUlZfU2V0RGF0YSgweDY2MiAgICAgLCAweDEwMCAgICAgLCAweDEwMCAgICAgLCAweDApOworCisJLy8gQlVDS19WUzFfVlNMRUVQX0VOWzg6OF0gPSAweDEgPT4gNi8xLExhbixyMnIgcG93ZXIgZG93biB3aXRoIHNyY2xrZW4gc2xlZXAgaHcgbW9kZQorCVBNSUNfRFJWX1NldERhdGEoMHg2NzYgICAgICwgMHgxMDAgICAgICwgMHgxMDAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVlMyX1ZTTEVFUF9FTls4OjhdID0gMHgxID0+IDYvMSxMYW4scjJyIHBvd2VyIGRvd24gd2l0aCBzcmNsa2VuIHNsZWVwIGh3IG1vZGUKKwlQTUlDX0RSVl9TZXREYXRhKDB4NjhBICAgICAsIDB4MTAwICAgICAsIDB4MTAwICAgICAsIDB4MCk7CisKKwkvLyBCVUNLX1ZQQV9TRkNIR19GUkFURVs2OjBdID0gMHgwID0+IDYvMyxQYXVsCisJUE1JQ19EUlZfU2V0RGF0YSgweDY5MiAgICAgLCAweDdGICAgICAgLCAweDAgICAgICAgLCAweDApOworCisJLy8gQlVDS19WUEFfU0ZDSEdfUlJBVEVbMTQ6OF0gPSAweDEgPT4gNi8zLFBhdWwKKwlQTUlDX0RSVl9TZXREYXRhKDB4NjkyICAgICAsIDB4N0YwMCAgICAsIDB4MTAwICAgICAsIDB4MCk7CisKKwkvLyBCVUNLX1ZQQV9UUkFOU19URFsxOjBdID0gMHgwID0+IDYyNCxQYXVsCisJUE1JQ19EUlZfU2V0RGF0YSgweDY5RSAgICAgLCAweDMgICAgICAgLCAweDAgICAgICAgLCAweDApOworCisJLy8gQlVDS19WU1JBTV9QUk9DX1ZPU0VMX0NUUkxbMToxXSA9IDB4MSA9PiA2LzUsQ2hpYSBMaW4KKwlQTUlDX0RSVl9TZXREYXRhKDB4NkEwICAgICAsIDB4MiAgICAgICAsIDB4MiAgICAgICAsIDB4MCk7CisKKwkvLyBCVUNLX1ZTUkFNX1BST0NfU0ZDSEdfRlJBVEVbNjowXSA9IDB4MTEgPT4gNi81LENoaWEgTGluCisJUE1JQ19EUlZfU2V0RGF0YSgweDZBNiAgICAgLCAweDdGICAgICAgLCAweDExICAgICAgLCAweDApOworCisJLy8gQlVDS19WU1JBTV9QUk9DX1NGQ0hHX1JSQVRFWzE0OjhdID0gMHg0ID0+IDYvNSxDaGlhIExpbgorCVBNSUNfRFJWX1NldERhdGEoMHg2QTYgICAgICwgMHg3RjAwICAgICwgMHg0MDAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVlNSQU1fUFJPQ19WT1NFTF9TTEVFUFs2OjBdID0gMHgzNSA9PiA2LzUsQ2hpYSBMaW4oU2xlZXAgbW9kZSB2b2x0YWdlIDAuOTMxMjVWKQorCVBNSUNfRFJWX1NldERhdGEoMHg2QUMgICAgICwgMHg3RiAgICAgICwgMHgzNSAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVlNSQU1fUFJPQ19UUkFOU19URFsxOjBdID0gMHgzID0+IDYvNSxDaGlhIExpbgorCVBNSUNfRFJWX1NldERhdGEoMHg2QjIgICAgICwgMHgzICAgICAgICwgMHgzICAgICAgICwgMHgwKTsKKworCS8vIEJVQ0tfVlNSQU1fUFJPQ19UUkFOU19DVFJMWzU6NF0gPSAweDEgPT4gNi81LENoaWEgTGluCisJUE1JQ19EUlZfU2V0RGF0YSgweDZCMiAgICAgLCAweDMwICAgICAgLCAweDEwICAgICAgLCAweDApOworCisJIC8vIEJVQ0tfVlNSQU1fUFJPQ19WU0xFRVBfRU5bODo4XSA9IDB4MCA9PiA3LzE1LENoaWEgTGluCisgICAgUE1JQ19EUlZfU2V0RGF0YSgweDZCMiAgICAgLCAweDEwMCAgICAgLCAweDAgICAgICAgLCAweDApOworIAorICAgIC8vIFJHX1ZBMThfTU9ERV9DVFJMWzI6Ml0gPSAweDEgPT4gNy8yOCBDaGlhIExpbgorICAgIFBNSUNfRFJWX1NldERhdGEoMHhBMDAgICAgICwgMHg0ICAgICAgICwgMHg0ICAgICAgICwgMHgwKTsKKyAKKyAgICAvLyBSR19WQTE4X1NSQ0xLX01PREVfU0VMWzc6NV0gPSAweDAgPT4gNy8yOCBDaGlhIExpbgorICAgIFBNSUNfRFJWX1NldERhdGEoMHhBMDAgICAgICwgMHhFMCAgICAgICwgMHgwICAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZBMThfT0NGQl9FTls5OjldID0gMHgxID0+IDYvMSBGYW5keSBFbmFibGUgT0NGQgorCVBNSUNfRFJWX1NldERhdGEoMHhBMDIgICAgICwgMHgyMDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZUQ1hPMjRfT05fQ1RSTFszOjNdID0gMHgxID0+IDYvMixDVworCS8vUE1JQ19EUlZfU2V0RGF0YSgweEEwNCAgICAgLCAweDggICAgICAgLCAweDggICAgICAgLCAweDApOworCisJLy8gUkdfVlRDWE8yNF9TUkNMS19FTl9TRUxbMTM6MTFdID0gMHgwID0+IDYvMixDVyxSRiBQb3dlciBDb250cm9sIHJlcXVlc3QKKwkvL1BNSUNfRFJWX1NldERhdGEoMHhBMDQgICAgICwgMHgzODAwICAgICwgMHgwICAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZUQ1hPMjRfT0NGQl9FTls5OjldID0gMHgxID0+IDYvMSBGYW5keSBFbmFibGUgT0NGQgorCVBNSUNfRFJWX1NldERhdGEoMHhBMDYgICAgICwgMHgyMDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZUQ1hPMjhfT05fQ1RSTFszOjNdID0gMHgxID0+IDYvMixDVworCVBNSUNfRFJWX1NldERhdGEoMHhBMDggICAgICwgMHg4ICAgICAgICwgMHg4ICAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZUQ1hPMjhfU1JDTEtfRU5fU0VMWzEzOjExXSA9IDB4MSA9PiA2LzIsQ1csUkYgUG93ZXIgQ29udHJvbCByZXF1ZXN0CisJUE1JQ19EUlZfU2V0RGF0YSgweEEwOCAgICAgLCAweDM4MDAgICAgLCAweDgwMCAgICAgLCAweDApOworCisJLy8gUkdfVlRDWE8yOF9PQ0ZCX0VOWzk6OV0gPSAweDEgPT4gNi8xIEZhbmR5IEVuYWJsZSBPQ0ZCCisJUE1JQ19EUlZfU2V0RGF0YSgweEEwQSAgICAgLCAweDIwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworCisJLy8gUkdfVkNOMjhfT0NGQl9FTls5OjldID0gMHgxID0+IDYvMSBGYW5keSBFbmFibGUgT0NGQgorCVBNSUNfRFJWX1NldERhdGEoMHhBMEUgICAgICwgMHgyMDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCSAvLyBSR19WQ0FNQV9PQ0ZCX0VOWzk6OV0gPSAweDEgPT4gNi8xIEZhbmR5IEVuYWJsZSBPQ0ZCCisgICAgUE1JQ19EUlZfU2V0RGF0YSgweEExNCAgICAgLCAweDIwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworIAorICAgIC8vIFJHX1ZVU0IzM19NT0RFX0NUUkxbMjoyXSA9IDB4MSA9PiA3LzI4IENoaWEgTGluCisgICAgUE1JQ19EUlZfU2V0RGF0YSgweEExNiAgICAgLCAweDQgICAgICAgLCAweDQgICAgICAgLCAweDApOworIAorICAgIC8vIFJHX1ZVU0IzM19TUkNMS19NT0RFX1NFTFs3OjVdID0gMHgwID0+IDcvMjggQ2hpYSBMaW4KKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4QTE2ICAgICAsIDB4RTAgICAgICAsIDB4MCAgICAgICAsIDB4MCk7CisKKwkvLyBSR19WVVNCMzNfT0NGQl9FTls5OjldID0gMHgxID0+IDYvMSBGYW5keSBFbmFibGUgT0NGQgorCVBNSUNfRFJWX1NldERhdGEoMHhBMTggICAgICwgMHgyMDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZTSU0xX09DRkJfRU5bOTo5XSA9IDB4MSA9PiA2LzEgRmFuZHkgRW5hYmxlIE9DRkIKKwlQTUlDX0RSVl9TZXREYXRhKDB4QTFFICAgICAsIDB4MjAwICAgICAsIDB4MjAwICAgICAsIDB4MCk7CisKKwkvLyBSR19WU0lNMl9PQ0ZCX0VOWzk6OV0gPSAweDEgPT4gNi8xIEZhbmR5IEVuYWJsZSBPQ0ZCCisJUE1JQ19EUlZfU2V0RGF0YSgweEEyNCAgICAgLCAweDIwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworCisJLy8gUkdfVkVNQ19PQ0ZCX0VOWzk6OV0gPSAweDEgPT4gNi8xIEZhbmR5IEVuYWJsZSBPQ0ZCCisJUE1JQ19EUlZfU2V0RGF0YSgweEEyQSAgICAgLCAweDIwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworCisJLy8gUkdfVk1DSF9PQ0ZCX0VOWzk6OV0gPSAweDEgPT4gNi8xIEZhbmR5IEVuYWJsZSBPQ0ZCCisJUE1JQ19EUlZfU2V0RGF0YSgweEEzMCAgICAgLCAweDIwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworCQorCS8vIFJHX1ZJTzI4X01PREVfQ1RSTFsyOjJdID0gMHgxID0+IDcvMjggQ2hpYSBMaW4KKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4QTM0ICAgICAsIDB4NCAgICAgICAsIDB4NCAgICAgICAsIDB4MCk7CisgCisgICAgLy8gUkdfVklPMjhfU1JDTEtfTU9ERV9TRUxbNzo1XSA9IDB4MCA9PiA3LzI4IENoaWEgTGluCisgICAgUE1JQ19EUlZfU2V0RGF0YSgweEEzNCAgICAgLCAweEUwICAgICAgLCAweDAgICAgICAgLCAweDApOworCisJLy8gUkdfVklPMjhfT0NGQl9FTls5OjldID0gMHgxID0+IDYvMSBGYW5keSBFbmFibGUgT0NGQgorCVBNSUNfRFJWX1NldERhdGEoMHhBMzYgICAgICwgMHgyMDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZJQlJfT0NGQl9FTls5OjldID0gMHgxID0+IDYvMSBGYW5keSBFbmFibGUgT0NGQgorCVBNSUNfRFJWX1NldERhdGEoMHhBM0MgICAgICwgMHgyMDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZSRjE4X09OX0NUUkxbMzozXSA9IDB4MSA9PiA2LzIsQ1cKKwlQTUlDX0RSVl9TZXREYXRhKDB4QTQ2ICAgICAsIDB4OCAgICAgICAsIDB4OCAgICAgICAsIDB4MCk7CisKKwkvLyBSR19WUkYxOF9TUkNMS19FTl9TRUxbMTM6MTFdID0gMHgxID0+IDYvMixDVyxSRiBQb3dlciBDb250cm9sIHJlcXVlc3QKKwlQTUlDX0RSVl9TZXREYXRhKDB4QTQ2ICAgICAsIDB4MzgwMCAgICAsIDB4ODAwICAgICAsIDB4MCk7CisKKwkvLyBSR19WUkYxOF9PQ0ZCX0VOWzk6OV0gPSAweDEgPT4gNi8xIEZhbmR5IEVuYWJsZSBPQ0ZCCisJUE1JQ19EUlZfU2V0RGF0YSgweEE0OCAgICAgLCAweDIwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworCQorCS8vIFJHX1ZJTzE4X01PREVfQ1RSTFsyOjJdID0gMHgxID0+IDcvMjggQ2hpYSBMaW4KKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4QTRDICAgICAsIDB4NCAgICAgICAsIDB4NCAgICAgICAsIDB4MCk7CisgCisgICAgLy8gUkdfVklPMThfU1JDTEtfTU9ERV9TRUxbNzo1XSA9IDB4MCA9PiA3LzI4IENoaWEgTGluCisgICAgUE1JQ19EUlZfU2V0RGF0YSgweEE0QyAgICAgLCAweEUwICAgICAgLCAweDAgICAgICAgLCAweDApOworCisJLy8gUkdfVklPMThfT0NGQl9FTls5OjldID0gMHgxID0+IDYvMSBGYW5keSBFbmFibGUgT0NGQgorCVBNSUNfRFJWX1NldERhdGEoMHhBNEUgICAgICwgMHgyMDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZDTjE4X09DRkJfRU5bOTo5XSA9IDB4MSA9PiA2LzEgRmFuZHkgRW5hYmxlIE9DRkIKKwlQTUlDX0RSVl9TZXREYXRhKDB4QTU0ICAgICAsIDB4MjAwICAgICAsIDB4MjAwICAgICAsIDB4MCk7CisKKwkvLyBSR19WQ0FNSU9fT0NGQl9FTls5OjldID0gMHgxID0+IDYvMSBGYW5keSBFbmFibGUgT0NGQgorCVBNSUNfRFJWX1NldERhdGEoMHhBNUEgICAgICwgMHgyMDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZYTzIyX09DRkJfRU5bOTo5XSA9IDB4MSA9PiA2LzEgRmFuZHkgRW5hYmxlIE9DRkIKKwlQTUlDX0RSVl9TZXREYXRhKDB4QTY2ICAgICAsIDB4MjAwICAgICAsIDB4MjAwICAgICAsIDB4MCk7CisKKwkvLyBSR19WUkYxMl9PTl9DVFJMWzM6M10gPSAweDEgPT4gNi8yLENXCisJUE1JQ19EUlZfU2V0RGF0YSgweEE2OCAgICAgLCAweDggICAgICAgLCAweDggICAgICAgLCAweDApOworCisJLy8gUkdfVlJGMTJfU1JDTEtfRU5fU0VMWzEzOjExXSA9IDB4MSA9PiA2LzIsQ1csUkYgUG93ZXIgQ29udHJvbCByZXF1ZXN0CisJUE1JQ19EUlZfU2V0RGF0YSgweEE2OCAgICAgLCAweDM4MDAgICAgLCAweDgwMCAgICAgLCAweDApOworCisJLy8gUkdfVkExMF9NT0RFX0NUUkxbMjoyXSA9IDB4MSA9PiA3LzI4IENoaWEgTGluCisgICAgUE1JQ19EUlZfU2V0RGF0YSgweEE2RSAgICAgLCAweDQgICAgICAgLCAweDQgICAgICAgLCAweDApOworIAorICAgIC8vIFJHX1ZBMTBfU1JDTEtfTU9ERV9TRUxbNzo1XSA9IDB4MCA9PiA3LzI4IENoaWEgTGluCisgICAgUE1JQ19EUlZfU2V0RGF0YSgweEE2RSAgICAgLCAweEUwICAgICAgLCAweDAgICAgICAgLCAweDApOworCisJLy8gUkdfVkRSQU1fRU5bMToxXSA9IDB4MSA9PiA2LzUsQ2hpYSBMaW4gU2FtZSBhcyBGbHkgc3VzcGVuZCBtb2RlCisJUE1JQ19EUlZfU2V0RGF0YSgweEE3NCAgICAgLCAweDIgICAgICAgLCAweDIgICAgICAgLCAweDApOworCisJLy8gUkdfVkRSQU1fTU9ERV9DVFJMWzI6Ml0gPSAweDEgPT4gNi81LENoaWEgTGluIFNhbWUgYXMgRmx5IHN1c3BlbmQgbW9kZQorCVBNSUNfRFJWX1NldERhdGEoMHhBNzQgICAgICwgMHg0ICAgICAgICwgMHg0ICAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZEUkFNX09OX0NUUkxbMzozXSA9IDB4MCA9PiA2LzUsQ2hpYSBMaW4gU2FtZSBhcyBGbHkgc3VzcGVuZCBtb2RlCisJUE1JQ19EUlZfU2V0RGF0YSgweEE3NCAgICAgLCAweDggICAgICAgLCAweDAgICAgICAgLCAweDApOworCisJLy8gUkdfVkRSQU1fU1JDTEtfTU9ERV9TRUxbNzo1XSA9IDB4MCA9PiA2LzUsQ2hpYSBMaW4gU2FtZSBhcyBGbHkgc3VzcGVuZCBtb2RlCisJUE1JQ19EUlZfU2V0RGF0YSgweEE3NCAgICAgLCAweEUwICAgICAgLCAweDAgICAgICAgLCAweDApOworCisJLy8gUkdfVk1JUElfT0NGQl9FTls5OjldID0gMHgxID0+IDYvMSBGYW5keSBFbmFibGUgT0NGQgorCVBNSUNfRFJWX1NldERhdGEoMHhBN0MgICAgICwgMHgyMDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZHUDNfT0NGQl9FTls5OjldID0gMHgxID0+IDYvMSBGYW5keSBFbmFibGUgT0NGQgorCVBNSUNfRFJWX1NldERhdGEoMHhBODIgICAgICwgMHgyMDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZCSUYyOF9PTl9DVFJMWzM6M10gPSAweDAgPT4gNi8xLFNldmVuLAorCVBNSUNfRFJWX1NldERhdGEoMHhBODYgICAgICwgMHg4ICAgICAgICwgMHgwICAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZCSUYyOF9PQ0ZCX0VOWzk6OV0gPSAweDEgPT4gNi8xIEZhbmR5IEVuYWJsZSBPQ0ZCCisJUE1JQ19EUlZfU2V0RGF0YSgweEE4OCAgICAgLCAweDIwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworCisJLy8gUkdfVkVGVVNFX09DRkJfRU5bOTo5XSA9IDB4MSA9PiA2LzEgRmFuZHkgRW5hYmxlIE9DRkIKKwlQTUlDX0RSVl9TZXREYXRhKDB4QThFICAgICAsIDB4MjAwICAgICAsIDB4MjAwICAgICAsIDB4MCk7CisKKwkvLyBSR19WQ04zM19PQ0ZCX0VOWzk6OV0gPSAweDEgPT4gNi8xIEZhbmR5IEVuYWJsZSBPQ0ZCCisJUE1JQ19EUlZfU2V0RGF0YSgweEE5NCAgICAgLCAweDIwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworCQorCS8vIFJHX1ZMRE8yOF9NT0RFX0NUUkxbMjoyXSA9IDB4MSA9PiA3LzI4IENoaWEgTGluCisgICAgUE1JQ19EUlZfU2V0RGF0YSgweEE5QyAgICAgLCAweDQgICAgICAgLCAweDQgICAgICAgLCAweDApOworIAorICAgIC8vIFJHX1ZMRE8yOF9TUkNMS19NT0RFX1NFTFs3OjVdID0gMHgwID0+IDcvMjggQ2hpYSBMaW4KKyAgICBQTUlDX0RSVl9TZXREYXRhKDB4QTlDICAgICAsIDB4RTAgICAgICAsIDB4MCAgICAgICAsIDB4MCk7CisKKwkvLyBSR19WTERPMjhfT0NGQl9FTls5OjldID0gMHgxID0+IDYvMSBGYW5keSBFbmFibGUgT0NGQgorCVBNSUNfRFJWX1NldERhdGEoMHhBOUUgICAgICwgMHgyMDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZNQ19PQ0ZCX0VOWzk6OV0gPSAweDEgPT4gNi8xIEZhbmR5IEVuYWJsZSBPQ0ZCCisJUE1JQ19EUlZfU2V0RGF0YSgweEFBQyAgICAgLCAweDIwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworCisJLy8gUkdfVkExMF9WT1NFTFsxMDo4XSA9IDB4MiA9PiA2LzgsS0ggZm9yIEpBREUgVkExMD0xVgorCVBNSUNfRFJWX1NldERhdGEoMHhCMTAgICAgICwgMHg3MDAgICAgICwgMHgyMDAgICAgICwgMHgwKTsKKworCS8vIFJHX1ZEUkFNX1JTVls5OjJdID0gMHhGMCA9PiA2LzEgRmFuZHkgIGltcHJvdmUgRmFzdCBUcmFuc2llbnQKKwlQTUlDX0RSVl9TZXREYXRhKDB4QjI0ICAgICAsIDB4M0ZDICAgICAsIDB4M0MwICAgICAsIDB4MCk7CisKKwkvLyBGR19TTFBfRU5bODo4XSA9IDB4MSA9PiA2LzEsRmlsYnkKKwlQTUlDX0RSVl9TZXREYXRhKDB4Q0M0ICAgICAsIDB4MTAwICAgICAsIDB4MTAwICAgICAsIDB4MCk7CisKKwkvLyBGR19aQ1ZfREVUX0VOWzk6OV0gPSAweDEgPT4gNi8xLEZpbGJ5CisJUE1JQ19EUlZfU2V0RGF0YSgweENDNCAgICAgLCAweDIwMCAgICAgLCAweDIwMCAgICAgLCAweDApOworCisJLy8gRkdfU0xQX0NVUl9USFsxNTowXSA9IDB4MUYgPT4gNi8xLEZpbGJ5CisJUE1JQ19EUlZfU2V0RGF0YSgweENDOCAgICAgLCAweEZGRkYgICAgLCAweDFGICAgICAgLCAweDApOworCisJLy8gRkdfU0xQX1RJTUVbNzowXSA9IDB4MTQgPT4gNi8xLEZpbGJ5CisJUE1JQ19EUlZfU2V0RGF0YSgweENDQSAgICAgLCAweEZGICAgICAgLCAweDE0ICAgICAgLCAweDApOworCisJLy8gRkdfREVUX1RJTUVbMTU6OF0gPSAweEZGID0+IDYvMSxGaWxieQorCVBNSUNfRFJWX1NldERhdGEoMHhDQ0MgICAgICwgMHhGRjAwICAgICwgMHhGRjAwICAgICwgMHgwKTsKKworCS8vIEZHX1pDVl9DQVJfVEhfMzNfMTlbMTQ6MF0gPSAweDEgPT4gNi8xLEZpbGJ5CisJUE1JQ19EUlZfU2V0RGF0YSgweENFMiAgICAgLCAweDdGRkYgICAgLCAweDEgICAgICAgLCAweDApOworCisJLy8gRkdfWkNWX0NBUl9USF8xOF8wM1sxNTowXSA9IDB4QkNBQyA9PiA2LzEsRmlsYnkKKwlQTUlDX0RSVl9TZXREYXRhKDB4Q0U0ICAgICAsIDB4RkZGRiAgICAsIDB4QkNBQyAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfQ0tfQU9OX0dQU1sxMzoxM10gPSAweDAgPT4gQ2hlY2sgd2l0aCBQZXRlcgorCVBNSUNfRFJWX1NldERhdGEoMHhFQTIgICAgICwgMHgyMDAwICAgICwgMHgwICAgICAgICwgMHgwKTsKKworCS8vIEFVWEFEQ19DS19BT05fTURbMTQ6MTRdID0gMHgwID0+IENoZWNrIHdpdGggUGV0ZXIKKwlQTUlDX0RSVl9TZXREYXRhKDB4RUEyICAgICAsIDB4NDAwMCAgICAsIDB4MCAgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfQ0tfQU9OWzE1OjE1XSA9IDB4MCA9PiBDaGVjayB3aXRoIFBldGVyCisJUE1JQ19EUlZfU2V0RGF0YSgweEVBMiAgICAgLCAweDgwMDAgICAgLCAweDAgICAgICAgLCAweDApOworCisJLy8gQVVYQURDX0FWR19OVU1fU0VMWzExOjBdID0gMHg4MyA9PiA2LzEsRmlsYnksUmVzb2x1dGlvbiBBZGp1c3QKKwlQTUlDX0RSVl9TZXREYXRhKDB4RUFBICAgICAsIDB4RkZGICAgICAsIDB4ODMgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfQVZHX05VTV9TRUxfTEJBVFsxMzoxM10gPSAweDAgPT4gOC8zLEZpbGJ5LFJlc29sdXRpb24gQWRqdXN0CisgICAgUE1JQ19EUlZfU2V0RGF0YSgweEVBQSAgICAgLCAweDIwMDAgICAgLCAweDAgICAgICAgLCAweDApOworCisJLy8gQVVYQURDX0FWR19OVU1fU0VMX1dBS0VVUFsxNToxNV0gPSAweDEgPT4gNi8xLEZpbGJ5LFJlc29sdXRpb24gQWRqdXN0CisJUE1JQ19EUlZfU2V0RGF0YSgweEVBQSAgICAgLCAweDgwMDAgICAgLCAweDgwMDAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0gyX1NFTFs1OjRdID0gMHgxID0+IDYvMSxGaWxieQorCVBNSUNfRFJWX1NldERhdGEoMHhFQjIgICAgICwgMHgzMCAgICAgICwgMHgxMCAgICAgICwgMHgwKTsKKworCS8vIEFVWEFEQ19UUklNX0NIM19TRUxbNzo2XSA9IDB4MyA9PiA2LzEsRmlsYnkKKwlQTUlDX0RSVl9TZXREYXRhKDB4RUIyICAgICAsIDB4QzAgICAgICAsIDB4QzAgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDRfU0VMWzk6OF0gPSAweDEgPT4gNi8xLEZpbGJ5CisJUE1JQ19EUlZfU2V0RGF0YSgweEVCMiAgICAgLCAweDMwMCAgICAgLCAweDEwMCAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0g1X1NFTFsxMToxMF0gPSAweDEgPT4gNi8xLEZpbGJ5CisJUE1JQ19EUlZfU2V0RGF0YSgweEVCMiAgICAgLCAweEMwMCAgICAgLCAweDQwMCAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0g2X1NFTFsxMzoxMl0gPSAweDEgPT4gNi8xLEZpbGJ5CisJUE1JQ19EUlZfU2V0RGF0YSgweEVCMiAgICAgLCAweDMwMDAgICAgLCAweDEwMDAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0g3X1NFTFsxNToxNF0gPSAweDIgPT4gNi8xLEZpbGJ5CisJUE1JQ19EUlZfU2V0RGF0YSgweEVCMiAgICAgLCAweEMwMDAgICAgLCAweDgwMDAgICAgLCAweDApOworCisJLy8gQVVYQURDX1RSSU1fQ0g4X1NFTFsxOjBdID0gMHgxID0+IDYvMSxGaWxieQorCVBNSUNfRFJWX1NldERhdGEoMHhFQjQgICAgICwgMHgzICAgICAgICwgMHgxICAgICAgICwgMHgwKTsKKworCS8vIEFVWEFEQ19UUklNX0NIOV9TRUxbMzoyXSA9IDB4MSA9PiA2LzEsRmlsYnkKKwlQTUlDX0RSVl9TZXREYXRhKDB4RUI0ICAgICAsIDB4QyAgICAgICAsIDB4NCAgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfVFJJTV9DSDEwX1NFTFs1OjRdID0gMHgxID0+IDYvMSxGaWxieQorCVBNSUNfRFJWX1NldERhdGEoMHhFQjQgICAgICwgMHgzMCAgICAgICwgMHgxMCAgICAgICwgMHgwKTsKKworCS8vIEFVWEFEQ19UUklNX0NIMTFfU0VMWzc6Nl0gPSAweDMgPT4gNi8xLEZpbGJ5CisJUE1JQ19EUlZfU2V0RGF0YSgweEVCNCAgICAgLCAweEMwICAgICAgLCAweEMwICAgICAgLCAweDApOworCisJLy8gQVVYQURDX1NUQVJUX1NIQURFX0VOWzE0OjE0XSA9IDB4MSA9PiBUQkQoV2VpLUxpbikKKwlQTUlDX0RSVl9TZXREYXRhKDB4RUM2ICAgICAsIDB4NDAwMCAgICAsIDB4NDAwMCAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfTURCR19ERVRfUFJEWzk6MF0gPSAweDQwID0+IDYvMixEZW5uaXMKKwlQTUlDX0RSVl9TZXREYXRhKDB4RjE2ICAgICAsIDB4M0ZGICAgICAsIDB4NDAgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfTURCR19ERVRfRU5bMTU6MTVdID0gMHgxID0+IDYvMixEZW5uaXMKKwlQTUlDX0RSVl9TZXREYXRhKDB4RjE2ICAgICAsIDB4ODAwMCAgICAsIDB4ODAwMCAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfTURSVF9ERVRfUFJEWzk6MF0gPSAweDQwID0+IDYvMixEZW5uaXMKKwlQTUlDX0RSVl9TZXREYXRhKDB4RjFDICAgICAsIDB4M0ZGICAgICAsIDB4NDAgICAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfTURSVF9ERVRfRU5bMTU6MTVdID0gMHgxID0+IDYvMixEZW5uaXMKKwlQTUlDX0RSVl9TZXREYXRhKDB4RjFDICAgICAsIDB4ODAwMCAgICAsIDB4ODAwMCAgICAsIDB4MCk7CisKKwkvLyBBVVhBRENfTURSVF9ERVRfV0tVUF9FTlsyOjJdID0gMHgxID0+IDYvMixEZW5uaXMKKwlQTUlDX0RSVl9TZXREYXRhKDB4RjIwICAgICAsIDB4NCAgICAgICAsIDB4NCAgICAgICAsIDB4MCk7CisKKwkvLyBSR19WQ0RUX0hWX1ZUSFs3OjRdID0gMHhCID0+IFpheDogVkNEVF9IVl90aD03ViAoY3VzdG9taXplZCBzZXR0aW5nIGZvciBWQlVTIE9WUCkKKwlQTUlDX0RSVl9TZXREYXRhKDB4RjdBICAgICAsIDB4RjAgICAgICAsIDB4QjAgICAgICAsIDB4MCk7CisKKwkvLyBSR19WQkFUX09WX1ZUSFs0OjFdID0gMHg0ID0+IFpheDogNC40NVYgZm9yIDQuMzV2IGJhdHRlcnkgKGN1c3RvbWl6ZWQgc2V0dGluZyBiYXNlZCBvbiBDVl9WVEgsIHNoYWxsIHNldCBPVl9WVEg9Q1ZfVlRIKzEwMG1WKQorCisJUE1JQ19EUlZfU2V0RGF0YSgweEY4NCAgICAgLCAweDFFICAgICAgLCAweDggICAgICAgLCAweDApOworCisJLy8gUkdfQ0hSV0RUX1REWzM6MF0gPSAweDMgPT4gWmF4OldEVD0zMnMKKwlQTUlDX0RSVl9TZXREYXRhKDB4RjkyICAgICAsIDB4RiAgICAgICAsIDB4MyAgICAgICAsIDB4MCk7CisKKwkvLyBSR19CQzExX1JTVFsxOjFdID0gMHgxID0+IFpheDpEaXNhYmxlIEJDMS4xIHRpbWVyCisJUE1JQ19EUlZfU2V0RGF0YSgweEZBMCAgICAgLCAweDIgICAgICAgLCAweDIgICAgICAgLCAweDApOworCisJLy8gUkdfQ1NEQUNfU1RQX0RFQ1s2OjRdID0gMHgwID0+IFpheDpSZWR1Y2UgSUNIRyBjdXJyZW50IHJpcHBsZQorCVBNSUNfRFJWX1NldERhdGEoMHhGQTQgICAgICwgMHg3MCAgICAgICwgMHgwICAgICAgICwgMHgwKTsKKworCS8vIFJHX0NTREFDX01PREVbMjoyXSA9IDB4MSA9PiBaYXg6QWxpZ24gNjMyMworCVBNSUNfRFJWX1NldERhdGEoMHhGQUEgICAgICwgMHg0ICAgICAgICwgMHg0ICAgICAgICwgMHgwKTsKKworCS8vIFJHX0hXQ1ZfRU5bNjo2XSA9IDB4MSA9PiBaYXg6QWxpZ24gNjMyMworCVBNSUNfRFJWX1NldERhdGEoMHhGQUEgICAgICwgMHg0MCAgICAgICwgMHg0MCAgICAgICwgMHgwKTsKKworCS8vIFJHX1VMQ19ERVRfRU5bNzo3XSA9IDB4MSA9PiBaYXg6IG5lZWQgdG8gZW5hYmxlIGZvciBzdXBwb3J0aW5nIGJhZCBUQQorCVBNSUNfRFJWX1NldERhdGEoMHhGQUEgICAgICwgMHg4MCAgICAgICwgMHg4MCAgICAgICwgMHgwKTsKKworfQpkaWZmIC0tZ2l0IGEvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU1LmMgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWFjMDRjCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU1LmMKQEAgLTAsMCArMSwyNDA1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTMKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgIGRjbF9wbWljNjM1NV8zNy5jCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgICAgTU9MWSBTb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgICAgVGhpcyBmaWxlIGlzIGZvciBQTUlDIDYzNTUKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChGUEdBX0NUUCkKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAicmVnX2Jhc2UuaCIKKyNpbmNsdWRlICJkcnZfY29tbS5oIgorI2luY2x1ZGUgImluaXQuaCIKKyNpbmNsdWRlICJkY2wuaCIKKyNpbmNsdWRlICJkY2xfcG11X3N3LmgiCisjaW5jbHVkZSAicG1pY193cmFwLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJ1c190aW1lci5oIgorCisjaWYgZGVmaW5lZChQTUlDXzYzNTVfUkVHX0FQSSkKKworLy8gU3RhcnQgUE1JQ19VTklUX1RFU1QKKy8vI2RlZmluZSBQTUlDX1VOSVRfVEVTVAorLy8gQVJNIFNlY3Rpb24gUlcvUk8vWkkgVXNlIEludGVybmFsIFNSQU0KKyNkZWZpbmUgUE1JQ19JTlRFUk5BTF9TUkFNCisKKyNpZiAhZGVmaW5lZChfX0ZVRV9fKQorI2RlZmluZSBTQVZFQU5EU0VUSVJRTUFTSygpICAgICAgU2F2ZUFuZFNldElSUU1hc2soKQorI2RlZmluZSBSRVNUT1JFSVJRTUFTSyhtYXNrKSAgICAgUmVzdG9yZUlSUU1hc2sobWFzaykKKyNlbHNlIC8qZGVmaW5lZChfX0ZVRV9fKSovCisjZGVmaW5lIFNBVkVBTkRTRVRJUlFNQVNLKCkgICAgICAwCisjZGVmaW5lIFJFU1RPUkVJUlFNQVNLKG1hc2spICAgICB7fQorI2VuZGlmIC8qZGVmaW5lZChfX0ZVRV9fKSovCisKKyNkZWZpbmUgUE1JQ19NQVhfUkVHX05VTSAgICAgICAgICAgICAgICAweDNhMDAgLy8gMHgwMDAwfjB4M2EwMAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgRXhwb3J0ZWQgQVBJcyAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2V4dGVybiBEQ0xfVUlOVDE2IGRjbF9wbWljX2J5dGVfcmV0dXJuX25vbG9jayhEQ0xfVUlOVDE2IGFkZHIpOworZXh0ZXJuIERDTF9VSU5UMTYgZGNsX3BtaWNfYnl0ZV9yZXR1cm4oRENMX1VJTlQxNiBhZGRyKTsKK2V4dGVybiB2b2lkIGRjbF9wbWljX2J5dGVfd3JpdGVfbm9sb2NrKERDTF9VSU5UMTYgYWRkciwgRENMX1VJTlQxNiB2YWwpOworZXh0ZXJuIHZvaWQgZGNsX3BtaWNfYnl0ZV93cml0ZShEQ0xfVUlOVDE2IGFkZHIsIERDTF9VSU5UMTYgdmFsKTsKK2V4dGVybiBEQ0xfQk9PTCBkY2xfcG1pY19pbml0X2RvbmVfcXVlcnkodm9pZCk7Cit0eXBlZGVmIGVudW0KK3sKKyAgICBBVVhBRENfUkVBRF9JTklUID0gMCwKKyAgICBBVVhBRENfUkVBRF9SRVFVRVNUID0gMSwKKyAgICBBVVhBRENfUkVBRF9SRUFEWSA9IDIsCisgICAgQVVYQURDX1JFQURfQlVTWSA9IDMsCisgICAgQVVYQURDX1JFQURfREFUQSA9IDQKK31BVVhBRENfRlNNOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MzIgY29tbWFuZF9mbGFnOworICAgIGthbF91aW50MzIgcmVnX2JlZm9yZV93cml0ZTsKKyAgICBrYWxfdWludDMyIHdyaXRlX3ZhbHVlOworICAgIGthbF91aW50MzIgYWRkcmVzc19vZmZzZXQ7CisgICAga2FsX3VpbnQzMiByZWdfbWFzazsKKyAgICBrYWxfdWludDMyIHJlZ19zaGlmdDsKKyAgICBrYWxfdWludDMyIHJlZ19hZGRyOworICAgIGthbF91aW50MzIgcmVnX2RhdGE7Cit9UE1JQ19SRUdfTE9HOworCitBVVhBRENfRlNNIEFVWEFEQ19TdGF0dXMgPSBBVVhBRENfUkVBRF9JTklUOworUE1JQ19SRUdfTE9HIHBtaWNfcmVnX2xvZzsKKworI2lmIChkZWZpbmVkKF9fTVRLX1RBUkdFVF9fKSAmJiBkZWZpbmVkKFBNSUNfSU5URVJOQUxfU1JBTSkpCitfX2F0dHJpYnV0ZV9fICgoemVyb19pbml0KSkKKyNlbmRpZiAvKiBfX01US19UQVJHRVRfXyAqLworCitrYWxfdWludDggcG1pY19od192ZXJzaW9uOwora2FsX3VpbnQ4IHBtaWNfc3dfdmVyc2lvbjsKK2thbF91aW50MTYgcG1pY19yZWdbUE1JQ19NQVhfUkVHX05VTV07CitEQ0xfQk9PTCBwbWljX2luaXRfZG9uZSA9IERDTF9GQUxTRTsKKwora2FsX3NwaW5sb2NraWQgZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrOworZXh0ZXJuIGthbF9zcGlubG9ja2lkIGRjbF9wbWljX2NvbnRyb2xfc3BpbmxvY2s7CisKK2NvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSBwbWljX2ZsYWdzX3RhYmxlW10gPQoreworICAgIHtQTUlDX0hXQ0lELAkJUE1JQ19IV0NJRF9NQVNLLAkJUE1JQ19IV0NJRF9TSElGVCwJCX0sCisgICAge1BNSUNfU1dDSUQsCQlQTUlDX1NXQ0lEX01BU0ssCQlQTUlDX1NXQ0lEX1NISUZULAkJfSwKKyAgICB7UE1JQ19UT1BfQ09OLAkJUE1JQ19SR19TUkNMS0VOX0lOMF9FTl9NQVNLLAkJUE1JQ19SR19TUkNMS0VOX0lOMF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfVE9QX0NPTiwJCVBNSUNfUkdfU1JDTEtFTl9JTjFfRU5fTUFTSywJCVBNSUNfUkdfU1JDTEtFTl9JTjFfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX1RPUF9DT04sCQlQTUlDX1JHX1NSQ0xLRU5fSU4wX0hXX01PREVfTUFTSywJCVBNSUNfUkdfU1JDTEtFTl9JTjBfSFdfTU9ERV9TSElGVCwJCX0sCisgICAge1BNSUNfVE9QX0NPTiwJCVBNSUNfUkdfU1JDTEtFTl9JTjFfSFdfTU9ERV9NQVNLLAkJUE1JQ19SR19TUkNMS0VOX0lOMV9IV19NT0RFX1NISUZULAkJfSwKKyAgICB7UE1JQ19CVUNLX1ZNT0RFTV9DT04wLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfQlVDS19WTU9ERU1fQ09OMCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fTFBfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fTFBfU0hJRlQsCQl9LAorICAgIHtQTUlDX0JVQ0tfVk1PREVNX0NPTjEsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7UE1JQ19CVUNLX1ZNT0RFTV9DT04yLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUF9TSElGVCwJCX0sCisgICAge1BNSUNfQlVDS19WTU9ERU1fT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19CVUNLX1ZNT0RFTV9PUF9FTiwJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcwX09QX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfQlVDS19WTU9ERU1fT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMV9PUF9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0JVQ0tfVk1PREVNX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19CVUNLX1ZNT0RFTV9PUF9FTl9TRVQsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0VOX1NFVF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtQTUlDX0JVQ0tfVk1PREVNX09QX0VOX0NMUiwJCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge1BNSUNfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtQTUlDX0JVQ0tfVk1PREVNX09QX0NGRywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcxX09QX0NGR19NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7UE1JQ19CVUNLX1ZNT0RFTV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMl9PUF9DRkdfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge1BNSUNfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PTl9PUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PTl9PUF9TSElGVCwJCX0sCisgICAge1BNSUNfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9MUF9PUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9MUF9PUF9TSElGVCwJCX0sCisgICAge1BNSUNfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7UE1JQ19CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtQTUlDX0JVQ0tfVk1PREVNX0RCRzAsCQlQTUlDX0RBX1ZNT0RFTV9WT1NFTF9NQVNLLAkJUE1JQ19EQV9WTU9ERU1fVk9TRUxfU0hJRlQsCQl9LAorICAgIHtQTUlDX0JVQ0tfVk1PREVNX0RCRzAsCQlQTUlDX0RBX1ZNT0RFTV9WT1NFTF9HUkFZX01BU0ssCQlQTUlDX0RBX1ZNT0RFTV9WT1NFTF9HUkFZX1NISUZULAkJfSwKKyAgICB7UE1JQ19CVUNLX1ZNT0RFTV9EQkcxLAkJUE1JQ19EQV9WTU9ERU1fRU5fTUFTSywJCVBNSUNfREFfVk1PREVNX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19CVUNLX1ZNT0RFTV9EQkcxLAkJUE1JQ19EQV9WTU9ERU1fU1RCX01BU0ssCQlQTUlDX0RBX1ZNT0RFTV9TVEJfU0hJRlQsCQl9LAorICAgIHtQTUlDX0JVQ0tfVk1PREVNX0RCRzEsCQlQTUlDX0RBX1ZNT0RFTV9WU0xFRVBfU0VMX01BU0ssCQlQTUlDX0RBX1ZNT0RFTV9WU0xFRVBfU0VMX1NISUZULAkJfSwKKyAgICB7UE1JQ19CVUNLX1ZTMV9WT1RFUiwJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0JVQ0tfVlMxX1ZPVEVSX1NFVCwJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX0VOX1NFVF9TSElGVCwJCX0sCisgICAge1BNSUNfQlVDS19WUzFfVk9URVJfQ0xSLAkJUE1JQ19SR19CVUNLX1ZTMV9WT1RFUl9FTl9DTFJfTUFTSywJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7UE1JQ19CVUNLX1ZTMV9WT1RFUl9DRkcsCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7UE1JQ19CVUNLX1ZTMl9WT1RFUiwJCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0JVQ0tfVlMyX1ZPVEVSX1NFVCwJCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPVEVSX0VOX1NFVF9TSElGVCwJCX0sCisgICAge1BNSUNfQlVDS19WUzJfVk9URVJfQ0xSLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9DTFJfTUFTSywJCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7UE1JQ19CVUNLX1ZTMl9WT1RFUl9DRkcsCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPVEVSX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPVEVSX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7UE1JQ19CVUNLX1ZQQV9DT04wLAkJUE1JQ19SR19CVUNLX1ZQQV9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZQQV9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfQlVDS19WUEFfQ09OMSwJCVBNSUNfUkdfQlVDS19WUEFfVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WUEFfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtQTUlDX1NNUFNfQU5BX0NPTjQsCQlQTUlDX1JHX1ZNT0RFTV9TTEVFUF9WT0xUQUdFX01BU0ssCQlQTUlDX1JHX1ZNT0RFTV9TTEVFUF9WT0xUQUdFX1NISUZULAkJfSwKKyAgICB7UE1JQ19TTVBTX0FOQV9DT04xNCwJCVBNSUNfUkdfVlNSQU1fTURfU0xFRVBfVk9MVEFHRV9NQVNLLAkJUE1JQ19SR19WU1JBTV9NRF9TTEVFUF9WT0xUQUdFX1NISUZULAkJfSwKKyAgICB7UE1JQ19WUEFfQU5BX0NPTjAsCQlQTUlDX1JHX1ZQQV9NT0RFU0VUX01BU0ssCQlQTUlDX1JHX1ZQQV9NT0RFU0VUX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNJTTFfQ09OMCwJCVBNSUNfUkdfTERPX1ZTSU0xX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTSU0xX0NPTjAsCQlQTUlDX1JHX0xET19WU0lNMV9MUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfTFBfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMV9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0xX1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTSU0xX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcwX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMV9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMV9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNJTTFfT1BfRU4sCQlQTUlDX1JHX0xET19WU0lNMV9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTSU0xX09QX0VOX1NFVCwJCVBNSUNfUkdfTERPX1ZTSU0xX09QX0VOX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNJTTFfT1BfRU5fQ0xSLAkJUE1JQ19SR19MRE9fVlNJTTFfT1BfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMV9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMV9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcxX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTSU0xX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMl9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMV9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMV9PTl9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfT05fT1BfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMV9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMV9MUF9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfTFBfT1BfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMV9PUF9DRkdfU0VULAkJUE1JQ19SR19MRE9fVlNJTTFfT1BfQ0ZHX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTSU0xX09QX0NGR19DTFIsCQlQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNJTTFfQ09OMiwJCVBNSUNfUkdfTERPX1ZTSU0xX09DRkJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMV9DT04yLAkJUE1JQ19EQV9RSV9WU0lNMV9PQ0ZCX0VOX01BU0ssCQlQTUlDX0RBX1FJX1ZTSU0xX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RMRE9fQU5BX0NPTjIsCQlQTUlDX1JHX1ZTSU0xX1ZPU0VMX01BU0ssCQlQTUlDX1JHX1ZTSU0xX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNJTTJfQ09OMCwJCVBNSUNfUkdfTERPX1ZTSU0yX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTSU0yX0NPTjAsCQlQTUlDX1JHX0xET19WU0lNMl9MUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfTFBfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0yX1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTSU0yX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcwX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMV9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNJTTJfT1BfRU4sCQlQTUlDX1JHX0xET19WU0lNMl9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTSU0yX09QX0VOX1NFVCwJCVBNSUNfUkdfTERPX1ZTSU0yX09QX0VOX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNJTTJfT1BfRU5fQ0xSLAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMl9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNJTTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcxX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTSU0yX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMl9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMl9PTl9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfT05fT1BfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMl9MUF9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfTFBfT1BfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMl9PUF9DRkdfU0VULAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfQ0ZHX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTSU0yX09QX0NGR19DTFIsCQlQTUlDX1JHX0xET19WU0lNMl9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNJTTJfQ09OMiwJCVBNSUNfUkdfTERPX1ZTSU0yX09DRkJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU0lNMl9DT04yLAkJUE1JQ19EQV9RSV9WU0lNMl9PQ0ZCX0VOX01BU0ssCQlQTUlDX0RBX1FJX1ZTSU0yX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RMRE9fQU5BX0NPTjQsCQlQTUlDX1JHX1ZTSU0yX1ZPU0VMX01BU0ssCQlQTUlDX1JHX1ZTSU0yX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVk1JUElfQ09OMCwJCVBNSUNfUkdfTERPX1ZNSVBJX0VOX01BU0ssCQlQTUlDX1JHX0xET19WTUlQSV9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZNSVBJX0NPTjAsCQlQTUlDX1JHX0xET19WTUlQSV9MUF9NQVNLLAkJUE1JQ19SR19MRE9fVk1JUElfTFBfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WTUlQSV9PUF9FTiwJCVBNSUNfUkdfTERPX1ZNSVBJX1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WTUlQSV9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZNSVBJX09QX0VOLAkJUE1JQ19SR19MRE9fVk1JUElfSFcwX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WTUlQSV9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WTUlQSV9PUF9FTiwJCVBNSUNfUkdfTERPX1ZNSVBJX0hXMV9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVk1JUElfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVk1JUElfT1BfRU4sCQlQTUlDX1JHX0xET19WTUlQSV9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZNSVBJX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZNSVBJX09QX0VOX1NFVCwJCVBNSUNfUkdfTERPX1ZNSVBJX09QX0VOX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVk1JUElfT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVk1JUElfT1BfRU5fQ0xSLAkJUE1JQ19SR19MRE9fVk1JUElfT1BfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WTUlQSV9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WTUlQSV9PUF9DRkcsCQlQTUlDX1JHX0xET19WTUlQSV9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WTUlQSV9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVk1JUElfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVk1JUElfSFcxX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVk1JUElfSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZNSVBJX09QX0NGRywJCVBNSUNfUkdfTERPX1ZNSVBJX0hXMl9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZNSVBJX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WTUlQSV9PUF9DRkcsCQlQTUlDX1JHX0xET19WTUlQSV9PTl9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVk1JUElfT05fT1BfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WTUlQSV9PUF9DRkcsCQlQTUlDX1JHX0xET19WTUlQSV9MUF9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVk1JUElfTFBfT1BfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WTUlQSV9PUF9DRkdfU0VULAkJUE1JQ19SR19MRE9fVk1JUElfT1BfQ0ZHX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVk1JUElfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZNSVBJX09QX0NGR19DTFIsCQlQTUlDX1JHX0xET19WTUlQSV9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WTUlQSV9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVk1JUElfQ09OMSwJCVBNSUNfREFfUUlfVk1JUElfTU9ERV9NQVNLLAkJUE1JQ19EQV9RSV9WTUlQSV9NT0RFX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVk1JUElfQ09OMSwJCVBNSUNfREFfUUlfVk1JUElfRU5fTUFTSywJCVBNSUNfREFfUUlfVk1JUElfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WTUlQSV9DT04yLAkJUE1JQ19SR19MRE9fVk1JUElfT0NGQl9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVk1JUElfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZNSVBJX0NPTjIsCQlQTUlDX0RBX1FJX1ZNSVBJX09DRkJfRU5fTUFTSywJCVBNSUNfREFfUUlfVk1JUElfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZUQ1hPMjRfQ09OMCwJCVBNSUNfUkdfTERPX1ZUQ1hPMjRfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZUQ1hPMjRfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WVENYTzI0X0NPTjAsCQlQTUlDX1JHX0xET19WVENYTzI0X0xQX01BU0ssCQlQTUlDX1JHX0xET19WVENYTzI0X0xQX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlRDWE8yNF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZUQ1hPMjRfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZUQ1hPMjRfU1dfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WVENYTzI0X09QX0VOLAkJUE1JQ19SR19MRE9fVlRDWE8yNF9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZUQ1hPMjRfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlRDWE8yNF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZUQ1hPMjRfSFcxX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WVENYTzI0X0hXMV9PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZUQ1hPMjRfT1BfRU4sCQlQTUlDX1JHX0xET19WVENYTzI0X0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlRDWE8yNF9IVzJfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WVENYTzI0X09QX0VOX1NFVCwJCVBNSUNfUkdfTERPX1ZUQ1hPMjRfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0xET19WVENYTzI0X09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZUQ1hPMjRfT1BfRU5fQ0xSLAkJUE1JQ19SR19MRE9fVlRDWE8yNF9PUF9FTl9DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZUQ1hPMjRfT1BfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlRDWE8yNF9PUF9DRkcsCQlQTUlDX1JHX0xET19WVENYTzI0X0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZUQ1hPMjRfSFcwX09QX0NGR19TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZUQ1hPMjRfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlRDWE8yNF9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WVENYTzI0X0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WVENYTzI0X09QX0NGRywJCVBNSUNfUkdfTERPX1ZUQ1hPMjRfSFcyX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlRDWE8yNF9IVzJfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlRDWE8yNF9PUF9DRkcsCQlQTUlDX1JHX0xET19WVENYTzI0X09OX09QX01BU0ssCQlQTUlDX1JHX0xET19WVENYTzI0X09OX09QX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlRDWE8yNF9PUF9DRkcsCQlQTUlDX1JHX0xET19WVENYTzI0X0xQX09QX01BU0ssCQlQTUlDX1JHX0xET19WVENYTzI0X0xQX09QX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlRDWE8yNF9PUF9DRkdfU0VULAkJUE1JQ19SR19MRE9fVlRDWE8yNF9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX0xET19WVENYTzI0X09QX0NGR19TRVRfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WVENYTzI0X09QX0NGR19DTFIsCQlQTUlDX1JHX0xET19WVENYTzI0X09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZUQ1hPMjRfT1BfQ0ZHX0NMUl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZUQ1hPMjRfQ09OMSwJCVBNSUNfREFfUUlfVlRDWE8yNF9NT0RFX01BU0ssCQlQTUlDX0RBX1FJX1ZUQ1hPMjRfTU9ERV9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZUQ1hPMjRfQ09OMSwJCVBNSUNfREFfUUlfVlRDWE8yNF9FTl9NQVNLLAkJUE1JQ19EQV9RSV9WVENYTzI0X0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlRDWE8yNF9DT04yLAkJUE1JQ19SR19MRE9fVlRDWE8yNF9PQ0ZCX0VOX01BU0ssCQlQTUlDX1JHX0xET19WVENYTzI0X09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WVENYTzI0X0NPTjIsCQlQTUlDX0RBX1FJX1ZUQ1hPMjRfT0NGQl9FTl9NQVNLLAkJUE1JQ19EQV9RSV9WVENYTzI0X09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WRkUyOF9DT04wLAkJUE1JQ19SR19MRE9fVkZFMjhfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVkZFMjhfQ09OMCwJCVBNSUNfUkdfTERPX1ZGRTI4X0xQX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9MUF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZGRTI4X09QX0VOLAkJUE1JQ19SR19MRE9fVkZFMjhfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVkZFMjhfT1BfRU4sCQlQTUlDX1JHX0xET19WRkUyOF9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZGRTI4X09QX0VOLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcxX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WRkUyOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVkZFMjhfT1BfRU5fU0VULAkJUE1JQ19SR19MRE9fVkZFMjhfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WRkUyOF9PUF9FTl9DTFIsCQlQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WRkUyOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WRkUyOF9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVkZFMjhfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcyX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X09OX09QX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9PTl9PUF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X0xQX09QX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9MUF9PUF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZGRTI4X09QX0NGR19TRVQsCQlQTUlDX1JHX0xET19WRkUyOF9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVkZFMjhfT1BfQ0ZHX0NMUiwJCVBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WRkUyOF9DT04xLAkJUE1JQ19EQV9RSV9WRkUyOF9NT0RFX01BU0ssCQlQTUlDX0RBX1FJX1ZGRTI4X01PREVfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WRkUyOF9DT04xLAkJUE1JQ19EQV9RSV9WRkUyOF9FTl9NQVNLLAkJUE1JQ19EQV9RSV9WRkUyOF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZGRTI4X0NPTjIsCQlQTUlDX1JHX0xET19WRkUyOF9PQ0ZCX0VOX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVkZFMjhfQ09OMiwJCVBNSUNfREFfUUlfVkZFMjhfT0NGQl9FTl9NQVNLLAkJUE1JQ19EQV9RSV9WRkUyOF9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMThfMV9DT04wLAkJUE1JQ19SR19MRE9fVlJGMThfMV9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfMV9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjE4XzFfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjE4XzFfTFBfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzFfTFBfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxOF8xX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMThfMV9TV19PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfMV9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjE4XzFfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxOF8xX0hXMF9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfMV9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxOF8xX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMThfMV9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzFfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMThfMV9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjE4XzFfSFcyX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF8xX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjE4XzFfT1BfRU5fU0VULAkJUE1JQ19SR19MRE9fVlJGMThfMV9PUF9FTl9TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzFfT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMThfMV9PUF9FTl9DTFIsCQlQTUlDX1JHX0xET19WUkYxOF8xX09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfMV9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxOF8xX09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjE4XzFfSFcwX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfMV9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMThfMV9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF8xX0hXMV9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzFfSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjE4XzFfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMThfMV9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF8xX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxOF8xX09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjE4XzFfT05fT1BfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzFfT05fT1BfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxOF8xX09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjE4XzFfTFBfT1BfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzFfTFBfT1BfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxOF8xX09QX0NGR19TRVQsCQlQTUlDX1JHX0xET19WUkYxOF8xX09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzFfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjE4XzFfT1BfQ0ZHX0NMUiwJCVBNSUNfUkdfTERPX1ZSRjE4XzFfT1BfQ0ZHX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfMV9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMThfMV9DT04xLAkJUE1JQ19EQV9RSV9WUkYxOF8xX01PREVfTUFTSywJCVBNSUNfREFfUUlfVlJGMThfMV9NT0RFX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMThfMV9DT04xLAkJUE1JQ19EQV9RSV9WUkYxOF8xX0VOX01BU0ssCQlQTUlDX0RBX1FJX1ZSRjE4XzFfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxOF8xX0NPTjIsCQlQTUlDX1JHX0xET19WUkYxOF8xX09DRkJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzFfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjE4XzFfQ09OMiwJCVBNSUNfREFfUUlfVlJGMThfMV9PQ0ZCX0VOX01BU0ssCQlQTUlDX0RBX1FJX1ZSRjE4XzFfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjE4XzJfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjE4XzJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzJfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxOF8yX0NPTjAsCQlQTUlDX1JHX0xET19WUkYxOF8yX0xQX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF8yX0xQX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMThfMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjE4XzJfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzJfU1dfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxOF8yX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMThfMl9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzJfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMThfMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjE4XzJfSFcxX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF8yX0hXMV9PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjE4XzJfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxOF8yX0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfMl9IVzJfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxOF8yX09QX0VOX1NFVCwJCVBNSUNfUkdfTERPX1ZSRjE4XzJfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF8yX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjE4XzJfT1BfRU5fQ0xSLAkJUE1JQ19SR19MRE9fVlJGMThfMl9PUF9FTl9DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzJfT1BfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMThfMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF8yX0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzJfSFcwX09QX0NGR19TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjE4XzJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMThfMl9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF8yX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxOF8yX09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjE4XzJfSFcyX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfMl9IVzJfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMThfMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF8yX09OX09QX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF8yX09OX09QX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMThfMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF8yX0xQX09QX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF8yX0xQX09QX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMThfMl9PUF9DRkdfU0VULAkJUE1JQ19SR19MRE9fVlJGMThfMl9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF8yX09QX0NGR19TRVRfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxOF8yX09QX0NGR19DTFIsCQlQTUlDX1JHX0xET19WUkYxOF8yX09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4XzJfT1BfQ0ZHX0NMUl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjE4XzJfQ09OMSwJCVBNSUNfREFfUUlfVlJGMThfMl9NT0RFX01BU0ssCQlQTUlDX0RBX1FJX1ZSRjE4XzJfTU9ERV9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjE4XzJfQ09OMSwJCVBNSUNfREFfUUlfVlJGMThfMl9FTl9NQVNLLAkJUE1JQ19EQV9RSV9WUkYxOF8yX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMThfMl9DT04yLAkJUE1JQ19SR19MRE9fVlJGMThfMl9PQ0ZCX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF8yX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxOF8yX0NPTjIsCQlQTUlDX0RBX1FJX1ZSRjE4XzJfT0NGQl9FTl9NQVNLLAkJUE1JQ19EQV9RSV9WUkYxOF8yX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxMl9DT04wLAkJUE1JQ19SR19MRE9fVlJGMTJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMTJfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjEyX0xQX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9MUF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjEyX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMTJfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMTJfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxMl9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjEyX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcxX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjEyX0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMTJfT1BfRU5fU0VULAkJUE1JQ19SR19MRE9fVlJGMTJfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxMl9PUF9FTl9DTFIsCQlQTUlDX1JHX0xET19WUkYxMl9PUF9FTl9DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjEyX09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjEyX0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxMl9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcyX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjEyX09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjEyX09OX09QX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9PTl9PUF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjEyX09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjEyX0xQX09QX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9MUF9PUF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjEyX09QX0NGR19TRVQsCQlQTUlDX1JHX0xET19WUkYxMl9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMTJfT1BfQ0ZHX0NMUiwJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxMl9DT04xLAkJUE1JQ19EQV9RSV9WUkYxMl9NT0RFX01BU0ssCQlQTUlDX0RBX1FJX1ZSRjEyX01PREVfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WUkYxMl9DT04xLAkJUE1JQ19EQV9RSV9WUkYxMl9FTl9NQVNLLAkJUE1JQ19EQV9RSV9WUkYxMl9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZSRjEyX0NPTjIsCQlQTUlDX1JHX0xET19WUkYxMl9PQ0ZCX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlJGMTJfQ09OMiwJCVBNSUNfREFfUUlfVlJGMTJfT0NGQl9FTl9NQVNLLAkJUE1JQ19EQV9RSV9WUkYxMl9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNSQU1fTURfQ09OMCwJCVBNSUNfUkdfTERPX1ZTUkFNX01EX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU1JBTV9NRF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTUkFNX01EX0NPTjAsCQlQTUlDX1JHX0xET19WU1JBTV9NRF9MUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNSQU1fTURfTFBfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU1JBTV9NRF9DT04xLAkJUE1JQ19SR19MRE9fVlNSQU1fTURfVk9TRUxfTUFTSywJCVBNSUNfUkdfTERPX1ZTUkFNX01EX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNSQU1fTURfQ09OMiwJCVBNSUNfUkdfTERPX1ZTUkFNX01EX1ZPU0VMX1NMRUVQX01BU0ssCQlQTUlDX1JHX0xET19WU1JBTV9NRF9WT1NFTF9TTEVFUF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTUkFNX01EX09QX0VOLAkJUE1JQ19SR19MRE9fVlNSQU1fTURfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTUkFNX01EX1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNSQU1fTURfT1BfRU4sCQlQTUlDX1JHX0xET19WU1JBTV9NRF9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTUkFNX01EX0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTUkFNX01EX09QX0VOLAkJUE1JQ19SR19MRE9fVlNSQU1fTURfSFcxX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU1JBTV9NRF9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU1JBTV9NRF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTUkFNX01EX0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNSQU1fTURfSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNSQU1fTURfT1BfRU5fU0VULAkJUE1JQ19SR19MRE9fVlNSQU1fTURfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0xET19WU1JBTV9NRF9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU1JBTV9NRF9PUF9FTl9DTFIsCQlQTUlDX1JHX0xET19WU1JBTV9NRF9PUF9FTl9DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZTUkFNX01EX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTUkFNX01EX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTUkFNX01EX0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZTUkFNX01EX0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU1JBTV9NRF9PUF9DRkcsCQlQTUlDX1JHX0xET19WU1JBTV9NRF9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WU1JBTV9NRF9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNSQU1fTURfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNSQU1fTURfSFcyX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlNSQU1fTURfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTUkFNX01EX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTUkFNX01EX09OX09QX01BU0ssCQlQTUlDX1JHX0xET19WU1JBTV9NRF9PTl9PUF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTUkFNX01EX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTUkFNX01EX0xQX09QX01BU0ssCQlQTUlDX1JHX0xET19WU1JBTV9NRF9MUF9PUF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTUkFNX01EX09QX0NGR19TRVQsCQlQTUlDX1JHX0xET19WU1JBTV9NRF9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX0xET19WU1JBTV9NRF9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNSQU1fTURfT1BfQ0ZHX0NMUiwJCVBNSUNfUkdfTERPX1ZTUkFNX01EX09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZTUkFNX01EX09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU1JBTV9NRF9DT04zLAkJUE1JQ19EQV9RSV9WU1JBTV9NRF9NT0RFX01BU0ssCQlQTUlDX0RBX1FJX1ZTUkFNX01EX01PREVfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU1JBTV9NRF9EQkcwLAkJUE1JQ19EQV9RSV9WU1JBTV9NRF9WT1NFTF9HUkFZX01BU0ssCQlQTUlDX0RBX1FJX1ZTUkFNX01EX1ZPU0VMX0dSQVlfU0hJRlQsCQl9LAorICAgIHtQTUlDX0xET19WU1JBTV9NRF9EQkcwLAkJUE1JQ19EQV9RSV9WU1JBTV9NRF9WT1NFTF9NQVNLLAkJUE1JQ19EQV9RSV9WU1JBTV9NRF9WT1NFTF9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTUkFNX01EX0RCRzEsCQlQTUlDX0RBX1FJX1ZTUkFNX01EX0VOX01BU0ssCQlQTUlDX0RBX1FJX1ZTUkFNX01EX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19MRE9fVlNSQU1fTURfREJHMSwJCVBNSUNfREFfUUlfVlNSQU1fTURfU1RCX01BU0ssCQlQTUlDX0RBX1FJX1ZTUkFNX01EX1NUQl9TSElGVCwJCX0sCisgICAge1BNSUNfTERPX1ZTUkFNX01EX0RCRzEsCQlQTUlDX0RBX05JX1ZTUkFNX01EX1ZTTEVFUF9TRUxfTUFTSywJCVBNSUNfREFfTklfVlNSQU1fTURfVlNMRUVQX1NFTF9TSElGVCwJCX0sCisgICAge1BNSUNfQUxET19BTkFfQ09ONCwJCVBNSUNfUkdfVlhPMjJfVk9TRUxfTUFTSywJCVBNSUNfUkdfVlhPMjJfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGMV9NT0RFX01BU0ssCQlQTUlDX1hPX0VYVEJVRjFfTU9ERV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzAwLAkJUE1JQ19YT19FWFRCVUYxX0VOX01fTUFTSywJCVBNSUNfWE9fRVhUQlVGMV9FTl9NX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjJfTU9ERV9NQVNLLAkJUE1JQ19YT19FWFRCVUYyX01PREVfU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGMl9FTl9NX01BU0ssCQlQTUlDX1hPX0VYVEJVRjJfRU5fTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzAwLAkJUE1JQ19YT19FWFRCVUYzX01PREVfTUFTSywJCVBNSUNfWE9fRVhUQlVGM19NT0RFX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjNfRU5fTV9NQVNLLAkJUE1JQ19YT19FWFRCVUYzX0VOX01fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGNF9NT0RFX01BU0ssCQlQTUlDX1hPX0VYVEJVRjRfTU9ERV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzAwLAkJUE1JQ19YT19FWFRCVUY0X0VOX01fTUFTSywJCVBNSUNfWE9fRVhUQlVGNF9FTl9NX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDAsCQlQTUlDX1hPX0JCX0xQTV9FTl9NQVNLLAkJUE1JQ19YT19CQl9MUE1fRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwMCwJCVBNSUNfWE9fRU5CQl9NQU5fTUFTSywJCVBNSUNfWE9fRU5CQl9NQU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwMCwJCVBNSUNfWE9fRU5CQl9FTl9NX01BU0ssCQlQTUlDX1hPX0VOQkJfRU5fTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzAwLAkJUE1JQ19YT19DTEtTRUxfTUFOX01BU0ssCQlQTUlDX1hPX0NMS1NFTF9NQU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwMF9TRVQsCQlQTUlDX0RDWE9fQ1cwMF9TRVRfTUFTSywJCVBNSUNfRENYT19DVzAwX1NFVF9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzAwX0NMUiwJCVBNSUNfRENYT19DVzAwX0NMUl9NQVNLLAkJUE1JQ19EQ1hPX0NXMDBfQ0xSX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDIsCQlQTUlDX1hPX0VOMzJLX01BTl9NQVNLLAkJUE1JQ19YT19FTjMyS19NQU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwMiwJCVBNSUNfWE9fRU4zMktfTV9NQVNLLAkJUE1JQ19YT19FTjMyS19NX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDIsCQlQTUlDX1hPX1hNT0RFX01BTl9NQVNLLAkJUE1JQ19YT19YTU9ERV9NQU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwMiwJCVBNSUNfWE9fWE1PREVfTV9NQVNLLAkJUE1JQ19YT19YTU9ERV9NX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDIsCQlQTUlDX1hPX1NUUlVQX01PREVfTUFTSywJCVBNSUNfWE9fU1RSVVBfTU9ERV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzAyLAkJUE1JQ19YT19BQUNfRlBNX1RJTUVfTUFTSywJCVBNSUNfWE9fQUFDX0ZQTV9USU1FX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDIsCQlQTUlDX1hPX0FBQ19NT0RFX0xQTV9NQVNLLAkJUE1JQ19YT19BQUNfTU9ERV9MUE1fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwMiwJCVBNSUNfWE9fQUFDX01PREVfRlBNX01BU0ssCQlQTUlDX1hPX0FBQ19NT0RFX0ZQTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzAyLAkJUE1JQ19YT19FTjI2TV9PRkZTUV9FTl9NQVNLLAkJUE1JQ19YT19FTjI2TV9PRkZTUV9FTl9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzAyLAkJUE1JQ19YT19MRE9DQUxfRU5fTUFTSywJCVBNSUNfWE9fTERPQ0FMX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDIsCQlQTUlDX1hPX0NCQU5LX1NZTkNfRFlOX01BU0ssCQlQTUlDX1hPX0NCQU5LX1NZTkNfRFlOX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDIsCQlQTUlDX1hPXzI2TUxQX01BTl9FTl9NQVNLLAkJUE1JQ19YT18yNk1MUF9NQU5fRU5fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwMiwJCVBNSUNfWE9fQlVGTERPS19FTl9NQVNLLAkJUE1JQ19YT19CVUZMRE9LX0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDQsCQlQTUlDX1hPX0NEQUNfRlBNX01BU0ssCQlQTUlDX1hPX0NEQUNfRlBNX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDQsCQlQTUlDX1hPX0NEQUNfTFBNX01BU0ssCQlQTUlDX1hPX0NEQUNfTFBNX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDUsCQlQTUlDX1hPXzMyS0RJVl9ORlJBQ19GUE1fTUFTSywJCVBNSUNfWE9fMzJLRElWX05GUkFDX0ZQTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzA1LAkJUE1JQ19YT19DT0ZTVF9GUE1fTUFTSywJCVBNSUNfWE9fQ09GU1RfRlBNX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDYsCQlQTUlDX1hPXzMyS0RJVl9ORlJBQ19MUE1fTUFTSywJCVBNSUNfWE9fMzJLRElWX05GUkFDX0xQTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzA2LAkJUE1JQ19YT19DT0ZTVF9MUE1fTUFTSywJCVBNSUNfWE9fQ09GU1RfTFBNX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfTUFOX01BU0ssCQlQTUlDX1hPX0NPUkVfTUFOX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfRU5fTV9NQVNLLAkJUE1JQ19YT19DT1JFX0VOX01fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9UVVJCT19FTl9NX01BU0ssCQlQTUlDX1hPX0NPUkVfVFVSQk9fRU5fTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX0FBQ19FTl9NX01BU0ssCQlQTUlDX1hPX0NPUkVfQUFDX0VOX01fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwNywJCVBNSUNfWE9fU1RBUlRVUF9FTl9NX01BU0ssCQlQTUlDX1hPX1NUQVJUVVBfRU5fTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX1ZCRlBNX0VOX01fTUFTSywJCVBNSUNfWE9fQ09SRV9WQkZQTV9FTl9NX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfVkJMUE1fRU5fTV9NQVNLLAkJUE1JQ19YT19DT1JFX1ZCTFBNX0VOX01fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwNywJCVBNSUNfWE9fTFBNQklBU19FTl9NX01BU0ssCQlQTUlDX1hPX0xQTUJJQVNfRU5fTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzA3LAkJUE1JQ19YT19WVENHRU5fRU5fTV9NQVNLLAkJUE1JQ19YT19WVENHRU5fRU5fTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzA3LAkJUE1JQ19YT19JQUFDX0NPTVBfRU5fTV9NQVNLLAkJUE1JQ19YT19JQUFDX0NPTVBfRU5fTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzA3LAkJUE1JQ19YT19JRlBNX0NPTVBfRU5fTV9NQVNLLAkJUE1JQ19YT19JRlBNX0NPTVBfRU5fTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzA3LAkJUE1JQ19YT19JTFBNX0NPTVBfRU5fTV9NQVNLLAkJUE1JQ19YT19JTFBNX0NPTVBfRU5fTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX0JZUENBU19GUE1fTUFTSywJCVBNSUNfWE9fQ09SRV9CWVBDQVNfRlBNX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfR01YMl9GUE1fTUFTSywJCVBNSUNfWE9fQ09SRV9HTVgyX0ZQTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX0lEQUNfRlBNX01BU0ssCQlQTUlDX1hPX0NPUkVfSURBQ19GUE1fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwOSwJCVBNSUNfWE9fQ09SRV9CWVBDQVNfTFBNX01BU0ssCQlQTUlDX1hPX0NPUkVfQllQQ0FTX0xQTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzA5LAkJUE1JQ19YT19DT1JFX0dNWDJfTFBNX01BU0ssCQlQTUlDX1hPX0NPUkVfR01YMl9MUE1fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwOSwJCVBNSUNfWE9fQ09SRV9JREFDX0xQTV9NQVNLLAkJUE1JQ19YT19DT1JFX0lEQUNfTFBNX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19DT01QX0hWX0xQTV9NQVNLLAkJUE1JQ19YT19BQUNfQ09NUF9IVl9MUE1fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwOSwJCVBNSUNfWE9fQUFDX1ZTRUxfTFBNX01BU0ssCQlQTUlDX1hPX0FBQ19WU0VMX0xQTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzA5LAkJUE1JQ19YT19BQUNfSFZfTFBNX01BU0ssCQlQTUlDX1hPX0FBQ19IVl9MUE1fU0hJRlQsCQl9LAorICAgIHtQTUlDX0RDWE9fQ1cwOSwJCVBNSUNfWE9fQUFDX0lCSUFTX0xQTV9NQVNLLAkJUE1JQ19YT19BQUNfSUJJQVNfTFBNX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19WT0ZTVF9MUE1fTUFTSywJCVBNSUNfWE9fQUFDX1ZPRlNUX0xQTV9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzA5LAkJUE1JQ19YT19BQUNfRlBNX1NXRU5fTUFTSywJCVBNSUNfWE9fQUFDX0ZQTV9TV0VOX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMDksCQlQTUlDX1hPX1NXUlNUX01BU0ssCQlQTUlDX1hPX1NXUlNUX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMTgsCQlQTUlDX1hPX1NUQVRJQ19BVVhPVVRfU0VMX01BU0ssCQlQTUlDX1hPX1NUQVRJQ19BVVhPVVRfU0VMX1NISUZULAkJfSwKKyAgICB7UE1JQ19EQ1hPX0NXMTgsCQlQTUlDX1hPX0FVWE9VVF9TRUxfTUFTSywJCVBNSUNfWE9fQVVYT1VUX1NFTF9TSElGVCwJCX0sCisgICAge1BNSUNfRENYT19DVzE5LAkJUE1JQ19YT19TVEFUSUNfQVVYT1VUX01BU0ssCQlQTUlDX1hPX1NUQVRJQ19BVVhPVVRfU0hJRlQsCQl9LAorICAgIHtQTUlDX0FVWEFEQ19BREMxNywJCVBNSUNfQVVYQURDX0FEQ19PVVRfQ0g3X0JZX01EX01BU0ssCQlQTUlDX0FVWEFEQ19BRENfT1VUX0NIN19CWV9NRF9TSElGVCwJCX0sCisgICAge1BNSUNfQVVYQURDX0FEQzE3LAkJUE1JQ19BVVhBRENfQURDX1JEWV9DSDdfQllfTURfTUFTSywJCVBNSUNfQVVYQURDX0FEQ19SRFlfQ0g3X0JZX01EX1NISUZULAkJfSwKKyAgICB7UE1JQ19BVVhBRENfUlFTVDFfU0VULAkJUE1JQ19BVVhBRENfUlFTVDFfU0VUX01BU0ssCQlQTUlDX0FVWEFEQ19SUVNUMV9TRVRfU0hJRlQsCQl9LAorICAgIHtQTUlDX0FVWEFEQ19SUVNUMV9DTFIsCQlQTUlDX0FVWEFEQ19SUVNUMV9DTFJfTUFTSywJCVBNSUNfQVVYQURDX1JRU1QxX0NMUl9TSElGVCwJCX0sCit9OworI2lmIGRlZmluZWQoRENMX1BNSUNfTU9EVUxFX0NPTlRST0wpCitEQ0xfSEFORExFIGN1cnJlbnRfZGNsX2hhbmRsZSA9IDA7CisjZW5kaWYKKworLy8jZGVmaW5lIERDTF9QTUlDX1BFUk1JU1NJT05fQ09OVFJPTAorI2lmIGRlZmluZWQoRENMX1BNSUNfUEVSTUlTU0lPTl9DT05UUk9MKQorUE1VX0NUUkxfTUlTQ19TRVRfUkVHSVNURVJfVkFMVUUJaWxsZWdhbF9taXNjX3NldF9yZWdpc3Rlcl92YWx1ZSA9IHswfTsKKyNlbmRpZgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgICBXUklURSBBUElzICAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19QRVJNSVNTSU9OX0NPTlRST0wpCitEQ0xfQk9PTCBkY2xfcG1pY19jaGVja19wZXJtaXNzaW9uKGthbF91aW50MTYgb2Zmc2V0KQoreworCURDTF9CT09MIHJldCA9IERDTF9GQUxTRTsKKwlrYWxfdWludDggYyA9ICgob2Zmc2V0Pj44KSAmIDB4RkYpOworCisJc3dpdGNoKGMpCisgICAgeworCQljYXNlIDB4ODI6CisgICAgICAgIHsKKwkJCS8vQ0xLIDogVE9QX0NMS1NRX1NFVCAoMHg4MjI2KSxUT1BfQ0tQRE5fQ09OMF9DTFIgKDB4ODIwNCksVE9QX0NMS1NRKDB4ODIyNCkKKwkJCWlmKG9mZnNldCA9PSAweDgyMjYgfHwgb2Zmc2V0ID09IDB4ODIwNCB8fCBvZmZzZXQgPT0gMHg4MjI0KQorCQkJCXJldD1EQ0xfVFJVRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIDB4OTA6CisgICAgICAgIHsKKwkJICAgIC8vTERPX0RJRzogMHg5MDFBLDB4OTAxQywgMHg5MDA2LCAweDkwMDgKKyAgICAgICAgICAgIGlmKG9mZnNldCA9PSAweDkwMUEgfHwgb2Zmc2V0ID09IDB4OTAxQyB8fCBvZmZzZXQgPT0gMHg5MDA2IHx8IG9mZnNldCA9PSAweDkwMDgpCisJCQkJcmV0PURDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg5ODoKKyAgICAgICAgeworCQkJLy9BdWRpbyBBbmFsb2cgOiAweDk4MDB+MHg5ODUyCisgICAgICAgICAgICBpZihvZmZzZXQgPj0gMHg5ODAwICYmIG9mZnNldCA8PSAweDk4NTIpCisJCQkJcmV0PURDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgMHg5QToKKyAgICAgICAgeworCQkJLy9BdWRpbyBEUkUgOiAweDlBMDAgfjB4OUEwQQorCQkJaWYob2Zmc2V0ID49IDB4OUEwMCAmJiBvZmZzZXQgPD0gMHg5QTBBKQorCQkJCXJldD1EQ0xfVFJVRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIDB4RTA6CisJCWNhc2UgMHhFMToKKyAgICAgICAgeworCQkJLy9BdWRpbyBkaWdpdGFsIDogMHhFMDAwIH4weEUxMzgKKwkJCWlmKG9mZnNldCA+PSAweEUwMDAgJiYgb2Zmc2V0IDw9IDB4RTEzOCkKKwkJCQlyZXQ9RENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKwkJCXJldD1EQ0xfRkFMU0U7CisgICAgICAgIGJyZWFrOworICAgIH0KKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisvLyBXcml0ZSBXaG9sZSBCeXRlcwordm9pZCBkY2xfcG1pY19ieXRlX3dyaXRlKERDTF9VSU5UMTYgYWRkciwgRENMX1VJTlQxNiB2YWwpCit7CisJRENMX1VJTlQzMiBpZHgsIHR5cGU7CisKKwlrYWxfdGFrZV9zcGlubG9jayhkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2ssIEtBTF9JTkZJTklURV9XQUlUKTsKKworCXR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisJaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKyAgICBpZihhZGRyIDwgUE1JQ19NQVhfUkVHX05VTSkKKyAgICB7CisgICAgICAgIHBtaWNfcmVnW2FkZHJdID0gdmFsOworICAgIH0KKworCURydlBXUkFQX1dBQ1MxKFBNSUNfV1JBUF9XUklURSwgYWRkciwgdmFsLCAweDAwKTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCWthbF9naXZlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jayk7Cit9CisKKy8vIFdyaXRlIFdob2xlIEJ5dGVzCit2b2lkIGRjbF9wbWljX2J5dGVfd3JpdGVfbm9sb2NrKERDTF9VSU5UMTYgYWRkciwgRENMX1VJTlQxNiB2YWwpCit7CisJRENMX1VJTlQzMiBpZHgsIHR5cGU7CisKKwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9IUlRfRE9NQUlOOworCWVsc2UKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKworCWlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisKKyAgICBpZihhZGRyIDwgUE1JQ19NQVhfUkVHX05VTSkKKyAgICB7CisgICAgICAgIHBtaWNfcmVnW2FkZHJdID0gdmFsOworICAgIH0KKworCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9XUklURSwgYWRkciwgdmFsLCAweDAwKTsKKwllbHNlCisJCURydlBXUkFQX1dBQ1MxKFBNSUNfV1JBUF9XUklURSwgYWRkciwgdmFsLCAweDAwKTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCit9CisKKy8vIFdyaXRlIHJlZ2lzdGVyIGZpZWxkCit2b2lkIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUM2MzU1X0ZMQUdTX0xJU1RfRU5VTSBmbGFnLCBEQ0xfVUlOVDE2IHNlbCkKK3sKKyAgICBjb25zdCBQTUlDX0ZMQUdfVEFCTEVfRU5UUlkgKnBUYWJsZSA9IHBtaWNfZmxhZ3NfdGFibGU7CisJRENMX1VJTlQzMiB0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCURDTF9VSU5UMzIgaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKwlrYWxfdGFrZV9zcGlubG9jayhkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2ssIEtBTF9JTkZJTklURV9XQUlUKTsKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKyAgICBwbWljX3JlZ19sb2cuY29tbWFuZF9mbGFnID0gZmxhZzsKKyAgICBwbWljX3JlZ19sb2cucmVnX2JlZm9yZV93cml0ZSA9IHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdOworCisgICAgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gJj0gfihwVGFibGVbZmxhZ10ubWFzayA8PCBwVGFibGVbZmxhZ10uc2hpZnQpOworICAgIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdIHw9ICgoa2FsX3VpbnQxNilzZWwgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKworCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9XUklURSwgcFRhYmxlW2ZsYWddLm9mZnNldCwgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0sIDB4MDApOworCWVsc2UKKwkJRHJ2UFdSQVBfV0FDUzEoUE1JQ19XUkFQX1dSSVRFLCBwVGFibGVbZmxhZ10ub2Zmc2V0LCBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSwgMHgwMCk7CisKKyAgICBwbWljX3JlZ19sb2cud3JpdGVfdmFsdWUgPSBzZWw7CisgICAgcG1pY19yZWdfbG9nLmFkZHJlc3Nfb2Zmc2V0ID0gcFRhYmxlW2ZsYWddLm9mZnNldDsKKyAgICBwbWljX3JlZ19sb2cucmVnX21hc2sgPSBwVGFibGVbZmxhZ10ubWFzazsKKyAgICBwbWljX3JlZ19sb2cucmVnX3NoaWZ0ID0gcFRhYmxlW2ZsYWddLnNoaWZ0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfYWRkciA9IHBUYWJsZVtmbGFnXS5vZmZzZXQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19kYXRhID0gcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF07CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lLCAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUpOworI2VuZGlmCisKKwlrYWxfZ2l2ZV9zcGlubG9jayhkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2spOworfQorCisvLyBXcml0ZSByZWdpc3RlciBmaWVsZAordm9pZCBkY2xfcG1pY19maWVsZF93cml0ZV9ub2xvY2soUE1JQzYzNTVfRkxBR1NfTElTVF9FTlVNIGZsYWcsIERDTF9VSU5UMTYgc2VsKQoreworICAgIGNvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSAqcFRhYmxlID0gcG1pY19mbGFnc190YWJsZTsKKwlEQ0xfVUlOVDMyIHR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisJRENMX1VJTlQzMiBpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworICAgIHBtaWNfcmVnX2xvZy5jb21tYW5kX2ZsYWcgPSBmbGFnOworICAgIHBtaWNfcmVnX2xvZy5yZWdfYmVmb3JlX3dyaXRlID0gcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF07CisKKyAgICBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSAmPSB+KHBUYWJsZVtmbGFnXS5tYXNrIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisgICAgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gfD0gKChrYWxfdWludDE2KXNlbCA8PCBwVGFibGVbZmxhZ10uc2hpZnQpOworCisJaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBwVGFibGVbZmxhZ10ub2Zmc2V0LCBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSwgMHgwMCk7CisJZWxzZQorCQlEcnZQV1JBUF9XQUNTMShQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKworICAgIHBtaWNfcmVnX2xvZy53cml0ZV92YWx1ZSA9IHNlbDsKKyAgICBwbWljX3JlZ19sb2cuYWRkcmVzc19vZmZzZXQgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfbWFzayA9IHBUYWJsZVtmbGFnXS5tYXNrOworICAgIHBtaWNfcmVnX2xvZy5yZWdfc2hpZnQgPSBwVGFibGVbZmxhZ10uc2hpZnQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19hZGRyID0gcFRhYmxlW2ZsYWddLm9mZnNldDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2RhdGEgPSBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICAgICAgICAgICAgICAgICAgUkVBRCBBUElzICAgICAgICAgICAgICAgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBSZWFkIFdob2xlIEJ5dGVzCitEQ0xfVUlOVDE2IGRjbF9wbWljX2J5dGVfcmV0dXJuKERDTF9VSU5UMTYgYWRkcikKK3sKKyAgICBEQ0xfVUlOVDE2IHJlZ190ZW1wOworCURDTF9VSU5UMzIgaWR4LCB0eXBlOworCisJa2FsX3Rha2Vfc3BpbmxvY2soZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrLCBLQUxfSU5GSU5JVEVfV0FJVCk7CisKKwl0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCWlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisJaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1JFQUQsIChEQ0xfVUlOVDMyKWFkZHIsIDB4MDAsICZyZWdfdGVtcCk7CisJZWxzZQorCQlEcnZQV1JBUF9XQUNTMShQTUlDX1dSQVBfUkVBRCwgKERDTF9VSU5UMzIpYWRkciwgMHgwMCwgJnJlZ190ZW1wKTsKKworICAgIGlmKGFkZHIgPCBQTUlDX01BWF9SRUdfTlVNKQorICAgIHsKKyAgICAgICAgcG1pY19yZWdbYWRkcl0gPSByZWdfdGVtcDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lLCAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUpOworI2VuZGlmCisKKwlrYWxfZ2l2ZV9zcGlubG9jayhkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2spOworCisgICAgcmV0dXJuIHJlZ190ZW1wOworfQorCisvLyBSZWFkIFdob2xlIEJ5dGVzCitEQ0xfVUlOVDE2IGRjbF9wbWljX2J5dGVfcmV0dXJuX25vbG9jayhEQ0xfVUlOVDE2IGFkZHIpCit7CisgICAgRENMX1VJTlQxNiByZWdfdGVtcDsKKwlEQ0xfVUlOVDMyIGlkeCwgdHlwZTsKKworCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCXR5cGUgPSBQTUlDX0xPR19UWVBFX0hSVF9ET01BSU47CisJZWxzZQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCisJaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfUkVBRCwgKERDTF9VSU5UMzIpYWRkciwgMHgwMCwgJnJlZ190ZW1wKTsKKwllbHNlCisJCURydlBXUkFQX1dBQ1MxKFBNSUNfV1JBUF9SRUFELCAoRENMX1VJTlQzMilhZGRyLCAweDAwLCAmcmVnX3RlbXApOworCisgICAgaWYoYWRkciA8IFBNSUNfTUFYX1JFR19OVU0pCisgICAgeworICAgICAgICBwbWljX3JlZ1thZGRyXSA9IHJlZ190ZW1wOworICAgIH0KKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworICAgIHJldHVybiByZWdfdGVtcDsKK30KKworLy8gUmVhZCByZWdpc3RlciBmaWVsZAorRENMX1VJTlQxNiBkY2xfcG1pY19maWVsZF9yZWFkKFBNSUM2MzU1X0ZMQUdTX0xJU1RfRU5VTSBmbGFnKQoreworICAgIGNvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSAqcFRhYmxlID0gcG1pY19mbGFnc190YWJsZTsKKyAgICBEQ0xfVUlOVDE2IHJlZ19yZXR1cm4gPSAwOworCURDTF9VSU5UMzIgdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKwlEQ0xfVUlOVDMyIGlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisJaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfSFJUX0RPTUFJTjsKKwllbHNlCisJCXR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisKKwlpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisJaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1JFQUQsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIDB4MDAsICZwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSk7CisJZWxzZQorCQlEcnZQV1JBUF9XQUNTMShQTUlDX1dSQVBfUkVBRCwgcFRhYmxlW2ZsYWddLm9mZnNldCwgMHgwMCwgJnBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdKTsKKworICAgIHJlZ19yZXR1cm4gPSAoKHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdICYgKHBUYWJsZVtmbGFnXS5tYXNrIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCkpID4+IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lLAorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworICAgIHJldHVybiByZWdfcmV0dXJuOworfQorCisvLyBFeHBvcnRlZCBmb3IgRU0gdXNlZAordm9pZCBwbWljX0VNX3JlZ193cml0ZShrYWxfdWludDE2IHJlZywga2FsX3VpbnQxNiB2YWwpeworCWRjbF9wbWljX2J5dGVfd3JpdGVfbm9sb2NrKHJlZywgdmFsKTsKKy8vCSAgZGNsX3BtaWNfYnl0ZV93cml0ZShyZWcsIHZhbCk7Cit9CisKK2thbF91aW50MTYgcG1pY19FTV9yZWdfcmVhZChrYWxfdWludDE2IHJlZyl7CisJcmV0dXJuICBkY2xfcG1pY19ieXRlX3JldHVybl9ub2xvY2socmVnKTsKK30KKworY29uc3QgRENMX1VJTlQzMiB2cGFfdm9zZWxbXSA9Cit7CisgICAgUE1VX1ZPTFRfMDBfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMF82MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAwXzcwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDBfODAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMF85MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzAwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV8yMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAxXzMwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfNDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV81MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAxXzkwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfMDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl8xMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzIwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfMzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl80MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl83MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfOTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wM18wMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAzXzEwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfMjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wM18zMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDNfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wM182MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorfTsKKworY29uc3QgRENMX1VJTlQzMiB2c2ltMV92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF9JTlZBTElELCAgICAgICBQTVVfVk9MVF9JTlZBTElELCAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV83MDAwMDBfViwKKyAgICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzcwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLAorICAgIFBNVV9WT0xUXzAzXzEwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUX0lOVkFMSUQsCit9OworCitjb25zdCBEQ0xfVUlOVDMyIHZ4bzIyX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUX0lOVkFMSUQsICAgICAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsICAgUE1VX1ZPTFRfMDJfMzAwMDAwX1YsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUX0lOVkFMSUQsCit9OworCitjb25zdCBEQ0xfVUlOVDMyIHZtb2RlbV92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF8wMF80MDAwMDBfViwJUE1VX1ZPTFRfMDBfNDUwMDAwX1YsCVBNVV9WT0xUXzAwXzUwMDAwMF9WLAlQTVVfVk9MVF8wMF81MjUwMDBfViwKKyAgICBQTVVfVk9MVF8wMF81NTAwMDBfViwJUE1VX1ZPTFRfMDBfNTY4MDAwX1YsCVBNVV9WT0xUXzAwXzYwMDAwMF9WLAlQTVVfVk9MVF8wMF82NTAwMDBfViwKK307CisKK2NvbnN0IERDTF9VSU5UMzIgdm1kMV92b3NlbFtdID0KK3sKKwlQTVVfVk9MVF8wMF80MDAwMDBfViwJUE1VX1ZPTFRfSU5WQUxJRCwJUE1VX1ZPTFRfMDBfNTAwMDAwX1YsCVBNVV9WT0xUXzAwXzU1MDAwMF9WLAorfTsKKworY29uc3QgRENMX1VJTlQzMiB2c3JhbV92bWRfdm9zZWxbXSA9Cit7CisgICAgUE1VX1ZPTFRfMDBfNjAwMDAwX1YsICAgUE1VX1ZPTFRfMDBfNjUwMDAwX1YsCVBNVV9WT0xUXzAwXzcwMDAwMF9WLAlQTVVfVk9MVF8wMF84MDAwMDBfViwKKyAgICBQTVVfVk9MVF9JTlZBTElELAlQTVVfVk9MVF9JTlZBTElELAorfTsKKworUE1VX1BBUkFNRVRFUl9UQUJMRV9FTlRSWSBwbXVfcGFyYW1ldGVyX3RhYmxlW109Cit7CisJe0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlBBX1NXKSwJCSAgICAJdnBhX3Zvc2VsLAkJICAgIE5VTEwsCSAgICBHRVRBUlJOVU0odnBhX3Zvc2VsKQkJCX0sCisJe0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlBBKSwJCSAgICAJdnBhX3Zvc2VsLAkJICAgIE5VTEwsCSAgICBHRVRBUlJOVU0odnBhX3Zvc2VsKQkJCX0sCisJe0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlNJTTEpLAkJICAgIAl2c2ltMV92b3NlbCwJCU5VTEwsCSAgICBHRVRBUlJOVU0odnNpbTFfdm9zZWwpCQkJfSwKKyAgICB7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWU0lNMiksCQkgICAgCXZzaW0xX3Zvc2VsLAkJTlVMTCwgICAJR0VUQVJSTlVNKHZzaW0xX3Zvc2VsKQkgICAgCX0sCisJe0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlhPMjIpLAkJICAgIAl2eG8yMl92b3NlbCwJCU5VTEwsICAgCUdFVEFSUk5VTSh2eG8yMl92b3NlbCkJICAgIAl9LAorCXtFTkMoTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0UsIFZNT0RFTSksCQl2bW9kZW1fdm9zZWwsCQlOVUxMLAkJR0VUQVJSTlVNKHZtb2RlbV92b3NlbCkJCQl9LAorICAgIHtFTkMoTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0UsIFZTUkFNX01EKSwJCXZzcmFtX3ZtZF92b3NlbCwJTlVMTCwgICAJR0VUQVJSTlVNKHZzcmFtX3ZtZF92b3NlbCkJCX0sCit9OworCisKK2V4dGVybiBQTVVfQ09OVFJPTF9IQU5ETEVSIHBtdV9jb250cm9sX2hhbmRsZXI7CisKK0RDTF9VSU5UMTYgcG11X3BhcmFtZXRlcl9zaXplID0gMDsKKworRENMX1NUQVRVUyBQTUlDX2NvbnRyb2xfaGFuZGxlcihEQ0xfSEFORExFIGhhbmRsZSxEQ0xfQ1RSTF9DTUQgY21kLERDTF9DVFJMX0RBVEFfVCAqZGF0YSkKK3sKKyAgICBEQ0xfVUlOVDE2CXJlZ1ZhbDsKKyAgICBEQ0xfSU5UMzIJcmV0dXJuX3ZhbCA9IFNUQVRVU19GQUlMOworI2lmIGRlZmluZWQoRENMX1BNSUNfTU9EVUxFX0NPTlRST0wpCisJY3VycmVudF9kY2xfaGFuZGxlID0gaGFuZGxlOworI2VuZGlmCisgICAgc3dpdGNoKGNtZCkKKyAgICB7CisgICAgICAgIGNhc2UgTERPX0JVQ0tfU0VUX0VOOgkvL0VuYWJsZSBjb250cm9sIGluIFNXIG1vZGUKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOICpwTGRvQnVja0N0cmw9JihkYXRhLT5yUE1VTGRvQnVja1NldEVuKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUEFfU1c6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZV9ub2xvY2soUE1JQ19FTlVNX1JHX0JVQ0tfVlBBX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWTUlQSToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVk1JUElfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZUQ1hPMjQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZUQ1hPMjRfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVkZFMjhfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4XzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjE4XzFfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4XzI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjE4XzJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxMl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNSQU1fTUQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTUkFNX01EX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUzFfVk9URVJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZTMl9WT1RFUl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9MUF9NT0RFX1NFVCAqcExkb0J1Y2tDdHJsID0mIChkYXRhLT5yUE1VTGRvQnVja1NldExwTW9kZVNldCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZNSVBJOgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZNSVBJX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWVENYTzI0OgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZUQ1hPMjRfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZGRTI4OgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZGRTI4X0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWUkYxOF8xOgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjE4XzFfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZSRjE4XzI6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMThfMl9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlJGMTI6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMTJfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTUkFNX01EX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQkgY2FzZSBMRE9fQlVDS19TRVRfT0NGQl9FTjoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09DRkJfRU4gKnBMZG9CdWNrQ3RybD0mKGRhdGEtPnJQTVVMZG9CdWNrU2V0T2NmYkVuKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTFfT0NGQl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX09DRkJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX0dFVF9WT1NFTDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPU0VMICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrR2V0Vm9zZWwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU1JBTV9NRDoKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9NRF9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUzE6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZTMV9WT1RFUl9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUzI6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZTMl9WT1RFUl9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX1NFVF9WT1NFTDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPU0VMICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0Vm9zZWwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WTU9ERU1fVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU1JBTV9NRDoKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fTURfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUzE6CisgICAgICAgICAgICAgICAgeworCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUzFfVk9URVJfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUzI6CisgICAgICAgICAgICAgICAgeworCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUzJfVk9URVJfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX0dFVF9WT1NFTF9TTEVFUDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPU0VMX1NMRUVQICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrR2V0Vm9zZWxTbGVlcCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX1NMRUVQKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfTERPX1ZTUkFNX01EX1ZPU0VMX1NMRUVQKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX1ZPU0VMX1NMRUVQOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9TRUxfU0xFRVAgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWb3NlbFNsZWVwKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX1NMRUVQLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNSQU1fTUQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTUkFNX01EX1ZPU0VMX1NMRUVQLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfTU9ERVNFVDoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX01PREVTRVQgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRNb2Rlc2V0KTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlBBX1NXOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGVfbm9sb2NrKFBNSUNfRU5VTV9SR19WUEFfTU9ERVNFVCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX09QX0VOOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT1BfRU4gKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRPcEVuKTsKKworCQkJa2FsX3VpbnQxNiBtb2RlID0oKHBMZG9CdWNrQ3RybC0+c3dfb3BfZW4gIDw8IFNXX09QX0VOX1NISUZUKSB8IChwTGRvQnVja0N0cmwtPmh3MF9vcF9lbiA8PCBIVzBfT1BfRU5fU0hJRlQpfAorCQkJCQkJCSAgKHBMZG9CdWNrQ3RybC0+aHcxX29wX2VuIDw8IEhXMV9PUF9FTl9TSElGVCl8IChwTGRvQnVja0N0cmwtPmh3Ml9vcF9lbiA8PCBIVzJfT1BfRU5fU0hJRlQpKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19CVUNLX1ZNT0RFTV9PUF9FTl9TRVQsIG1vZGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlNJTTE6CisJCQkJeworCQkJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX0xET19WU0lNMV9PUF9FTl9TRVQsIG1vZGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisJCQkJeworCQkJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX0xET19WU0lNMl9PUF9FTl9TRVQsIG1vZGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVk1JUEk6CisJCQkJeworCQkJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX0xET19WTUlQSV9PUF9FTl9TRVQsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlRDWE8yNDoKKwkJCQl7CisJCQkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfTERPX1ZUQ1hPMjRfT1BfRU5fU0VULCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZGRTI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVkZFMjhfT1BfRU5fU0VULCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4XzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX0xET19WUkYxOF8xX09QX0VOX1NFVCwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxOF8yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVlJGMThfMl9PUF9FTl9TRVQsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX0xET19WUkYxMl9PUF9FTl9TRVQsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNSQU1fTUQ6CisJCQkJeworCQkJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX0xET19WU1JBTV9NRF9PUF9FTiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX0NMUl9PUF9FTjoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09QX0VOICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0T3BFbik7CisKKwkJCWthbF91aW50MTYgbW9kZSA9KChwTGRvQnVja0N0cmwtPnN3X29wX2VuICA8PCBTV19PUF9FTl9TSElGVCkgfCAocExkb0J1Y2tDdHJsLT5odzBfb3BfZW4gPDwgSFcwX09QX0VOX1NISUZUKXwKKwkJCQkJCQkgIChwTGRvQnVja0N0cmwtPmh3MV9vcF9lbiA8PCBIVzFfT1BfRU5fU0hJRlQpfCAocExkb0J1Y2tDdHJsLT5odzJfb3BfZW4gPDwgSFcyX09QX0VOX1NISUZUKSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKwkJCQl7CisJCQkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfQlVDS19WTU9ERU1fT1BfRU5fQ0xSLCBtb2RlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZTSU0xOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVlNJTTFfT1BfRU5fQ0xSLCBtb2RlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZTSU0yOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVlNJTTJfT1BfRU5fQ0xSLCBtb2RlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZNSVBJOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVk1JUElfT1BfRU5fQ0xSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZUQ1hPMjQ6CisJCQkJeworCQkJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX0xET19WVENYTzI0X09QX0VOX0NMUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfTERPX1ZGRTI4X09QX0VOX0NMUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxOF8xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVlJGMThfMV9PUF9FTl9DTFIsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMThfMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfTERPX1ZSRjE4XzJfT1BfRU5fQ0xSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVlJGMTJfT1BfRU5fQ0xSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVlNSQU1fTURfT1BfRU4sIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfSFdfT1BfQ0ZHOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfSFdfT1BfQ0ZHICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0SHdPcCk7CisKKwkJCWthbF91aW50MTYgdmFsdWUgPSgocExkb0J1Y2tDdHJsLT5odzBfb3BfY2ZnIDw8IEhXMF9PUF9DRkdfU0hJRlQpIHwKKwkJCQkJCQkgIChwTGRvQnVja0N0cmwtPmh3MV9vcF9jZmcgPDwgSFcxX09QX0NGR19TSElGVCkgfAorCQkJCQkJCSAgKHBMZG9CdWNrQ3RybC0+aHcyX29wX2NmZyA8PCBIVzJfT1BfQ0ZHX1NISUZUKSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVCwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX0xET19WU0lNMV9PUF9DRkdfU0VULCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfTERPX1ZTSU0yX09QX0NGR19TRVQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZNSVBJOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVk1JUElfT1BfQ0ZHX1NFVCwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlRDWE8yNDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfTERPX1ZUQ1hPMjRfT1BfQ0ZHX1NFVCwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkZFMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX0xET19WRkUyOF9PUF9DRkdfU0VULCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxOF8xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVlJGMThfMV9PUF9DRkdfU0VULCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxOF8yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVlJGMThfMl9PUF9DRkdfU0VULCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfTERPX1ZSRjEyX09QX0NGR19TRVQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVlNSQU1fTURfT1BfQ0ZHX1NFVCwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19DTFJfSFdfT1BfQ0ZHOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19DTFJfSFdfT1BfQ0ZHICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrQ2xySHdPcCk7CisKKwkJCWthbF91aW50MTYgdmFsdWUgPSgocExkb0J1Y2tDdHJsLT5odzBfb3BfY2ZnIDw8IEhXMF9PUF9DRkdfU0hJRlQpIHwKKwkJCQkJCQkgIChwTGRvQnVja0N0cmwtPmh3MV9vcF9jZmcgPDwgSFcxX09QX0NGR19TSElGVCkgfAorCQkJCQkJCSAgKHBMZG9CdWNrQ3RybC0+aHcyX29wX2NmZyA8PCBIVzJfT1BfQ0ZHX1NISUZUKSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfQlVDS19WTU9ERU1fT1BfQ0ZHX0NMUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX0xET19WU0lNMV9PUF9DRkdfQ0xSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfTERPX1ZTSU0yX09QX0NGR19DTFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZNSVBJOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVk1JUElfT1BfQ0ZHX0NMUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlRDWE8yNDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfTERPX1ZUQ1hPMjRfT1BfQ0ZHX0NMUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkZFMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX0xET19WRkUyOF9PUF9DRkdfQ0xSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxOF8xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVlJGMThfMV9PUF9DRkdfQ0xSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxOF8yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVlJGMThfMl9PUF9DRkdfQ0xSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfTERPX1ZSRjEyX09QX0NGR19DTFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19MRE9fVlNSQU1fTURfT1BfQ0ZHX0NMUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfR09fT05fT1A6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9HT19PTl9PUCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldEdvT25PcCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX09QX0NGR19TRVQsIDEgPDwgR09fT05fT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9PUF9DRkdfQ0xSLCAxIDw8IEdPX09OX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9PRkYpCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX09QX0NGR19TRVQsIDEgPDwgR09fT05fT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX09QX0NGR19DTFIsIDEgPDwgR09fT05fT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVk1JUEk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX09GRikKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVk1JUElfT1BfQ0ZHX1NFVCwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVk1JUElfT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWVENYTzI0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9PRkYpCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZUQ1hPMjRfT1BfQ0ZHX1NFVCwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlRDWE8yNF9PUF9DRkdfQ0xSLCAxIDw8IEdPX09OX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZGRTI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9PRkYpCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZGRTI4X09QX0NGR19TRVQsIDEgPDwgR09fT05fT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZGRTI4X09QX0NGR19DTFIsIDEgPDwgR09fT05fT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMThfMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF8xX09QX0NGR19TRVQsIDEgPDwgR09fT05fT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjE4XzFfT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxOF8yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX09GRikKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMThfMl9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF8yX09QX0NGR19DTFIsIDEgPDwgR09fT05fT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX09GRikKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMTJfT1BfQ0ZHX1NFVCwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMTJfT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU1JBTV9NRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9NRF9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9NRF9PUF9DRkdfQ0xSLCAxIDw8IEdPX09OX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX0dPX0xQX09QOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfR09fTFBfT1AgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRHb0xwT3ApOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX05PX0xQKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX09QX0NGR19TRVQsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0xX09QX0NGR19TRVQsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0xX09QX0NGR19DTFIsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX05PX0xQKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMl9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMl9PUF9DRkdfQ0xSLCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZNSVBJOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9OT19MUCkKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVk1JUElfT1BfQ0ZHX1NFVCwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVk1JUElfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWVENYTzI0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9OT19MUCkKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlRDWE8yNF9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WVENYTzI0X09QX0NGR19DTFIsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkZFMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX05PX0xQKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WRkUyOF9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WRkUyOF9PUF9DRkdfQ0xSLCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjE4XzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX05PX0xQKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF8xX09QX0NGR19TRVQsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjE4XzFfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxOF8yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX05PX0xQKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF8yX09QX0NGR19TRVQsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjE4XzJfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjEyX09QX0NGR19TRVQsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjEyX09QX0NGR19DTFIsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNSQU1fTUQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX05PX0xQKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9NRF9PUF9DRkdfU0VULDEgPDwgR09fTFBfT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTUkFNX01EX09QX0NGR19DTFIsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKworICAgICAgICBjYXNlIExET19CVUNLX1NFVF9WT0xUQUdFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvbHRhZ2UpOworICAgICAgICAgICAgcmVnVmFsID0gUE1VX1BhcmFtZXRlcl90b19WYWx1ZShFTkMoY21kLCBwTGRvQnVja0N0cmwtPm1vZCksIHBMZG9CdWNrQ3RybC0+dm9sdGFnZSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZTSU0xX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlNJTTJfVk9TRUwsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUEFfU1c6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZV9ub2xvY2soUE1JQ19FTlVNX1JHX0JVQ0tfVlBBX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlhPMjI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZV9ub2xvY2soUE1JQ19FTlVNX1JHX1ZYTzIyX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKworCSAgICBjYXNlIExET19CVUNLX0dFVF9WT0xUQUdFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9MVEFHRQkqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWb2x0KTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fREFfVk1PREVNX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fREFfUUlfVlNSQU1fTURfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRToKKwkJeworCQkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0UgKnBMZG9CdWNrQ3RybD0mKGRhdGEtPnJQTVVMZG9CdWNrU2V0U2xlZXBWb2x0YWdlKTsKKwkJCXJlZ1ZhbCA9IFBNVV9QYXJhbWV0ZXJfdG9fVmFsdWUoRU5DKGNtZCwgcExkb0J1Y2tDdHJsLT5tb2QpLCBwTGRvQnVja0N0cmwtPnNsZWVwVm9sdGFnZSk7CisKKwkJCXN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WTU9ERU1fU0xFRVBfVk9MVEFHRSwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZTUkFNX01EX1NMRUVQX1ZPTFRBR0UsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQkvKgorICAgICAgICBjYXNlIFZQQV9TRVRfRU46CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX1ZQQV9TRVRfRU4gKnBWcGFTZXRFbiA9ICYoZGF0YS0+clBNVVZwYVNldEVuKTsKKyAgICAgICAgICAgIGRjbF9wbWljNjMzMl9maWVsZF93cml0ZShNVDYzMzJfVlBBX0VOLCBwVnBhU2V0RW4tPmVuYWJsZSk7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCQkqLworCisJCWNhc2UgVlBBX0dFVF9WT0xUQUdFX0xJU1Q6CisJCXsKKwkJCVBNVV9DVFJMX1ZQQV9HRVRfVk9MVEFHRV9MSVNUICpwVnBhQ3RybCA9ICYoZGF0YS0+clBNVVZwYUdldFZvbHRhZ2VMaXN0KTsKKwkJCXBWcGFDdHJsLT5wVm9sdGFnZUxpc3QgPSB2cGFfdm9zZWw7CisJCQlwVnBhQ3RybC0+bnVtYmVyID0gR0VUQVJSTlVNKHZwYV92b3NlbCk7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisgICAgICAgICBjYXNlIEFEQ19TRVRfUlFTVDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfQURDX1NFVF9SUVNUICpwQWRjQ3RybCA9ICYoZGF0YS0+clBNVUFkY1NldFJxc3QpOworICAgICAgICAgICAgaWYoKEFVWEFEQ19TdGF0dXMgIT0gQVVYQURDX1JFQURfSU5JVCkgJiYgKEFVWEFEQ19TdGF0dXMgIT0gQVVYQURDX1JFQURfREFUQSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRW5hYmxlIENMS1NRIGZvciBNRCAoU1cgbW9kZSkgUkdfQ0xLU1FfRU5fQVVYX01ECisgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1RPUF9DTEtTUV9TRVQsICgweDEgPDwgUE1JQ19SR19DTEtTUV9FTl9BVVhfTURfU0hJRlQpKTsKKyAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfQVVYQURDX1JRU1QxX0NMUiwgKHBBZGNDdHJsLT5lbmFibGUgPDwgUE1JQ19BVVhBRENfUlFTVF9DSDdfQllfTURfU0hJRlQpKTsKKyAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfQVVYQURDX1JRU1QxX1NFVCwgKDB4MSA8PCBQTUlDX0FVWEFEQ19SUVNUX0NIN19CWV9NRF9TSElGVCkpOworICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX1JFUVVFU1Q7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgY2FzZSBBRENfR0VUX1JEWV9NRDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfQURDX0dFVF9SRFlfTUQgKnBBZGNDdHJsID0gJihkYXRhLT5yUE1VQWRjR2V0UmR5TWQpOworICAgICAgICAgICAgcEFkY0N0cmwtPnN0YXR1cyA9IChEQ0xfQk9PTClkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9BVVhBRENfQURDX1JEWV9DSDdfQllfTUQpOworICAgICAgICAgICAgaWYoKEFVWEFEQ19TdGF0dXMgIT0gQVVYQURDX1JFQURfUkVRVUVTVCkgJiYgKEFVWEFEQ19TdGF0dXMgIT0gQVVYQURDX1JFQURfQlVTWSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZihwQWRjQ3RybC0+c3RhdHVzID09IERDTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFVWEFEQ19TdGF0dXMgPSBBVVhBRENfUkVBRF9SRUFEWTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfQlVTWTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIEFEQ19HRVRfT1VUX01EOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9BRENfR0VUX09VVF9NRCAqcEFkY0N0cmwgPSAmKGRhdGEtPnJQTVVBZGNHZXRPdXRNZCk7CisgICAgICAgICAgICBpZihBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX1JFQURZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZGNDdHJsLT5kYXRhID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fQVVYQURDX0FEQ19PVVRfQ0g3X0JZX01EKTsKKyAgICAgICAgICAgIEFVWEFEQ19TdGF0dXMgPSBBVVhBRENfUkVBRF9EQVRBOworICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19BVVhBRENfUlFTVDFfQ0xSLCAoMHgxIDw8IFBNSUNfQVVYQURDX1JRU1RfQ0g3X0JZX01EX1NISUZUKSk7CisgICAgICAgICAgICAvLyBEaXNhYmxlIENMS1NRIGZvciBNRCAoU1cgbW9kZSkgUkdfQ0xLU1FfRU5fQVVYX01ECisgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1RPUF9DTEtTUV9DTFIsICgweDEgPDwgUE1JQ19SR19DTEtTUV9FTl9BVVhfTURfU0hJRlQpKTsKKworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIFRPUF9TRVRfU1JDTEtFTl9JTl9FTjoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfVE9QX1NFVF9TUkNMS0VOX0lOX0VOICpwVG9wU3JjbGtlbkN0cmwgPSAmKGRhdGEtPnJQTVVUb3BTZXRTcmNsa2VuSW5Fbik7CisKKyAgICAgICAgICAgIHN3aXRjaChwVG9wU3JjbGtlbkN0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBNSUNfU1JDTEtFTl9JTjA6CisgICAgICAgICAgICAgICAgeworCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfU1JDTEtFTl9JTjBfRU4sIHBUb3BTcmNsa2VuQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBQTUlDX1NSQ0xLRU5fSU4xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1NSQ0xLRU5fSU4xX0VOLCBwVG9wU3JjbGtlbkN0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBUT1BfU0VUX1NSQ0xLRU5fSU5fTU9ERToKKwkJeworICAgIAkgICAgUE1VX0NUUkxfVE9QX1NFVF9TUkNMS0VOX0lOX01PREUgKnBUb3BTcmNsa2VuQ3RybCA9ICYoZGF0YS0+clBNVVRvcFNldFNyY2xrZW5Jbk1vZGUpOworCisgICAgICAgICAgICBzd2l0Y2gocFRvcFNyY2xrZW5DdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBQTUlDX1NSQ0xLRU5fSU4wOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1NSQ0xLRU5fSU4wX0hXX01PREUsIHBUb3BTcmNsa2VuQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBQTUlDX1NSQ0xLRU5fSU4xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1NSQ0xLRU5fSU4xX0hXX01PREUsIHBUb3BTcmNsa2VuQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIERDWE9fU0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9EQ1hPX1NFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmwgPSAmKGRhdGEtPnJQTVVEY3hvU2V0UmVnaXN0ZXJWYWx1ZSk7CisKKwkJCXBtaWNfRU1fcmVnX3dyaXRlKHBDaHJDdHJsLT5vZmZzZXQsIHBDaHJDdHJsLT52YWx1ZSk7CisJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBEQ1hPX0dFVF9SRUdJU1RFUl9WQUxVRToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfRENYT19HRVRfUkVHSVNURVJfVkFMVUUJKnBDaHJDdHJsPSYoZGF0YS0+clBNVURjeG9HZXRSZWdpc3RlclZhbHVlKTsKKyAgICAgICAgICAgIHBDaHJDdHJsLT52YWx1ZSA9IHBtaWNfRU1fcmVnX3JlYWQocENockN0cmwtPm9mZnNldCk7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUlTQ19TRVRfUkVHSVNURVJfVkFMVUU6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX01JU0NfU0VUX1JFR0lTVEVSX1ZBTFVFCSpwQ2hyQ3RybCA9ICYoZGF0YS0+clBNVU1pc2NTZXRSZWdpc3RlclZhbHVlKTsKKyNpZiBkZWZpbmVkKERDTF9QTUlDX1BFUk1JU1NJT05fQ09OVFJPTCkKKwkJCWlmKGRjbF9wbWljX2NoZWNrX3Blcm1pc3Npb24ocENockN0cmwtPm9mZnNldCk9PSBEQ0xfVFJVRSkKKyNlbmRpZgorCQkJeworCQkJCXBtaWNfRU1fcmVnX3dyaXRlKHBDaHJDdHJsLT5vZmZzZXQsIHBDaHJDdHJsLT52YWx1ZSk7CisJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCX0KKyNpZiBkZWZpbmVkKERDTF9QTUlDX1BFUk1JU1NJT05fQ09OVFJPTCkKKwkJCWVsc2UKKwkJCXsKKwkJCQlpbGxlZ2FsX21pc2Nfc2V0X3JlZ2lzdGVyX3ZhbHVlLm9mZnNldCA9IHBDaHJDdHJsLT5vZmZzZXQ7CisJCQkJaWxsZWdhbF9taXNjX3NldF9yZWdpc3Rlcl92YWx1ZS52YWx1ZSA9IHBDaHJDdHJsLT52YWx1ZTsKKwkJCQlBU1NFUlQoMCk7CisJCQl9CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1JU0NfR0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9NSVNDX0dFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmw9JihkYXRhLT5yUE1VTWlzY0dldFJlZ2lzdGVyVmFsdWUpOworICAgICAgICAgICAgcENockN0cmwtPnZhbHVlID0gcG1pY19FTV9yZWdfcmVhZChwQ2hyQ3RybC0+b2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNpZiBkZWZpbmVkKERDTF9QTUlDX01PRFVMRV9DT05UUk9MKQorCWN1cnJlbnRfZGNsX2hhbmRsZSA9IDA7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0dXJuX3ZhbDsKKworfQorCitleHRlcm4gdm9pZCBkY2xfcG1pY19tb2RlbV9vbmx5X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpOworI2lmIGRlZmluZWQoUE1JQ19VTklUX1RFU1QpCitleHRlcm4gdm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgUE1JQ19Vbml0X1Rlc3Qodm9pZCk7CisjZW5kaWYKK0RDTF9VSU5UMzIgRFJWX1JlYWRfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyKQoreworICAgIHJldHVybiBkY2xfcG1pY19ieXRlX3JldHVybihwbWljX2FkZHIpOworfQorCit2b2lkIERSVl9Xcml0ZV9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIsIERDTF9VSU5UMzIgdmFsdWUpCit7CisgICAgZGNsX3BtaWNfYnl0ZV93cml0ZShwbWljX2FkZHIsIHZhbHVlKTsKK30KKwordm9pZCBkY2xfcG1pY19pbml0KHZvaWQpeworICAgIGV4dGVybiB2b2lkIHBtaWNfd3JhcF9kdW1wX2luaXQodm9pZCk7CisgICAgcG11X2NvbnRyb2xfaGFuZGxlciA9IFBNSUNfY29udHJvbF9oYW5kbGVyOworICAgIHBtdV9wYXJhbWV0ZXJfc2l6ZSA9IEdFVEFSUk5VTShwbXVfcGFyYW1ldGVyX3RhYmxlKTsKKworICAgIHBtaWNfd3JhcF9kdW1wX2luaXQoKTsKKworCWRjbF9wbWljX2FjY2Vzc19zcGlubG9jayA9IGthbF9jcmVhdGVfc3BpbmxvY2soInBtaWMgYWNjZXNzIik7CisJZGNsX3BtaWNfY29udHJvbF9zcGlubG9jayA9IGthbF9jcmVhdGVfc3BpbmxvY2soInBtaWMgY29udHJvbCIpOworCisjaWYgICFkZWZpbmVkKF9fU01BUlRfUEhPTkVfTU9ERU1fXykKKyAgICBEcnZQV1JBUF9Jbml0KCk7CisjZW5kaWYKKyAgICBwbWljX2h3X3ZlcnNpb24gPSBkY2xfcG1pY19ieXRlX3JldHVybihQTUlDX0hXQ0lEKTsKKwlpZiAocG1pY19od192ZXJzaW9uID09IDB4MCkKKwkJQVNTRVJUKDApOworCisgICAgUE1JQ19SZWFkX0FsbCgpOworCisjaWYgIWRlZmluZWQoX19TTUFSVF9QSE9ORV9NT0RFTV9fKQorCisvKgorCWlmKERydlBXUkFQX0NoZWNrQ0lQSEVSKCkgPT0gMSkKKyAgICBkY2xfcG1pYzYzNTVfbW9kZW1fb25seV9pbml0KCk7CisJZWxzZQorKi8KKwlkY2xfcG1pY19tb2RlbV9vbmx5X2luaXQoKTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQorICAgIFBNSUNfUmVhZF9BbGwoKTsKKyAgICBQTUlDX1VuaXRfVGVzdCgpOworICAgIFBNSUNfUmVhZF9BbGwoKTsKKyNlbmRpZgorICAgIHBtaWNfaW5pdF9kb25lID0gRENMX1RSVUU7CisKK30KKwordm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpCit7CisgICAgdm9sYXRpbGUga2FsX3VpbnQzMiBpLGo7CisgICAgaj0wOworICAgIGZvciAoaSA9IDA7IGkgPCBQTUlDX01BWF9SRUdfTlVNOyBpICs9IDIpeworICAgICAgICBwbWljX3JlZ1tpXSA9IGRjbF9wbWljX2J5dGVfcmV0dXJuKGkpOworICAgIAl3aGlsZShqIT0weDIwMCl7aisrO30KKyAgICAJaj0wOworICAgIH0KK30KKyNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQordm9pZCBQTUlDX1VuaXRfVGVzdCh2b2lkKQoreworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9PTl9DVFJMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2RlID0gSFdfQ09OVFJPTDsgLy8gKFNXX0NPTlRST0xfQllfUkVHIC8gSFdfQ09OVFJPTCkKKwkJdmFsLm1vZCA9IFZNSVBJOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9PTl9DVFJMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWTUlQSTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKKwkJdmFsLm1vZCA9IFZQQV9TVzsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPTFRBR0UgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLm1vZD1WUEFfU1c7CisJCXZhbC52b2x0YWdlID0gUE1VX1ZPTFRfMDFfODAwMDAwX1Y7CisJCS8qICAgICBQTVVfVk9MVF8wMF81MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMF82MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMF83MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMF84MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMF85MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV8wMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV8xMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV8yMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV8zMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV80MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV81MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV82MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV83MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV84MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV85MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl8wMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl8xMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl8yMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl8zMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl80MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl81MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl82MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl83MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl84MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl85MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18wMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wM18xMDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18yMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wM18zMDAwMDBfViwgICAgICBQTVVfVk9MVF8wM180MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wM181MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM182MDAwMDBfViwgICAgICAqLworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2QgPSBWUEFfU1c7CisJCXZhbC5tb2RlID0gRk9SQ0VfUFdNX01PREU7IC8vIChBVVRPX01PREUgLyBGT1JDRV9QV01fTU9ERSkKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfTU9ERVNFVCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0NUUkwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLm1vZGUgPSBIV19DT05UUk9MOyAvLyAoU1dfQ09OVFJPTF9CWV9SRUcgLyBIV19DT05UUk9MKQorCQl2YWwubW9kID0gVlJGMTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fQ1RSTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fU0VMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5zZWwgPSBTUkNMS0VOX0lOMV9TRUw7CisJCS8qIFNSQ0xLRU5fSU4xX1NFTCAvIFNSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfT1JfU1JDTEtFTl9JTjJfU0VMLworCQkJU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTCAqLworCQl2YWwubW9kID0gVlJGMTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fU0VMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2QgPSBWUkYxOworCQl2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX01PREVTRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLnJlZ3ZhbCA9IDB4NzsgLy8gKDB4MH4weEYpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9DTFIgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLnJlZ3ZhbCA9IDB4NzsgLy8gKDB4MH4weEYpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9DTFIsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfVlJGMV9HRVRfTU9ERVNFVF9DS1BETiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQkvLyB2YWwucmVndmFsIHdpbGwgYmUgeW91ciByZXF1ZXN0IHZhbHVlICggbm8gbmVlZCBkbyBhbnkgc2hpZnQpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgVlJGMV9HRVRfTU9ERVNFVF9DS1BETiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fQ1RSTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kZSA9IEhXX0NPTlRST0w7IC8vIChTV19DT05UUk9MX0JZX1JFRyAvIEhXX0NPTlRST0wpCisJCXZhbC5tb2QgPSBWUkYyOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTl9DVFJMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTl9TRUwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLnNlbCA9IFNSQ0xLRU5fSU4xX1NFTDsKKwkJLyogU1JDTEtFTl9JTjFfU0VMIC8gU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMl9TRUwvCisJCQlTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMICovCisJCXZhbC5tb2QgPSBWUkYyOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTl9TRUwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKKwkJdmFsLm1vZCA9IFZSRjI7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2QgPSBWUkYxOworCQl2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX01PREVTRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1NSQ0xLX0VOX1NFTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuc2VsID0gU1JDTEtFTl9JTjFfU0VMOworCQkvKiBTUkNMS0VOX0lOMV9TRUwgLyBTUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX09SX1NSQ0xLRU5fSU4yX1NFTC8KKwkJCVNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwgKi8KKwkJdmFsLm1vZCA9IFZNSVBJOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9TUkNMS19FTl9TRUwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKKwkJdmFsLm1vZCA9IFZTSU0xOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLmVuYWJsZSA9IERDTF9UUlVFOyAvLyAoRENMX1RSVUUgLyBEQ0xfRkFMU0UpOworCQl2YWwubW9kID0gVlNJTTI7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2Q9VlNJTTE7CisJCXZhbC52b2x0YWdlID0gUE1VX1ZPTFRfMDFfODAwMDAwX1Y7CisJCS8qICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18wMDAwMDBfViwgICAqLworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2Q9VlNJTTI7CisJCXZhbC52b2x0YWdlID0gUE1VX1ZPTFRfMDFfODAwMDAwX1Y7CisJCS8qICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18wMDAwMDBfViwgICAqLworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KK30KKyNlbmRpZiAvLyBFbmQgb2YgI2lmIGRlZmluZWQoUE1JQ19VTklUX1RFU1QpCisKKyNlbmRpZiAvLyBFbmQgb2YgI2lmIGRlZmluZWQoUE1JQ182MzU1X1JFR19BUEkpCisKZGlmZiAtLWdpdCBhL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjM1NV9pbml0LmMgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTVfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MmJjZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTVfaW5pdC5jCkBAIC0wLDAgKzEsMTMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTMKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgIGRjbF9wbWljNjM1NV9pbml0LmMKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgICBNT0xZIFNvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgICBUaGlzIGZpbGUgaXMgZm9yIFBNSUMgNjM1NQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImluaXQuaCIKKyNpbmNsdWRlICJkY2wuaCIKKworZXh0ZXJuIERDTF9VSU5UMzIgRFJWX1JlYWRfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyKTsKK2V4dGVybiB2b2lkIERSVl9Xcml0ZV9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIsIERDTF9VSU5UMzIgdmFsdWUpOworCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKKy8vIE1UNjM1NSBFQ09fRTEKK3ZvaWQgZGNsX3BtaWNfbW9kZW1fb25seV9pbml0KHZvaWQpCit7CisKK30KZGlmZiAtLWdpdCBhL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjM1Ni5jIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxZWYyZAotLS0gL2Rldi9udWxsCisrKyBiL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjM1Ni5jCkBAIC0wLDAgKzEsMjE3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEzCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgICBkY2xfcG1pYzYzNTVfMzcuYworICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICAgIE1PTFkgU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICAgIFRoaXMgZmlsZSBpcyBmb3IgUE1JQyA2MzU1CisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKEZQR0FfQ1RQKQorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJyZWdfYmFzZS5oIgorI2luY2x1ZGUgImRydl9jb21tLmgiCisjaW5jbHVkZSAiaW5pdC5oIgorI2luY2x1ZGUgImRjbC5oIgorI2luY2x1ZGUgImRjbF9wbXVfc3cuaCIKKyNpbmNsdWRlICJwbWljX3dyYXAuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgInVzX3RpbWVyLmgiCisKKyNpZiBkZWZpbmVkKFBNSUNfNjM1Nl9SRUdfQVBJKQorCisvLyBTdGFydCBQTUlDX1VOSVRfVEVTVAorLy8jZGVmaW5lIFBNSUNfVU5JVF9URVNUCisvLyBBUk0gU2VjdGlvbiBSVy9STy9aSSBVc2UgSW50ZXJuYWwgU1JBTQorI2RlZmluZSBQTUlDX0lOVEVSTkFMX1NSQU0KKworI2lmICFkZWZpbmVkKF9fRlVFX18pCisjZGVmaW5lIFNBVkVBTkRTRVRJUlFNQVNLKCkgICAgICBTYXZlQW5kU2V0SVJRTWFzaygpCisjZGVmaW5lIFJFU1RPUkVJUlFNQVNLKG1hc2spICAgICBSZXN0b3JlSVJRTWFzayhtYXNrKQorI2Vsc2UgLypkZWZpbmVkKF9fRlVFX18pKi8KKyNkZWZpbmUgU0FWRUFORFNFVElSUU1BU0soKSAgICAgIDAKKyNkZWZpbmUgUkVTVE9SRUlSUU1BU0sobWFzaykgICAgIHt9CisjZW5kaWYgLypkZWZpbmVkKF9fRlVFX18pKi8KKworI2RlZmluZSBQTUlDX01BWF9SRUdfTlVNICAgICAgICAgICAgICAgIDB4M2EwMCAvLyAweDAwMDB+MHgzYTAwCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICBFeHBvcnRlZCBBUElzICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworZXh0ZXJuIERDTF9VSU5UMTYgZGNsX3BtaWNfYnl0ZV9yZXR1cm5fbm9sb2NrKERDTF9VSU5UMTYgYWRkcik7CitleHRlcm4gRENMX1VJTlQxNiBkY2xfcG1pY19ieXRlX3JldHVybihEQ0xfVUlOVDE2IGFkZHIpOworZXh0ZXJuIHZvaWQgZGNsX3BtaWNfYnl0ZV93cml0ZV9ub2xvY2soRENMX1VJTlQxNiBhZGRyLCBEQ0xfVUlOVDE2IHZhbCk7CitleHRlcm4gdm9pZCBkY2xfcG1pY19ieXRlX3dyaXRlKERDTF9VSU5UMTYgYWRkciwgRENMX1VJTlQxNiB2YWwpOworZXh0ZXJuIERDTF9CT09MIGRjbF9wbWljX2luaXRfZG9uZV9xdWVyeSh2b2lkKTsKK3R5cGVkZWYgZW51bQoreworICAgIEFVWEFEQ19SRUFEX0lOSVQgPSAwLAorICAgIEFVWEFEQ19SRUFEX1JFUVVFU1QgPSAxLAorICAgIEFVWEFEQ19SRUFEX1JFQURZID0gMiwKKyAgICBBVVhBRENfUkVBRF9CVVNZID0gMywKKyAgICBBVVhBRENfUkVBRF9EQVRBID0gNAorfUFVWEFEQ19GU007CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiBjb21tYW5kX2ZsYWc7CisgICAga2FsX3VpbnQzMiByZWdfYmVmb3JlX3dyaXRlOworICAgIGthbF91aW50MzIgd3JpdGVfdmFsdWU7CisgICAga2FsX3VpbnQzMiBhZGRyZXNzX29mZnNldDsKKyAgICBrYWxfdWludDMyIHJlZ19tYXNrOworICAgIGthbF91aW50MzIgcmVnX3NoaWZ0OworICAgIGthbF91aW50MzIgcmVnX2FkZHI7CisgICAga2FsX3VpbnQzMiByZWdfZGF0YTsKK31QTUlDX1JFR19MT0c7CisKK0FVWEFEQ19GU00gQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0lOSVQ7CitQTUlDX1JFR19MT0cgcG1pY19yZWdfbG9nOworCisjaWYgKGRlZmluZWQoX19NVEtfVEFSR0VUX18pICYmIGRlZmluZWQoUE1JQ19JTlRFUk5BTF9TUkFNKSkKK19fYXR0cmlidXRlX18gKCh6ZXJvX2luaXQpKQorI2VuZGlmIC8qIF9fTVRLX1RBUkdFVF9fICovCisKK2thbF91aW50OCBwbWljX2h3X3ZlcnNpb247CitrYWxfdWludDggcG1pY19zd192ZXJzaW9uOwora2FsX3VpbnQxNiBwbWljX3JlZ1tQTUlDX01BWF9SRUdfTlVNXTsKK0RDTF9CT09MIHBtaWNfaW5pdF9kb25lID0gRENMX0ZBTFNFOworCitrYWxfc3BpbmxvY2tpZCBkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2s7CitleHRlcm4ga2FsX3NwaW5sb2NraWQgZGNsX3BtaWNfY29udHJvbF9zcGlubG9jazsKKworY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZIHBtaWNfZmxhZ3NfdGFibGVbXSA9Cit7CisgICAge01UNjM1Nl9IV0NJRCwJCVBNSUNfSFdDSURfTUFTSywJCVBNSUNfSFdDSURfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfU1dDSUQsCQlQTUlDX1NXQ0lEX01BU0ssCQlQTUlDX1NXQ0lEX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X1RPUF9DT04sCQlQTUlDX1JHX1NSQ0xLRU5fSU4wX0VOX01BU0ssCQlQTUlDX1JHX1NSQ0xLRU5fSU4wX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X1RPUF9DT04sCQlQTUlDX1JHX1NSQ0xLRU5fSU4xX0VOX01BU0ssCQlQTUlDX1JHX1NSQ0xLRU5fSU4xX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X1RPUF9DT04sCQlQTUlDX1JHX1NSQ0xLRU5fSU4wX0hXX01PREVfTUFTSywJCVBNSUNfUkdfU1JDTEtFTl9JTjBfSFdfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9UT1BfQ09OLAkJUE1JQ19SR19TUkNMS0VOX0lOMV9IV19NT0RFX01BU0ssCQlQTUlDX1JHX1NSQ0xLRU5fSU4xX0hXX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19UT1BfRUxSMSwJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfTElNSVRfU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX0xJTUlUX1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9CVUNLX1RPUF9FTFIxLAkJUE1JQ19SR19CVUNLX1ZQQV9WT1NFTF9MSU1JVF9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WUEFfVk9TRUxfTElNSVRfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0JVQ0tfVkNPUkVfQ09OMSwJCVBNSUNfUkdfQlVDS19WQ09SRV9WT1NFTF9TTEVFUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZDT1JFX1ZPU0VMX1NMRUVQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0JVQ0tfVkNPUkVfREJHMCwJCVBNSUNfREFfVkNPUkVfVk9TRUxfTUFTSywJCVBNSUNfREFfVkNPUkVfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WQ09SRV9EQkcwLAkJUE1JQ19EQV9WQ09SRV9WT1NFTF9HUkFZX01BU0ssCQlQTUlDX0RBX1ZDT1JFX1ZPU0VMX0dSQVlfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WQ09SRV9FTFIwLAkJUE1JQ19SR19CVUNLX1ZDT1JFX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVkNPUkVfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WTU9ERU1fQ09OMCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WTU9ERU1fQ09OMCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fTFBfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WTU9ERU1fQ09OMSwJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfU0xFRVBfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfU0xFRVBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WTU9ERU1fRUxSMCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WTU9ERU1fT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0JVQ0tfVk1PREVNX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0JVQ0tfVk1PREVNX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0JVQ0tfVk1PREVNX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0JVQ0tfVk1PREVNX09QX0VOX1NFVCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9CVUNLX1ZNT0RFTV9PUF9FTl9DTFIsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PTl9PUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PTl9PUF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9CVUNLX1ZNT0RFTV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0xQX09QX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0JVQ0tfVk1PREVNX09QX0NGR19TRVQsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WTU9ERU1fREJHMCwJCVBNSUNfREFfVk1PREVNX1ZPU0VMX01BU0ssCQlQTUlDX0RBX1ZNT0RFTV9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9CVUNLX1ZNT0RFTV9EQkcwLAkJUE1JQ19EQV9WTU9ERU1fVk9TRUxfR1JBWV9NQVNLLAkJUE1JQ19EQV9WTU9ERU1fVk9TRUxfR1JBWV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9CVUNLX1ZNT0RFTV9EQkcxLAkJUE1JQ19EQV9WTU9ERU1fRU5fTUFTSywJCVBNSUNfREFfVk1PREVNX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0JVQ0tfVk1PREVNX0RCRzEsCQlQTUlDX0RBX1ZNT0RFTV9TVEJfTUFTSywJCVBNSUNfREFfVk1PREVNX1NUQl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9CVUNLX1ZNT0RFTV9EQkcxLAkJUE1JQ19EQV9WTU9ERU1fVlNMRUVQX1NFTF9NQVNLLAkJUE1JQ19EQV9WTU9ERU1fVlNMRUVQX1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9CVUNLX1ZTMV9WT1RFUiwJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WUzFfVk9URVJfU0VULAkJUE1JQ19SR19CVUNLX1ZTMV9WT1RFUl9FTl9TRVRfTUFTSywJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0JVQ0tfVlMxX1ZPVEVSX0NMUiwJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9CVUNLX1ZTMV9WT1RFUl9DRkcsCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0JVQ0tfVlMyX0NPTjEsCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPU0VMX1NMRUVQX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPU0VMX1NMRUVQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0JVQ0tfVlMyX1ZPVEVSLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9CVUNLX1ZTMl9WT1RFUl9TRVQsCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPVEVSX0VOX1NFVF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WUzJfVk9URVJfQ0xSLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9DTFJfTUFTSywJCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0JVQ0tfVlMyX1ZPVEVSX0NGRywJCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WUzJfRUxSMCwJCVBNSUNfUkdfQlVDS19WUzJfVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WUzJfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WUEFfQ09OMCwJCVBNSUNfUkdfQlVDS19WUEFfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WUEFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQlVDS19WUEFfQ09OMSwJCVBNSUNfUkdfQlVDS19WUEFfVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WUEFfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfU01QU19BTkFfQ09OMSwJCVBNSUNfUkdfVkNPUkVfU0xFRVBfVk9MVEFHRV9NQVNLLAkJUE1JQ19SR19WQ09SRV9TTEVFUF9WT0xUQUdFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X1NNUFNfQU5BX0NPTjEsCQlQTUlDX1JHX1ZNT0RFTV9TTEVFUF9WT0xUQUdFX01BU0ssCQlQTUlDX1JHX1ZNT0RFTV9TTEVFUF9WT0xUQUdFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X1ZDT1JFX1ZQUk9DX0FOQV9DT04wLAkJUE1JQ19SR19WQ09SRV9GUFdNX01BU0ssCQlQTUlDX1JHX1ZDT1JFX0ZQV01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfVkNPUkVfVlBST0NfQU5BX0NPTjAsCQlQTUlDX1JHX1ZQUk9DX0ZQV01fTUFTSywJCVBNSUNfUkdfVlBST0NfRlBXTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9WTU9ERU1fQU5BX0NPTjAsCQlQTUlDX1JHX1ZNT0RFTV9NT0RFU0VUX01BU0ssCQlQTUlDX1JHX1ZNT0RFTV9NT0RFU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X1ZTMl9BTkFfQ09OMiwJCVBNSUNfUkdfVlMyX01PREVTRVRfTUFTSywJCVBNSUNfUkdfVlMyX01PREVTRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfVlBBX0FOQV9DT04wLAkJUE1JQ19SR19WUEFfTU9ERVNFVF9NQVNLLAkJUE1JQ19SR19WUEFfTU9ERVNFVF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlNJTTFfQ09OMCwJCVBNSUNfUkdfTERPX1ZTSU0xX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlNJTTFfQ09OMCwJCVBNSUNfUkdfTERPX1ZTSU0xX0xQX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9MUF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlNJTTFfT1BfRU4sCQlQTUlDX1JHX0xET19WU0lNMV9TV19PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfU1dfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0xX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcwX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0xX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcxX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0xX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcyX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9IVzJfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0xX09QX0VOX1NFVCwJCVBNSUNfUkdfTERPX1ZTSU0xX09QX0VOX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WU0lNMV9PUF9FTl9DTFIsCQlQTUlDX1JHX0xET19WU0lNMV9PUF9FTl9DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcwX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcwX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcxX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcyX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTFfT05fT1BfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX09OX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WU0lNMV9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMV9MUF9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfTFBfT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0xX09QX0NGR19TRVQsCQlQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WU0lNMV9PUF9DRkdfQ0xSLAkJUE1JQ19SR19MRE9fVlNJTTFfT1BfQ0ZHX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfT1BfQ0ZHX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlNJTTFfQ09OMiwJCVBNSUNfUkdfTERPX1ZTSU0xX09DRkJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0xX0NPTjIsCQlQTUlDX0RBX1ZTSU0xX09DRkJfRU5fTUFTSywJCVBNSUNfREFfVlNJTTFfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9WU0lNMV9BTkFfQ09OMCwJCVBNSUNfUkdfVlNJTTFfVk9TRUxfTUFTSywJCVBNSUNfUkdfVlNJTTFfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0yX0NPTjAsCQlQTUlDX1JHX0xET19WU0lNMl9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0yX0NPTjAsCQlQTUlDX1JHX0xET19WU0lNMl9MUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0yX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTJfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMF9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMV9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WU0lNMl9PUF9FTl9TRVQsCQlQTUlDX1JHX0xET19WU0lNMl9PUF9FTl9TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlNJTTJfT1BfRU5fQ0xSLAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0yX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0yX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMV9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0yX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMl9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0yX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0yX09OX09QX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9PTl9PUF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlNJTTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTJfTFBfT1BfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WU0lNMl9PUF9DRkdfU0VULAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfQ0ZHX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlNJTTJfT1BfQ0ZHX0NMUiwJCVBNSUNfUkdfTERPX1ZTSU0yX09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZTSU0yX0NPTjIsCQlQTUlDX1JHX0xET19WU0lNMl9PQ0ZCX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WU0lNMl9DT04yLAkJUE1JQ19EQV9WU0lNMl9PQ0ZCX0VOX01BU0ssCQlQTUlDX0RBX1ZTSU0yX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfVlNJTTJfQU5BX0NPTjAsCQlQTUlDX1JHX1ZTSU0yX1ZPU0VMX01BU0ssCQlQTUlDX1JHX1ZTSU0yX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WTUlQSV9DT04wLAkJUE1JQ19SR19MRE9fVk1JUElfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZNSVBJX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WTUlQSV9DT04wLAkJUE1JQ19SR19MRE9fVk1JUElfTFBfTUFTSywJCVBNSUNfUkdfTERPX1ZNSVBJX0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WTUlQSV9PUF9FTiwJCVBNSUNfUkdfTERPX1ZNSVBJX1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WTUlQSV9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVk1JUElfT1BfRU4sCQlQTUlDX1JHX0xET19WTUlQSV9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZNSVBJX0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVk1JUElfT1BfRU4sCQlQTUlDX1JHX0xET19WTUlQSV9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZNSVBJX0hXMV9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVk1JUElfT1BfRU4sCQlQTUlDX1JHX0xET19WTUlQSV9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZNSVBJX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVk1JUElfT1BfRU5fU0VULAkJUE1JQ19SR19MRE9fVk1JUElfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0xET19WTUlQSV9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZNSVBJX09QX0VOX0NMUiwJCVBNSUNfUkdfTERPX1ZNSVBJX09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVk1JUElfT1BfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WTUlQSV9PUF9DRkcsCQlQTUlDX1JHX0xET19WTUlQSV9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WTUlQSV9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WTUlQSV9PUF9DRkcsCQlQTUlDX1JHX0xET19WTUlQSV9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WTUlQSV9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WTUlQSV9PUF9DRkcsCQlQTUlDX1JHX0xET19WTUlQSV9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WTUlQSV9IVzJfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WTUlQSV9PUF9DRkcsCQlQTUlDX1JHX0xET19WTUlQSV9PTl9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVk1JUElfT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZNSVBJX09QX0NGRywJCVBNSUNfUkdfTERPX1ZNSVBJX0xQX09QX01BU0ssCQlQTUlDX1JHX0xET19WTUlQSV9MUF9PUF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVk1JUElfT1BfQ0ZHX1NFVCwJCVBNSUNfUkdfTERPX1ZNSVBJX09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZNSVBJX09QX0NGR19TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZNSVBJX09QX0NGR19DTFIsCQlQTUlDX1JHX0xET19WTUlQSV9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WTUlQSV9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WTUlQSV9DT04xLAkJUE1JQ19EQV9WTUlQSV9NT0RFX01BU0ssCQlQTUlDX0RBX1ZNSVBJX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZNSVBJX0NPTjEsCQlQTUlDX0RBX1ZNSVBJX0VOX01BU0ssCQlQTUlDX0RBX1ZNSVBJX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WTUlQSV9DT04yLAkJUE1JQ19SR19MRE9fVk1JUElfT0NGQl9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVk1JUElfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVk1JUElfQ09OMiwJCVBNSUNfREFfVk1JUElfT0NGQl9FTl9NQVNLLAkJUE1JQ19EQV9WTUlQSV9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WRkUyOF9DT04wLAkJUE1JQ19SR19MRE9fVkZFMjhfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WRkUyOF9DT04wLAkJUE1JQ19SR19MRE9fVkZFMjhfTFBfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WRkUyOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZGRTI4X1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVkZFMjhfT1BfRU4sCQlQTUlDX1JHX0xET19WRkUyOF9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVkZFMjhfT1BfRU4sCQlQTUlDX1JHX0xET19WRkUyOF9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMV9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVkZFMjhfT1BfRU4sCQlQTUlDX1JHX0xET19WRkUyOF9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVkZFMjhfT1BfRU5fU0VULAkJUE1JQ19SR19MRE9fVkZFMjhfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZGRTI4X09QX0VOX0NMUiwJCVBNSUNfUkdfTERPX1ZGRTI4X09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfT1BfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WRkUyOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WRkUyOF9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WRkUyOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WRkUyOF9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WRkUyOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WRkUyOF9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9IVzJfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WRkUyOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WRkUyOF9PTl9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X0xQX09QX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9MUF9PUF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVkZFMjhfT1BfQ0ZHX1NFVCwJCVBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZGRTI4X09QX0NGR19DTFIsCQlQTUlDX1JHX0xET19WRkUyOF9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WRkUyOF9DT04xLAkJUE1JQ19EQV9WRkUyOF9NT0RFX01BU0ssCQlQTUlDX0RBX1ZGRTI4X01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZGRTI4X0NPTjEsCQlQTUlDX0RBX1ZGRTI4X0VOX01BU0ssCQlQTUlDX0RBX1ZGRTI4X0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WRkUyOF9DT04yLAkJUE1JQ19SR19MRE9fVkZFMjhfT0NGQl9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVkZFMjhfQ09OMiwJCVBNSUNfREFfVkZFMjhfT0NGQl9FTl9NQVNLLAkJUE1JQ19EQV9WRkUyOF9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxOF9DT04wLAkJUE1JQ19SR19MRE9fVlJGMThfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxOF9DT04wLAkJUE1JQ19SR19MRE9fVlJGMThfTFBfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjE4X1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlJGMThfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxOF9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlJGMThfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxOF9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMV9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlJGMThfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxOF9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlJGMThfT1BfRU5fU0VULAkJUE1JQ19SR19MRE9fVlJGMThfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZSRjE4X09QX0VOX0NMUiwJCVBNSUNfUkdfTERPX1ZSRjE4X09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfT1BfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9IVzJfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF9PTl9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZSRjE4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjE4X0xQX09QX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9MUF9PUF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlJGMThfT1BfQ0ZHX1NFVCwJCVBNSUNfUkdfTERPX1ZSRjE4X09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X09QX0NGR19TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZSRjE4X09QX0NGR19DTFIsCQlQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxOF9DT04xLAkJUE1JQ19EQV9WUkYxOF9NT0RFX01BU0ssCQlQTUlDX0RBX1ZSRjE4X01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZSRjE4X0NPTjEsCQlQTUlDX0RBX1ZSRjE4X0VOX01BU0ssCQlQTUlDX0RBX1ZSRjE4X0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxOF9DT04yLAkJUE1JQ19SR19MRE9fVlJGMThfT0NGQl9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlJGMThfQ09OMiwJCVBNSUNfREFfVlJGMThfT0NGQl9FTl9NQVNLLAkJUE1JQ19EQV9WUkYxOF9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxMl9DT04wLAkJUE1JQ19SR19MRE9fVlJGMTJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxMl9DT04wLAkJUE1JQ19SR19MRE9fVlJGMTJfTFBfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjEyX1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlJGMTJfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxMl9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlJGMTJfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxMl9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX0hXMV9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlJGMTJfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxMl9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlJGMTJfT1BfRU5fU0VULAkJUE1JQ19SR19MRE9fVlJGMTJfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZSRjEyX09QX0VOX0NMUiwJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfT1BfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxMl9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxMl9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxMl9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9IVzJfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxMl9PTl9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfT05fT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZSRjEyX09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjEyX0xQX09QX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9MUF9PUF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlJGMTJfT1BfQ0ZHX1NFVCwJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZSRjEyX09QX0NGR19DTFIsCQlQTUlDX1JHX0xET19WUkYxMl9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxMl9DT04xLAkJUE1JQ19EQV9WUkYxMl9NT0RFX01BU0ssCQlQTUlDX0RBX1ZSRjEyX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfTERPX1ZSRjEyX0NPTjEsCQlQTUlDX0RBX1ZSRjEyX0VOX01BU0ssCQlQTUlDX0RBX1ZSRjEyX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0xET19WUkYxMl9DT04yLAkJUE1JQ19SR19MRE9fVlJGMTJfT0NGQl9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9MRE9fVlJGMTJfQ09OMiwJCVBNSUNfREFfVlJGMTJfT0NGQl9FTl9NQVNLLAkJUE1JQ19EQV9WUkYxMl9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X1ZYTzIyX0FOQV9DT04wLAkJUE1JQ19SR19WWE8yMl9WT1NFTF9NQVNLLAkJUE1JQ19SR19WWE8yMl9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjFfTU9ERV9NQVNLLAkJUE1JQ19YT19FWFRCVUYxX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzAwLAkJUE1JQ19YT19FWFRCVUYxX0VOX01fTUFTSywJCVBNSUNfWE9fRVhUQlVGMV9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGMl9NT0RFX01BU0ssCQlQTUlDX1hPX0VYVEJVRjJfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjJfRU5fTV9NQVNLLAkJUE1JQ19YT19FWFRCVUYyX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzAwLAkJUE1JQ19YT19FWFRCVUYzX01PREVfTUFTSywJCVBNSUNfWE9fRVhUQlVGM19NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGM19FTl9NX01BU0ssCQlQTUlDX1hPX0VYVEJVRjNfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjRfTU9ERV9NQVNLLAkJUE1JQ19YT19FWFRCVUY0X01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzAwLAkJUE1JQ19YT19FWFRCVUY0X0VOX01fTUFTSywJCVBNSUNfWE9fRVhUQlVGNF9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwMCwJCVBNSUNfWE9fQkJfTFBNX0VOX01BU0ssCQlQTUlDX1hPX0JCX0xQTV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VOQkJfTUFOX01BU0ssCQlQTUlDX1hPX0VOQkJfTUFOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRU5CQl9FTl9NX01BU0ssCQlQTUlDX1hPX0VOQkJfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDAsCQlQTUlDX1hPX0NMS1NFTF9NQU5fTUFTSywJCVBNSUNfWE9fQ0xLU0VMX01BTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDBfU0VULAkJUE1JQ19EQ1hPX0NXMDBfU0VUX01BU0ssCQlQTUlDX0RDWE9fQ1cwMF9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzAwX0NMUiwJCVBNSUNfRENYT19DVzAwX0NMUl9NQVNLLAkJUE1JQ19EQ1hPX0NXMDBfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwMiwJCVBNSUNfWE9fRU4zMktfTUFOX01BU0ssCQlQTUlDX1hPX0VOMzJLX01BTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDIsCQlQTUlDX1hPX0VOMzJLX01fTUFTSywJCVBNSUNfWE9fRU4zMktfTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDIsCQlQTUlDX1hPX1hNT0RFX01BTl9NQVNLLAkJUE1JQ19YT19YTU9ERV9NQU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzAyLAkJUE1JQ19YT19YTU9ERV9NX01BU0ssCQlQTUlDX1hPX1hNT0RFX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzAyLAkJUE1JQ19YT19TVFJVUF9NT0RFX01BU0ssCQlQTUlDX1hPX1NUUlVQX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzAyLAkJUE1JQ19YT19BQUNfRlBNX1RJTUVfTUFTSywJCVBNSUNfWE9fQUFDX0ZQTV9USU1FX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwMiwJCVBNSUNfWE9fQUFDX01PREVfTFBNX01BU0ssCQlQTUlDX1hPX0FBQ19NT0RFX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDIsCQlQTUlDX1hPX0FBQ19NT0RFX0ZQTV9NQVNLLAkJUE1JQ19YT19BQUNfTU9ERV9GUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzAyLAkJUE1JQ19YT19FTjI2TV9PRkZTUV9FTl9NQVNLLAkJUE1JQ19YT19FTjI2TV9PRkZTUV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDIsCQlQTUlDX1hPX0xET0NBTF9FTl9NQVNLLAkJUE1JQ19YT19MRE9DQUxfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzAyLAkJUE1JQ19YT19DQkFOS19TWU5DX0RZTl9NQVNLLAkJUE1JQ19YT19DQkFOS19TWU5DX0RZTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDIsCQlQTUlDX1hPXzI2TUxQX01BTl9FTl9NQVNLLAkJUE1JQ19YT18yNk1MUF9NQU5fRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzAyLAkJUE1JQ19YT19CVUZMRE9LX0VOX01BU0ssCQlQTUlDX1hPX0JVRkxET0tfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzA0LAkJUE1JQ19YT19DREFDX0ZQTV9NQVNLLAkJUE1JQ19YT19DREFDX0ZQTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDQsCQlQTUlDX1hPX0NEQUNfTFBNX01BU0ssCQlQTUlDX1hPX0NEQUNfTFBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwNSwJCVBNSUNfWE9fMzJLRElWX05GUkFDX0ZQTV9NQVNLLAkJUE1JQ19YT18zMktESVZfTkZSQUNfRlBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwNSwJCVBNSUNfWE9fQ09GU1RfRlBNX01BU0ssCQlQTUlDX1hPX0NPRlNUX0ZQTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDYsCQlQTUlDX1hPXzMyS0RJVl9ORlJBQ19MUE1fTUFTSywJCVBNSUNfWE9fMzJLRElWX05GUkFDX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDYsCQlQTUlDX1hPX0NPRlNUX0xQTV9NQVNLLAkJUE1JQ19YT19DT0ZTVF9MUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX01BTl9NQVNLLAkJUE1JQ19YT19DT1JFX01BTl9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfRU5fTV9NQVNLLAkJUE1JQ19YT19DT1JFX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX1RVUkJPX0VOX01fTUFTSywJCVBNSUNfWE9fQ09SRV9UVVJCT19FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9BQUNfRU5fTV9NQVNLLAkJUE1JQ19YT19DT1JFX0FBQ19FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwNywJCVBNSUNfWE9fU1RBUlRVUF9FTl9NX01BU0ssCQlQTUlDX1hPX1NUQVJUVVBfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfVkJGUE1fRU5fTV9NQVNLLAkJUE1JQ19YT19DT1JFX1ZCRlBNX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX1ZCTFBNX0VOX01fTUFTSywJCVBNSUNfWE9fQ09SRV9WQkxQTV9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwNywJCVBNSUNfWE9fTFBNQklBU19FTl9NX01BU0ssCQlQTUlDX1hPX0xQTUJJQVNfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDcsCQlQTUlDX1hPX1ZUQ0dFTl9FTl9NX01BU0ssCQlQTUlDX1hPX1ZUQ0dFTl9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwNywJCVBNSUNfWE9fSUFBQ19DT01QX0VOX01fTUFTSywJCVBNSUNfWE9fSUFBQ19DT01QX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzA3LAkJUE1JQ19YT19JRlBNX0NPTVBfRU5fTV9NQVNLLAkJUE1JQ19YT19JRlBNX0NPTVBfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDcsCQlQTUlDX1hPX0lMUE1fQ09NUF9FTl9NX01BU0ssCQlQTUlDX1hPX0lMUE1fQ09NUF9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9CWVBDQVNfRlBNX01BU0ssCQlQTUlDX1hPX0NPUkVfQllQQ0FTX0ZQTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfR01YMl9GUE1fTUFTSywJCVBNSUNfWE9fQ09SRV9HTVgyX0ZQTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfSURBQ19GUE1fTUFTSywJCVBNSUNfWE9fQ09SRV9JREFDX0ZQTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDksCQlQTUlDX1hPX0NPUkVfQllQQ0FTX0xQTV9NQVNLLAkJUE1JQ19YT19DT1JFX0JZUENBU19MUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzA5LAkJUE1JQ19YT19DT1JFX0dNWDJfTFBNX01BU0ssCQlQTUlDX1hPX0NPUkVfR01YMl9MUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzA5LAkJUE1JQ19YT19DT1JFX0lEQUNfTFBNX01BU0ssCQlQTUlDX1hPX0NPUkVfSURBQ19MUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzA5LAkJUE1JQ19YT19BQUNfQ09NUF9IVl9MUE1fTUFTSywJCVBNSUNfWE9fQUFDX0NPTVBfSFZfTFBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cwOSwJCVBNSUNfWE9fQUFDX1ZTRUxfTFBNX01BU0ssCQlQTUlDX1hPX0FBQ19WU0VMX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19IVl9MUE1fTUFTSywJCVBNSUNfWE9fQUFDX0hWX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19JQklBU19MUE1fTUFTSywJCVBNSUNfWE9fQUFDX0lCSUFTX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19WT0ZTVF9MUE1fTUFTSywJCVBNSUNfWE9fQUFDX1ZPRlNUX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19GUE1fU1dFTl9NQVNLLAkJUE1JQ19YT19BQUNfRlBNX1NXRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfRENYT19DVzA5LAkJUE1JQ19YT19TV1JTVF9NQVNLLAkJUE1JQ19YT19TV1JTVF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9EQ1hPX0NXMTgsCQlQTUlDX1hPX1NUQVRJQ19BVVhPVVRfU0VMX01BU0ssCQlQTUlDX1hPX1NUQVRJQ19BVVhPVVRfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cxOCwJCVBNSUNfWE9fQVVYT1VUX1NFTF9NQVNLLAkJUE1JQ19YT19BVVhPVVRfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0RDWE9fQ1cxOSwJCVBNSUNfWE9fU1RBVElDX0FVWE9VVF9NQVNLLAkJUE1JQ19YT19TVEFUSUNfQVVYT1VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0FVWEFEQ19BREMxNywJCVBNSUNfQVVYQURDX0FEQ19PVVRfQ0g3X0JZX01EX01BU0ssCQlQTUlDX0FVWEFEQ19BRENfT1VUX0NIN19CWV9NRF9TSElGVCwJCX0sCisgICAge01UNjM1Nl9BVVhBRENfQURDMTcsCQlQTUlDX0FVWEFEQ19BRENfUkRZX0NIN19CWV9NRF9NQVNLLAkJUE1JQ19BVVhBRENfQURDX1JEWV9DSDdfQllfTURfU0hJRlQsCQl9LAorICAgIHtNVDYzNTZfQVVYQURDX1JRU1QxX1NFVCwJCVBNSUNfQVVYQURDX1JRU1QxX1NFVF9NQVNLLAkJUE1JQ19BVVhBRENfUlFTVDFfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU2X0FVWEFEQ19SUVNUMV9DTFIsCQlQTUlDX0FVWEFEQ19SUVNUMV9DTFJfTUFTSywJCVBNSUNfQVVYQURDX1JRU1QxX0NMUl9TSElGVCwJCX0sCit9OworI2lmIGRlZmluZWQoRENMX1BNSUNfTU9EVUxFX0NPTlRST0wpCitEQ0xfSEFORExFIGN1cnJlbnRfZGNsX2hhbmRsZSA9IDA7CisjZW5kaWYKKworLy8jZGVmaW5lIERDTF9QTUlDX1BFUk1JU1NJT05fQ09OVFJPTAorI2lmIGRlZmluZWQoRENMX1BNSUNfUEVSTUlTU0lPTl9DT05UUk9MKQorUE1VX0NUUkxfTUlTQ19TRVRfUkVHSVNURVJfVkFMVUUJaWxsZWdhbF9taXNjX3NldF9yZWdpc3Rlcl92YWx1ZSA9IHswfTsKKyNlbmRpZgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgICBXUklURSBBUElzICAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19QRVJNSVNTSU9OX0NPTlRST0wpCitEQ0xfQk9PTCBkY2xfcG1pY19jaGVja19wZXJtaXNzaW9uKGthbF91aW50MTYgb2Zmc2V0KQoreworCURDTF9CT09MIHJldCA9IERDTF9GQUxTRTsKKwlrYWxfdWludDggYyA9ICgob2Zmc2V0Pj44KSAmIDB4RkYpOworCisJc3dpdGNoKGMpCisgICAgeworCQljYXNlIDB4ODI6CisgICAgICAgIHsKKwkJCS8vQ0xLIDogVE9QX0NMS1NRX1NFVCAoMHg4MjI2KSxUT1BfQ0tQRE5fQ09OMF9DTFIgKDB4ODIwNCksVE9QX0NMS1NRKDB4ODIyNCkKKwkJCWlmKG9mZnNldCA9PSAweDgyMjYgfHwgb2Zmc2V0ID09IDB4ODIwNCB8fCBvZmZzZXQgPT0gMHg4MjI0KQorCQkJCXJldD1EQ0xfVFJVRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIDB4OTA6CisgICAgICAgIHsKKwkJICAgIC8vTERPX0RJRzogMHg5MDFBLDB4OTAxQywgMHg5MDA2LCAweDkwMDgKKyAgICAgICAgICAgIGlmKG9mZnNldCA9PSAweDkwMUEgfHwgb2Zmc2V0ID09IDB4OTAxQyB8fCBvZmZzZXQgPT0gMHg5MDA2IHx8IG9mZnNldCA9PSAweDkwMDgpCisJCQkJcmV0PURDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg5ODoKKyAgICAgICAgeworCQkJLy9BdWRpbyBBbmFsb2cgOiAweDk4MDB+MHg5ODUyCisgICAgICAgICAgICBpZihvZmZzZXQgPj0gMHg5ODAwICYmIG9mZnNldCA8PSAweDk4NTIpCisJCQkJcmV0PURDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgMHg5QToKKyAgICAgICAgeworCQkJLy9BdWRpbyBEUkUgOiAweDlBMDAgfjB4OUEwQQorCQkJaWYob2Zmc2V0ID49IDB4OUEwMCAmJiBvZmZzZXQgPD0gMHg5QTBBKQorCQkJCXJldD1EQ0xfVFJVRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIDB4RTA6CisJCWNhc2UgMHhFMToKKyAgICAgICAgeworCQkJLy9BdWRpbyBkaWdpdGFsIDogMHhFMDAwIH4weEUxMzgKKwkJCWlmKG9mZnNldCA+PSAweEUwMDAgJiYgb2Zmc2V0IDw9IDB4RTEzOCkKKwkJCQlyZXQ9RENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKwkJCXJldD1EQ0xfRkFMU0U7CisgICAgICAgIGJyZWFrOworICAgIH0KKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisvLyBXcml0ZSBXaG9sZSBCeXRlcwordm9pZCBkY2xfcG1pY19ieXRlX3dyaXRlKERDTF9VSU5UMTYgYWRkciwgRENMX1VJTlQxNiB2YWwpCit7CisJRENMX1VJTlQzMiBpZHgsIHR5cGU7CisKKwlrYWxfdGFrZV9zcGlubG9jayhkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2ssIEtBTF9JTkZJTklURV9XQUlUKTsKKworCXR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisJaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKyAgICBpZihhZGRyIDwgUE1JQ19NQVhfUkVHX05VTSkKKyAgICB7CisgICAgICAgIHBtaWNfcmVnW2FkZHJdID0gdmFsOworICAgIH0KKworCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9XUklURSwgYWRkciwgdmFsLCAweDAwKTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCWthbF9naXZlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jayk7Cit9CisKKy8vIFdyaXRlIFdob2xlIEJ5dGVzCit2b2lkIGRjbF9wbWljX2J5dGVfd3JpdGVfbm9sb2NrKERDTF9VSU5UMTYgYWRkciwgRENMX1VJTlQxNiB2YWwpCit7CisJRENMX1VJTlQzMiBpZHgsIHR5cGU7CisKKwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9IUlRfRE9NQUlOOworCWVsc2UKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKworCWlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisKKyAgICBpZihhZGRyIDwgUE1JQ19NQVhfUkVHX05VTSkKKyAgICB7CisgICAgICAgIHBtaWNfcmVnW2FkZHJdID0gdmFsOworICAgIH0KKworLy8JaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBhZGRyLCB2YWwsIDB4MDApOworLy8JZWxzZQorLy8JCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9XUklURSwgYWRkciwgdmFsLCAweDAwKTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCit9CisKKy8vIFdyaXRlIHJlZ2lzdGVyIGZpZWxkCit2b2lkIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUM2MzU2X0ZMQUdTX0xJU1RfRU5VTSBmbGFnLCBEQ0xfVUlOVDE2IHNlbCkKK3sKKyAgICBjb25zdCBQTUlDX0ZMQUdfVEFCTEVfRU5UUlkgKnBUYWJsZSA9IHBtaWNfZmxhZ3NfdGFibGU7CisJRENMX1VJTlQzMiB0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCURDTF9VSU5UMzIgaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKwlrYWxfdGFrZV9zcGlubG9jayhkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2ssIEtBTF9JTkZJTklURV9XQUlUKTsKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKyAgICBwbWljX3JlZ19sb2cuY29tbWFuZF9mbGFnID0gZmxhZzsKKyAgICBwbWljX3JlZ19sb2cucmVnX2JlZm9yZV93cml0ZSA9IHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdOworCisgICAgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gJj0gfihwVGFibGVbZmxhZ10ubWFzayA8PCBwVGFibGVbZmxhZ10uc2hpZnQpOworICAgIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdIHw9ICgoa2FsX3VpbnQxNilzZWwgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKworLy8JaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBwVGFibGVbZmxhZ10ub2Zmc2V0LCBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSwgMHgwMCk7CisvLwllbHNlCisvLwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBwVGFibGVbZmxhZ10ub2Zmc2V0LCBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSwgMHgwMCk7CisKKyAgICBwbWljX3JlZ19sb2cud3JpdGVfdmFsdWUgPSBzZWw7CisgICAgcG1pY19yZWdfbG9nLmFkZHJlc3Nfb2Zmc2V0ID0gcFRhYmxlW2ZsYWddLm9mZnNldDsKKyAgICBwbWljX3JlZ19sb2cucmVnX21hc2sgPSBwVGFibGVbZmxhZ10ubWFzazsKKyAgICBwbWljX3JlZ19sb2cucmVnX3NoaWZ0ID0gcFRhYmxlW2ZsYWddLnNoaWZ0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfYWRkciA9IHBUYWJsZVtmbGFnXS5vZmZzZXQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19kYXRhID0gcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF07CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lLCAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUpOworI2VuZGlmCisKKwlrYWxfZ2l2ZV9zcGlubG9jayhkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2spOworfQorCisvLyBXcml0ZSByZWdpc3RlciBmaWVsZAordm9pZCBkY2xfcG1pY19maWVsZF93cml0ZV9ub2xvY2soUE1JQzYzNTZfRkxBR1NfTElTVF9FTlVNIGZsYWcsIERDTF9VSU5UMTYgc2VsKQoreworICAgIGNvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSAqcFRhYmxlID0gcG1pY19mbGFnc190YWJsZTsKKwlEQ0xfVUlOVDMyIHR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisJRENMX1VJTlQzMiBpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworICAgIHBtaWNfcmVnX2xvZy5jb21tYW5kX2ZsYWcgPSBmbGFnOworICAgIHBtaWNfcmVnX2xvZy5yZWdfYmVmb3JlX3dyaXRlID0gcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF07CisKKyAgICBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSAmPSB+KHBUYWJsZVtmbGFnXS5tYXNrIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisgICAgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gfD0gKChrYWxfdWludDE2KXNlbCA8PCBwVGFibGVbZmxhZ10uc2hpZnQpOworCisvLwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKy8vCWVsc2UKKy8vCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKworICAgIHBtaWNfcmVnX2xvZy53cml0ZV92YWx1ZSA9IHNlbDsKKyAgICBwbWljX3JlZ19sb2cuYWRkcmVzc19vZmZzZXQgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfbWFzayA9IHBUYWJsZVtmbGFnXS5tYXNrOworICAgIHBtaWNfcmVnX2xvZy5yZWdfc2hpZnQgPSBwVGFibGVbZmxhZ10uc2hpZnQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19hZGRyID0gcFRhYmxlW2ZsYWddLm9mZnNldDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2RhdGEgPSBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICAgICAgICAgICAgICAgICAgUkVBRCBBUElzICAgICAgICAgICAgICAgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBSZWFkIFdob2xlIEJ5dGVzCitEQ0xfVUlOVDE2IGRjbF9wbWljX2J5dGVfcmV0dXJuKERDTF9VSU5UMTYgYWRkcikKK3sKKyAgICBEQ0xfVUlOVDE2IHJlZ190ZW1wOworCURDTF9VSU5UMzIgaWR4LCB0eXBlOworCisJa2FsX3Rha2Vfc3BpbmxvY2soZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrLCBLQUxfSU5GSU5JVEVfV0FJVCk7CisKKwl0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCWlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisvLwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfUkVBRCwgKERDTF9VSU5UMzIpYWRkciwgMHgwMCwgJnJlZ190ZW1wKTsKKy8vCWVsc2UKKy8vCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfUkVBRCwgKERDTF9VSU5UMzIpYWRkciwgMHgwMCwgJnJlZ190ZW1wKTsKKworICAgIGlmKGFkZHIgPCBQTUlDX01BWF9SRUdfTlVNKQorICAgIHsKKyAgICAgICAgcG1pY19yZWdbYWRkcl0gPSByZWdfdGVtcDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lLCAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUpOworI2VuZGlmCisKKwlrYWxfZ2l2ZV9zcGlubG9jayhkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2spOworCisgICAgcmV0dXJuIHJlZ190ZW1wOworfQorCisvLyBSZWFkIFdob2xlIEJ5dGVzCitEQ0xfVUlOVDE2IGRjbF9wbWljX2J5dGVfcmV0dXJuX25vbG9jayhEQ0xfVUlOVDE2IGFkZHIpCit7CisgICAgRENMX1VJTlQxNiByZWdfdGVtcDsKKwlEQ0xfVUlOVDMyIGlkeCwgdHlwZTsKKworCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCXR5cGUgPSBQTUlDX0xPR19UWVBFX0hSVF9ET01BSU47CisJZWxzZQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCisJaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKy8vCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCAoRENMX1VJTlQzMilhZGRyLCAweDAwLCAmcmVnX3RlbXApOworLy8JZWxzZQorLy8JCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCAoRENMX1VJTlQzMilhZGRyLCAweDAwLCAmcmVnX3RlbXApOworCisgICAgaWYoYWRkciA8IFBNSUNfTUFYX1JFR19OVU0pCisgICAgeworICAgICAgICBwbWljX3JlZ1thZGRyXSA9IHJlZ190ZW1wOworICAgIH0KKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworICAgIHJldHVybiByZWdfdGVtcDsKK30KKworLy8gUmVhZCByZWdpc3RlciBmaWVsZAorRENMX1VJTlQxNiBkY2xfcG1pY19maWVsZF9yZWFkKFBNSUM2MzU2X0ZMQUdTX0xJU1RfRU5VTSBmbGFnKQoreworICAgIGNvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSAqcFRhYmxlID0gcG1pY19mbGFnc190YWJsZTsKKyAgICBEQ0xfVUlOVDE2IHJlZ19yZXR1cm4gPSAwOworCURDTF9VSU5UMzIgdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKwlEQ0xfVUlOVDMyIGlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisJaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfSFJUX0RPTUFJTjsKKwllbHNlCisJCXR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisKKwlpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisvLwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfUkVBRCwgcFRhYmxlW2ZsYWddLm9mZnNldCwgMHgwMCwgJnBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdKTsKKy8vCWVsc2UKKy8vCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfUkVBRCwgcFRhYmxlW2ZsYWddLm9mZnNldCwgMHgwMCwgJnBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdKTsKKworICAgIHJlZ19yZXR1cm4gPSAoKHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdICYgKHBUYWJsZVtmbGFnXS5tYXNrIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCkpID4+IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lLAorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworICAgIHJldHVybiByZWdfcmV0dXJuOworfQorCisvLyBFeHBvcnRlZCBmb3IgRU0gdXNlZAordm9pZCBwbWljX0VNX3JlZ193cml0ZShrYWxfdWludDE2IHJlZywga2FsX3VpbnQxNiB2YWwpeworCWRjbF9wbWljX2J5dGVfd3JpdGVfbm9sb2NrKHJlZywgdmFsKTsKKy8vCSAgZGNsX3BtaWNfYnl0ZV93cml0ZShyZWcsIHZhbCk7Cit9CisKK2thbF91aW50MTYgcG1pY19FTV9yZWdfcmVhZChrYWxfdWludDE2IHJlZyl7CisJcmV0dXJuICBkY2xfcG1pY19ieXRlX3JldHVybl9ub2xvY2socmVnKTsKK30KKworY29uc3QgRENMX1VJTlQzMiB2cGFfdm9zZWxbXSA9Cit7CisgICAgUE1VX1ZPTFRfMDBfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMF82MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAwXzcwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDBfODAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMF85MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzAwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV8yMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAxXzMwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfNDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV81MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAxXzkwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfMDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl8xMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzIwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfMzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl80MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl83MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfOTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wM18wMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAzXzEwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfMjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wM18zMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDNfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wM182MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorfTsKKworY29uc3QgRENMX1VJTlQzMiB2c2ltMV92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF9JTlZBTElELCAgICAgICBQTVVfVk9MVF9JTlZBTElELCAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV83MDAwMDBfViwKKyAgICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzcwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLAorICAgIFBNVV9WT0xUXzAzXzEwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUX0lOVkFMSUQsCit9OworCitjb25zdCBEQ0xfVUlOVDMyIHZ4bzIyX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUX0lOVkFMSUQsICAgICAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgIFBNVV9WT0xUXzAyXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCit9OworCitjb25zdCBEQ0xfVUlOVDMyIHZtb2RlbV92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF8wMF81MDAwMDBfViwJUE1VX1ZPTFRfMDBfNTUwMDAwX1YsCVBNVV9WT0xUXzAwXzYwMDAwMF9WLAlQTVVfVk9MVF8wMF83NTAwMDBfViwKKyAgICBQTVVfVk9MVF8wMF84MDAwMDBfViwJUE1VX1ZPTFRfMDBfODUwMDAwX1YsCVBNVV9WT0xUX0lOVkFMSUQsCVBNVV9WT0xUX0lOVkFMSUQsCit9OworCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKK2NvbnN0IERDTF9VSU5UMzIgdnNyYW1fdm1kX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUXzAwXzU1MDAwMF9WLCAgIFBNVV9WT0xUXzAwXzYwMDAwMF9WLAlQTVVfVk9MVF8wMF82NTAwMDBfViwJUE1VX1ZPTFRfMDBfNzUwMDAwX1YsCisgICAgUE1VX1ZPTFRfMDBfODAwMDAwX1YsCVBNVV9WT0xUXzAwXzg1MDAwMF9WLAlQTVVfVk9MVF9JTlZBTElELAlQTVVfVk9MVF9JTlZBTElELAorfTsKKworUE1VX1BBUkFNRVRFUl9UQUJMRV9FTlRSWSBwbXVfcGFyYW1ldGVyX3RhYmxlW109Cit7CisJe0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlBBX1NXKSwJCSAgICAJdnBhX3Zvc2VsLAkJICAgIE5VTEwsCSAgICBHRVRBUlJOVU0odnBhX3Zvc2VsKQkJCX0sCisJe0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlBBKSwJCSAgICAJdnBhX3Zvc2VsLAkJICAgIE5VTEwsCSAgICBHRVRBUlJOVU0odnBhX3Zvc2VsKQkJCX0sCisJe0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlNJTTEpLAkJICAgIAl2c2ltMV92b3NlbCwJCU5VTEwsCSAgICBHRVRBUlJOVU0odnNpbTFfdm9zZWwpCQkJfSwKKyAgICB7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWU0lNMiksCQkgICAgCXZzaW0xX3Zvc2VsLAkJTlVMTCwgICAJR0VUQVJSTlVNKHZzaW0xX3Zvc2VsKQkgICAgCX0sCisJe0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlhPMjIpLAkJICAgIAl2eG8yMl92b3NlbCwJCU5VTEwsICAgCUdFVEFSUk5VTSh2eG8yMl92b3NlbCkJICAgIAl9LAorCXtFTkMoTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0UsIFZNT0RFTSksCQl2bW9kZW1fdm9zZWwsCQlOVUxMLAkJR0VUQVJSTlVNKHZtb2RlbV92b3NlbCkJCQl9LAorICAgIHtFTkMoTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0UsIFZTUkFNX01EKSwJCXZzcmFtX3ZtZF92b3NlbCwJTlVMTCwgICAJR0VUQVJSTlVNKHZzcmFtX3ZtZF92b3NlbCkJCX0sCit9OworCisKK2V4dGVybiBQTVVfQ09OVFJPTF9IQU5ETEVSIHBtdV9jb250cm9sX2hhbmRsZXI7CisKK0RDTF9VSU5UMTYgcG11X3BhcmFtZXRlcl9zaXplID0gMDsKKworRENMX1NUQVRVUyBQTUlDX2NvbnRyb2xfaGFuZGxlcihEQ0xfSEFORExFIGhhbmRsZSxEQ0xfQ1RSTF9DTUQgY21kLERDTF9DVFJMX0RBVEFfVCAqZGF0YSkKK3sKKyAgICBEQ0xfVUlOVDE2CXJlZ1ZhbDsKKyAgICBEQ0xfSU5UMzIJcmV0dXJuX3ZhbCA9IFNUQVRVU19GQUlMOworI2lmIGRlZmluZWQoRENMX1BNSUNfTU9EVUxFX0NPTlRST0wpCisJY3VycmVudF9kY2xfaGFuZGxlID0gaGFuZGxlOworI2VuZGlmCisgICAgc3dpdGNoKGNtZCkKKyAgICB7CisgICAgICAgIGNhc2UgTERPX0JVQ0tfU0VUX0VOOgkvL0VuYWJsZSBjb250cm9sIGluIFNXIG1vZGUKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOICpwTGRvQnVja0N0cmw9JihkYXRhLT5yUE1VTGRvQnVja1NldEVuKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUEFfU1c6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZV9ub2xvY2soUE1JQ19FTlVNX1JHX0JVQ0tfVlBBX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWTUlQSToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVk1JUElfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVkZFMjhfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjEyX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUzFfVk9URVJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZTMl9WT1RFUl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9MUF9NT0RFX1NFVCAqcExkb0J1Y2tDdHJsID0mIChkYXRhLT5yUE1VTGRvQnVja1NldExwTW9kZVNldCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZNSVBJOgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZNSVBJX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWRkUyODoKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WRkUyOF9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlJGMTg6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMThfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjEyX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQkgY2FzZSBMRE9fQlVDS19TRVRfT0NGQl9FTjoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09DRkJfRU4gKnBMZG9CdWNrQ3RybD0mKGRhdGEtPnJQTVVMZG9CdWNrU2V0T2NmYkVuKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTFfT0NGQl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX09DRkJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX0dFVF9WT1NFTDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPU0VMICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrR2V0Vm9zZWwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUzE6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZTMV9WT1RFUl9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUzI6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZTMl9WT1RFUl9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX1NFVF9WT1NFTDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPU0VMICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0Vm9zZWwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WTU9ERU1fVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUzE6CisgICAgICAgICAgICAgICAgeworCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUzFfVk9URVJfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUzI6CisgICAgICAgICAgICAgICAgeworCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUzJfVk9URVJfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX0dFVF9WT1NFTF9TTEVFUDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPU0VMX1NMRUVQICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrR2V0Vm9zZWxTbGVlcCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX1NMRUVQKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX1ZPU0VMX1NMRUVQOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9TRUxfU0xFRVAgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWb3NlbFNsZWVwKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX1NMRUVQLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfTU9ERVNFVDoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX01PREVTRVQgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRNb2Rlc2V0KTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlBBX1NXOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGVfbm9sb2NrKFBNSUNfRU5VTV9SR19WUEFfTU9ERVNFVCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WTU9ERU1fTU9ERVNFVCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WUzJfTU9ERVNFVCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX09QX0VOOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT1BfRU4gKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRPcEVuKTsKKworCQkJa2FsX3VpbnQxNiBtb2RlID0oKHBMZG9CdWNrQ3RybC0+c3dfb3BfZW4gIDw8IFNXX09QX0VOX1NISUZUKSB8IChwTGRvQnVja0N0cmwtPmh3MF9vcF9lbiA8PCBIVzBfT1BfRU5fU0hJRlQpfAorCQkJCQkJCSAgKHBMZG9CdWNrQ3RybC0+aHcxX29wX2VuIDw8IEhXMV9PUF9FTl9TSElGVCl8IChwTGRvQnVja0N0cmwtPmh3Ml9vcF9lbiA8PCBIVzJfT1BfRU5fU0hJRlQpKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKwkJCQl7CisJCQkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0xX09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZTSU0yOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlNJTTJfT1BfRU5fU0VUX0FERFIsIG1vZGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVk1JUEk6CisJCQkJeworCQkJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WTUlQSV9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZGRTI4X09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlJGMThfT1BfRU5fU0VUX0FERFIsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxMl9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX0NMUl9PUF9FTjoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09QX0VOICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0T3BFbik7CisKKwkJCWthbF91aW50MTYgbW9kZSA9KChwTGRvQnVja0N0cmwtPnN3X29wX2VuICA8PCBTV19PUF9FTl9TSElGVCkgfCAocExkb0J1Y2tDdHJsLT5odzBfb3BfZW4gPDwgSFcwX09QX0VOX1NISUZUKXwKKwkJCQkJCQkgIChwTGRvQnVja0N0cmwtPmh3MV9vcF9lbiA8PCBIVzFfT1BfRU5fU0hJRlQpfCAocExkb0J1Y2tDdHJsLT5odzJfb3BfZW4gPDwgSFcyX09QX0VOX1NISUZUKSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKwkJCQl7CisJCQkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WTU9ERU1fT1BfRU5fQ0xSX0FERFIsIG1vZGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlNJTTE6CisJCQkJeworCQkJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WU0lNMV9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWU0lNMjoKKwkJCQl7CisJCQkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0yX09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZNSVBJOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVk1JUElfT1BfRU5fQ0xSX0FERFIsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVkZFMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjE4X09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlJGMTJfT1BfRU5fQ0xSX0FERFIsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfSFdfT1BfQ0ZHOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfSFdfT1BfQ0ZHICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0SHdPcCk7CisKKwkJCWthbF91aW50MTYgdmFsdWUgPSgocExkb0J1Y2tDdHJsLT5odzBfb3BfY2ZnIDw8IEhXMF9PUF9DRkdfU0hJRlQpIHwKKwkJCQkJCQkgIChwTGRvQnVja0N0cmwtPmh3MV9vcF9jZmcgPDwgSFcxX09QX0NGR19TSElGVCkgfAorCQkJCQkJCSAgKHBMZG9CdWNrQ3RybC0+aHcyX29wX2NmZyA8PCBIVzJfT1BfQ0ZHX1NISUZUKSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0xX09QX0NGR19TRVRfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WU0lNMl9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZNSVBJOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVk1JUElfT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19TRVRfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMTg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlJGMTJfT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX0NMUl9IV19PUF9DRkc6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX0NMUl9IV19PUF9DRkcgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tDbHJId09wKTsKKworCQkJa2FsX3VpbnQxNiB2YWx1ZSA9KChwTGRvQnVja0N0cmwtPmh3MF9vcF9jZmcgPDwgSFcwX09QX0NGR19TSElGVCkgfAorCQkJCQkJCSAgKHBMZG9CdWNrQ3RybC0+aHcxX29wX2NmZyA8PCBIVzFfT1BfQ0ZHX1NISUZUKSB8CisJCQkJCQkJICAocExkb0J1Y2tDdHJsLT5odzJfb3BfY2ZnIDw8IEhXMl9PUF9DRkdfU0hJRlQpKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlNJTTFfT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0yX09QX0NGR19DTFJfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVk1JUEk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WTUlQSV9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZGRTI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVkZFMjhfT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjE4X09QX0NGR19DTFJfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxMl9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX0dPX09OX09QOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfR09fT05fT1AgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRHb09uT3ApOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX09GRikKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX09QX0NGR19DTFIsIDEgPDwgR09fT05fT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX09GRikKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTFfT1BfQ0ZHX1NFVCwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTFfT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMl9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMl9PUF9DRkdfQ0xSLCAxIDw8IEdPX09OX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZNSVBJOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9PRkYpCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZNSVBJX09QX0NGR19TRVQsIDEgPDwgR09fT05fT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZNSVBJX09QX0NGR19DTFIsIDEgPDwgR09fT05fT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkZFMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX09GRikKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVkZFMjhfT1BfQ0ZHX1NFVCwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVkZFMjhfT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF9PUF9DRkdfQ0xSLCAxIDw8IEdPX09OX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9PRkYpCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjEyX09QX0NGR19TRVQsIDEgPDwgR09fT05fT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjEyX09QX0NGR19DTFIsIDEgPDwgR09fT05fT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfR09fTFBfT1A6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9HT19MUF9PUCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldEdvTHBPcCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVCwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSLCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9OT19MUCkKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTFfT1BfQ0ZHX1NFVCwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTFfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX09QX0NGR19TRVQsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX09QX0NGR19DTFIsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVk1JUEk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX05PX0xQKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WTUlQSV9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WTUlQSV9PUF9DRkdfQ0xSLCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZGRTI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9OT19MUCkKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVkZFMjhfT1BfQ0ZHX1NFVCwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVkZFMjhfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjE4X09QX0NGR19TRVQsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjE4X09QX0NGR19DTFIsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX05PX0xQKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxMl9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxMl9PUF9DRkdfQ0xSLCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisKKyAgICAgICAgY2FzZSBMRE9fQlVDS19TRVRfVk9MVEFHRToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPTFRBR0UgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWb2x0YWdlKTsKKyAgICAgICAgICAgIHJlZ1ZhbCA9IFBNVV9QYXJhbWV0ZXJfdG9fVmFsdWUoRU5DKGNtZCwgcExkb0J1Y2tDdHJsLT5tb2QpLCBwTGRvQnVja0N0cmwtPnZvbHRhZ2UpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WU0lNMV9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZTSU0yX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlBBX1NXOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGVfbm9sb2NrKFBNSUNfRU5VTV9SR19CVUNLX1ZQQV9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZYTzIyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZYTzIyX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKworCSAgICBjYXNlIExET19CVUNLX0dFVF9WT0xUQUdFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9MVEFHRQkqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWb2x0KTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fREFfVk1PREVNX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0U6CisJCXsKKwkJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9TTEVFUF9WT0xUQUdFICpwTGRvQnVja0N0cmw9JihkYXRhLT5yUE1VTGRvQnVja1NldFNsZWVwVm9sdGFnZSk7CisJCQlyZWdWYWwgPSBQTVVfUGFyYW1ldGVyX3RvX1ZhbHVlKEVOQyhjbWQsIHBMZG9CdWNrQ3RybC0+bW9kKSwgcExkb0J1Y2tDdHJsLT5zbGVlcFZvbHRhZ2UpOworCisJCQlzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWQ09SRToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WQ09SRV9TTEVFUF9WT0xUQUdFLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZNT0RFTV9TTEVFUF9WT0xUQUdFLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJLyoKKyAgICAgICAgY2FzZSBWUEFfU0VUX0VOOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9WUEFfU0VUX0VOICpwVnBhU2V0RW4gPSAmKGRhdGEtPnJQTVVWcGFTZXRFbik7CisgICAgICAgICAgICBkY2xfcG1pYzYzMzJfZmllbGRfd3JpdGUoTVQ2MzMyX1ZQQV9FTiwgcFZwYVNldEVuLT5lbmFibGUpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwkJKi8KKworCQljYXNlIFZQQV9HRVRfVk9MVEFHRV9MSVNUOgorCQl7CisJCQlQTVVfQ1RSTF9WUEFfR0VUX1ZPTFRBR0VfTElTVCAqcFZwYUN0cmwgPSAmKGRhdGEtPnJQTVVWcGFHZXRWb2x0YWdlTGlzdCk7CisJCQlwVnBhQ3RybC0+cFZvbHRhZ2VMaXN0ID0gdnBhX3Zvc2VsOworCQkJcFZwYUN0cmwtPm51bWJlciA9IEdFVEFSUk5VTSh2cGFfdm9zZWwpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworICAgICAgICAgY2FzZSBBRENfU0VUX1JRU1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0FEQ19TRVRfUlFTVCAqcEFkY0N0cmwgPSAmKGRhdGEtPnJQTVVBZGNTZXRScXN0KTsKKyAgICAgICAgICAgIGlmKChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0lOSVQpICYmIChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0RBVEEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEVuYWJsZSBDTEtTUSBmb3IgTUQgKFNXIG1vZGUpIFJHX0NMS1NRX0VOX0FVWF9NRAorICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19UT1BfQ0xLU1FfU0VUX0FERFIsICgweDEgPDwgUE1JQ19SR19DTEtTUV9FTl9BVVhfTURfU0hJRlQpKTsKKyAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfQVVYQURDX1JRU1QxX0NMUl9BRERSLCAocEFkY0N0cmwtPmVuYWJsZSA8PCBQTUlDX0FVWEFEQ19SUVNUX0NIN19CWV9NRF9TSElGVCkpOworICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19BVVhBRENfUlFTVDFfU0VUX0FERFIsICgweDEgPDwgUE1JQ19BVVhBRENfUlFTVF9DSDdfQllfTURfU0hJRlQpKTsKKyAgICAgICAgICAgIEFVWEFEQ19TdGF0dXMgPSBBVVhBRENfUkVBRF9SRVFVRVNUOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCisgICAgICAgIGNhc2UgQURDX0dFVF9SRFlfTUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0FEQ19HRVRfUkRZX01EICpwQWRjQ3RybCA9ICYoZGF0YS0+clBNVUFkY0dldFJkeU1kKTsKKyAgICAgICAgICAgIHBBZGNDdHJsLT5zdGF0dXMgPSAoRENMX0JPT0wpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fQVVYQURDX0FEQ19SRFlfQ0g3X0JZX01EKTsKKyAgICAgICAgICAgIGlmKChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX1JFUVVFU1QpICYmIChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0JVU1kpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYocEFkY0N0cmwtPnN0YXR1cyA9PSBEQ0xfVFJVRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfUkVBRFk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0JVU1k7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBBRENfR0VUX09VVF9NRDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfQURDX0dFVF9PVVRfTUQgKnBBZGNDdHJsID0gJihkYXRhLT5yUE1VQWRjR2V0T3V0TWQpOworICAgICAgICAgICAgaWYoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9SRUFEWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWRjQ3RybC0+ZGF0YSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0FVWEFEQ19BRENfT1VUX0NIN19CWV9NRCk7CisgICAgICAgICAgICBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfREFUQTsKKyAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfQVVYQURDX1JRU1QxX0NMUl9BRERSLCAoMHgxIDw8IFBNSUNfQVVYQURDX1JRU1RfQ0g3X0JZX01EX1NISUZUKSk7CisgICAgICAgICAgICAvLyBEaXNhYmxlIENMS1NRIGZvciBNRCAoU1cgbW9kZSkgUkdfQ0xLU1FfRU5fQVVYX01ECisgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1RPUF9DTEtTUV9DTFJfQUREUiwgKDB4MSA8PCBQTUlDX1JHX0NMS1NRX0VOX0FVWF9NRF9TSElGVCkpOworCisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgVE9QX1NFVF9TUkNMS0VOX0lOX0VOOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9UT1BfU0VUX1NSQ0xLRU5fSU5fRU4gKnBUb3BTcmNsa2VuQ3RybCA9ICYoZGF0YS0+clBNVVRvcFNldFNyY2xrZW5JbkVuKTsKKworICAgICAgICAgICAgc3dpdGNoKHBUb3BTcmNsa2VuQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgUE1JQ19TUkNMS0VOX0lOMDoKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19TUkNMS0VOX0lOMF9FTiwgcFRvcFNyY2xrZW5DdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFBNSUNfU1JDTEtFTl9JTjE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfU1JDTEtFTl9JTjFfRU4sIHBUb3BTcmNsa2VuQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIFRPUF9TRVRfU1JDTEtFTl9JTl9NT0RFOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9UT1BfU0VUX1NSQ0xLRU5fSU5fTU9ERSAqcFRvcFNyY2xrZW5DdHJsID0gJihkYXRhLT5yUE1VVG9wU2V0U3JjbGtlbkluTW9kZSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwVG9wU3JjbGtlbkN0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBNSUNfU1JDTEtFTl9JTjA6CisgICAgICAgICAgICAgICAgeworCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfU1JDTEtFTl9JTjBfSFdfTU9ERSwgcFRvcFNyY2xrZW5DdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFBNSUNfU1JDTEtFTl9JTjE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfU1JDTEtFTl9JTjFfSFdfTU9ERSwgcFRvcFNyY2xrZW5DdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgRENYT19TRVRfUkVHSVNURVJfVkFMVUU6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0RDWE9fU0VUX1JFR0lTVEVSX1ZBTFVFCSpwQ2hyQ3RybCA9ICYoZGF0YS0+clBNVURjeG9TZXRSZWdpc3RlclZhbHVlKTsKKworCQkJcG1pY19FTV9yZWdfd3JpdGUocENockN0cmwtPm9mZnNldCwgcENockN0cmwtPnZhbHVlKTsKKwkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERDWE9fR0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9EQ1hPX0dFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmw9JihkYXRhLT5yUE1VRGN4b0dldFJlZ2lzdGVyVmFsdWUpOworICAgICAgICAgICAgcENockN0cmwtPnZhbHVlID0gcG1pY19FTV9yZWdfcmVhZChwQ2hyQ3RybC0+b2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNSVNDX1NFVF9SRUdJU1RFUl9WQUxVRToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTUlTQ19TRVRfUkVHSVNURVJfVkFMVUUJKnBDaHJDdHJsID0gJihkYXRhLT5yUE1VTWlzY1NldFJlZ2lzdGVyVmFsdWUpOworI2lmIGRlZmluZWQoRENMX1BNSUNfUEVSTUlTU0lPTl9DT05UUk9MKQorCQkJaWYoZGNsX3BtaWNfY2hlY2tfcGVybWlzc2lvbihwQ2hyQ3RybC0+b2Zmc2V0KT09IERDTF9UUlVFKQorI2VuZGlmCisJCQl7CisJCQkJcG1pY19FTV9yZWdfd3JpdGUocENockN0cmwtPm9mZnNldCwgcENockN0cmwtPnZhbHVlKTsKKwkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJfQorI2lmIGRlZmluZWQoRENMX1BNSUNfUEVSTUlTU0lPTl9DT05UUk9MKQorCQkJZWxzZQorCQkJeworCQkJCWlsbGVnYWxfbWlzY19zZXRfcmVnaXN0ZXJfdmFsdWUub2Zmc2V0ID0gcENockN0cmwtPm9mZnNldDsKKwkJCQlpbGxlZ2FsX21pc2Nfc2V0X3JlZ2lzdGVyX3ZhbHVlLnZhbHVlID0gcENockN0cmwtPnZhbHVlOworCQkJCUFTU0VSVCgwKTsKKwkJCX0KKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUlTQ19HRVRfUkVHSVNURVJfVkFMVUU6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX01JU0NfR0VUX1JFR0lTVEVSX1ZBTFVFCSpwQ2hyQ3RybD0mKGRhdGEtPnJQTVVNaXNjR2V0UmVnaXN0ZXJWYWx1ZSk7CisgICAgICAgICAgICBwQ2hyQ3RybC0+dmFsdWUgPSBwbWljX0VNX3JlZ19yZWFkKHBDaHJDdHJsLT5vZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2lmIGRlZmluZWQoRENMX1BNSUNfTU9EVUxFX0NPTlRST0wpCisJY3VycmVudF9kY2xfaGFuZGxlID0gMDsKKyNlbmRpZgorICAgIHJldHVybiByZXR1cm5fdmFsOworCit9CisKK2V4dGVybiB2b2lkIGRjbF9wbWljX21vZGVtX29ubHlfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFBNSUNfUmVhZF9BbGwodm9pZCk7CisjaWYgZGVmaW5lZChQTUlDX1VOSVRfVEVTVCkKK2V4dGVybiB2b2lkIFBNSUNfUmVhZF9BbGwodm9pZCk7CitleHRlcm4gdm9pZCBQTUlDX1VuaXRfVGVzdCh2b2lkKTsKKyNlbmRpZgorRENMX1VJTlQzMiBEUlZfUmVhZF9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIpCit7CisgICAgcmV0dXJuIGRjbF9wbWljX2J5dGVfcmV0dXJuKHBtaWNfYWRkcik7Cit9CisKK3ZvaWQgRFJWX1dyaXRlX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkciwgRENMX1VJTlQzMiB2YWx1ZSkKK3sKKyAgICBkY2xfcG1pY19ieXRlX3dyaXRlKHBtaWNfYWRkciwgdmFsdWUpOworfQorCit2b2lkIGRjbF9wbWljX2luaXQodm9pZCl7CisgICAgZXh0ZXJuIHZvaWQgcG1pY193cmFwX2R1bXBfaW5pdCh2b2lkKTsKKyAgICBwbXVfY29udHJvbF9oYW5kbGVyID0gUE1JQ19jb250cm9sX2hhbmRsZXI7CisgICAgcG11X3BhcmFtZXRlcl9zaXplID0gR0VUQVJSTlVNKHBtdV9wYXJhbWV0ZXJfdGFibGUpOworCisgICAgcG1pY193cmFwX2R1bXBfaW5pdCgpOworCisJZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrID0ga2FsX2NyZWF0ZV9zcGlubG9jaygicG1pYyBhY2Nlc3MiKTsKKwlkY2xfcG1pY19jb250cm9sX3NwaW5sb2NrID0ga2FsX2NyZWF0ZV9zcGlubG9jaygicG1pYyBjb250cm9sIik7CisKKyNpZiAgIWRlZmluZWQoX19TTUFSVF9QSE9ORV9NT0RFTV9fKQorICAgIERydlBXUkFQX0luaXQoKTsKKyNlbmRpZgorICAgIHBtaWNfaHdfdmVyc2lvbiA9IGRjbF9wbWljX2J5dGVfcmV0dXJuKE1UNjM1Nl9IV0NJRCk7CisJaWYgKHBtaWNfaHdfdmVyc2lvbiA9PSAweDApCisJCUFTU0VSVCgwKTsKKworICAgIFBNSUNfUmVhZF9BbGwoKTsKKworI2lmICFkZWZpbmVkKF9fU01BUlRfUEhPTkVfTU9ERU1fXykKKworLyoKKwlpZihEcnZQV1JBUF9DaGVja0NJUEhFUigpID09IDEpCisgICAgZGNsX3BtaWM2MzU1X21vZGVtX29ubHlfaW5pdCgpOworCWVsc2UKKyovCisJZGNsX3BtaWNfbW9kZW1fb25seV9pbml0KCk7CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChQTUlDX1VOSVRfVEVTVCkKKyAgICBQTUlDX1JlYWRfQWxsKCk7CisgICAgUE1JQ19Vbml0X1Rlc3QoKTsKKyAgICBQTUlDX1JlYWRfQWxsKCk7CisjZW5kaWYKKyAgICBwbWljX2luaXRfZG9uZSA9IERDTF9UUlVFOworCit9CisKK3ZvaWQgUE1JQ19SZWFkX0FsbCh2b2lkKQoreworICAgIHZvbGF0aWxlIGthbF91aW50MzIgaSxqOworICAgIGo9MDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgUE1JQ19NQVhfUkVHX05VTTsgaSArPSAyKXsKKyAgICAgICAgcG1pY19yZWdbaV0gPSBkY2xfcG1pY19ieXRlX3JldHVybihpKTsKKyAgICAJd2hpbGUoaiE9MHgyMDApe2orKzt9CisgICAgCWo9MDsKKyAgICB9Cit9CisjaWYgZGVmaW5lZChQTUlDX1VOSVRfVEVTVCkKK3ZvaWQgUE1JQ19Vbml0X1Rlc3Qodm9pZCkKK3sKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT05fQ1RSTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kZSA9IEhXX0NPTlRST0w7IC8vIChTV19DT05UUk9MX0JZX1JFRyAvIEhXX0NPTlRST0wpCisJCXZhbC5tb2QgPSBWTUlQSTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfT05fQ1RSTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLmVuYWJsZSA9IERDTF9UUlVFOyAvLyAoRENMX1RSVUUgLyBEQ0xfRkFMU0UpOworCQl2YWwubW9kID0gVk1JUEk7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWUEFfU1c7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2Q9VlBBX1NXOworCQl2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworCQkvKiAgICAgUE1VX1ZPTFRfMDBfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDBfNjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDBfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDBfODAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDBfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfMDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfMjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfNDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfNjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfMDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfNDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfNjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfODAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDNfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfNDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDNfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfNjAwMDAwX1YsICAgICAgKi8KKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kID0gVlBBX1NXOworCQl2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX01PREVTRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTl9DVFJMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2RlID0gSFdfQ09OVFJPTDsgLy8gKFNXX0NPTlRST0xfQllfUkVHIC8gSFdfQ09OVFJPTCkKKwkJdmFsLm1vZCA9IFZSRjE7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOX0NUUkwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX1NFTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuc2VsID0gU1JDTEtFTl9JTjFfU0VMOworCQkvKiBTUkNMS0VOX0lOMV9TRUwgLyBTUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX09SX1NSQ0xLRU5fSU4yX1NFTC8KKwkJCVNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwgKi8KKwkJdmFsLm1vZCA9IFZSRjE7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOX1NFTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kID0gVlJGMTsKKwkJdmFsLm1vZGUgPSBGT1JDRV9QV01fTU9ERTsgLy8gKEFVVE9fTU9ERSAvIEZPUkNFX1BXTV9NT0RFKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9NT0RFU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX1ZSRjFfU0VUX01PREVTRVRfQ0tQRE5fU0VUIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5yZWd2YWwgPSAweDc7IC8vICgweDB+MHhGKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfU0VUX01PREVTRVRfQ0tQRE5fU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX1ZSRjFfU0VUX01PREVTRVRfQ0tQRE5fQ0xSIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5yZWd2YWwgPSAweDc7IC8vICgweDB+MHhGKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfU0VUX01PREVTRVRfQ0tQRE5fQ0xSLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX1ZSRjFfR0VUX01PREVTRVRfQ0tQRE4gdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJLy8gdmFsLnJlZ3ZhbCB3aWxsIGJlIHlvdXIgcmVxdWVzdCB2YWx1ZSAoIG5vIG5lZWQgZG8gYW55IHNoaWZ0KQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfR0VUX01PREVTRVRfQ0tQRE4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0NUUkwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLm1vZGUgPSBIV19DT05UUk9MOyAvLyAoU1dfQ09OVFJPTF9CWV9SRUcgLyBIV19DT05UUk9MKQorCQl2YWwubW9kID0gVlJGMjsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fQ1RSTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fU0VMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5zZWwgPSBTUkNMS0VOX0lOMV9TRUw7CisJCS8qIFNSQ0xLRU5fSU4xX1NFTCAvIFNSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfT1JfU1JDTEtFTl9JTjJfU0VMLworCQkJU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTCAqLworCQl2YWwubW9kID0gVlJGMjsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fU0VMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWUkYyOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kID0gVlJGMTsKKwkJdmFsLm1vZGUgPSBGT1JDRV9QV01fTU9ERTsgLy8gKEFVVE9fTU9ERSAvIEZPUkNFX1BXTV9NT0RFKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9NT0RFU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9TUkNMS19FTl9TRUwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLnNlbCA9IFNSQ0xLRU5fSU4xX1NFTDsKKwkJLyogU1JDTEtFTl9JTjFfU0VMIC8gU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMl9TRUwvCisJCQlTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMICovCisJCXZhbC5tb2QgPSBWTUlQSTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfU1JDTEtfRU5fU0VMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWU0lNMTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKKwkJdmFsLm1vZCA9IFZTSU0yOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kPVZTSU0xOworCQl2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworCQkvKiAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgKi8KKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kPVZTSU0yOworCQl2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworCQkvKiAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgKi8KKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9Cit9CisjZW5kaWYgLy8gRW5kIG9mICNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQorCisjZW5kaWYgLy8gRW5kIG9mICNpZiBkZWZpbmVkKFBNSUNfNjM1Nl9SRUdfQVBJKQorCmRpZmYgLS1naXQgYS9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTZfaW5pdC5jIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU2X2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQxYTA3Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU2X2luaXQuYwpAQCAtMCwwICsxLDEzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEzCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgICBkY2xfcG1pYzYzNTVfaW5pdC5jCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgICAgTU9MWSBTb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgICAgVGhpcyBmaWxlIGlzIGZvciBQTUlDIDYzNTUKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpbml0LmgiCisjaW5jbHVkZSAiZGNsLmgiCisKK2V4dGVybiBEQ0xfVUlOVDMyIERSVl9SZWFkX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkcik7CitleHRlcm4gdm9pZCBEUlZfV3JpdGVfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyLCBEQ0xfVUlOVDMyIHZhbHVlKTsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisvLyBNVDYzNTYgRUNPX0UxCit2b2lkIGRjbF9wbWljX21vZGVtX29ubHlfaW5pdCh2b2lkKQoreworCS8qIGNoYW5nZSBQTUlDIGluaXRpYWwgc2V0dGluZyB0byBwcmVsb2FkZXIgZm9yIGFsbCBTVyBsb2FkLgorCSAgICBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgcG1pYyBzZXR0aW5nLCBwbGVhc2UgY29udGFjdCBQVCBMZWFkICYgUE1JQyBBUCBTVyAqLworCit9CmRpZmYgLS1naXQgYS9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTcuYyBiL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjM1Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYjZiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTcuYwpAQCAtMCwwICsxLDIyNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxMworKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICAgZGNsX3BtaWM2MzU1XzM3LmMKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgICBNT0xZIFNvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgICBUaGlzIGZpbGUgaXMgZm9yIFBNSUMgNjM1NQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKEZQR0FfQ1RQKQorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJyZWdfYmFzZS5oIgorI2luY2x1ZGUgImRydl9jb21tLmgiCisjaW5jbHVkZSAiaW5pdC5oIgorI2luY2x1ZGUgImRjbC5oIgorI2luY2x1ZGUgImRjbF9wbXVfc3cuaCIKKyNpbmNsdWRlICJwbWljX3dyYXAuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgInVzX3RpbWVyLmgiCisKKyNpZiBkZWZpbmVkKFBNSUNfNjM1N19SRUdfQVBJKQorCisvLyBTdGFydCBQTUlDX1VOSVRfVEVTVAorLy8jZGVmaW5lIFBNSUNfVU5JVF9URVNUCisvLyBBUk0gU2VjdGlvbiBSVy9STy9aSSBVc2UgSW50ZXJuYWwgU1JBTQorI2RlZmluZSBQTUlDX0lOVEVSTkFMX1NSQU0KKworI2lmICFkZWZpbmVkKF9fRlVFX18pCisjZGVmaW5lIFNBVkVBTkRTRVRJUlFNQVNLKCkgICAgICBTYXZlQW5kU2V0SVJRTWFzaygpCisjZGVmaW5lIFJFU1RPUkVJUlFNQVNLKG1hc2spICAgICBSZXN0b3JlSVJRTWFzayhtYXNrKQorI2Vsc2UgLypkZWZpbmVkKF9fRlVFX18pKi8KKyNkZWZpbmUgU0FWRUFORFNFVElSUU1BU0soKSAgICAgIDAKKyNkZWZpbmUgUkVTVE9SRUlSUU1BU0sobWFzaykgICAgIHt9CisjZW5kaWYgLypkZWZpbmVkKF9fRlVFX18pKi8KKworI2RlZmluZSBQTUlDX01BWF9SRUdfTlVNICAgICAgICAgICAgICAgIDB4M2EwMCAvLyAweDAwMDB+MHgzYTAwCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICBFeHBvcnRlZCBBUElzICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworZXh0ZXJuIERDTF9VSU5UMTYgZGNsX3BtaWNfYnl0ZV9yZXR1cm5fbm9sb2NrKERDTF9VSU5UMTYgYWRkcik7CitleHRlcm4gRENMX1VJTlQxNiBkY2xfcG1pY19ieXRlX3JldHVybihEQ0xfVUlOVDE2IGFkZHIpOworZXh0ZXJuIHZvaWQgZGNsX3BtaWNfYnl0ZV93cml0ZV9ub2xvY2soRENMX1VJTlQxNiBhZGRyLCBEQ0xfVUlOVDE2IHZhbCk7CitleHRlcm4gdm9pZCBkY2xfcG1pY19ieXRlX3dyaXRlKERDTF9VSU5UMTYgYWRkciwgRENMX1VJTlQxNiB2YWwpOworZXh0ZXJuIERDTF9CT09MIGRjbF9wbWljX2luaXRfZG9uZV9xdWVyeSh2b2lkKTsKK3R5cGVkZWYgZW51bQoreworICAgIEFVWEFEQ19SRUFEX0lOSVQgPSAwLAorICAgIEFVWEFEQ19SRUFEX1JFUVVFU1QgPSAxLAorICAgIEFVWEFEQ19SRUFEX1JFQURZID0gMiwKKyAgICBBVVhBRENfUkVBRF9CVVNZID0gMywKKyAgICBBVVhBRENfUkVBRF9EQVRBID0gNAorfUFVWEFEQ19GU007CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiBjb21tYW5kX2ZsYWc7CisgICAga2FsX3VpbnQzMiByZWdfYmVmb3JlX3dyaXRlOworICAgIGthbF91aW50MzIgd3JpdGVfdmFsdWU7CisgICAga2FsX3VpbnQzMiBhZGRyZXNzX29mZnNldDsKKyAgICBrYWxfdWludDMyIHJlZ19tYXNrOworICAgIGthbF91aW50MzIgcmVnX3NoaWZ0OworICAgIGthbF91aW50MzIgcmVnX2FkZHI7CisgICAga2FsX3VpbnQzMiByZWdfZGF0YTsKK31QTUlDX1JFR19MT0c7CisKK0FVWEFEQ19GU00gQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0lOSVQ7CitQTUlDX1JFR19MT0cgcG1pY19yZWdfbG9nOworCisjaWYgKGRlZmluZWQoX19NVEtfVEFSR0VUX18pICYmIGRlZmluZWQoUE1JQ19JTlRFUk5BTF9TUkFNKSkKK19fYXR0cmlidXRlX18gKCh6ZXJvX2luaXQpKQorI2VuZGlmIC8qIF9fTVRLX1RBUkdFVF9fICovCisKK2thbF91aW50OCBwbWljX2h3X3ZlcnNpb247CitrYWxfdWludDggcG1pY19zd192ZXJzaW9uOwora2FsX3VpbnQxNiBwbWljX3JlZ1tQTUlDX01BWF9SRUdfTlVNXTsKK0RDTF9CT09MIHBtaWNfaW5pdF9kb25lID0gRENMX0ZBTFNFOworCitrYWxfc3BpbmxvY2tpZCBkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2s7CitleHRlcm4ga2FsX3NwaW5sb2NraWQgZGNsX3BtaWNfY29udHJvbF9zcGlubG9jazsKKworY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZIHBtaWNfZmxhZ3NfdGFibGVbXSA9Cit7CisgICAge01UNjM1N19IV0NJRCwJCVBNSUNfSFdDSURfTUFTSywJCVBNSUNfSFdDSURfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfU1dDSUQsCQlQTUlDX1NXQ0lEX01BU0ssCQlQTUlDX1NXQ0lEX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X1RPUF9DT04sCQlQTUlDX1JHX1NSQ0xLRU5fSU4wX0VOX01BU0ssCQlQTUlDX1JHX1NSQ0xLRU5fSU4wX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X1RPUF9DT04sCQlQTUlDX1JHX1NSQ0xLRU5fSU4xX0VOX01BU0ssCQlQTUlDX1JHX1NSQ0xLRU5fSU4xX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X1RPUF9DT04sCQlQTUlDX1JHX1NSQ0xLRU5fSU4wX0hXX01PREVfTUFTSywJCVBNSUNfUkdfU1JDTEtFTl9JTjBfSFdfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1N19UT1BfQ09OLAkJUE1JQ19SR19TUkNMS0VOX0lOMV9IV19NT0RFX01BU0ssCQlQTUlDX1JHX1NSQ0xLRU5fSU4xX0hXX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19UT1BfRUxSMSwJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfTElNSVRfU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX0xJTUlUX1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1N19CVUNLX1RPUF9FTFIxLAkJUE1JQ19SR19CVUNLX1ZQQV9WT1NFTF9MSU1JVF9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WUEFfVk9TRUxfTElNSVRfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0JVQ0tfVkNPUkVfQ09OMSwJCVBNSUNfUkdfQlVDS19WQ09SRV9WT1NFTF9TTEVFUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZDT1JFX1ZPU0VMX1NMRUVQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0JVQ0tfVkNPUkVfREJHMCwJCVBNSUNfREFfVkNPUkVfVk9TRUxfTUFTSywJCVBNSUNfREFfVkNPUkVfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19WQ09SRV9EQkcwLAkJUE1JQ19EQV9WQ09SRV9WT1NFTF9HUkFZX01BU0ssCQlQTUlDX0RBX1ZDT1JFX1ZPU0VMX0dSQVlfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19WQ09SRV9FTFIwLAkJUE1JQ19SR19CVUNLX1ZDT1JFX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVkNPUkVfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19WTU9ERU1fQ09OMCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19WTU9ERU1fQ09OMCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fTFBfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19WTU9ERU1fQ09OMSwJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfU0xFRVBfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfU0xFRVBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19WTU9ERU1fRUxSMCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19WTU9ERU1fT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0JVQ0tfVk1PREVNX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0JVQ0tfVk1PREVNX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0JVQ0tfVk1PREVNX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0JVQ0tfVk1PREVNX09QX0VOX1NFVCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1N19CVUNLX1ZNT0RFTV9PUF9FTl9DTFIsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PTl9PUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PTl9PUF9TSElGVCwJCX0sCisgICAge01UNjM1N19CVUNLX1ZNT0RFTV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0xQX09QX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0JVQ0tfVk1PREVNX09QX0NGR19TRVQsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1N19CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19WTU9ERU1fREJHMCwJCVBNSUNfREFfVk1PREVNX1ZPU0VMX01BU0ssCQlQTUlDX0RBX1ZNT0RFTV9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1N19CVUNLX1ZNT0RFTV9EQkcwLAkJUE1JQ19EQV9WTU9ERU1fVk9TRUxfR1JBWV9NQVNLLAkJUE1JQ19EQV9WTU9ERU1fVk9TRUxfR1JBWV9TSElGVCwJCX0sCisgICAge01UNjM1N19CVUNLX1ZNT0RFTV9EQkcxLAkJUE1JQ19EQV9WTU9ERU1fRU5fTUFTSywJCVBNSUNfREFfVk1PREVNX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0JVQ0tfVk1PREVNX0RCRzEsCQlQTUlDX0RBX1ZNT0RFTV9TVEJfTUFTSywJCVBNSUNfREFfVk1PREVNX1NUQl9TSElGVCwJCX0sCisgICAge01UNjM1N19CVUNLX1ZNT0RFTV9EQkcxLAkJUE1JQ19EQV9WTU9ERU1fVlNMRUVQX1NFTF9NQVNLLAkJUE1JQ19EQV9WTU9ERU1fVlNMRUVQX1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1N19CVUNLX1ZTMV9WT1RFUiwJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQlVDS19WUzFfVk9URVJfU0VULAkJUE1JQ19SR19CVUNLX1ZTMV9WT1RFUl9FTl9TRVRfTUFTSywJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0JVQ0tfVlMxX1ZPVEVSX0NMUiwJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1N19CVUNLX1ZTMV9WT1RFUl9DRkcsCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0JVQ0tfVlBBX0NPTjAsCQlQTUlDX1JHX0JVQ0tfVlBBX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlBBX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0JVQ0tfVlBBX0NPTjEsCQlQTUlDX1JHX0JVQ0tfVlBBX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlBBX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X1NNUFNfQU5BX0NPTjEsCQlQTUlDX1JHX1ZDT1JFX1NMRUVQX1ZPTFRBR0VfTUFTSywJCVBNSUNfUkdfVkNPUkVfU0xFRVBfVk9MVEFHRV9TSElGVCwJCX0sCisgICAge01UNjM1N19TTVBTX0FOQV9DT04xLAkJUE1JQ19SR19WTU9ERU1fU0xFRVBfVk9MVEFHRV9NQVNLLAkJUE1JQ19SR19WTU9ERU1fU0xFRVBfVk9MVEFHRV9TSElGVCwJCX0sCisgICAge01UNjM1N19WTU9ERU1fQU5BX0NPTjAsCQlQTUlDX1JHX1ZNT0RFTV9GUFdNX01BU0ssCQlQTUlDX1JHX1ZNT0RFTV9GUFdNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X1ZDT1JFX1ZQUk9DX0FOQV9DT04wLAkJUE1JQ19SR19WQ09SRV9GUFdNX01BU0ssCQlQTUlDX1JHX1ZDT1JFX0ZQV01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfVkNPUkVfVlBST0NfQU5BX0NPTjAsCQlQTUlDX1JHX1ZQUk9DX0ZQV01fTUFTSywJCVBNSUNfUkdfVlBST0NfRlBXTV9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlNSQU1fQ09OMSwJCVBNSUNfUkdfTERPX1ZTUkFNX09USEVSU19WT1NFTF9NQVNLLAkJUE1JQ19SR19MRE9fVlNSQU1fT1RIRVJTX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X1ZNT0RFTV9BTkFfQ09OMCwJCVBNSUNfUkdfVk1PREVNX0ZDT1RfTUFTSywJCVBNSUNfUkdfVk1PREVNX0ZDT1RfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfVlBBX0FOQV9DT04wLAkJUE1JQ19SR19WUEFfTU9ERVNFVF9NQVNLLAkJUE1JQ19SR19WUEFfTU9ERVNFVF9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlNJTTFfQ09OMCwJCVBNSUNfUkdfTERPX1ZTSU0xX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlNJTTFfQ09OMCwJCVBNSUNfUkdfTERPX1ZTSU0xX0xQX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9MUF9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlNJTTFfT1BfRU4sCQlQTUlDX1JHX0xET19WU0lNMV9TV19PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfU1dfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZTSU0xX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcwX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZTSU0xX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcxX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZTSU0xX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcyX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9IVzJfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZTSU0xX09QX0VOX1NFVCwJCVBNSUNfUkdfTERPX1ZTSU0xX09QX0VOX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WU0lNMV9PUF9FTl9DTFIsCQlQTUlDX1JHX0xET19WU0lNMV9PUF9FTl9DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcwX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcwX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcxX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcyX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcyX09QX0NGR19TSElGVCwJCX0sCisvLyAgICB7TVQ2MzU3X0xET19WU0lNMV9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMV9PTl9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfT05fT1BfU0hJRlQsCQl9LAorLy8gICAge01UNjM1N19MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTFfTFBfT1BfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WU0lNMV9PUF9DRkdfU0VULAkJUE1JQ19SR19MRE9fVlNJTTFfT1BfQ0ZHX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlNJTTFfT1BfQ0ZHX0NMUiwJCVBNSUNfUkdfTERPX1ZTSU0xX09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZTSU0xX0NPTjIsCQlQTUlDX1JHX0xET19WU0lNMV9PQ0ZCX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WU0lNMV9DT04yLAkJUE1JQ19EQV9WU0lNMV9PQ0ZCX0VOX01BU0ssCQlQTUlDX0RBX1ZTSU0xX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfVlNJTTFfQU5BX0NPTjAsCQlQTUlDX1JHX1ZTSU0xX1ZPU0VMX01BU0ssCQlQTUlDX1JHX1ZTSU0xX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WU0lNMl9DT04wLAkJUE1JQ19SR19MRE9fVlNJTTJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WU0lNMl9DT04wLAkJUE1JQ19SR19MRE9fVlNJTTJfTFBfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0yX1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlNJTTJfT1BfRU4sCQlQTUlDX1JHX0xET19WU0lNMl9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlNJTTJfT1BfRU4sCQlQTUlDX1JHX0xET19WU0lNMl9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMV9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlNJTTJfT1BfRU4sCQlQTUlDX1JHX0xET19WU0lNMl9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlNJTTJfT1BfRU5fU0VULAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZTSU0yX09QX0VOX0NMUiwJCVBNSUNfUkdfTERPX1ZTSU0yX09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WU0lNMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMl9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WU0lNMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMl9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WU0lNMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMl9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9IVzJfT1BfQ0ZHX1NISUZULAkJfSwKKy8vICAgIHtNVDYzNTdfTERPX1ZTSU0yX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0yX09OX09QX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9PTl9PUF9TSElGVCwJCX0sCisvLyAgICB7TVQ2MzU3X0xET19WU0lNMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMl9MUF9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfTFBfT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZTSU0yX09QX0NGR19TRVQsCQlQTUlDX1JHX0xET19WU0lNMl9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WU0lNMl9PUF9DRkdfQ0xSLAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfQ0ZHX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfQ0ZHX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlNJTTJfQ09OMiwJCVBNSUNfUkdfTERPX1ZTSU0yX09DRkJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZTSU0yX0NPTjIsCQlQTUlDX0RBX1ZTSU0yX09DRkJfRU5fTUFTSywJCVBNSUNfREFfVlNJTTJfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19WU0lNMl9BTkFfQ09OMCwJCVBNSUNfUkdfVlNJTTJfVk9TRUxfTUFTSywJCVBNSUNfUkdfVlNJTTJfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZGRTI4X0NPTjAsCQlQTUlDX1JHX0xET19WRkUyOF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZGRTI4X0NPTjAsCQlQTUlDX1JHX0xET19WRkUyOF9MUF9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZGRTI4X09QX0VOLAkJUE1JQ19SR19MRE9fVkZFMjhfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WRkUyOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMF9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WRkUyOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMV9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WRkUyOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WRkUyOF9PUF9FTl9TRVQsCQlQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVkZFMjhfT1BfRU5fQ0xSLAkJUE1JQ19SR19MRE9fVkZFMjhfT1BfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMV9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMl9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorLy8gICAge01UNjM1N19MRE9fVkZFMjhfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVkZFMjhfT05fT1BfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X09OX09QX1NISUZULAkJfSwKKy8vICAgIHtNVDYzNTdfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X0xQX09QX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9MUF9PUF9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVkZFMjhfT1BfQ0ZHX1NFVCwJCVBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZGRTI4X09QX0NGR19DTFIsCQlQTUlDX1JHX0xET19WRkUyOF9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WRkUyOF9DT04xLAkJUE1JQ19EQV9WRkUyOF9NT0RFX01BU0ssCQlQTUlDX0RBX1ZGRTI4X01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZGRTI4X0NPTjEsCQlQTUlDX0RBX1ZGRTI4X0VOX01BU0ssCQlQTUlDX0RBX1ZGRTI4X0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WRkUyOF9DT04yLAkJUE1JQ19SR19MRE9fVkZFMjhfT0NGQl9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVkZFMjhfQ09OMiwJCVBNSUNfREFfVkZFMjhfT0NGQl9FTl9NQVNLLAkJUE1JQ19EQV9WRkUyOF9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WUkYxOF9DT04wLAkJUE1JQ19SR19MRE9fVlJGMThfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WUkYxOF9DT04wLAkJUE1JQ19SR19MRE9fVlJGMThfTFBfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WUkYxOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjE4X1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9TV19PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMThfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxOF9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMF9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMThfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxOF9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMV9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMThfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxOF9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMl9PUF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMThfT1BfRU5fU0VULAkJUE1JQ19SR19MRE9fVlJGMThfT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9PUF9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZSRjE4X09QX0VOX0NMUiwJCVBNSUNfUkdfTERPX1ZSRjE4X09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfT1BfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WUkYxOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9IVzBfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WUkYxOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9IVzFfT1BfQ0ZHX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WUkYxOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9IVzJfT1BfQ0ZHX1NISUZULAkJfSwKKy8vICAgIHtNVDYzNTdfTERPX1ZSRjE4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjE4X09OX09QX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9PTl9PUF9TSElGVCwJCX0sCisvLyAgICB7TVQ2MzU3X0xET19WUkYxOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF9MUF9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfTFBfT1BfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZSRjE4X09QX0NGR19TRVQsCQlQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WUkYxOF9PUF9DRkdfQ0xSLAkJUE1JQ19SR19MRE9fVlJGMThfT1BfQ0ZHX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfT1BfQ0ZHX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMThfQ09OMSwJCVBNSUNfREFfVlJGMThfTU9ERV9NQVNLLAkJUE1JQ19EQV9WUkYxOF9NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WUkYxOF9DT04xLAkJUE1JQ19EQV9WUkYxOF9FTl9NQVNLLAkJUE1JQ19EQV9WUkYxOF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMThfQ09OMiwJCVBNSUNfUkdfTERPX1ZSRjE4X09DRkJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZSRjE4X0NPTjIsCQlQTUlDX0RBX1ZSRjE4X09DRkJfRU5fTUFTSywJCVBNSUNfREFfVlJGMThfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMTJfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjEyX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMTJfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjEyX0xQX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9MUF9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMTJfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxMl9TV19PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfU1dfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZSRjEyX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcwX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZSRjEyX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcxX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZSRjEyX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcyX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9IVzJfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZSRjEyX09QX0VOX1NFVCwJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0VOX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WUkYxMl9PUF9FTl9DTFIsCQlQTUlDX1JHX0xET19WUkYxMl9PUF9FTl9DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcwX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcwX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcxX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcyX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcyX09QX0NGR19TSElGVCwJCX0sCisvLyAgICB7TVQ2MzU3X0xET19WUkYxMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxMl9PTl9PUF9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfT05fT1BfU0hJRlQsCQl9LAorLy8gICAge01UNjM1N19MRE9fVlJGMTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMTJfTFBfT1BfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WUkYxMl9PUF9DRkdfU0VULAkJUE1JQ19SR19MRE9fVlJGMTJfT1BfQ0ZHX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMTJfT1BfQ0ZHX0NMUiwJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZSRjEyX0NPTjEsCQlQTUlDX0RBX1ZSRjEyX01PREVfTUFTSywJCVBNSUNfREFfVlJGMTJfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1N19MRE9fVlJGMTJfQ09OMSwJCVBNSUNfREFfVlJGMTJfRU5fTUFTSywJCVBNSUNfREFfVlJGMTJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfTERPX1ZSRjEyX0NPTjIsCQlQTUlDX1JHX0xET19WUkYxMl9PQ0ZCX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0xET19WUkYxMl9DT04yLAkJUE1JQ19EQV9WUkYxMl9PQ0ZCX0VOX01BU0ssCQlQTUlDX0RBX1ZSRjEyX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfVlhPMjJfQU5BX0NPTjAsCQlQTUlDX1JHX1ZYTzIyX1ZPU0VMX01BU0ssCQlQTUlDX1JHX1ZYTzIyX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGMV9NT0RFX01BU0ssCQlQTUlDX1hPX0VYVEJVRjFfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjFfRU5fTV9NQVNLLAkJUE1JQ19YT19FWFRCVUYxX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzAwLAkJUE1JQ19YT19FWFRCVUYyX01PREVfTUFTSywJCVBNSUNfWE9fRVhUQlVGMl9NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGMl9FTl9NX01BU0ssCQlQTUlDX1hPX0VYVEJVRjJfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjNfTU9ERV9NQVNLLAkJUE1JQ19YT19FWFRCVUYzX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzAwLAkJUE1JQ19YT19FWFRCVUYzX0VOX01fTUFTSywJCVBNSUNfWE9fRVhUQlVGM19FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGNF9NT0RFX01BU0ssCQlQTUlDX1hPX0VYVEJVRjRfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjRfRU5fTV9NQVNLLAkJUE1JQ19YT19FWFRCVUY0X0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzAwLAkJUE1JQ19YT19CQl9MUE1fRU5fTUFTSywJCVBNSUNfWE9fQkJfTFBNX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRU5CQl9NQU5fTUFTSywJCVBNSUNfWE9fRU5CQl9NQU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzAwLAkJUE1JQ19YT19FTkJCX0VOX01fTUFTSywJCVBNSUNfWE9fRU5CQl9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwMCwJCVBNSUNfWE9fQ0xLU0VMX01BTl9NQVNLLAkJUE1JQ19YT19DTEtTRUxfTUFOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwMF9TRVQsCQlQTUlDX0RDWE9fQ1cwMF9TRVRfTUFTSywJCVBNSUNfRENYT19DVzAwX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDBfQ0xSLAkJUE1JQ19EQ1hPX0NXMDBfQ0xSX01BU0ssCQlQTUlDX0RDWE9fQ1cwMF9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzAyLAkJUE1JQ19YT19FTjMyS19NQU5fTUFTSywJCVBNSUNfWE9fRU4zMktfTUFOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwMiwJCVBNSUNfWE9fRU4zMktfTV9NQVNLLAkJUE1JQ19YT19FTjMyS19NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwMiwJCVBNSUNfWE9fWE1PREVfTUFOX01BU0ssCQlQTUlDX1hPX1hNT0RFX01BTl9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDIsCQlQTUlDX1hPX1hNT0RFX01fTUFTSywJCVBNSUNfWE9fWE1PREVfTV9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDIsCQlQTUlDX1hPX1NUUlVQX01PREVfTUFTSywJCVBNSUNfWE9fU1RSVVBfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDIsCQlQTUlDX1hPX0FBQ19GUE1fVElNRV9NQVNLLAkJUE1JQ19YT19BQUNfRlBNX1RJTUVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzAyLAkJUE1JQ19YT19BQUNfTU9ERV9MUE1fTUFTSywJCVBNSUNfWE9fQUFDX01PREVfTFBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwMiwJCVBNSUNfWE9fQUFDX01PREVfRlBNX01BU0ssCQlQTUlDX1hPX0FBQ19NT0RFX0ZQTV9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDIsCQlQTUlDX1hPX0VOMjZNX09GRlNRX0VOX01BU0ssCQlQTUlDX1hPX0VOMjZNX09GRlNRX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwMiwJCVBNSUNfWE9fTERPQ0FMX0VOX01BU0ssCQlQTUlDX1hPX0xET0NBTF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDIsCQlQTUlDX1hPX0NCQU5LX1NZTkNfRFlOX01BU0ssCQlQTUlDX1hPX0NCQU5LX1NZTkNfRFlOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwMiwJCVBNSUNfWE9fMjZNTFBfTUFOX0VOX01BU0ssCQlQTUlDX1hPXzI2TUxQX01BTl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDIsCQlQTUlDX1hPX0JVRkxET0tfRU5fTUFTSywJCVBNSUNfWE9fQlVGTERPS19FTl9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDQsCQlQTUlDX1hPX0NEQUNfRlBNX01BU0ssCQlQTUlDX1hPX0NEQUNfRlBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwNCwJCVBNSUNfWE9fQ0RBQ19MUE1fTUFTSywJCVBNSUNfWE9fQ0RBQ19MUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzA1LAkJUE1JQ19YT18zMktESVZfTkZSQUNfRlBNX01BU0ssCQlQTUlDX1hPXzMyS0RJVl9ORlJBQ19GUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzA1LAkJUE1JQ19YT19DT0ZTVF9GUE1fTUFTSywJCVBNSUNfWE9fQ09GU1RfRlBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwNiwJCVBNSUNfWE9fMzJLRElWX05GUkFDX0xQTV9NQVNLLAkJUE1JQ19YT18zMktESVZfTkZSQUNfTFBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwNiwJCVBNSUNfWE9fQ09GU1RfTFBNX01BU0ssCQlQTUlDX1hPX0NPRlNUX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfTUFOX01BU0ssCQlQTUlDX1hPX0NPUkVfTUFOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9FTl9NX01BU0ssCQlQTUlDX1hPX0NPUkVfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfVFVSQk9fRU5fTV9NQVNLLAkJUE1JQ19YT19DT1JFX1RVUkJPX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX0FBQ19FTl9NX01BU0ssCQlQTUlDX1hPX0NPUkVfQUFDX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzA3LAkJUE1JQ19YT19TVEFSVFVQX0VOX01fTUFTSywJCVBNSUNfWE9fU1RBUlRVUF9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9WQkZQTV9FTl9NX01BU0ssCQlQTUlDX1hPX0NPUkVfVkJGUE1fRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfVkJMUE1fRU5fTV9NQVNLLAkJUE1JQ19YT19DT1JFX1ZCTFBNX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzA3LAkJUE1JQ19YT19MUE1CSUFTX0VOX01fTUFTSywJCVBNSUNfWE9fTFBNQklBU19FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwNywJCVBNSUNfWE9fVlRDR0VOX0VOX01fTUFTSywJCVBNSUNfWE9fVlRDR0VOX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzA3LAkJUE1JQ19YT19JQUFDX0NPTVBfRU5fTV9NQVNLLAkJUE1JQ19YT19JQUFDX0NPTVBfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDcsCQlQTUlDX1hPX0lGUE1fQ09NUF9FTl9NX01BU0ssCQlQTUlDX1hPX0lGUE1fQ09NUF9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwNywJCVBNSUNfWE9fSUxQTV9DT01QX0VOX01fTUFTSywJCVBNSUNfWE9fSUxQTV9DT01QX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX0JZUENBU19GUE1fTUFTSywJCVBNSUNfWE9fQ09SRV9CWVBDQVNfRlBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9HTVgyX0ZQTV9NQVNLLAkJUE1JQ19YT19DT1JFX0dNWDJfRlBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9JREFDX0ZQTV9NQVNLLAkJUE1JQ19YT19DT1JFX0lEQUNfRlBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwOSwJCVBNSUNfWE9fQ09SRV9CWVBDQVNfTFBNX01BU0ssCQlQTUlDX1hPX0NPUkVfQllQQ0FTX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDksCQlQTUlDX1hPX0NPUkVfR01YMl9MUE1fTUFTSywJCVBNSUNfWE9fQ09SRV9HTVgyX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDksCQlQTUlDX1hPX0NPUkVfSURBQ19MUE1fTUFTSywJCVBNSUNfWE9fQ09SRV9JREFDX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19DT01QX0hWX0xQTV9NQVNLLAkJUE1JQ19YT19BQUNfQ09NUF9IVl9MUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzA5LAkJUE1JQ19YT19BQUNfVlNFTF9MUE1fTUFTSywJCVBNSUNfWE9fQUFDX1ZTRUxfTFBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwOSwJCVBNSUNfWE9fQUFDX0hWX0xQTV9NQVNLLAkJUE1JQ19YT19BQUNfSFZfTFBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwOSwJCVBNSUNfWE9fQUFDX0lCSUFTX0xQTV9NQVNLLAkJUE1JQ19YT19BQUNfSUJJQVNfTFBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwOSwJCVBNSUNfWE9fQUFDX1ZPRlNUX0xQTV9NQVNLLAkJUE1JQ19YT19BQUNfVk9GU1RfTFBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cwOSwJCVBNSUNfWE9fQUFDX0ZQTV9TV0VOX01BU0ssCQlQTUlDX1hPX0FBQ19GUE1fU1dFTl9TSElGVCwJCX0sCisgICAge01UNjM1N19EQ1hPX0NXMDksCQlQTUlDX1hPX1NXUlNUX01BU0ssCQlQTUlDX1hPX1NXUlNUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0RDWE9fQ1cxOCwJCVBNSUNfWE9fU1RBVElDX0FVWE9VVF9TRUxfTUFTSywJCVBNSUNfWE9fU1RBVElDX0FVWE9VVF9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzE4LAkJUE1JQ19YT19BVVhPVVRfU0VMX01BU0ssCQlQTUlDX1hPX0FVWE9VVF9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfRENYT19DVzE5LAkJUE1JQ19YT19TVEFUSUNfQVVYT1VUX01BU0ssCQlQTUlDX1hPX1NUQVRJQ19BVVhPVVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQVVYQURDX0FEQzE3LAkJUE1JQ19BVVhBRENfQURDX09VVF9DSDdfQllfTURfTUFTSywJCVBNSUNfQVVYQURDX0FEQ19PVVRfQ0g3X0JZX01EX1NISUZULAkJfSwKKyAgICB7TVQ2MzU3X0FVWEFEQ19BREMxNywJCVBNSUNfQVVYQURDX0FEQ19SRFlfQ0g3X0JZX01EX01BU0ssCQlQTUlDX0FVWEFEQ19BRENfUkRZX0NIN19CWV9NRF9TSElGVCwJCX0sCisgICAge01UNjM1N19BVVhBRENfUlFTVDFfU0VULAkJUE1JQ19BVVhBRENfUlFTVDFfU0VUX01BU0ssCQlQTUlDX0FVWEFEQ19SUVNUMV9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTdfQVVYQURDX1JRU1QxX0NMUiwJCVBNSUNfQVVYQURDX1JRU1QxX0NMUl9NQVNLLAkJUE1JQ19BVVhBRENfUlFTVDFfQ0xSX1NISUZULAkJfSwKKwl7TVQ2MzU3X1ZSRjE4X0FOQV9DT04wLAkJUE1JQ19SR19WUkYxOF9WT0NBTF9NQVNLLAkJUE1JQ19SR19WUkYxOF9WT0NBTF9TSElGVCwJCX0sCisJe01UNjM1N19WUkYxMl9BTkFfQ09OMCwJCVBNSUNfUkdfVlJGMTJfVk9DQUxfTUFTSywJCVBNSUNfUkdfVlJGMTJfVk9DQUxfU0hJRlQsCQl9LAorCXtNVDYzNTdfVlJGMThfRUxSXzAsCQlQTUlDX1JHX1ZSRjE4X1ZPVFJJTV9NQVNLLAkJUE1JQ19SR19WUkYxOF9WT1RSSU1fU0hJRlQsCQl9LAorCXtNVDYzNTdfVlJGMTJfRUxSXzAsCQlQTUlDX1JHX1ZSRjEyX1ZPVFJJTV9NQVNLLAkJUE1JQ19SR19WUkYxMl9WT1RSSU1fU0hJRlQsCQl9LAorCXtNVDYzNTdfQlVDS19UT1BfT0NfQ09OMCwJCVBNSUNfUkdfQlVDS19WUEFfT0NfU0ROX1NUQVRVU19NQVNLLAkJUE1JQ19SR19CVUNLX1ZQQV9PQ19TRE5fU1RBVFVTX1NISUZULAkJfSwKK307CisjaWYgZGVmaW5lZChEQ0xfUE1JQ19NT0RVTEVfQ09OVFJPTCkKK0RDTF9IQU5ETEUgY3VycmVudF9kY2xfaGFuZGxlID0gMDsKKyNlbmRpZgorCisvLyNkZWZpbmUgRENMX1BNSUNfUEVSTUlTU0lPTl9DT05UUk9MCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19QRVJNSVNTSU9OX0NPTlRST0wpCitQTVVfQ1RSTF9NSVNDX1NFVF9SRUdJU1RFUl9WQUxVRQlpbGxlZ2FsX21pc2Nfc2V0X3JlZ2lzdGVyX3ZhbHVlID0gezB9OworI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICAgIFdSSVRFIEFQSXMgICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNpZiBkZWZpbmVkKERDTF9QTUlDX1BFUk1JU1NJT05fQ09OVFJPTCkKK0RDTF9CT09MIGRjbF9wbWljX2NoZWNrX3Blcm1pc3Npb24oa2FsX3VpbnQxNiBvZmZzZXQpCit7CisJRENMX0JPT0wgcmV0ID0gRENMX0ZBTFNFOworCWthbF91aW50OCBjID0gKChvZmZzZXQ+PjgpICYgMHhGRik7CisKKwlzd2l0Y2goYykKKyAgICB7CisJCWNhc2UgMHg4MjoKKyAgICAgICAgeworCQkJLy9DTEsgOiBUT1BfQ0xLU1FfU0VUICgweDgyMjYpLFRPUF9DS1BETl9DT04wX0NMUiAoMHg4MjA0KSxUT1BfQ0xLU1EoMHg4MjI0KQorCQkJaWYob2Zmc2V0ID09IDB4ODIyNiB8fCBvZmZzZXQgPT0gMHg4MjA0IHx8IG9mZnNldCA9PSAweDgyMjQpCisJCQkJcmV0PURDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgMHg5MDoKKyAgICAgICAgeworCQkgICAgLy9MRE9fRElHOiAweDkwMUEsMHg5MDFDLCAweDkwMDYsIDB4OTAwOAorICAgICAgICAgICAgaWYob2Zmc2V0ID09IDB4OTAxQSB8fCBvZmZzZXQgPT0gMHg5MDFDIHx8IG9mZnNldCA9PSAweDkwMDYgfHwgb2Zmc2V0ID09IDB4OTAwOCkKKwkJCQlyZXQ9RENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDk4OgorICAgICAgICB7CisJCQkvL0F1ZGlvIEFuYWxvZyA6IDB4OTgwMH4weDk4NTIKKyAgICAgICAgICAgIGlmKG9mZnNldCA+PSAweDk4MDAgJiYgb2Zmc2V0IDw9IDB4OTg1MikKKwkJCQlyZXQ9RENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSAweDlBOgorICAgICAgICB7CisJCQkvL0F1ZGlvIERSRSA6IDB4OUEwMCB+MHg5QTBBCisJCQlpZihvZmZzZXQgPj0gMHg5QTAwICYmIG9mZnNldCA8PSAweDlBMEEpCisJCQkJcmV0PURDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgMHhFMDoKKwkJY2FzZSAweEUxOgorICAgICAgICB7CisJCQkvL0F1ZGlvIGRpZ2l0YWwgOiAweEUwMDAgfjB4RTEzOAorCQkJaWYob2Zmc2V0ID49IDB4RTAwMCAmJiBvZmZzZXQgPD0gMHhFMTM4KQorCQkJCXJldD1EQ0xfVFJVRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorCQkJcmV0PURDTF9GQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKy8vIFdyaXRlIFdob2xlIEJ5dGVzCit2b2lkIGRjbF9wbWljX2J5dGVfd3JpdGUoRENMX1VJTlQxNiBhZGRyLCBEQ0xfVUlOVDE2IHZhbCkKK3sKKwlEQ0xfVUlOVDMyIGlkeCwgdHlwZTsKKworCWthbF90YWtlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jaywgS0FMX0lORklOSVRFX1dBSVQpOworCisJdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKwlpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorICAgIGlmKGFkZHIgPCBQTUlDX01BWF9SRUdfTlVNKQorICAgIHsKKyAgICAgICAgcG1pY19yZWdbYWRkcl0gPSB2YWw7CisgICAgfQorCisJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBhZGRyLCB2YWwsIDB4MDApOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUpOworI2VuZGlmCisJa2FsX2dpdmVfc3BpbmxvY2soZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrKTsKK30KKworLy8gV3JpdGUgV2hvbGUgQnl0ZXMKK3ZvaWQgZGNsX3BtaWNfYnl0ZV93cml0ZV9ub2xvY2soRENMX1VJTlQxNiBhZGRyLCBEQ0xfVUlOVDE2IHZhbCkKK3sKKwlEQ0xfVUlOVDMyIGlkeCwgdHlwZTsKKworCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCXR5cGUgPSBQTUlDX0xPR19UWVBFX0hSVF9ET01BSU47CisJZWxzZQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCisJaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKworICAgIGlmKGFkZHIgPCBQTUlDX01BWF9SRUdfTlVNKQorICAgIHsKKyAgICAgICAgcG1pY19yZWdbYWRkcl0gPSB2YWw7CisgICAgfQorCisvLwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIGFkZHIsIHZhbCwgMHgwMCk7CisvLwllbHNlCisvLwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBhZGRyLCB2YWwsIDB4MDApOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUpOworI2VuZGlmCisKK30KKworLy8gV3JpdGUgcmVnaXN0ZXIgZmllbGQKK3ZvaWQgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQzYzNTdfRkxBR1NfTElTVF9FTlVNIGZsYWcsIERDTF9VSU5UMTYgc2VsKQoreworICAgIGNvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSAqcFRhYmxlID0gcG1pY19mbGFnc190YWJsZTsKKwlEQ0xfVUlOVDMyIHR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisJRENMX1VJTlQzMiBpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworCWthbF90YWtlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jaywgS0FMX0lORklOSVRFX1dBSVQpOworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworICAgIHBtaWNfcmVnX2xvZy5jb21tYW5kX2ZsYWcgPSBmbGFnOworICAgIHBtaWNfcmVnX2xvZy5yZWdfYmVmb3JlX3dyaXRlID0gcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF07CisKKyAgICBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSAmPSB+KHBUYWJsZVtmbGFnXS5tYXNrIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisgICAgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gfD0gKChrYWxfdWludDE2KXNlbCA8PCBwVGFibGVbZmxhZ10uc2hpZnQpOworCisvLwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKy8vCWVsc2UKKy8vCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKworICAgIHBtaWNfcmVnX2xvZy53cml0ZV92YWx1ZSA9IHNlbDsKKyAgICBwbWljX3JlZ19sb2cuYWRkcmVzc19vZmZzZXQgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfbWFzayA9IHBUYWJsZVtmbGFnXS5tYXNrOworICAgIHBtaWNfcmVnX2xvZy5yZWdfc2hpZnQgPSBwVGFibGVbZmxhZ10uc2hpZnQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19hZGRyID0gcFRhYmxlW2ZsYWddLm9mZnNldDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2RhdGEgPSBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworCWthbF9naXZlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jayk7Cit9CisKKy8vIFdyaXRlIHJlZ2lzdGVyIGZpZWxkCit2b2lkIGRjbF9wbWljX2ZpZWxkX3dyaXRlX25vbG9jayhQTUlDNjM1N19GTEFHU19MSVNUX0VOVU0gZmxhZywgRENMX1VJTlQxNiBzZWwpCit7CisgICAgY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZICpwVGFibGUgPSBwbWljX2ZsYWdzX3RhYmxlOworCURDTF9VSU5UMzIgdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKwlEQ0xfVUlOVDMyIGlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisgICAgcG1pY19yZWdfbG9nLmNvbW1hbmRfZmxhZyA9IGZsYWc7CisgICAgcG1pY19yZWdfbG9nLnJlZ19iZWZvcmVfd3JpdGUgPSBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworICAgIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdICY9IH4ocFRhYmxlW2ZsYWddLm1hc2sgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKyAgICBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSB8PSAoKGthbF91aW50MTYpc2VsIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisKKy8vCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9XUklURSwgcFRhYmxlW2ZsYWddLm9mZnNldCwgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0sIDB4MDApOworLy8JZWxzZQorLy8JCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9XUklURSwgcFRhYmxlW2ZsYWddLm9mZnNldCwgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0sIDB4MDApOworCisgICAgcG1pY19yZWdfbG9nLndyaXRlX3ZhbHVlID0gc2VsOworICAgIHBtaWNfcmVnX2xvZy5hZGRyZXNzX29mZnNldCA9IHBUYWJsZVtmbGFnXS5vZmZzZXQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19tYXNrID0gcFRhYmxlW2ZsYWddLm1hc2s7CisgICAgcG1pY19yZWdfbG9nLnJlZ19zaGlmdCA9IHBUYWJsZVtmbGFnXS5zaGlmdDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2FkZHIgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfZGF0YSA9IHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCit9CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgICBSRUFEIEFQSXMgICAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIFJlYWQgV2hvbGUgQnl0ZXMKK0RDTF9VSU5UMTYgZGNsX3BtaWNfYnl0ZV9yZXR1cm4oRENMX1VJTlQxNiBhZGRyKQoreworICAgIERDTF9VSU5UMTYgcmVnX3RlbXA7CisJRENMX1VJTlQzMiBpZHgsIHR5cGU7CisKKwlrYWxfdGFrZV9zcGlubG9jayhkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2ssIEtBTF9JTkZJTklURV9XQUlUKTsKKworCXR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisJaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKy8vCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCAoRENMX1VJTlQzMilhZGRyLCAweDAwLCAmcmVnX3RlbXApOworLy8JZWxzZQorLy8JCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCAoRENMX1VJTlQzMilhZGRyLCAweDAwLCAmcmVnX3RlbXApOworCisgICAgaWYoYWRkciA8IFBNSUNfTUFYX1JFR19OVU0pCisgICAgeworICAgICAgICBwbWljX3JlZ1thZGRyXSA9IHJlZ190ZW1wOworICAgIH0KKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworCWthbF9naXZlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jayk7CisKKyAgICByZXR1cm4gcmVnX3RlbXA7Cit9CisKKy8vIFJlYWQgV2hvbGUgQnl0ZXMKK0RDTF9VSU5UMTYgZGNsX3BtaWNfYnl0ZV9yZXR1cm5fbm9sb2NrKERDTF9VSU5UMTYgYWRkcikKK3sKKyAgICBEQ0xfVUlOVDE2IHJlZ190ZW1wOworCURDTF9VSU5UMzIgaWR4LCB0eXBlOworCisJaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfSFJUX0RPTUFJTjsKKwllbHNlCisJCXR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisKKwlpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworLy8JaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1JFQUQsIChEQ0xfVUlOVDMyKWFkZHIsIDB4MDAsICZyZWdfdGVtcCk7CisvLwllbHNlCisvLwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1JFQUQsIChEQ0xfVUlOVDMyKWFkZHIsIDB4MDAsICZyZWdfdGVtcCk7CisKKyAgICBpZihhZGRyIDwgUE1JQ19NQVhfUkVHX05VTSkKKyAgICB7CisgICAgICAgIHBtaWNfcmVnW2FkZHJdID0gcmVnX3RlbXA7CisgICAgfQorCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlZ190ZW1wOworfQorCisvLyBSZWFkIHJlZ2lzdGVyIGZpZWxkCitEQ0xfVUlOVDE2IGRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQzYzNTdfRkxBR1NfTElTVF9FTlVNIGZsYWcpCit7CisgICAgY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZICpwVGFibGUgPSBwbWljX2ZsYWdzX3RhYmxlOworICAgIERDTF9VSU5UMTYgcmVnX3JldHVybiA9IDA7CisJRENMX1VJTlQzMiB0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCURDTF9VSU5UMzIgaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9IUlRfRE9NQUlOOworCWVsc2UKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKworCWlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKy8vCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCBwVGFibGVbZmxhZ10ub2Zmc2V0LCAweDAwLCAmcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0pOworLy8JZWxzZQorLy8JCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCBwVGFibGVbZmxhZ10ub2Zmc2V0LCAweDAwLCAmcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0pOworCisgICAgcmVnX3JldHVybiA9ICgocG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gJiAocFRhYmxlW2ZsYWddLm1hc2sgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KSkgPj4gcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlZ19yZXR1cm47Cit9CisKKy8vIEV4cG9ydGVkIGZvciBFTSB1c2VkCit2b2lkIHBtaWNfRU1fcmVnX3dyaXRlKGthbF91aW50MTYgcmVnLCBrYWxfdWludDE2IHZhbCl7CisJZGNsX3BtaWNfYnl0ZV93cml0ZV9ub2xvY2socmVnLCB2YWwpOworLy8JICBkY2xfcG1pY19ieXRlX3dyaXRlKHJlZywgdmFsKTsKK30KKwora2FsX3VpbnQxNiBwbWljX0VNX3JlZ19yZWFkKGthbF91aW50MTYgcmVnKXsKKwlyZXR1cm4gIGRjbF9wbWljX2J5dGVfcmV0dXJuX25vbG9jayhyZWcpOworfQorCitjb25zdCBEQ0xfVUlOVDMyIHZwYV92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF8wMF81MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAwXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDBfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMF84MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAwXzkwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfMDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV8xMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzIwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfMzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV80MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAxXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV83MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfOTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl8wMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzEwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl8zMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl82MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzcwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfODAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl85MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wM18yMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAzXzMwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfNDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wM181MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCit9OworCitjb25zdCBEQ0xfVUlOVDMyIHZzaW0xX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUX0lOVkFMSUQsICAgICAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzcwMDAwMF9WLAorICAgIFBNVV9WT0xUXzAxXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsCisgICAgUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfSU5WQUxJRCwKK307CisKK2NvbnN0IERDTF9VSU5UMzIgdnhvMjJfdm9zZWxbXSA9Cit7CisgICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgIFBNVV9WT0xUXzAyXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF9JTlZBTElELCAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF9JTlZBTElELAorfTsKKworY29uc3QgRENMX1VJTlQzMiB2bW9kZW1fdm9zZWxbXSA9Cit7CisgICAgUE1VX1ZPTFRfMDBfNTAwMDAwX1YsCVBNVV9WT0xUXzAwXzU1MDAwMF9WLAlQTVVfVk9MVF8wMF82MDAwMDBfViwJUE1VX1ZPTFRfMDBfNzUwMDAwX1YsCisgICAgUE1VX1ZPTFRfMDBfODAwMDAwX1YsCVBNVV9WT0xUXzAwXzg1MDAwMF9WLAlQTVVfVk9MVF9JTlZBTElELAlQTVVfVk9MVF9JTlZBTElELAorfTsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCitjb25zdCBEQ0xfVUlOVDMyIHZzcmFtX3ZtZF92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF8wMF81NTAwMDBfViwgICBQTVVfVk9MVF8wMF82MDAwMDBfViwJUE1VX1ZPTFRfMDBfNjUwMDAwX1YsCVBNVV9WT0xUXzAwXzc1MDAwMF9WLAorICAgIFBNVV9WT0xUXzAwXzgwMDAwMF9WLAlQTVVfVk9MVF8wMF84NTAwMDBfViwJUE1VX1ZPTFRfSU5WQUxJRCwJUE1VX1ZPTFRfSU5WQUxJRCwKK307CisKK1BNVV9QQVJBTUVURVJfVEFCTEVfRU5UUlkgcG11X3BhcmFtZXRlcl90YWJsZVtdPQoreworCXtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZQQV9TVyksCQkgICAgCXZwYV92b3NlbCwJCSAgICBOVUxMLAkgICAgR0VUQVJSTlVNKHZwYV92b3NlbCkJCQl9LAorCXtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZQQSksCQkgICAgCXZwYV92b3NlbCwJCSAgICBOVUxMLAkgICAgR0VUQVJSTlVNKHZwYV92b3NlbCkJCQl9LAorCXtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZTSU0xKSwJCSAgICAJdnNpbTFfdm9zZWwsCQlOVUxMLAkgICAgR0VUQVJSTlVNKHZzaW0xX3Zvc2VsKQkJCX0sCisgICAge0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlNJTTIpLAkJICAgIAl2c2ltMV92b3NlbCwJCU5VTEwsICAgCUdFVEFSUk5VTSh2c2ltMV92b3NlbCkJICAgIAl9LAorCXtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZYTzIyKSwJCSAgICAJdnhvMjJfdm9zZWwsCQlOVUxMLCAgIAlHRVRBUlJOVU0odnhvMjJfdm9zZWwpCSAgICAJfSwKKwl7RU5DKExET19CVUNLX1NFVF9TTEVFUF9WT0xUQUdFLCBWTU9ERU0pLAkJdm1vZGVtX3Zvc2VsLAkJTlVMTCwJCUdFVEFSUk5VTSh2bW9kZW1fdm9zZWwpCQkJfSwKKyAgICB7RU5DKExET19CVUNLX1NFVF9TTEVFUF9WT0xUQUdFLCBWU1JBTV9NRCksCQl2c3JhbV92bWRfdm9zZWwsCU5VTEwsICAgCUdFVEFSUk5VTSh2c3JhbV92bWRfdm9zZWwpCQl9LAorfTsKKworCitleHRlcm4gUE1VX0NPTlRST0xfSEFORExFUiBwbXVfY29udHJvbF9oYW5kbGVyOworCitEQ0xfVUlOVDE2IHBtdV9wYXJhbWV0ZXJfc2l6ZSA9IDA7CisKK0RDTF9TVEFUVVMgUE1JQ19jb250cm9sX2hhbmRsZXIoRENMX0hBTkRMRSBoYW5kbGUsRENMX0NUUkxfQ01EIGNtZCxEQ0xfQ1RSTF9EQVRBX1QgKmRhdGEpCit7CisgICAgRENMX1VJTlQxNglyZWdWYWw7CisgICAgRENMX0lOVDMyCXJldHVybl92YWwgPSBTVEFUVVNfRkFJTDsKKyNpZiBkZWZpbmVkKERDTF9QTUlDX01PRFVMRV9DT05UUk9MKQorCWN1cnJlbnRfZGNsX2hhbmRsZSA9IGhhbmRsZTsKKyNlbmRpZgorICAgIHN3aXRjaChjbWQpCisgICAgeworICAgICAgICBjYXNlIExET19CVUNLX1NFVF9FTjoJLy9FbmFibGUgY29udHJvbCBpbiBTVyBtb2RlCisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiAqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tTZXRFbik7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlBBX1NXOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGVfbm9sb2NrKFBNSUNfRU5VTV9SR19CVUNLX1ZQQV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0xX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZGRTI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WRkUyOF9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjE4X0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMTJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZTMV9WT1RFUl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9MUF9NT0RFX1NFVCAqcExkb0J1Y2tDdHJsID0mIChkYXRhLT5yUE1VTGRvQnVja1NldExwTW9kZVNldCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZGRTI4OgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZGRTI4X0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWUkYxODoKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlJGMTI6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMTJfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCSBjYXNlIExET19CVUNLX1NFVF9PQ0ZCX0VOOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT0NGQl9FTiAqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tTZXRPY2ZiRW4pOworCisgICAgICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9PQ0ZCX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfT0NGQl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfR0VUX1ZPU0VMOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9TRUwgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWb3NlbCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTMToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVlMxX1ZPVEVSX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX1ZPU0VMOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9TRUwgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWb3NlbCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9WT1NFTCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTMToKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZTMV9WT1RFUl9WT1NFTCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTUkFNX09USEVSUzoKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fT1RIRVJTX1ZPU0VMLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19HRVRfVk9TRUxfU0xFRVA6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1NFTF9TTEVFUCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja0dldFZvc2VsU2xlZXApOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX1NFVF9WT1NFTF9TTEVFUDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPU0VMX1NMRUVQICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0Vm9zZWxTbGVlcCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX01PREVTRVQ6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0TW9kZXNldCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9TVzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlX25vbG9jayhQTUlDX0VOVU1fUkdfVlBBX01PREVTRVQsIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVk1PREVNX01PREVTRVQsIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX1NFVF9PUF9FTjoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09QX0VOICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0T3BFbik7CisKKwkJCWthbF91aW50MTYgbW9kZSA9KChwTGRvQnVja0N0cmwtPnN3X29wX2VuICA8PCBTV19PUF9FTl9TSElGVCkgfCAocExkb0J1Y2tDdHJsLT5odzBfb3BfZW4gPDwgSFcwX09QX0VOX1NISUZUKXwKKwkJCQkJCQkgIChwTGRvQnVja0N0cmwtPmh3MV9vcF9lbiA8PCBIVzFfT1BfRU5fU0hJRlQpfCAocExkb0J1Y2tDdHJsLT5odzJfb3BfZW4gPDwgSFcyX09QX0VOX1NISUZUKSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKwkJCQl7CisJCQkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WTU9ERU1fT1BfRU5fU0VUX0FERFIsIG1vZGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlNJTTE6CisJCQkJeworCQkJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WU0lNMV9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWU0lNMjoKKwkJCQl7CisJCQkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0yX09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZGRTI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVkZFMjhfT1BfRU5fU0VUX0FERFIsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxOF9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjEyX09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfQ0xSX09QX0VOOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT1BfRU4gKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRPcEVuKTsKKworCQkJa2FsX3VpbnQxNiBtb2RlID0oKHBMZG9CdWNrQ3RybC0+c3dfb3BfZW4gIDw8IFNXX09QX0VOX1NISUZUKSB8IChwTGRvQnVja0N0cmwtPmh3MF9vcF9lbiA8PCBIVzBfT1BfRU5fU0hJRlQpfAorCQkJCQkJCSAgKHBMZG9CdWNrQ3RybC0+aHcxX29wX2VuIDw8IEhXMV9PUF9FTl9TSElGVCl8IChwTGRvQnVja0N0cmwtPmh3Ml9vcF9lbiA8PCBIVzJfT1BfRU5fU0hJRlQpKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKwkJCQl7CisJCQkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0xX09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZTSU0yOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlNJTTJfT1BfRU5fQ0xSX0FERFIsIG1vZGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVkZFMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjE4X09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlJGMTJfT1BfRU5fQ0xSX0FERFIsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfSFdfT1BfQ0ZHOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfSFdfT1BfQ0ZHICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0SHdPcCk7CisKKwkJCWthbF91aW50MTYgdmFsdWUgPSgocExkb0J1Y2tDdHJsLT5odzBfb3BfY2ZnIDw8IEhXMF9PUF9DRkdfU0hJRlQpIHwKKwkJCQkJCQkgIChwTGRvQnVja0N0cmwtPmh3MV9vcF9jZmcgPDwgSFcxX09QX0NGR19TSElGVCkgfAorCQkJCQkJCSAgKHBMZG9CdWNrQ3RybC0+aHcyX29wX2NmZyA8PCBIVzJfT1BfQ0ZHX1NISUZUKSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0xX09QX0NGR19TRVRfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WU0lNMl9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZGRTI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVkZFMjhfT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjE4X09QX0NGR19TRVRfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxMl9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfQ0xSX0hXX09QX0NGRzoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfQ0xSX0hXX09QX0NGRyAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja0Nsckh3T3ApOworCisJCQlrYWxfdWludDE2IHZhbHVlID0oKHBMZG9CdWNrQ3RybC0+aHcwX29wX2NmZyA8PCBIVzBfT1BfQ0ZHX1NISUZUKSB8CisJCQkJCQkJICAocExkb0J1Y2tDdHJsLT5odzFfb3BfY2ZnIDw8IEhXMV9PUF9DRkdfU0hJRlQpIHwKKwkJCQkJCQkgIChwTGRvQnVja0N0cmwtPmh3Ml9vcF9jZmcgPDwgSFcyX09QX0NGR19TSElGVCkpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19DTFJfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlNJTTJfT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19DTFJfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMTg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlJGMTJfT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX1NFVF9HT19PTl9PUDoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0dPX09OX09QICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0R29Pbk9wKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9PRkYpCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVCwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSLCAxIDw8IEdPX09OX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9PRkYpCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0xX09QX0NGR19TRVQsIDEgPDwgR09fT05fT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0xX09QX0NGR19DTFIsIDEgPDwgR09fT05fT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX09GRikKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfT1BfQ0ZHX1NFVCwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WRkUyOF9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WRkUyOF9PUF9DRkdfQ0xSLCAxIDw8IEdPX09OX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjE4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9PRkYpCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjE4X09QX0NGR19TRVQsIDEgPDwgR09fT05fT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjE4X09QX0NGR19DTFIsIDEgPDwgR09fT05fT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX09GRikKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMTJfT1BfQ0ZHX1NFVCwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMTJfT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX1NFVF9HT19MUF9PUDoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0dPX0xQX09QICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0R29McE9wKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9OT19MUCkKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX09QX0NGR19DTFIsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX05PX0xQKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9PUF9DRkdfQ0xSLCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9OT19MUCkKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfT1BfQ0ZHX1NFVCwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZGRTI4X09QX0NGR19TRVQsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZGRTI4X09QX0NGR19DTFIsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMTg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX05PX0xQKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF9PUF9DRkdfQ0xSLCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9OT19MUCkKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMTJfT1BfQ0ZHX1NFVCwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMTJfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCisgICAgICAgIGNhc2UgTERPX0JVQ0tfU0VUX1ZPTFRBR0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0Vm9sdGFnZSk7CisgICAgICAgICAgICByZWdWYWwgPSBQTVVfUGFyYW1ldGVyX3RvX1ZhbHVlKEVOQyhjbWQsIHBMZG9CdWNrQ3RybC0+bW9kKSwgcExkb0J1Y2tDdHJsLT52b2x0YWdlKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlNJTTFfVk9TRUwsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WU0lNMl9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9TVzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlX25vbG9jayhQTUlDX0VOVU1fUkdfQlVDS19WUEFfVk9TRUwsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWWE8yMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WWE8yMl9WT1NFTCwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisKKwkgICAgY2FzZSBMRE9fQlVDS19HRVRfVk9MVEFHRToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPTFRBR0UJKnBMZG9CdWNrQ3RybD0mKGRhdGEtPnJQTVVMZG9CdWNrR2V0Vm9sdCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0RBX1ZNT0RFTV9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX1NFVF9TTEVFUF9WT0xUQUdFOgorCQl7CisJCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRSAqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tTZXRTbGVlcFZvbHRhZ2UpOworCQkJcmVnVmFsID0gUE1VX1BhcmFtZXRlcl90b19WYWx1ZShFTkMoY21kLCBwTGRvQnVja0N0cmwtPm1vZCksIHBMZG9CdWNrQ3RybC0+c2xlZXBWb2x0YWdlKTsKKworCQkJc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVkNPUkU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVkNPUkVfU0xFRVBfVk9MVEFHRSwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WTU9ERU1fU0xFRVBfVk9MVEFHRSwgcmVnVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCS8qCisgICAgICAgIGNhc2UgVlBBX1NFVF9FTjoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfVlBBX1NFVF9FTiAqcFZwYVNldEVuID0gJihkYXRhLT5yUE1VVnBhU2V0RW4pOworICAgICAgICAgICAgZGNsX3BtaWM2MzMyX2ZpZWxkX3dyaXRlKE1UNjMzMl9WUEFfRU4sIHBWcGFTZXRFbi0+ZW5hYmxlKTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisJCSovCisKKwkJY2FzZSBWUEFfR0VUX1ZPTFRBR0VfTElTVDoKKwkJeworCQkJUE1VX0NUUkxfVlBBX0dFVF9WT0xUQUdFX0xJU1QgKnBWcGFDdHJsID0gJihkYXRhLT5yUE1VVnBhR2V0Vm9sdGFnZUxpc3QpOworCQkJcFZwYUN0cmwtPnBWb2x0YWdlTGlzdCA9IHZwYV92b3NlbDsKKwkJCXBWcGFDdHJsLT5udW1iZXIgPSBHRVRBUlJOVU0odnBhX3Zvc2VsKTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKyAgICAgICAgIGNhc2UgQURDX1NFVF9SUVNUOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9BRENfU0VUX1JRU1QgKnBBZGNDdHJsID0gJihkYXRhLT5yUE1VQWRjU2V0UnFzdCk7CisgICAgICAgICAgICBpZigoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9JTklUKSAmJiAoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9EQVRBKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBFbmFibGUgQ0xLU1EgZm9yIE1EIChTVyBtb2RlKSBSR19DTEtTUV9FTl9BVVhfTUQKKy8vVEJEICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19UT1BfQ0xLU1FfU0VUX0FERFIsICgweDEgPDwgUE1JQ19SR19DTEtTUV9FTl9BVVhfTURfU0hJRlQpKTsKKyAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfQVVYQURDX1JRU1QxX0NMUl9BRERSLCAocEFkY0N0cmwtPmVuYWJsZSA8PCBQTUlDX0FVWEFEQ19SUVNUX0NIN19CWV9NRF9TSElGVCkpOworICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19BVVhBRENfUlFTVDFfU0VUX0FERFIsICgweDEgPDwgUE1JQ19BVVhBRENfUlFTVF9DSDdfQllfTURfU0hJRlQpKTsKKyAgICAgICAgICAgIEFVWEFEQ19TdGF0dXMgPSBBVVhBRENfUkVBRF9SRVFVRVNUOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCisgICAgICAgIGNhc2UgQURDX0dFVF9SRFlfTUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0FEQ19HRVRfUkRZX01EICpwQWRjQ3RybCA9ICYoZGF0YS0+clBNVUFkY0dldFJkeU1kKTsKKyAgICAgICAgICAgIHBBZGNDdHJsLT5zdGF0dXMgPSAoRENMX0JPT0wpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fQVVYQURDX0FEQ19SRFlfQ0g3X0JZX01EKTsKKyAgICAgICAgICAgIGlmKChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX1JFUVVFU1QpICYmIChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0JVU1kpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYocEFkY0N0cmwtPnN0YXR1cyA9PSBEQ0xfVFJVRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfUkVBRFk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0JVU1k7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBBRENfR0VUX09VVF9NRDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfQURDX0dFVF9PVVRfTUQgKnBBZGNDdHJsID0gJihkYXRhLT5yUE1VQWRjR2V0T3V0TWQpOworICAgICAgICAgICAgaWYoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9SRUFEWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWRjQ3RybC0+ZGF0YSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0FVWEFEQ19BRENfT1VUX0NIN19CWV9NRCk7CisgICAgICAgICAgICBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfREFUQTsKKyAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfQVVYQURDX1JRU1QxX0NMUl9BRERSLCAoMHgxIDw8IFBNSUNfQVVYQURDX1JRU1RfQ0g3X0JZX01EX1NISUZUKSk7CisgICAgICAgICAgICAvLyBEaXNhYmxlIENMS1NRIGZvciBNRCAoU1cgbW9kZSkgUkdfQ0xLU1FfRU5fQVVYX01ECisvL1RCRCAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfVE9QX0NMS1NRX0NMUl9BRERSLCAoMHgxIDw8IFBNSUNfUkdfQ0xLU1FfRU5fQVVYX01EX1NISUZUKSk7CisKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBUT1BfU0VUX1NSQ0xLRU5fSU5fRU46CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX1RPUF9TRVRfU1JDTEtFTl9JTl9FTiAqcFRvcFNyY2xrZW5DdHJsID0gJihkYXRhLT5yUE1VVG9wU2V0U3JjbGtlbkluRW4pOworCisgICAgICAgICAgICBzd2l0Y2gocFRvcFNyY2xrZW5DdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBQTUlDX1NSQ0xLRU5fSU4wOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1NSQ0xLRU5fSU4wX0VOLCBwVG9wU3JjbGtlbkN0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgUE1JQ19TUkNMS0VOX0lOMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19TUkNMS0VOX0lOMV9FTiwgcFRvcFNyY2xrZW5DdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgVE9QX1NFVF9TUkNMS0VOX0lOX01PREU6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX1RPUF9TRVRfU1JDTEtFTl9JTl9NT0RFICpwVG9wU3JjbGtlbkN0cmwgPSAmKGRhdGEtPnJQTVVUb3BTZXRTcmNsa2VuSW5Nb2RlKTsKKworICAgICAgICAgICAgc3dpdGNoKHBUb3BTcmNsa2VuQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgUE1JQ19TUkNMS0VOX0lOMDoKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19TUkNMS0VOX0lOMF9IV19NT0RFLCBwVG9wU3JjbGtlbkN0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgUE1JQ19TUkNMS0VOX0lOMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19TUkNMS0VOX0lOMV9IV19NT0RFLCBwVG9wU3JjbGtlbkN0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfRlBXTToKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0ZQV00gKnBMZG9CdWNrU2V0RnB3bSA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRGcHdtKTsKKworCQkJc3dpdGNoKHBMZG9CdWNrU2V0RnB3bS0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVkNPUkU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVkNPUkVfRlBXTSwgcExkb0J1Y2tTZXRGcHdtLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlBST0M6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlBST0NfRlBXTSwgcExkb0J1Y2tTZXRGcHdtLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZNT0RFTV9GUFdNLCBwTGRvQnVja1NldEZwd20tPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIERDWE9fU0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9EQ1hPX1NFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmwgPSAmKGRhdGEtPnJQTVVEY3hvU2V0UmVnaXN0ZXJWYWx1ZSk7CisKKwkJCXBtaWNfRU1fcmVnX3dyaXRlKHBDaHJDdHJsLT5vZmZzZXQsIHBDaHJDdHJsLT52YWx1ZSk7CisJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBEQ1hPX0dFVF9SRUdJU1RFUl9WQUxVRToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfRENYT19HRVRfUkVHSVNURVJfVkFMVUUJKnBDaHJDdHJsPSYoZGF0YS0+clBNVURjeG9HZXRSZWdpc3RlclZhbHVlKTsKKyAgICAgICAgICAgIHBDaHJDdHJsLT52YWx1ZSA9IHBtaWNfRU1fcmVnX3JlYWQocENockN0cmwtPm9mZnNldCk7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUlTQ19TRVRfUkVHSVNURVJfVkFMVUU6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX01JU0NfU0VUX1JFR0lTVEVSX1ZBTFVFCSpwQ2hyQ3RybCA9ICYoZGF0YS0+clBNVU1pc2NTZXRSZWdpc3RlclZhbHVlKTsKKyNpZiBkZWZpbmVkKERDTF9QTUlDX1BFUk1JU1NJT05fQ09OVFJPTCkKKwkJCWlmKGRjbF9wbWljX2NoZWNrX3Blcm1pc3Npb24ocENockN0cmwtPm9mZnNldCk9PSBEQ0xfVFJVRSkKKyNlbmRpZgorCQkJeworCQkJCXBtaWNfRU1fcmVnX3dyaXRlKHBDaHJDdHJsLT5vZmZzZXQsIHBDaHJDdHJsLT52YWx1ZSk7CisJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCX0KKyNpZiBkZWZpbmVkKERDTF9QTUlDX1BFUk1JU1NJT05fQ09OVFJPTCkKKwkJCWVsc2UKKwkJCXsKKwkJCQlpbGxlZ2FsX21pc2Nfc2V0X3JlZ2lzdGVyX3ZhbHVlLm9mZnNldCA9IHBDaHJDdHJsLT5vZmZzZXQ7CisJCQkJaWxsZWdhbF9taXNjX3NldF9yZWdpc3Rlcl92YWx1ZS52YWx1ZSA9IHBDaHJDdHJsLT52YWx1ZTsKKwkJCQlBU1NFUlQoMCk7CisJCQl9CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1JU0NfR0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9NSVNDX0dFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmw9JihkYXRhLT5yUE1VTWlzY0dldFJlZ2lzdGVyVmFsdWUpOworICAgICAgICAgICAgcENockN0cmwtPnZhbHVlID0gcG1pY19FTV9yZWdfcmVhZChwQ2hyQ3RybC0+b2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfVk9DQUw6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0NBTCAqcExkb0J1Y2tTZXRWb2NhbCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWb2NhbCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja1NldFZvY2FsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUkYxOF9WT0NBTDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WUkYxOF9WT0NBTCwgcExkb0J1Y2tTZXRWb2NhbC0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTJfVk9DQUw6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlJGMTJfVk9DQUwsIHBMZG9CdWNrU2V0Vm9jYWwtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfR0VUX1ZPQ0FMOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9DQUwgKnBMZG9CdWNrR2V0Vm9jYWwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrR2V0Vm9jYWwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tHZXRWb2NhbC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfVk9DQUw6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0dldFZvY2FsLT52YWx1ZSA9IChEQ0xfVUlOVDE2KWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX1ZSRjE4X1ZPQ0FMKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjEyX1ZPQ0FMOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tHZXRWb2NhbC0+dmFsdWUgPSAoRENMX1VJTlQxNilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19WUkYxMl9WT0NBTCk7CisJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCQkJCQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKworCQljYXNlIExET19CVUNLX1NFVF9WT1RSSU06CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1RSSU0gKnBMZG9CdWNrU2V0Vm90cmltID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvdHJpbSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja1NldFZvdHJpbS0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfVk9UUklNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZSRjE4X1ZPVFJJTSwgcExkb0J1Y2tTZXRWb3RyaW0tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjEyX1ZPVFJJTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WUkYxMl9WT1RSSU0sIHBMZG9CdWNrU2V0Vm90cmltLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX0dFVF9WT1RSSU06CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1RSSU0gKnBMZG9CdWNrR2V0Vm90cmltID0gJihkYXRhLT5yUE1VTGRvQnVja0dldFZvdHJpbSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0dldFZvdHJpbS0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfVk9UUklNOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tHZXRWb3RyaW0tPnZhbHVlID0gKERDTF9VSU5UMTYpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVlJGMThfVk9UUklNKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjEyX1ZPVFJJTToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrR2V0Vm90cmltLT52YWx1ZSA9IChEQ0xfVUlOVDE2KWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX1ZSRjEyX1ZPVFJJTSk7CisJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCQkJCQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfVlBBX09DX1NETl9TVEFUVVM6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WUEFfT0NfU0ROX1NUQVRVUyAqcExkb0J1Y2tTZXRWcGFPY1NkblN0YXR1cyA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWcGFPY1NkblN0YXR1cyk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja1NldFZwYU9jU2RuU3RhdHVzLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUEFfT0NfU0ROX1NUQVRVUzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZQQV9PQ19TRE5fU1RBVFVTLCBwTGRvQnVja1NldFZwYU9jU2RuU3RhdHVzLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX0dFVF9WUEFfT0NfU0ROX1NUQVRVUzoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZQQV9PQ19TRE5fU1RBVFVTICpwTGRvQnVja0dldFZwYU9jU2RuU3RhdHVzID0gJihkYXRhLT5yUE1VTGRvQnVja0dldFZwYU9jU2RuU3RhdHVzKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrR2V0VnBhT2NTZG5TdGF0dXMtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9PQ19TRE5fU1RBVFVTOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tHZXRWcGFPY1NkblN0YXR1cy0+dmFsdWUgPSAoRENMX1VJTlQxNilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZQQV9PQ19TRE5fU1RBVFVTKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisJCQkJCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2lmIGRlZmluZWQoRENMX1BNSUNfTU9EVUxFX0NPTlRST0wpCisJY3VycmVudF9kY2xfaGFuZGxlID0gMDsKKyNlbmRpZgorICAgIHJldHVybiByZXR1cm5fdmFsOworCit9CisKK2V4dGVybiB2b2lkIGRjbF9wbWljX21vZGVtX29ubHlfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIFBNSUNfUmVhZF9BbGwodm9pZCk7CisjaWYgZGVmaW5lZChQTUlDX1VOSVRfVEVTVCkKK2V4dGVybiB2b2lkIFBNSUNfUmVhZF9BbGwodm9pZCk7CitleHRlcm4gdm9pZCBQTUlDX1VuaXRfVGVzdCh2b2lkKTsKKyNlbmRpZgorRENMX1VJTlQzMiBEUlZfUmVhZF9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIpCit7CisgICAgcmV0dXJuIGRjbF9wbWljX2J5dGVfcmV0dXJuKHBtaWNfYWRkcik7Cit9CisKK3ZvaWQgRFJWX1dyaXRlX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkciwgRENMX1VJTlQzMiB2YWx1ZSkKK3sKKyAgICBkY2xfcG1pY19ieXRlX3dyaXRlKHBtaWNfYWRkciwgdmFsdWUpOworfQorCit2b2lkIGRjbF9wbWljX2luaXQodm9pZCl7CisgICAgZXh0ZXJuIHZvaWQgcG1pY193cmFwX2R1bXBfaW5pdCh2b2lkKTsKKyAgICBwbXVfY29udHJvbF9oYW5kbGVyID0gUE1JQ19jb250cm9sX2hhbmRsZXI7CisgICAgcG11X3BhcmFtZXRlcl9zaXplID0gR0VUQVJSTlVNKHBtdV9wYXJhbWV0ZXJfdGFibGUpOworCisgICAgcG1pY193cmFwX2R1bXBfaW5pdCgpOworCisJZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrID0ga2FsX2NyZWF0ZV9zcGlubG9jaygicG1pYyBhY2Nlc3MiKTsKKwlkY2xfcG1pY19jb250cm9sX3NwaW5sb2NrID0ga2FsX2NyZWF0ZV9zcGlubG9jaygicG1pYyBjb250cm9sIik7CisKKyNpZiAgIWRlZmluZWQoX19TTUFSVF9QSE9ORV9NT0RFTV9fKQorICAgIERydlBXUkFQX0luaXQoKTsKKyNlbmRpZgorICAgIHBtaWNfaHdfdmVyc2lvbiA9IGRjbF9wbWljX2J5dGVfcmV0dXJuKE1UNjM1N19IV0NJRCk7CisJaWYgKHBtaWNfaHdfdmVyc2lvbiA9PSAweDApCisJCUFTU0VSVCgwKTsKKworICAgIFBNSUNfUmVhZF9BbGwoKTsKKworI2lmICFkZWZpbmVkKF9fU01BUlRfUEhPTkVfTU9ERU1fXykKKworLyoKKwlpZihEcnZQV1JBUF9DaGVja0NJUEhFUigpID09IDEpCisgICAgZGNsX3BtaWM2MzU1X21vZGVtX29ubHlfaW5pdCgpOworCWVsc2UKKyovCisJZGNsX3BtaWNfbW9kZW1fb25seV9pbml0KCk7CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChQTUlDX1VOSVRfVEVTVCkKKyAgICBQTUlDX1JlYWRfQWxsKCk7CisgICAgUE1JQ19Vbml0X1Rlc3QoKTsKKyAgICBQTUlDX1JlYWRfQWxsKCk7CisjZW5kaWYKKyAgICBwbWljX2luaXRfZG9uZSA9IERDTF9UUlVFOworCit9CisKK3ZvaWQgUE1JQ19SZWFkX0FsbCh2b2lkKQoreworICAgIHZvbGF0aWxlIGthbF91aW50MzIgaSxqOworICAgIGo9MDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgUE1JQ19NQVhfUkVHX05VTTsgaSArPSAyKXsKKyAgICAgICAgcG1pY19yZWdbaV0gPSBkY2xfcG1pY19ieXRlX3JldHVybihpKTsKKyAgICAJd2hpbGUoaiE9MHgyMDApe2orKzt9CisgICAgCWo9MDsKKyAgICB9Cit9CisjaWYgZGVmaW5lZChQTUlDX1VOSVRfVEVTVCkKK3ZvaWQgUE1JQ19Vbml0X1Rlc3Qodm9pZCkKK3sKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT05fQ1RSTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kZSA9IEhXX0NPTlRST0w7IC8vIChTV19DT05UUk9MX0JZX1JFRyAvIEhXX0NPTlRST0wpCisJCXZhbC5tb2QgPSBWTUlQSTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfT05fQ1RSTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLmVuYWJsZSA9IERDTF9UUlVFOyAvLyAoRENMX1RSVUUgLyBEQ0xfRkFMU0UpOworCQl2YWwubW9kID0gVk1JUEk7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWUEFfU1c7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2Q9VlBBX1NXOworCQl2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworCQkvKiAgICAgUE1VX1ZPTFRfMDBfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDBfNjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDBfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDBfODAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDBfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfMDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfMjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfNDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfNjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfMDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfNDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfNjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfODAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDNfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfNDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDNfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfNjAwMDAwX1YsICAgICAgKi8KKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kID0gVlBBX1NXOworCQl2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX01PREVTRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTl9DVFJMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2RlID0gSFdfQ09OVFJPTDsgLy8gKFNXX0NPTlRST0xfQllfUkVHIC8gSFdfQ09OVFJPTCkKKwkJdmFsLm1vZCA9IFZSRjE7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOX0NUUkwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX1NFTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuc2VsID0gU1JDTEtFTl9JTjFfU0VMOworCQkvKiBTUkNMS0VOX0lOMV9TRUwgLyBTUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX09SX1NSQ0xLRU5fSU4yX1NFTC8KKwkJCVNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwgKi8KKwkJdmFsLm1vZCA9IFZSRjE7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOX1NFTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kID0gVlJGMTsKKwkJdmFsLm1vZGUgPSBGT1JDRV9QV01fTU9ERTsgLy8gKEFVVE9fTU9ERSAvIEZPUkNFX1BXTV9NT0RFKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9NT0RFU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX1ZSRjFfU0VUX01PREVTRVRfQ0tQRE5fU0VUIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5yZWd2YWwgPSAweDc7IC8vICgweDB+MHhGKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfU0VUX01PREVTRVRfQ0tQRE5fU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX1ZSRjFfU0VUX01PREVTRVRfQ0tQRE5fQ0xSIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5yZWd2YWwgPSAweDc7IC8vICgweDB+MHhGKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfU0VUX01PREVTRVRfQ0tQRE5fQ0xSLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX1ZSRjFfR0VUX01PREVTRVRfQ0tQRE4gdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJLy8gdmFsLnJlZ3ZhbCB3aWxsIGJlIHlvdXIgcmVxdWVzdCB2YWx1ZSAoIG5vIG5lZWQgZG8gYW55IHNoaWZ0KQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfR0VUX01PREVTRVRfQ0tQRE4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0NUUkwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLm1vZGUgPSBIV19DT05UUk9MOyAvLyAoU1dfQ09OVFJPTF9CWV9SRUcgLyBIV19DT05UUk9MKQorCQl2YWwubW9kID0gVlJGMjsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fQ1RSTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fU0VMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5zZWwgPSBTUkNMS0VOX0lOMV9TRUw7CisJCS8qIFNSQ0xLRU5fSU4xX1NFTCAvIFNSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfT1JfU1JDTEtFTl9JTjJfU0VMLworCQkJU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTCAqLworCQl2YWwubW9kID0gVlJGMjsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fU0VMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWUkYyOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kID0gVlJGMTsKKwkJdmFsLm1vZGUgPSBGT1JDRV9QV01fTU9ERTsgLy8gKEFVVE9fTU9ERSAvIEZPUkNFX1BXTV9NT0RFKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9NT0RFU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9TUkNMS19FTl9TRUwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLnNlbCA9IFNSQ0xLRU5fSU4xX1NFTDsKKwkJLyogU1JDTEtFTl9JTjFfU0VMIC8gU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMl9TRUwvCisJCQlTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMICovCisJCXZhbC5tb2QgPSBWTUlQSTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfU1JDTEtfRU5fU0VMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWU0lNMTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKKwkJdmFsLm1vZCA9IFZTSU0yOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kPVZTSU0xOworCQl2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworCQkvKiAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgKi8KKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kPVZTSU0yOworCQl2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworCQkvKiAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgKi8KKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9Cit9CisjZW5kaWYgLy8gRW5kIG9mICNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQorCisjZW5kaWYgLy8gRW5kIG9mICNpZiBkZWZpbmVkKFBNSUNfNjM1N19SRUdfQVBJKQorCmRpZmYgLS1naXQgYS9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTdfaW5pdC5jIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU3X2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2I4ZWRhCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU3X2luaXQuYwpAQCAtMCwwICsxLDEzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDEzCisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgICBkY2xfcG1pYzYzNTVfaW5pdC5jCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgICAgTU9MWSBTb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgICAgVGhpcyBmaWxlIGlzIGZvciBQTUlDIDYzNTUKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiaW5pdC5oIgorI2luY2x1ZGUgImRjbC5oIgorCitleHRlcm4gRENMX1VJTlQzMiBEUlZfUmVhZF9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIpOworZXh0ZXJuIHZvaWQgRFJWX1dyaXRlX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkciwgRENMX1VJTlQzMiB2YWx1ZSk7CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKworLy8gTVQ2MzU2IEVDT19FMQordm9pZCBkY2xfcG1pY19tb2RlbV9vbmx5X2luaXQodm9pZCkKK3sKKwkvKiBjaGFuZ2UgUE1JQyBpbml0aWFsIHNldHRpbmcgdG8gcHJlbG9hZGVyIGZvciBhbGwgU1cgbG9hZC4KKwkgICAgSWYgeW91IHdhbnQgdG8gY2hhbmdlIHBtaWMgc2V0dGluZywgcGxlYXNlIGNvbnRhY3QgUFQgTGVhZCAmIFBNSUMgQVAgU1cgKi8KKworfQpkaWZmIC0tZ2l0IGEvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU4LmMgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Q5NDM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU4LmMKQEAgLTAsMCArMSwyNDkzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTMKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgIGRjbF9wbWljNjM1OC5jCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgICAgTU9MWSBTb2Z0d2FyZQorICoKKyAqIERlc2NyaXB0aW9uOgorICogLS0tLS0tLS0tLS0tCisgKiAgICAgVGhpcyBmaWxlIGlzIGZvciBQTUlDIDYzNTgKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKEZQR0FfQ1RQKQorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJyZWdfYmFzZS5oIgorI2luY2x1ZGUgImRydl9jb21tLmgiCisjaW5jbHVkZSAiaW5pdC5oIgorI2luY2x1ZGUgImRjbC5oIgorI2luY2x1ZGUgImRjbF9wbXVfc3cuaCIKKyNpbmNsdWRlICJwbWljX3dyYXAuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorI2luY2x1ZGUgInVzX3RpbWVyLmgiCisKKyNpZiBkZWZpbmVkKFBNSUNfNjM1OF9SRUdfQVBJKQorCisvLyBTdGFydCBQTUlDX1VOSVRfVEVTVAorLy8jZGVmaW5lIFBNSUNfVU5JVF9URVNUCisvLyBBUk0gU2VjdGlvbiBSVy9STy9aSSBVc2UgSW50ZXJuYWwgU1JBTQorI2RlZmluZSBQTUlDX0lOVEVSTkFMX1NSQU0KKworI2lmICFkZWZpbmVkKF9fRlVFX18pCisjZGVmaW5lIFNBVkVBTkRTRVRJUlFNQVNLKCkgICAgICBTYXZlQW5kU2V0SVJRTWFzaygpCisjZGVmaW5lIFJFU1RPUkVJUlFNQVNLKG1hc2spICAgICBSZXN0b3JlSVJRTWFzayhtYXNrKQorI2Vsc2UgLypkZWZpbmVkKF9fRlVFX18pKi8KKyNkZWZpbmUgU0FWRUFORFNFVElSUU1BU0soKSAgICAgIDAKKyNkZWZpbmUgUkVTVE9SRUlSUU1BU0sobWFzaykgICAgIHt9CisjZW5kaWYgLypkZWZpbmVkKF9fRlVFX18pKi8KKworI2RlZmluZSBQTUlDX01BWF9SRUdfTlVNICAgICAgICAgICAgICAgIDB4M2EwMCAvLyAweDAwMDB+MHgzYTAwCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICBFeHBvcnRlZCBBUElzICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworZXh0ZXJuIERDTF9VSU5UMTYgZGNsX3BtaWNfYnl0ZV9yZXR1cm5fbm9sb2NrKERDTF9VSU5UMTYgYWRkcik7CitleHRlcm4gRENMX1VJTlQxNiBkY2xfcG1pY19ieXRlX3JldHVybihEQ0xfVUlOVDE2IGFkZHIpOworZXh0ZXJuIHZvaWQgZGNsX3BtaWNfYnl0ZV93cml0ZV9ub2xvY2soRENMX1VJTlQxNiBhZGRyLCBEQ0xfVUlOVDE2IHZhbCk7CitleHRlcm4gdm9pZCBkY2xfcG1pY19ieXRlX3dyaXRlKERDTF9VSU5UMTYgYWRkciwgRENMX1VJTlQxNiB2YWwpOworZXh0ZXJuIERDTF9CT09MIGRjbF9wbWljX2luaXRfZG9uZV9xdWVyeSh2b2lkKTsKK3R5cGVkZWYgZW51bQoreworICAgIEFVWEFEQ19SRUFEX0lOSVQgPSAwLAorICAgIEFVWEFEQ19SRUFEX1JFUVVFU1QgPSAxLAorICAgIEFVWEFEQ19SRUFEX1JFQURZID0gMiwKKyAgICBBVVhBRENfUkVBRF9CVVNZID0gMywKKyAgICBBVVhBRENfUkVBRF9EQVRBID0gNAorfUFVWEFEQ19GU007CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAga2FsX3VpbnQzMiBjb21tYW5kX2ZsYWc7CisgICAga2FsX3VpbnQzMiByZWdfYmVmb3JlX3dyaXRlOworICAgIGthbF91aW50MzIgd3JpdGVfdmFsdWU7CisgICAga2FsX3VpbnQzMiBhZGRyZXNzX29mZnNldDsKKyAgICBrYWxfdWludDMyIHJlZ19tYXNrOworICAgIGthbF91aW50MzIgcmVnX3NoaWZ0OworICAgIGthbF91aW50MzIgcmVnX2FkZHI7CisgICAga2FsX3VpbnQzMiByZWdfZGF0YTsKK31QTUlDX1JFR19MT0c7CisKK0FVWEFEQ19GU00gQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0lOSVQ7CitQTUlDX1JFR19MT0cgcG1pY19yZWdfbG9nOworCisjaWYgKGRlZmluZWQoX19NVEtfVEFSR0VUX18pICYmIGRlZmluZWQoUE1JQ19JTlRFUk5BTF9TUkFNKSkKK19fYXR0cmlidXRlX18gKCh6ZXJvX2luaXQpKQorI2VuZGlmIC8qIF9fTVRLX1RBUkdFVF9fICovCisKK2thbF91aW50OCBwbWljX2h3X3ZlcnNpb247CitrYWxfdWludDggcG1pY19zd192ZXJzaW9uOwora2FsX3VpbnQxNiBwbWljX3JlZ1tQTUlDX01BWF9SRUdfTlVNXTsKK0RDTF9CT09MIHBtaWNfaW5pdF9kb25lID0gRENMX0ZBTFNFOworCitrYWxfc3BpbmxvY2tpZCBkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2s7CitleHRlcm4ga2FsX3NwaW5sb2NraWQgZGNsX3BtaWNfY29udHJvbF9zcGlubG9jazsKKworY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZIHBtaWNfZmxhZ3NfdGFibGVbXSA9Cit7CisgICAge01UNjM1OF9IV0NJRCwJCVBNSUNfSFdDSURfTUFTSywJCVBNSUNfSFdDSURfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfU1dDSUQsCQlQTUlDX1NXQ0lEX01BU0ssCQlQTUlDX1NXQ0lEX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X1RPUF9DT04sCQlQTUlDX1JHX1NSQ0xLRU5fSU4wX0VOX01BU0ssCQlQTUlDX1JHX1NSQ0xLRU5fSU4wX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X1RPUF9DT04sCQlQTUlDX1JHX1NSQ0xLRU5fSU4xX0VOX01BU0ssCQlQTUlDX1JHX1NSQ0xLRU5fSU4xX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X1RPUF9DT04sCQlQTUlDX1JHX1NSQ0xLRU5fSU4wX0hXX01PREVfTUFTSywJCVBNSUNfUkdfU1JDTEtFTl9JTjBfSFdfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1OF9UT1BfQ09OLAkJUE1JQ19SR19TUkNMS0VOX0lOMV9IV19NT0RFX01BU0ssCQlQTUlDX1JHX1NSQ0xLRU5fSU4xX0hXX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19UT1BfRUxSMSwJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfTElNSVRfU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX0xJTUlUX1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OF9CVUNLX1RPUF9FTFIxLAkJUE1JQ19SR19CVUNLX1ZQQV9WT1NFTF9MSU1JVF9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WUEFfVk9TRUxfTElNSVRfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0JVQ0tfVkNPUkVfQ09OMSwJCVBNSUNfUkdfQlVDS19WQ09SRV9WT1NFTF9TTEVFUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZDT1JFX1ZPU0VMX1NMRUVQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0JVQ0tfVkNPUkVfREJHMCwJCVBNSUNfREFfVkNPUkVfVk9TRUxfTUFTSywJCVBNSUNfREFfVkNPUkVfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WQ09SRV9EQkcwLAkJUE1JQ19EQV9WQ09SRV9WT1NFTF9HUkFZX01BU0ssCQlQTUlDX0RBX1ZDT1JFX1ZPU0VMX0dSQVlfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WQ09SRV9FTFIwLAkJUE1JQ19SR19CVUNLX1ZDT1JFX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVkNPUkVfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WTU9ERU1fQ09OMCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WTU9ERU1fQ09OMCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fTFBfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WTU9ERU1fQ09OMSwJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfU0xFRVBfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfU0xFRVBfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WTU9ERU1fRUxSMCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WTU9ERU1fT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1NXX09QX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0JVQ0tfVk1PREVNX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzBfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0JVQ0tfVk1PREVNX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzFfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0JVQ0tfVk1PREVNX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzJfT1BfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0JVQ0tfVk1PREVNX09QX0VOX1NFVCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfRU5fU0VUX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1OF9CVUNLX1ZNT0RFTV9PUF9FTl9DTFIsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0VOX0NMUl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzBfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzFfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzJfT1BfQ0ZHX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PTl9PUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PTl9PUF9TSElGVCwJCX0sCisgICAge01UNjM1OF9CVUNLX1ZNT0RFTV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0xQX09QX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0JVQ0tfVk1PREVNX09QX0NGR19TRVQsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1OF9CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WTU9ERU1fREJHMCwJCVBNSUNfREFfVk1PREVNX1ZPU0VMX01BU0ssCQlQTUlDX0RBX1ZNT0RFTV9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OF9CVUNLX1ZNT0RFTV9EQkcwLAkJUE1JQ19EQV9WTU9ERU1fVk9TRUxfR1JBWV9NQVNLLAkJUE1JQ19EQV9WTU9ERU1fVk9TRUxfR1JBWV9TSElGVCwJCX0sCisgICAge01UNjM1OF9CVUNLX1ZNT0RFTV9EQkcxLAkJUE1JQ19EQV9WTU9ERU1fRU5fTUFTSywJCVBNSUNfREFfVk1PREVNX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0JVQ0tfVk1PREVNX0RCRzEsCQlQTUlDX0RBX1ZNT0RFTV9TVEJfTUFTSywJCVBNSUNfREFfVk1PREVNX1NUQl9TSElGVCwJCX0sCisgICAge01UNjM1OF9CVUNLX1ZTMV9WT1RFUiwJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WUzFfVk9URVJfU0VULAkJUE1JQ19SR19CVUNLX1ZTMV9WT1RFUl9FTl9TRVRfTUFTSywJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0JVQ0tfVlMxX1ZPVEVSX0NMUiwJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1OF9CVUNLX1ZTMV9WT1RFUl9DRkcsCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0JVQ0tfVlMyX0NPTjEsCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPU0VMX1NMRUVQX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPU0VMX1NMRUVQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0JVQ0tfVlMyX1ZPVEVSLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OF9CVUNLX1ZTMl9WT1RFUl9TRVQsCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPVEVSX0VOX1NFVF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WUzJfVk9URVJfQ0xSLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9DTFJfTUFTSywJCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfRU5fQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0JVQ0tfVlMyX1ZPVEVSX0NGRywJCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WUzJfRUxSMCwJCVBNSUNfUkdfQlVDS19WUzJfVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WUzJfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WUEFfQ09OMCwJCVBNSUNfUkdfQlVDS19WUEFfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WUEFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19WUEFfQ09OMSwJCVBNSUNfUkdfQlVDS19WUEFfVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WUEFfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfU01QU19BTkFfQ09OMSwJCVBNSUNfUkdfVk1PREVNX1NMRUVQX1ZPTFRBR0VfTUFTSywJCVBNSUNfUkdfVk1PREVNX1NMRUVQX1ZPTFRBR0VfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfVkNPUkVfVkdQVV9BTkFfQ09OMCwJCVBNSUNfUkdfVkNPUkVfRlBXTV9NQVNLLAkJUE1JQ19SR19WQ09SRV9GUFdNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X1ZDT1JFX1ZHUFVfQU5BX0NPTjAsCQlQTUlDX1JHX1ZDT1JFX0ZDT1RfTUFTSywJCVBNSUNfUkdfVkNPUkVfRkNPVF9TSElGVCwJCX0sCisgICAge01UNjM1OF9WTU9ERU1fQU5BX0NPTjAsCQlQTUlDX1JHX1ZNT0RFTV9GUFdNX01BU0ssCQlQTUlDX1JHX1ZNT0RFTV9GUFdNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X1ZNT0RFTV9BTkFfQ09OMCwJCVBNSUNfUkdfVk1PREVNX0ZDT1RfTUFTSywJCVBNSUNfUkdfVk1PREVNX0ZDT1RfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfVlMyX0FOQV9DT04yLAkJUE1JQ19SR19WUzJfRlBXTV9NQVNLLAkJUE1JQ19SR19WUzJfRlBXTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9WUEFfQU5BX0NPTjAsCQlQTUlDX1JHX1ZQQV9NT0RFU0VUX01BU0ssCQlQTUlDX1JHX1ZQQV9NT0RFU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WU1JBTV9DT04yLAkJUE1JQ19SR19MRE9fVlNSQU1fT1RIRVJTX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0xET19WU1JBTV9PVEhFUlNfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0xX0NPTjAsCQlQTUlDX1JHX0xET19WU0lNMV9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0xX0NPTjAsCQlQTUlDX1JHX0xET19WU0lNMV9MUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0xX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTFfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WU0lNMV9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMF9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WU0lNMV9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMV9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WU0lNMV9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WU0lNMV9PUF9FTl9TRVQsCQlQTUlDX1JHX0xET19WU0lNMV9PUF9FTl9TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlNJTTFfT1BfRU5fQ0xSLAkJUE1JQ19SR19MRE9fVlNJTTFfT1BfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0xX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0xX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMV9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0xX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMl9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0xX09QX0NGR19TRVQsCQlQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WU0lNMV9PUF9DRkdfQ0xSLAkJUE1JQ19SR19MRE9fVlNJTTFfT1BfQ0ZHX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfT1BfQ0ZHX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlNJTTFfQ09OMiwJCVBNSUNfUkdfTERPX1ZTSU0xX09DRkJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0xX0NPTjIsCQlQTUlDX0RBX1ZTSU0xX09DRkJfRU5fTUFTSywJCVBNSUNfREFfVlNJTTFfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OF9WU0lNMV9BTkFfQ09OMCwJCVBNSUNfUkdfVlNJTTFfVk9TRUxfTUFTSywJCVBNSUNfUkdfVlNJTTFfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0yX0NPTjAsCQlQTUlDX1JHX0xET19WU0lNMl9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0yX0NPTjAsCQlQTUlDX1JHX0xET19WU0lNMl9MUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0yX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTJfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMF9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMV9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WU0lNMl9PUF9FTl9TRVQsCQlQTUlDX1JHX0xET19WU0lNMl9PUF9FTl9TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlNJTTJfT1BfRU5fQ0xSLAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0yX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0yX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMV9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0yX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMl9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0yX09QX0NGR19TRVQsCQlQTUlDX1JHX0xET19WU0lNMl9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WU0lNMl9PUF9DRkdfQ0xSLAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfQ0ZHX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfT1BfQ0ZHX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlNJTTJfQ09OMiwJCVBNSUNfUkdfTERPX1ZTSU0yX09DRkJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTSU0yX0NPTjIsCQlQTUlDX0RBX1ZTSU0yX09DRkJfRU5fTUFTSywJCVBNSUNfREFfVlNJTTJfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OF9WU0lNMl9BTkFfQ09OMCwJCVBNSUNfUkdfVlNJTTJfVk9TRUxfTUFTSywJCVBNSUNfUkdfVlNJTTJfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZGRTI4X0NPTjAsCQlQTUlDX1JHX0xET19WRkUyOF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZGRTI4X0NPTjAsCQlQTUlDX1JHX0xET19WRkUyOF9MUF9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZGRTI4X09QX0VOLAkJUE1JQ19SR19MRE9fVkZFMjhfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WRkUyOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMF9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WRkUyOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMV9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WRkUyOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WRkUyOF9PUF9FTl9TRVQsCQlQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVkZFMjhfT1BfRU5fQ0xSLAkJUE1JQ19SR19MRE9fVkZFMjhfT1BfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMV9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMl9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X09OX09QX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9PTl9PUF9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVkZFMjhfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVkZFMjhfTFBfT1BfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0xQX09QX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WRkUyOF9PUF9DRkdfU0VULAkJUE1JQ19SR19MRE9fVkZFMjhfT1BfQ0ZHX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfT1BfQ0ZHX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVkZFMjhfT1BfQ0ZHX0NMUiwJCVBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZGRTI4X0NPTjEsCQlQTUlDX0RBX1ZGRTI4X01PREVfTUFTSywJCVBNSUNfREFfVkZFMjhfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVkZFMjhfQ09OMSwJCVBNSUNfREFfVkZFMjhfRU5fTUFTSywJCVBNSUNfREFfVkZFMjhfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZGRTI4X0NPTjIsCQlQTUlDX1JHX0xET19WRkUyOF9PQ0ZCX0VOX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WRkUyOF9DT04yLAkJUE1JQ19EQV9WRkUyOF9PQ0ZCX0VOX01BU0ssCQlQTUlDX0RBX1ZGRTI4X09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjE4X0NPTjAsCQlQTUlDX1JHX0xET19WUkYxOF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjE4X0NPTjAsCQlQTUlDX1JHX0xET19WUkYxOF9MUF9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjE4X09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMThfU1dfT1BfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X1NXX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WUkYxOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMF9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfSFcwX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WUkYxOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMV9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfSFcxX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WUkYxOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMl9PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfSFcyX09QX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WUkYxOF9PUF9FTl9TRVQsCQlQTUlDX1JHX0xET19WUkYxOF9PUF9FTl9TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X09QX0VOX1NFVF9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlJGMThfT1BfRU5fQ0xSLAkJUE1JQ19SR19MRE9fVlJGMThfT1BfRU5fQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9PUF9FTl9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjE4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMF9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMF9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjE4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMV9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMV9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjE4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMl9PUF9DRkdfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMl9PUF9DRkdfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjE4X09QX0NGR19TRVQsCQlQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfU0VUX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WUkYxOF9PUF9DRkdfQ0xSLAkJUE1JQ19SR19MRE9fVlJGMThfT1BfQ0ZHX0NMUl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfT1BfQ0ZHX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlJGMThfQ09OMSwJCVBNSUNfREFfVlJGMThfTU9ERV9NQVNLLAkJUE1JQ19EQV9WUkYxOF9NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WUkYxOF9DT04xLAkJUE1JQ19EQV9WUkYxOF9FTl9NQVNLLAkJUE1JQ19EQV9WUkYxOF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlJGMThfQ09OMiwJCVBNSUNfUkdfTERPX1ZSRjE4X09DRkJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjE4X0NPTjIsCQlQTUlDX0RBX1ZSRjE4X09DRkJfRU5fTUFTSywJCVBNSUNfREFfVlJGMThfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlJGMTJfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjEyX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlJGMTJfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjEyX0xQX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9MUF9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlJGMTJfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxMl9TV19PUF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfU1dfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjEyX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcwX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9IVzBfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjEyX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcxX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9IVzFfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjEyX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcyX09QX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9IVzJfT1BfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjEyX09QX0VOX1NFVCwJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0VOX1NFVF9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfT1BfRU5fU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WUkYxMl9PUF9FTl9DTFIsCQlQTUlDX1JHX0xET19WUkYxMl9PUF9FTl9DTFJfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0VOX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlJGMTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcwX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcwX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlJGMTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcxX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcxX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlJGMTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcyX09QX0NGR19NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcyX09QX0NGR19TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlJGMTJfT1BfQ0ZHX1NFVCwJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19TRVRfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjEyX09QX0NGR19DTFIsCQlQTUlDX1JHX0xET19WUkYxMl9PUF9DRkdfQ0xSX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9PUF9DRkdfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WUkYxMl9DT04xLAkJUE1JQ19EQV9WUkYxMl9NT0RFX01BU0ssCQlQTUlDX0RBX1ZSRjEyX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZSRjEyX0NPTjEsCQlQTUlDX0RBX1ZSRjEyX0VOX01BU0ssCQlQTUlDX0RBX1ZSRjEyX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0xET19WUkYxMl9DT04yLAkJUE1JQ19SR19MRE9fVlJGMTJfT0NGQl9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlJGMTJfQ09OMiwJCVBNSUNfREFfVlJGMTJfT0NGQl9FTl9NQVNLLAkJUE1JQ19EQV9WUkYxMl9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X1ZYTzIyX0FOQV9DT04wLAkJUE1JQ19SR19WWE8yMl9WT1NFTF9NQVNLLAkJUE1JQ19SR19WWE8yMl9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjFfTU9ERV9NQVNLLAkJUE1JQ19YT19FWFRCVUYxX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzAwLAkJUE1JQ19YT19FWFRCVUYxX0VOX01fTUFTSywJCVBNSUNfWE9fRVhUQlVGMV9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGMl9NT0RFX01BU0ssCQlQTUlDX1hPX0VYVEJVRjJfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjJfRU5fTV9NQVNLLAkJUE1JQ19YT19FWFRCVUYyX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzAwLAkJUE1JQ19YT19FWFRCVUYzX01PREVfTUFTSywJCVBNSUNfWE9fRVhUQlVGM19NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGM19FTl9NX01BU0ssCQlQTUlDX1hPX0VYVEJVRjNfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjRfTU9ERV9NQVNLLAkJUE1JQ19YT19FWFRCVUY0X01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzAwLAkJUE1JQ19YT19FWFRCVUY0X0VOX01fTUFTSywJCVBNSUNfWE9fRVhUQlVGNF9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwMCwJCVBNSUNfWE9fQkJfTFBNX0VOX01BU0ssCQlQTUlDX1hPX0JCX0xQTV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VOQkJfTUFOX01BU0ssCQlQTUlDX1hPX0VOQkJfTUFOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRU5CQl9FTl9NX01BU0ssCQlQTUlDX1hPX0VOQkJfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDAsCQlQTUlDX1hPX0NMS1NFTF9NQU5fTUFTSywJCVBNSUNfWE9fQ0xLU0VMX01BTl9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDBfU0VULAkJUE1JQ19EQ1hPX0NXMDBfU0VUX01BU0ssCQlQTUlDX0RDWE9fQ1cwMF9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzAwX0NMUiwJCVBNSUNfRENYT19DVzAwX0NMUl9NQVNLLAkJUE1JQ19EQ1hPX0NXMDBfQ0xSX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwMiwJCVBNSUNfWE9fRU4zMktfTUFOX01BU0ssCQlQTUlDX1hPX0VOMzJLX01BTl9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDIsCQlQTUlDX1hPX0VOMzJLX01fTUFTSywJCVBNSUNfWE9fRU4zMktfTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDIsCQlQTUlDX1hPX1hNT0RFX01BTl9NQVNLLAkJUE1JQ19YT19YTU9ERV9NQU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzAyLAkJUE1JQ19YT19YTU9ERV9NX01BU0ssCQlQTUlDX1hPX1hNT0RFX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzAyLAkJUE1JQ19YT19TVFJVUF9NT0RFX01BU0ssCQlQTUlDX1hPX1NUUlVQX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzAyLAkJUE1JQ19YT19BQUNfRlBNX1RJTUVfTUFTSywJCVBNSUNfWE9fQUFDX0ZQTV9USU1FX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwMiwJCVBNSUNfWE9fQUFDX01PREVfTFBNX01BU0ssCQlQTUlDX1hPX0FBQ19NT0RFX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDIsCQlQTUlDX1hPX0FBQ19NT0RFX0ZQTV9NQVNLLAkJUE1JQ19YT19BQUNfTU9ERV9GUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzAyLAkJUE1JQ19YT19FTjI2TV9PRkZTUV9FTl9NQVNLLAkJUE1JQ19YT19FTjI2TV9PRkZTUV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDIsCQlQTUlDX1hPX0xET0NBTF9FTl9NQVNLLAkJUE1JQ19YT19MRE9DQUxfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzAyLAkJUE1JQ19YT19DQkFOS19TWU5DX0RZTl9NQVNLLAkJUE1JQ19YT19DQkFOS19TWU5DX0RZTl9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDIsCQlQTUlDX1hPXzI2TUxQX01BTl9FTl9NQVNLLAkJUE1JQ19YT18yNk1MUF9NQU5fRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzAyLAkJUE1JQ19YT19CVUZMRE9LX0VOX01BU0ssCQlQTUlDX1hPX0JVRkxET0tfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzA0LAkJUE1JQ19YT19DREFDX0ZQTV9NQVNLLAkJUE1JQ19YT19DREFDX0ZQTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDQsCQlQTUlDX1hPX0NEQUNfTFBNX01BU0ssCQlQTUlDX1hPX0NEQUNfTFBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwNSwJCVBNSUNfWE9fMzJLRElWX05GUkFDX0ZQTV9NQVNLLAkJUE1JQ19YT18zMktESVZfTkZSQUNfRlBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwNSwJCVBNSUNfWE9fQ09GU1RfRlBNX01BU0ssCQlQTUlDX1hPX0NPRlNUX0ZQTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDYsCQlQTUlDX1hPXzMyS0RJVl9ORlJBQ19MUE1fTUFTSywJCVBNSUNfWE9fMzJLRElWX05GUkFDX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDYsCQlQTUlDX1hPX0NPRlNUX0xQTV9NQVNLLAkJUE1JQ19YT19DT0ZTVF9MUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX01BTl9NQVNLLAkJUE1JQ19YT19DT1JFX01BTl9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfRU5fTV9NQVNLLAkJUE1JQ19YT19DT1JFX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX1RVUkJPX0VOX01fTUFTSywJCVBNSUNfWE9fQ09SRV9UVVJCT19FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9BQUNfRU5fTV9NQVNLLAkJUE1JQ19YT19DT1JFX0FBQ19FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwNywJCVBNSUNfWE9fU1RBUlRVUF9FTl9NX01BU0ssCQlQTUlDX1hPX1NUQVJUVVBfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfVkJGUE1fRU5fTV9NQVNLLAkJUE1JQ19YT19DT1JFX1ZCRlBNX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX1ZCTFBNX0VOX01fTUFTSywJCVBNSUNfWE9fQ09SRV9WQkxQTV9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwNywJCVBNSUNfWE9fTFBNQklBU19FTl9NX01BU0ssCQlQTUlDX1hPX0xQTUJJQVNfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDcsCQlQTUlDX1hPX1ZUQ0dFTl9FTl9NX01BU0ssCQlQTUlDX1hPX1ZUQ0dFTl9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwNywJCVBNSUNfWE9fSUFBQ19DT01QX0VOX01fTUFTSywJCVBNSUNfWE9fSUFBQ19DT01QX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzA3LAkJUE1JQ19YT19JRlBNX0NPTVBfRU5fTV9NQVNLLAkJUE1JQ19YT19JRlBNX0NPTVBfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDcsCQlQTUlDX1hPX0lMUE1fQ09NUF9FTl9NX01BU0ssCQlQTUlDX1hPX0lMUE1fQ09NUF9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9CWVBDQVNfRlBNX01BU0ssCQlQTUlDX1hPX0NPUkVfQllQQ0FTX0ZQTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfR01YMl9GUE1fTUFTSywJCVBNSUNfWE9fQ09SRV9HTVgyX0ZQTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfSURBQ19GUE1fTUFTSywJCVBNSUNfWE9fQ09SRV9JREFDX0ZQTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDksCQlQTUlDX1hPX0NPUkVfQllQQ0FTX0xQTV9NQVNLLAkJUE1JQ19YT19DT1JFX0JZUENBU19MUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzA5LAkJUE1JQ19YT19DT1JFX0dNWDJfTFBNX01BU0ssCQlQTUlDX1hPX0NPUkVfR01YMl9MUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzA5LAkJUE1JQ19YT19DT1JFX0lEQUNfTFBNX01BU0ssCQlQTUlDX1hPX0NPUkVfSURBQ19MUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzA5LAkJUE1JQ19YT19BQUNfQ09NUF9IVl9MUE1fTUFTSywJCVBNSUNfWE9fQUFDX0NPTVBfSFZfTFBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cwOSwJCVBNSUNfWE9fQUFDX1ZTRUxfTFBNX01BU0ssCQlQTUlDX1hPX0FBQ19WU0VMX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19IVl9MUE1fTUFTSywJCVBNSUNfWE9fQUFDX0hWX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19JQklBU19MUE1fTUFTSywJCVBNSUNfWE9fQUFDX0lCSUFTX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19WT0ZTVF9MUE1fTUFTSywJCVBNSUNfWE9fQUFDX1ZPRlNUX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMDksCQlQTUlDX1hPX0FBQ19GUE1fU1dFTl9NQVNLLAkJUE1JQ19YT19BQUNfRlBNX1NXRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfRENYT19DVzA5LAkJUE1JQ19YT19TV1JTVF9NQVNLLAkJUE1JQ19YT19TV1JTVF9TSElGVCwJCX0sCisgICAge01UNjM1OF9EQ1hPX0NXMTgsCQlQTUlDX1hPX1NUQVRJQ19BVVhPVVRfU0VMX01BU0ssCQlQTUlDX1hPX1NUQVRJQ19BVVhPVVRfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cxOCwJCVBNSUNfWE9fQVVYT1VUX1NFTF9NQVNLLAkJUE1JQ19YT19BVVhPVVRfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0RDWE9fQ1cxOSwJCVBNSUNfWE9fU1RBVElDX0FVWE9VVF9NQVNLLAkJUE1JQ19YT19TVEFUSUNfQVVYT1VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X0FVWEFEQ19BREMxNiwJCVBNSUNfQVVYQURDX0FEQ19PVVRfQ0g3X0JZX01EX01BU0ssCQlQTUlDX0FVWEFEQ19BRENfT1VUX0NIN19CWV9NRF9TSElGVCwJCX0sCisgICAge01UNjM1OF9BVVhBRENfQURDMTYsCQlQTUlDX0FVWEFEQ19BRENfUkRZX0NIN19CWV9NRF9NQVNLLAkJUE1JQ19BVVhBRENfQURDX1JEWV9DSDdfQllfTURfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQVVYQURDX1JRU1QxLAkJUE1JQ19BVVhBRENfUlFTVF9DSDdfQllfTURfTUFTSywJCVBNSUNfQVVYQURDX1JRU1RfQ0g3X0JZX01EX1NISUZULAkJfSwKKyAgICB7TVQ2MzU4X1ZSRjE4X0FOQV9DT04wLAkJUE1JQ19SR19WUkYxOF9WT0NBTF9NQVNLLAkJUE1JQ19SR19WUkYxOF9WT0NBTF9TSElGVCwJCX0sCisgICAge01UNjM1OF9WUkYxMl9BTkFfQ09OMCwJCVBNSUNfUkdfVlJGMTJfVk9DQUxfTUFTSywJCVBNSUNfUkdfVlJGMTJfVk9DQUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfVlJGMThfRUxSXzAsCQlQTUlDX1JHX1ZSRjE4X1ZPVFJJTV9NQVNLLAkJUE1JQ19SR19WUkYxOF9WT1RSSU1fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfVlJGMTJfRUxSXzAsCQlQTUlDX1JHX1ZSRjEyX1ZPVFJJTV9NQVNLLAkJUE1JQ19SR19WUkYxMl9WT1RSSU1fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfQlVDS19UT1BfT0NfQ09OMCwJUE1JQ19SR19CVUNLX1ZQQV9PQ19TRE5fU1RBVFVTX01BU0ssCVBNSUNfUkdfQlVDS19WUEFfT0NfU0ROX1NUQVRVU19TSElGVCwJfSwKKyAgICB7TVQ2MzU4X0JVQ0tfVE9QX0VMUjAsCQlQTUlDX1JHX0JVQ0tfVlBBX09DX1NETl9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZQQV9PQ19TRE5fRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTUkFNX0NPTjMsCQlQTUlDX1JHX0xET19WU1JBTV9HUFVfVk9TRUxfTUFTSywJCVBNSUNfUkdfTERPX1ZTUkFNX0dQVV9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlNSQU1fR1BVX0NPTjIsCQlQTUlDX1JHX0xET19WU1JBTV9HUFVfVk9TRUxfU0xFRVBfTUFTSywJCVBNSUNfUkdfTERPX1ZTUkFNX0dQVV9WT1NFTF9TTEVFUF9TSElGVCwJCX0sCisgICAge01UNjM1OF9MRE9fVlNSQU1fR1BVX0RCRzAsCQlQTUlDX0RBX1ZTUkFNX0dQVV9WT1NFTF9NQVNLLAkJUE1JQ19EQV9WU1JBTV9HUFVfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTUkFNX09USEVSU19DT04yLAkJUE1JQ19SR19MRE9fVlNSQU1fT1RIRVJTX1ZPU0VMX1NMRUVQX01BU0ssCQlQTUlDX1JHX0xET19WU1JBTV9PVEhFUlNfVk9TRUxfU0xFRVBfU0hJRlQsCQl9LAorICAgIHtNVDYzNThfTERPX1ZTUkFNX09USEVSU19EQkcwLAkJUE1JQ19EQV9WU1JBTV9PVEhFUlNfVk9TRUxfTUFTSywJCVBNSUNfREFfVlNSQU1fT1RIRVJTX1ZPU0VMX1NISUZULAkJfSwKK307CisjaWYgZGVmaW5lZChEQ0xfUE1JQ19NT0RVTEVfQ09OVFJPTCkKK0RDTF9IQU5ETEUgY3VycmVudF9kY2xfaGFuZGxlID0gMDsKKyNlbmRpZgorCisvLyNkZWZpbmUgRENMX1BNSUNfUEVSTUlTU0lPTl9DT05UUk9MCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19QRVJNSVNTSU9OX0NPTlRST0wpCitQTVVfQ1RSTF9NSVNDX1NFVF9SRUdJU1RFUl9WQUxVRQlpbGxlZ2FsX21pc2Nfc2V0X3JlZ2lzdGVyX3ZhbHVlID0gezB9OworI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICAgIFdSSVRFIEFQSXMgICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNpZiBkZWZpbmVkKERDTF9QTUlDX1BFUk1JU1NJT05fQ09OVFJPTCkKK0RDTF9CT09MIGRjbF9wbWljX2NoZWNrX3Blcm1pc3Npb24oa2FsX3VpbnQxNiBvZmZzZXQpCit7CisJRENMX0JPT0wgcmV0ID0gRENMX0ZBTFNFOworCWthbF91aW50OCBjID0gKChvZmZzZXQ+PjgpICYgMHhGRik7CisKKwlzd2l0Y2goYykKKyAgICB7CisJCWNhc2UgMHg4MjoKKyAgICAgICAgeworCQkJLy9DTEsgOiBUT1BfQ0xLU1FfU0VUICgweDgyMjYpLFRPUF9DS1BETl9DT04wX0NMUiAoMHg4MjA0KSxUT1BfQ0xLU1EoMHg4MjI0KQorCQkJaWYob2Zmc2V0ID09IDB4ODIyNiB8fCBvZmZzZXQgPT0gMHg4MjA0IHx8IG9mZnNldCA9PSAweDgyMjQpCisJCQkJcmV0PURDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgMHg5MDoKKyAgICAgICAgeworCQkgICAgLy9MRE9fRElHOiAweDkwMUEsMHg5MDFDLCAweDkwMDYsIDB4OTAwOAorICAgICAgICAgICAgaWYob2Zmc2V0ID09IDB4OTAxQSB8fCBvZmZzZXQgPT0gMHg5MDFDIHx8IG9mZnNldCA9PSAweDkwMDYgfHwgb2Zmc2V0ID09IDB4OTAwOCkKKwkJCQlyZXQ9RENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDk4OgorICAgICAgICB7CisJCQkvL0F1ZGlvIEFuYWxvZyA6IDB4OTgwMH4weDk4NTIKKyAgICAgICAgICAgIGlmKG9mZnNldCA+PSAweDk4MDAgJiYgb2Zmc2V0IDw9IDB4OTg1MikKKwkJCQlyZXQ9RENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSAweDlBOgorICAgICAgICB7CisJCQkvL0F1ZGlvIERSRSA6IDB4OUEwMCB+MHg5QTBBCisJCQlpZihvZmZzZXQgPj0gMHg5QTAwICYmIG9mZnNldCA8PSAweDlBMEEpCisJCQkJcmV0PURDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgMHhFMDoKKwkJY2FzZSAweEUxOgorICAgICAgICB7CisJCQkvL0F1ZGlvIGRpZ2l0YWwgOiAweEUwMDAgfjB4RTEzOAorCQkJaWYob2Zmc2V0ID49IDB4RTAwMCAmJiBvZmZzZXQgPD0gMHhFMTM4KQorCQkJCXJldD1EQ0xfVFJVRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorCQkJcmV0PURDTF9GQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKy8vIFdyaXRlIFdob2xlIEJ5dGVzCit2b2lkIGRjbF9wbWljX2J5dGVfd3JpdGUoRENMX1VJTlQxNiBhZGRyLCBEQ0xfVUlOVDE2IHZhbCkKK3sKKwlEQ0xfVUlOVDMyIGlkeCwgdHlwZTsKKworCWthbF90YWtlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jaywgS0FMX0lORklOSVRFX1dBSVQpOworCisJdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKwlpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorICAgIGlmKGFkZHIgPCBQTUlDX01BWF9SRUdfTlVNKQorICAgIHsKKyAgICAgICAgcG1pY19yZWdbYWRkcl0gPSB2YWw7CisgICAgfQorCisJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBhZGRyLCB2YWwsIDB4MDApOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUpOworI2VuZGlmCisJa2FsX2dpdmVfc3BpbmxvY2soZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrKTsKK30KKworLy8gV3JpdGUgV2hvbGUgQnl0ZXMKK3ZvaWQgZGNsX3BtaWNfYnl0ZV93cml0ZV9ub2xvY2soRENMX1VJTlQxNiBhZGRyLCBEQ0xfVUlOVDE2IHZhbCkKK3sKKwlEQ0xfVUlOVDMyIGlkeCwgdHlwZTsKKworCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCXR5cGUgPSBQTUlDX0xPR19UWVBFX0hSVF9ET01BSU47CisJZWxzZQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCisJaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKworICAgIGlmKGFkZHIgPCBQTUlDX01BWF9SRUdfTlVNKQorICAgIHsKKyAgICAgICAgcG1pY19yZWdbYWRkcl0gPSB2YWw7CisgICAgfQorCisvLwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIGFkZHIsIHZhbCwgMHgwMCk7CisvLwllbHNlCisvLwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBhZGRyLCB2YWwsIDB4MDApOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUpOworI2VuZGlmCisKK30KKworLy8gV3JpdGUgcmVnaXN0ZXIgZmllbGQKK3ZvaWQgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQzYzNThfRkxBR1NfTElTVF9FTlVNIGZsYWcsIERDTF9VSU5UMTYgc2VsKQoreworICAgIGNvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSAqcFRhYmxlID0gcG1pY19mbGFnc190YWJsZTsKKwlEQ0xfVUlOVDMyIHR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisJRENMX1VJTlQzMiBpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworCWthbF90YWtlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jaywgS0FMX0lORklOSVRFX1dBSVQpOworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworICAgIHBtaWNfcmVnX2xvZy5jb21tYW5kX2ZsYWcgPSBmbGFnOworICAgIHBtaWNfcmVnX2xvZy5yZWdfYmVmb3JlX3dyaXRlID0gcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF07CisKKyAgICBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSAmPSB+KHBUYWJsZVtmbGFnXS5tYXNrIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisgICAgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gfD0gKChrYWxfdWludDE2KXNlbCA8PCBwVGFibGVbZmxhZ10uc2hpZnQpOworCisvLwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKy8vCWVsc2UKKy8vCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKworICAgIHBtaWNfcmVnX2xvZy53cml0ZV92YWx1ZSA9IHNlbDsKKyAgICBwbWljX3JlZ19sb2cuYWRkcmVzc19vZmZzZXQgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfbWFzayA9IHBUYWJsZVtmbGFnXS5tYXNrOworICAgIHBtaWNfcmVnX2xvZy5yZWdfc2hpZnQgPSBwVGFibGVbZmxhZ10uc2hpZnQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19hZGRyID0gcFRhYmxlW2ZsYWddLm9mZnNldDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2RhdGEgPSBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworCWthbF9naXZlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jayk7Cit9CisKKy8vIFdyaXRlIHJlZ2lzdGVyIGZpZWxkCit2b2lkIGRjbF9wbWljX2ZpZWxkX3dyaXRlX25vbG9jayhQTUlDNjM1OF9GTEFHU19MSVNUX0VOVU0gZmxhZywgRENMX1VJTlQxNiBzZWwpCit7CisgICAgY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZICpwVGFibGUgPSBwbWljX2ZsYWdzX3RhYmxlOworCURDTF9VSU5UMzIgdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKwlEQ0xfVUlOVDMyIGlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisgICAgcG1pY19yZWdfbG9nLmNvbW1hbmRfZmxhZyA9IGZsYWc7CisgICAgcG1pY19yZWdfbG9nLnJlZ19iZWZvcmVfd3JpdGUgPSBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworICAgIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdICY9IH4ocFRhYmxlW2ZsYWddLm1hc2sgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKyAgICBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSB8PSAoKGthbF91aW50MTYpc2VsIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisKKy8vCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9XUklURSwgcFRhYmxlW2ZsYWddLm9mZnNldCwgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0sIDB4MDApOworLy8JZWxzZQorLy8JCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9XUklURSwgcFRhYmxlW2ZsYWddLm9mZnNldCwgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0sIDB4MDApOworCisgICAgcG1pY19yZWdfbG9nLndyaXRlX3ZhbHVlID0gc2VsOworICAgIHBtaWNfcmVnX2xvZy5hZGRyZXNzX29mZnNldCA9IHBUYWJsZVtmbGFnXS5vZmZzZXQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19tYXNrID0gcFRhYmxlW2ZsYWddLm1hc2s7CisgICAgcG1pY19yZWdfbG9nLnJlZ19zaGlmdCA9IHBUYWJsZVtmbGFnXS5zaGlmdDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2FkZHIgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfZGF0YSA9IHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCit9CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgICBSRUFEIEFQSXMgICAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIFJlYWQgV2hvbGUgQnl0ZXMKK0RDTF9VSU5UMTYgZGNsX3BtaWNfYnl0ZV9yZXR1cm4oRENMX1VJTlQxNiBhZGRyKQoreworICAgIERDTF9VSU5UMTYgcmVnX3RlbXA7CisJRENMX1VJTlQzMiBpZHgsIHR5cGU7CisKKwlrYWxfdGFrZV9zcGlubG9jayhkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2ssIEtBTF9JTkZJTklURV9XQUlUKTsKKworCXR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisJaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKy8vCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCAoRENMX1VJTlQzMilhZGRyLCAweDAwLCAmcmVnX3RlbXApOworLy8JZWxzZQorLy8JCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCAoRENMX1VJTlQzMilhZGRyLCAweDAwLCAmcmVnX3RlbXApOworCisgICAgaWYoYWRkciA8IFBNSUNfTUFYX1JFR19OVU0pCisgICAgeworICAgICAgICBwbWljX3JlZ1thZGRyXSA9IHJlZ190ZW1wOworICAgIH0KKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworCWthbF9naXZlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jayk7CisKKyAgICByZXR1cm4gcmVnX3RlbXA7Cit9CisKKy8vIFJlYWQgV2hvbGUgQnl0ZXMKK0RDTF9VSU5UMTYgZGNsX3BtaWNfYnl0ZV9yZXR1cm5fbm9sb2NrKERDTF9VSU5UMTYgYWRkcikKK3sKKyAgICBEQ0xfVUlOVDE2IHJlZ190ZW1wOworCURDTF9VSU5UMzIgaWR4LCB0eXBlOworCisJaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfSFJUX0RPTUFJTjsKKwllbHNlCisJCXR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisKKwlpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworLy8JaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1JFQUQsIChEQ0xfVUlOVDMyKWFkZHIsIDB4MDAsICZyZWdfdGVtcCk7CisvLwllbHNlCisvLwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1JFQUQsIChEQ0xfVUlOVDMyKWFkZHIsIDB4MDAsICZyZWdfdGVtcCk7CisKKyAgICBpZihhZGRyIDwgUE1JQ19NQVhfUkVHX05VTSkKKyAgICB7CisgICAgICAgIHBtaWNfcmVnW2FkZHJdID0gcmVnX3RlbXA7CisgICAgfQorCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlZ190ZW1wOworfQorCisvLyBSZWFkIHJlZ2lzdGVyIGZpZWxkCitEQ0xfVUlOVDE2IGRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQzYzNThfRkxBR1NfTElTVF9FTlVNIGZsYWcpCit7CisgICAgY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZICpwVGFibGUgPSBwbWljX2ZsYWdzX3RhYmxlOworICAgIERDTF9VSU5UMTYgcmVnX3JldHVybiA9IDA7CisJRENMX1VJTlQzMiB0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCURDTF9VSU5UMzIgaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9IUlRfRE9NQUlOOworCWVsc2UKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKworCWlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKy8vCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCBwVGFibGVbZmxhZ10ub2Zmc2V0LCAweDAwLCAmcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0pOworLy8JZWxzZQorLy8JCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCBwVGFibGVbZmxhZ10ub2Zmc2V0LCAweDAwLCAmcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0pOworCisgICAgcmVnX3JldHVybiA9ICgocG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gJiAocFRhYmxlW2ZsYWddLm1hc2sgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KSkgPj4gcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlZ19yZXR1cm47Cit9CisKKy8vIEV4cG9ydGVkIGZvciBFTSB1c2VkCit2b2lkIHBtaWNfRU1fcmVnX3dyaXRlKGthbF91aW50MTYgcmVnLCBrYWxfdWludDE2IHZhbCl7CisJZGNsX3BtaWNfYnl0ZV93cml0ZV9ub2xvY2socmVnLCB2YWwpOworLy8JICBkY2xfcG1pY19ieXRlX3dyaXRlKHJlZywgdmFsKTsKK30KKwora2FsX3VpbnQxNiBwbWljX0VNX3JlZ19yZWFkKGthbF91aW50MTYgcmVnKXsKKwlyZXR1cm4gIGRjbF9wbWljX2J5dGVfcmV0dXJuX25vbG9jayhyZWcpOworfQorCitjb25zdCBEQ0xfVUlOVDMyIHZwYV92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF8wMF81MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAwXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDBfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMF84MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAwXzkwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfMDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV8xMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzIwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfMzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV80MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAxXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV83MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfOTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl8wMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzEwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl8zMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl82MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzcwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfODAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl85MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wM18yMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAzXzMwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfNDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wM181MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCit9OworCitjb25zdCBEQ0xfVUlOVDMyIHZzaW0xX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUX0lOVkFMSUQsICAgICAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzcwMDAwMF9WLAorICAgIFBNVV9WT0xUXzAxXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsCisgICAgUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfSU5WQUxJRCwKK307CisKK2NvbnN0IERDTF9VSU5UMzIgdnhvMjJfdm9zZWxbXSA9Cit7CisgICAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgICAgIFBNVV9WT0xUXzAyXzIwMDAwMF9WLCAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfSU5WQUxJRCwgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfSU5WQUxJRCwKK307CisKK2NvbnN0IERDTF9VSU5UMzIgdm1vZGVtX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUXzAwXzUwMDAwMF9WLAlQTVVfVk9MVF8wMF81NTAwMDBfViwJUE1VX1ZPTFRfMDBfNjAwMDAwX1YsCVBNVV9WT0xUXzAwXzc1MDAwMF9WLAorICAgIFBNVV9WT0xUXzAwXzgwMDAwMF9WLAlQTVVfVk9MVF8wMF84NTAwMDBfViwJUE1VX1ZPTFRfSU5WQUxJRCwJUE1VX1ZPTFRfSU5WQUxJRCwKK307CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKworY29uc3QgRENMX1VJTlQzMiB2c3JhbV92bWRfdm9zZWxbXSA9Cit7CisgICAgUE1VX1ZPTFRfMDBfNTUwMDAwX1YsICAgUE1VX1ZPTFRfMDBfNjAwMDAwX1YsCVBNVV9WT0xUXzAwXzY1MDAwMF9WLAlQTVVfVk9MVF8wMF83NTAwMDBfViwKKyAgICBQTVVfVk9MVF8wMF84MDAwMDBfViwJUE1VX1ZPTFRfMDBfODUwMDAwX1YsCVBNVV9WT0xUX0lOVkFMSUQsCVBNVV9WT0xUX0lOVkFMSUQsCit9OworCitQTVVfUEFSQU1FVEVSX1RBQkxFX0VOVFJZIHBtdV9wYXJhbWV0ZXJfdGFibGVbXT0KK3sKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWUEFfU1cpLAkJICAgIAl2cGFfdm9zZWwsCQkgICAgTlVMTCwJICAgIEdFVEFSUk5VTSh2cGFfdm9zZWwpCQkJfSwKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWUEEpLAkJICAgIAl2cGFfdm9zZWwsCQkgICAgTlVMTCwJICAgIEdFVEFSUk5VTSh2cGFfdm9zZWwpCQkJfSwKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWU0lNMSksCQkgICAgCXZzaW0xX3Zvc2VsLAkJTlVMTCwJICAgIEdFVEFSUk5VTSh2c2ltMV92b3NlbCkJCQl9LAorICAgIHtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZTSU0yKSwJCSAgICAJdnNpbTFfdm9zZWwsCQlOVUxMLCAgIAlHRVRBUlJOVU0odnNpbTFfdm9zZWwpCSAgICAJfSwKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWWE8yMiksCQkgICAgCXZ4bzIyX3Zvc2VsLAkJTlVMTCwgICAJR0VUQVJSTlVNKHZ4bzIyX3Zvc2VsKQkgICAgCX0sCisJe0VOQyhMRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRSwgVk1PREVNKSwJCXZtb2RlbV92b3NlbCwJCU5VTEwsCQlHRVRBUlJOVU0odm1vZGVtX3Zvc2VsKQkJCX0sCisgICAge0VOQyhMRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRSwgVlNSQU1fTUQpLAkJdnNyYW1fdm1kX3Zvc2VsLAlOVUxMLCAgIAlHRVRBUlJOVU0odnNyYW1fdm1kX3Zvc2VsKQkJfSwKK307CisKKworZXh0ZXJuIFBNVV9DT05UUk9MX0hBTkRMRVIgcG11X2NvbnRyb2xfaGFuZGxlcjsKKworRENMX1VJTlQxNiBwbXVfcGFyYW1ldGVyX3NpemUgPSAwOworCitEQ0xfU1RBVFVTIFBNSUNfY29udHJvbF9oYW5kbGVyKERDTF9IQU5ETEUgaGFuZGxlLERDTF9DVFJMX0NNRCBjbWQsRENMX0NUUkxfREFUQV9UICpkYXRhKQoreworICAgIERDTF9VSU5UMTYJcmVnVmFsOworICAgIERDTF9JTlQzMglyZXR1cm5fdmFsID0gU1RBVFVTX0ZBSUw7CisjaWYgZGVmaW5lZChEQ0xfUE1JQ19NT0RVTEVfQ09OVFJPTCkKKwljdXJyZW50X2RjbF9oYW5kbGUgPSBoYW5kbGU7CisjZW5kaWYKKyAgICBzd2l0Y2goY21kKQorICAgIHsKKyAgICAgICAgY2FzZSBMRE9fQlVDS19TRVRfRU46CS8vRW5hYmxlIGNvbnRyb2wgaW4gU1cgbW9kZQorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gKnBMZG9CdWNrQ3RybD0mKGRhdGEtPnJQTVVMZG9CdWNrU2V0RW4pOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WTU9ERU1fRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZQQV9TVzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlX25vbG9jayhQTUlDX0VOVU1fUkdfQlVDS19WUEFfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVkZFMjhfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjEyX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUzFfVk9URVJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZTMl9WT1RFUl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9MUF9NT0RFX1NFVCAqcExkb0J1Y2tDdHJsID0mIChkYXRhLT5yUE1VTGRvQnVja1NldExwTW9kZVNldCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZGRTI4OgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZGRTI4X0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWUkYxODoKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlJGMTI6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMTJfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCSBjYXNlIExET19CVUNLX1NFVF9PQ0ZCX0VOOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT0NGQl9FTiAqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tTZXRPY2ZiRW4pOworCisgICAgICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9PQ0ZCX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfT0NGQl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfR0VUX1ZPU0VMOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9TRUwgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWb3NlbCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZDT1JFOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WQ09SRV9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU1JBTV9PVEhFUlM6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fT1RIRVJTX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTMToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVlMxX1ZPVEVSX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTMjoKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVlMyX1ZPVEVSX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTUkFNX0dQVToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9HUFVfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfVk9TRUw6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1NFTCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvc2VsKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVkNPUkU6CisgICAgICAgICAgICAgICAgeworCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WQ09SRV9WT1NFTCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9WT1NFTCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTMToKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZTMV9WT1RFUl9WT1NFTCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTMjoKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZTMl9WT1RFUl9WT1NFTCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTUkFNX09USEVSUzoKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fT1RIRVJTX1ZPU0VMLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNSQU1fR1BVOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9HUFVfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX0dFVF9WT1NFTF9TTEVFUDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPU0VMX1NMRUVQICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrR2V0Vm9zZWxTbGVlcCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZDT1JFOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WQ09SRV9WT1NFTF9TTEVFUCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU1JBTV9HUFU6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fR1BVX1ZPU0VMX1NMRUVQKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX09USEVSUzoKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9PVEhFUlNfVk9TRUxfU0xFRVApOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfVk9TRUxfU0xFRVA6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1NFTF9TTEVFUCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvc2VsU2xlZXApOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WTU9ERU1fVk9TRUxfU0xFRVAsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU1JBTV9HUFU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTUkFNX0dQVV9WT1NFTF9TTEVFUCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX09USEVSUzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fT1RIRVJTX1ZPU0VMX1NMRUVQLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfTU9ERVNFVDoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX01PREVTRVQgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRNb2Rlc2V0KTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlBBX1NXOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGVfbm9sb2NrKFBNSUNfRU5VTV9SR19WUEFfTU9ERVNFVCwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WTU9ERU1fRlBXTSwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WUzJfRlBXTSwgcExkb0J1Y2tDdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX0NPVDoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0NPVCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldENvdHNldCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZDT1JFOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZDT1JFX0ZDT1QsIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVk1PREVNX0ZDT1QsIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX0dFVF9DT1Q6CisJCXsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9DT1QgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tHZXRDb3QpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWQ09SRToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+bW9kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX1ZDT1JFX0ZDT1QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5tb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVk1PREVNX0ZDT1QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfT1BfRU46CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9PUF9FTiAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldE9wRW4pOworCisJCQlrYWxfdWludDE2IG1vZGUgPSgocExkb0J1Y2tDdHJsLT5zd19vcF9lbiAgPDwgU1dfT1BfRU5fU0hJRlQpIHwgKHBMZG9CdWNrQ3RybC0+aHcwX29wX2VuIDw8IEhXMF9PUF9FTl9TSElGVCl8CisJCQkJCQkJICAocExkb0J1Y2tDdHJsLT5odzFfb3BfZW4gPDwgSFcxX09QX0VOX1NISUZUKXwgKHBMZG9CdWNrQ3RybC0+aHcyX29wX2VuIDw8IEhXMl9PUF9FTl9TSElGVCkpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWTU9ERU06CisJCQkJeworCQkJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZTSU0xOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlNJTTFfT1BfRU5fU0VUX0FERFIsIG1vZGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisJCQkJeworCQkJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WU0lNMl9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZGRTI4X09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlJGMThfT1BfRU5fU0VUX0FERFIsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxMl9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX0NMUl9PUF9FTjoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09QX0VOICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0T3BFbik7CisKKwkJCWthbF91aW50MTYgbW9kZSA9KChwTGRvQnVja0N0cmwtPnN3X29wX2VuICA8PCBTV19PUF9FTl9TSElGVCkgfCAocExkb0J1Y2tDdHJsLT5odzBfb3BfZW4gPDwgSFcwX09QX0VOX1NISUZUKXwKKwkJCQkJCQkgIChwTGRvQnVja0N0cmwtPmh3MV9vcF9lbiA8PCBIVzFfT1BfRU5fU0hJRlQpfCAocExkb0J1Y2tDdHJsLT5odzJfb3BfZW4gPDwgSFcyX09QX0VOX1NISUZUKSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKwkJCQl7CisJCQkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WTU9ERU1fT1BfRU5fQ0xSX0FERFIsIG1vZGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlNJTTE6CisJCQkJeworCQkJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WU0lNMV9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWU0lNMjoKKwkJCQl7CisJCQkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0yX09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZGRTI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVkZFMjhfT1BfRU5fQ0xSX0FERFIsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxOF9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjEyX09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX0hXX09QX0NGRzoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0hXX09QX0NGRyAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldEh3T3ApOworCisJCQlrYWxfdWludDE2IHZhbHVlID0oKHBMZG9CdWNrQ3RybC0+aHcwX29wX2NmZyA8PCBIVzBfT1BfQ0ZHX1NISUZUKSB8CisJCQkJCQkJICAocExkb0J1Y2tDdHJsLT5odzFfb3BfY2ZnIDw8IEhXMV9PUF9DRkdfU0hJRlQpIHwKKwkJCQkJCQkgIChwTGRvQnVja0N0cmwtPmh3Ml9vcF9jZmcgPDwgSFcyX09QX0NGR19TSElGVCkpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19TRVRfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlNJTTJfT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19TRVRfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMTg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlJGMTJfT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX0NMUl9IV19PUF9DRkc6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX0NMUl9IV19PUF9DRkcgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tDbHJId09wKTsKKworCQkJa2FsX3VpbnQxNiB2YWx1ZSA9KChwTGRvQnVja0N0cmwtPmh3MF9vcF9jZmcgPDwgSFcwX09QX0NGR19TSElGVCkgfAorCQkJCQkJCSAgKHBMZG9CdWNrQ3RybC0+aHcxX29wX2NmZyA8PCBIVzFfT1BfQ0ZHX1NISUZUKSB8CisJCQkJCQkJICAocExkb0J1Y2tDdHJsLT5odzJfb3BfY2ZnIDw8IEhXMl9PUF9DRkdfU0hJRlQpKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlNJTTFfT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0yX09QX0NGR19DTFJfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkZFMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WRkUyOF9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjE4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlJGMThfT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19DTFJfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfR09fT05fT1A6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9HT19PTl9PUCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldEdvT25PcCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX09QX0NGR19TRVQsIDEgPDwgR09fT05fT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9PUF9DRkdfQ0xSLCAxIDw8IEdPX09OX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9PRkYpCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX09QX0NGR19TRVQsIDEgPDwgR09fT05fT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX09QX0NGR19DTFIsIDEgPDwgR09fT05fT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkZFMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX09GRikKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVkZFMjhfT1BfQ0ZHX1NFVCwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVkZFMjhfT1BfQ0ZHX0NMUiwgMSA8PCBHT19PTl9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfT0ZGKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF9PUF9DRkdfU0VULCAxIDw8IEdPX09OX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF9PUF9DRkdfQ0xSLCAxIDw8IEdPX09OX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9PRkYpCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjEyX09QX0NGR19TRVQsIDEgPDwgR09fT05fT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjEyX09QX0NGR19DTFIsIDEgPDwgR09fT05fT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfR09fTFBfT1A6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9HT19MUF9PUCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldEdvTHBPcCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVCwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSLCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9OT19MUCkKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTFfT1BfQ0ZHX1NFVCwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTFfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX09QX0NGR19TRVQsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX09QX0NGR19DTFIsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkZFMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihwTGRvQnVja0N0cmwtPm1vZGUgPT0gUHJlZmVyX05PX0xQKQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WRkUyOF9PUF9DRkdfU0VULCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKwkJCQkJZWxzZQorCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WRkUyOF9PUF9DRkdfQ0xSLCAxIDw8IEdPX0xQX09QX1NISUZUKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjE4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYocExkb0J1Y2tDdHJsLT5tb2RlID09IFByZWZlcl9OT19MUCkKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMThfT1BfQ0ZHX1NFVCwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisJCQkJCWVsc2UKKwkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMThfT1BfQ0ZHX0NMUiwgMSA8PCBHT19MUF9PUF9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKHBMZG9CdWNrQ3RybC0+bW9kZSA9PSBQcmVmZXJfTk9fTFApCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjEyX09QX0NGR19TRVQsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworCQkJCQllbHNlCisJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjEyX09QX0NGR19DTFIsIDEgPDwgR09fTFBfT1BfU0hJRlQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKworICAgICAgICBjYXNlIExET19CVUNLX1NFVF9WT0xUQUdFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvbHRhZ2UpOworICAgICAgICAgICAgcmVnVmFsID0gUE1VX1BhcmFtZXRlcl90b19WYWx1ZShFTkMoY21kLCBwTGRvQnVja0N0cmwtPm1vZCksIHBMZG9CdWNrQ3RybC0+dm9sdGFnZSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZTSU0xX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlNJTTJfVk9TRUwsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUEFfU1c6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZV9ub2xvY2soUE1JQ19FTlVNX1JHX0JVQ0tfVlBBX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlhPMjI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlhPMjJfVk9TRUwsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCisJICAgIGNhc2UgTERPX0JVQ0tfR0VUX1ZPTFRBR0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT0xUQUdFCSpwTGRvQnVja0N0cmw9JihkYXRhLT5yUE1VTGRvQnVja0dldFZvbHQpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9EQV9WTU9ERU1fVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNSQU1fR1BVOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fREFfVlNSQU1fR1BVX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX09USEVSUzoKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0RBX1ZTUkFNX09USEVSU19WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX1NFVF9TTEVFUF9WT0xUQUdFOgorCQl7CisJCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRSAqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tTZXRTbGVlcFZvbHRhZ2UpOworCQkJcmVnVmFsID0gUE1VX1BhcmFtZXRlcl90b19WYWx1ZShFTkMoY21kLCBwTGRvQnVja0N0cmwtPm1vZCksIHBMZG9CdWNrQ3RybC0+c2xlZXBWb2x0YWdlKTsKKworCQkJc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZNT0RFTV9TTEVFUF9WT0xUQUdFLCByZWdWYWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJLyoKKyAgICAgICAgY2FzZSBWUEFfU0VUX0VOOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9WUEFfU0VUX0VOICpwVnBhU2V0RW4gPSAmKGRhdGEtPnJQTVVWcGFTZXRFbik7CisgICAgICAgICAgICBkY2xfcG1pYzYzMzJfZmllbGRfd3JpdGUoTVQ2MzMyX1ZQQV9FTiwgcFZwYVNldEVuLT5lbmFibGUpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKwkJKi8KKworCQljYXNlIFZQQV9HRVRfVk9MVEFHRV9MSVNUOgorCQl7CisJCQlQTVVfQ1RSTF9WUEFfR0VUX1ZPTFRBR0VfTElTVCAqcFZwYUN0cmwgPSAmKGRhdGEtPnJQTVVWcGFHZXRWb2x0YWdlTGlzdCk7CisJCQlwVnBhQ3RybC0+cFZvbHRhZ2VMaXN0ID0gdnBhX3Zvc2VsOworCQkJcFZwYUN0cmwtPm51bWJlciA9IEdFVEFSUk5VTSh2cGFfdm9zZWwpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworICAgICAgICAgY2FzZSBBRENfU0VUX1JRU1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vUE1VX0NUUkxfQURDX1NFVF9SUVNUICpwQWRjQ3RybCA9ICYoZGF0YS0+clBNVUFkY1NldFJxc3QpOworICAgICAgICAgICAgaWYoKEFVWEFEQ19TdGF0dXMgIT0gQVVYQURDX1JFQURfSU5JVCkgJiYgKEFVWEFEQ19TdGF0dXMgIT0gQVVYQURDX1JFQURfREFUQSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRW5hYmxlIENMS1NRIGZvciBNRCAoU1cgbW9kZSkgUkdfQ0xLU1FfRU5fQVVYX01ECisgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX0FVWEFEQ19SUVNUX0NIN19CWV9NRF9BRERSLCAoMHgxIDw8IFBNSUNfQVVYQURDX1JRU1RfQ0g3X0JZX01EX1NISUZUKSk7CisgICAgICAgICAgICBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfUkVRVUVTVDsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKworICAgICAgICBjYXNlIEFEQ19HRVRfUkRZX01EOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9BRENfR0VUX1JEWV9NRCAqcEFkY0N0cmwgPSAmKGRhdGEtPnJQTVVBZGNHZXRSZHlNZCk7CisgICAgICAgICAgICBwQWRjQ3RybC0+c3RhdHVzID0gKERDTF9CT09MKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0FVWEFEQ19BRENfUkRZX0NIN19CWV9NRCk7CisgICAgICAgICAgICBpZigoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9SRVFVRVNUKSAmJiAoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9CVVNZKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKHBBZGNDdHJsLT5zdGF0dXMgPT0gRENMX1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX1JFQURZOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFVWEFEQ19TdGF0dXMgPSBBVVhBRENfUkVBRF9CVVNZOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgQURDX0dFVF9PVVRfTUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0FEQ19HRVRfT1VUX01EICpwQWRjQ3RybCA9ICYoZGF0YS0+clBNVUFkY0dldE91dE1kKTsKKyAgICAgICAgICAgIGlmKEFVWEFEQ19TdGF0dXMgIT0gQVVYQURDX1JFQURfUkVBRFkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEFkY0N0cmwtPmRhdGEgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9BVVhBRENfQURDX09VVF9DSDdfQllfTUQpOworICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0RBVEE7CisgICAgICAgICAgICAvLyBEaXNhYmxlIENMS1NRIGZvciBNRCAoU1cgbW9kZSkgUkdfQ0xLU1FfRU5fQVVYX01ECisKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBUT1BfU0VUX1NSQ0xLRU5fSU5fRU46CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX1RPUF9TRVRfU1JDTEtFTl9JTl9FTiAqcFRvcFNyY2xrZW5DdHJsID0gJihkYXRhLT5yUE1VVG9wU2V0U3JjbGtlbkluRW4pOworCisgICAgICAgICAgICBzd2l0Y2gocFRvcFNyY2xrZW5DdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBQTUlDX1NSQ0xLRU5fSU4wOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1NSQ0xLRU5fSU4wX0VOLCBwVG9wU3JjbGtlbkN0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgUE1JQ19TUkNMS0VOX0lOMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19TUkNMS0VOX0lOMV9FTiwgcFRvcFNyY2xrZW5DdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgVE9QX1NFVF9TUkNMS0VOX0lOX01PREU6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX1RPUF9TRVRfU1JDTEtFTl9JTl9NT0RFICpwVG9wU3JjbGtlbkN0cmwgPSAmKGRhdGEtPnJQTVVUb3BTZXRTcmNsa2VuSW5Nb2RlKTsKKworICAgICAgICAgICAgc3dpdGNoKHBUb3BTcmNsa2VuQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgUE1JQ19TUkNMS0VOX0lOMDoKKyAgICAgICAgICAgICAgICB7CisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19TUkNMS0VOX0lOMF9IV19NT0RFLCBwVG9wU3JjbGtlbkN0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgUE1JQ19TUkNMS0VOX0lOMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19TUkNMS0VOX0lOMV9IV19NT0RFLCBwVG9wU3JjbGtlbkN0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfRlBXTToKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0ZQV00gKnBMZG9CdWNrU2V0RnB3bSA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRGcHdtKTsKKworCQkJc3dpdGNoKHBMZG9CdWNrU2V0RnB3bS0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVkNPUkU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVkNPUkVfRlBXTSwgcExkb0J1Y2tTZXRGcHdtLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZNT0RFTV9GUFdNLCBwTGRvQnVja1NldEZwd20tPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX0dFVF9GUFdNOgorCQl7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfRlBXTSAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja0dldEZwd20pOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWQ09SRToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrQ3RybC0+ZW5hYmxlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVkNPUkVfRlBXTSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0N0cmwtPmVuYWJsZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX1ZNT0RFTV9GUFdNKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgRENYT19TRVRfUkVHSVNURVJfVkFMVUU6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0RDWE9fU0VUX1JFR0lTVEVSX1ZBTFVFCSpwQ2hyQ3RybCA9ICYoZGF0YS0+clBNVURjeG9TZXRSZWdpc3RlclZhbHVlKTsKKworCQkJcG1pY19FTV9yZWdfd3JpdGUocENockN0cmwtPm9mZnNldCwgcENockN0cmwtPnZhbHVlKTsKKwkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERDWE9fR0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9EQ1hPX0dFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmw9JihkYXRhLT5yUE1VRGN4b0dldFJlZ2lzdGVyVmFsdWUpOworICAgICAgICAgICAgcENockN0cmwtPnZhbHVlID0gcG1pY19FTV9yZWdfcmVhZChwQ2hyQ3RybC0+b2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNSVNDX1NFVF9SRUdJU1RFUl9WQUxVRToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTUlTQ19TRVRfUkVHSVNURVJfVkFMVUUJKnBDaHJDdHJsID0gJihkYXRhLT5yUE1VTWlzY1NldFJlZ2lzdGVyVmFsdWUpOworI2lmIGRlZmluZWQoRENMX1BNSUNfUEVSTUlTU0lPTl9DT05UUk9MKQorCQkJaWYoZGNsX3BtaWNfY2hlY2tfcGVybWlzc2lvbihwQ2hyQ3RybC0+b2Zmc2V0KT09IERDTF9UUlVFKQorI2VuZGlmCisJCQl7CisJCQkJcG1pY19FTV9yZWdfd3JpdGUocENockN0cmwtPm9mZnNldCwgcENockN0cmwtPnZhbHVlKTsKKwkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJfQorI2lmIGRlZmluZWQoRENMX1BNSUNfUEVSTUlTU0lPTl9DT05UUk9MKQorCQkJZWxzZQorCQkJeworCQkJCWlsbGVnYWxfbWlzY19zZXRfcmVnaXN0ZXJfdmFsdWUub2Zmc2V0ID0gcENockN0cmwtPm9mZnNldDsKKwkJCQlpbGxlZ2FsX21pc2Nfc2V0X3JlZ2lzdGVyX3ZhbHVlLnZhbHVlID0gcENockN0cmwtPnZhbHVlOworCQkJCUFTU0VSVCgwKTsKKwkJCX0KKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUlTQ19HRVRfUkVHSVNURVJfVkFMVUU6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX01JU0NfR0VUX1JFR0lTVEVSX1ZBTFVFCSpwQ2hyQ3RybD0mKGRhdGEtPnJQTVVNaXNjR2V0UmVnaXN0ZXJWYWx1ZSk7CisgICAgICAgICAgICBwQ2hyQ3RybC0+dmFsdWUgPSBwbWljX0VNX3JlZ19yZWFkKHBDaHJDdHJsLT5vZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCQljYXNlIExET19CVUNLX1NFVF9WT0NBTDoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPQ0FMICpwTGRvQnVja1NldFZvY2FsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvY2FsKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrU2V0Vm9jYWwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4X1ZPQ0FMOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZSRjE4X1ZPQ0FMLCBwTGRvQnVja1NldFZvY2FsLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxMl9WT0NBTDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WUkYxMl9WT0NBTCwgcExkb0J1Y2tTZXRWb2NhbC0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19HRVRfVk9DQUw6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT0NBTCAqcExkb0J1Y2tHZXRWb2NhbCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWb2NhbCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0dldFZvY2FsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUkYxOF9WT0NBTDoKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrR2V0Vm9jYWwtPnZhbHVlID0gKERDTF9VSU5UMTYpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVlJGMThfVk9DQUwpOworCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTJfVk9DQUw6CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0dldFZvY2FsLT52YWx1ZSA9IChEQ0xfVUlOVDE2KWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX1ZSRjEyX1ZPQ0FMKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisKKwkJY2FzZSBMRE9fQlVDS19TRVRfVk9UUklNOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9UUklNICpwTGRvQnVja1NldFZvdHJpbSA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWb3RyaW0pOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tTZXRWb3RyaW0tPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4X1ZPVFJJTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WUkYxOF9WT1RSSU0sIHBMZG9CdWNrU2V0Vm90cmltLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxMl9WT1RSSU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlJGMTJfVk9UUklNLCBwTGRvQnVja1NldFZvdHJpbS0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19HRVRfVk9UUklNOgorCQl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9UUklNICpwTGRvQnVja0dldFZvdHJpbSA9ICYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWb3RyaW0pOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tHZXRWb3RyaW0tPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4X1ZPVFJJTToKKyAgICAgICAgICAgICAgICB7CisJCQkJCXBMZG9CdWNrR2V0Vm90cmltLT52YWx1ZSA9IChEQ0xfVUlOVDE2KWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX1ZSRjE4X1ZPVFJJTSk7CisJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxMl9WT1RSSU06CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0dldFZvdHJpbS0+dmFsdWUgPSAoRENMX1VJTlQxNilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19WUkYxMl9WT1RSSU0pOworCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBMRE9fQlVDS19TRVRfVlBBX09DX1NETl9TVEFUVVM6CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WUEFfT0NfU0ROX1NUQVRVUyAqcExkb0J1Y2tTZXRWcGFPY1NkblN0YXR1cyA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWcGFPY1NkblN0YXR1cyk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja1NldFZwYU9jU2RuU3RhdHVzLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUEFfT0NfU0ROX1NUQVRVUzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZQQV9PQ19TRE5fU1RBVFVTLCBwTGRvQnVja1NldFZwYU9jU2RuU3RhdHVzLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwkJfQorCQlicmVhazsKKworCQljYXNlIExET19CVUNLX0dFVF9WUEFfT0NfU0ROX1NUQVRVUzoKKwkJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZQQV9PQ19TRE5fU1RBVFVTICpwTGRvQnVja0dldFZwYU9jU2RuU3RhdHVzID0gJihkYXRhLT5yUE1VTGRvQnVja0dldFZwYU9jU2RuU3RhdHVzKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrR2V0VnBhT2NTZG5TdGF0dXMtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9PQ19TRE5fU1RBVFVTOgorICAgICAgICAgICAgICAgIHsKKwkJCQkJcExkb0J1Y2tHZXRWcGFPY1NkblN0YXR1cy0+dmFsdWUgPSAoRENMX1VJTlQxNilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZQQV9PQ19TRE5fU1RBVFVTKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfU0VUX1ZQQV9PQ19TRE5fRU46CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WUEFfT0NfU0ROX0VOICpwTGRvQnVja1NldFZwYU9jU2RuRW4gPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0VnBhT2NTZG5Fbik7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja1NldFZwYU9jU2RuRW4tPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9PQ19TRE5fRU46CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUEFfT0NfU0ROX0VOLCBwTGRvQnVja1NldFZwYU9jU2RuRW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisJCWNhc2UgTERPX0JVQ0tfR0VUX1ZQQV9PQ19TRE5fRU46CisJCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WUEFfT0NfU0ROX0VOICpwTGRvQnVja0dldFZwYU9jU2RuRW4gPSAmKGRhdGEtPnJQTVVMZG9CdWNrR2V0VnBhT2NTZG5Fbik7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0dldFZwYU9jU2RuRW4tPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9PQ19TRE5fRU46CisgICAgICAgICAgICAgICAgeworCQkJCQlwTGRvQnVja0dldFZwYU9jU2RuRW4tPnZhbHVlID0gKERDTF9VSU5UMTYpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WUEFfT0NfU0ROX0VOKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCQl9CisJCWJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICBicmVhazsKKyAgICB9CisjaWYgZGVmaW5lZChEQ0xfUE1JQ19NT0RVTEVfQ09OVFJPTCkKKwljdXJyZW50X2RjbF9oYW5kbGUgPSAwOworI2VuZGlmCisgICAgcmV0dXJuIHJldHVybl92YWw7CisKK30KKworZXh0ZXJuIHZvaWQgZGNsX3BtaWNfbW9kZW1fb25seV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgUE1JQ19SZWFkX0FsbCh2b2lkKTsKKyNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQorZXh0ZXJuIHZvaWQgUE1JQ19SZWFkX0FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIFBNSUNfVW5pdF9UZXN0KHZvaWQpOworI2VuZGlmCitEQ0xfVUlOVDMyIERSVl9SZWFkX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkcikKK3sKKyAgICByZXR1cm4gZGNsX3BtaWNfYnl0ZV9yZXR1cm4ocG1pY19hZGRyKTsKK30KKwordm9pZCBEUlZfV3JpdGVfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyLCBEQ0xfVUlOVDMyIHZhbHVlKQoreworICAgIGRjbF9wbWljX2J5dGVfd3JpdGUocG1pY19hZGRyLCB2YWx1ZSk7Cit9CisKK3ZvaWQgZGNsX3BtaWNfaW5pdCh2b2lkKXsKKyAgICBleHRlcm4gdm9pZCBwbWljX3dyYXBfZHVtcF9pbml0KHZvaWQpOworICAgIHBtdV9jb250cm9sX2hhbmRsZXIgPSBQTUlDX2NvbnRyb2xfaGFuZGxlcjsKKyAgICBwbXVfcGFyYW1ldGVyX3NpemUgPSBHRVRBUlJOVU0ocG11X3BhcmFtZXRlcl90YWJsZSk7CisKKyAgICBwbWljX3dyYXBfZHVtcF9pbml0KCk7CisKKwlkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2sgPSBrYWxfY3JlYXRlX3NwaW5sb2NrKCJwbWljIGFjY2VzcyIpOworCWRjbF9wbWljX2NvbnRyb2xfc3BpbmxvY2sgPSBrYWxfY3JlYXRlX3NwaW5sb2NrKCJwbWljIGNvbnRyb2wiKTsKKworI2lmICAhZGVmaW5lZChfX1NNQVJUX1BIT05FX01PREVNX18pCisgICAgRHJ2UFdSQVBfSW5pdCgpOworI2VuZGlmCisgICAgcG1pY19od192ZXJzaW9uID0gZGNsX3BtaWNfYnl0ZV9yZXR1cm4oTVQ2MzU4X0hXQ0lEKTsKKwlpZiAocG1pY19od192ZXJzaW9uID09IDB4MCkKKwkJQVNTRVJUKDApOworCisgICAgUE1JQ19SZWFkX0FsbCgpOworCisjaWYgIWRlZmluZWQoX19TTUFSVF9QSE9ORV9NT0RFTV9fKQorCisvKgorCWlmKERydlBXUkFQX0NoZWNrQ0lQSEVSKCkgPT0gMSkKKyAgICBkY2xfcG1pYzYzNTVfbW9kZW1fb25seV9pbml0KCk7CisJZWxzZQorKi8KKwlkY2xfcG1pY19tb2RlbV9vbmx5X2luaXQoKTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQorICAgIFBNSUNfUmVhZF9BbGwoKTsKKyAgICBQTUlDX1VuaXRfVGVzdCgpOworICAgIFBNSUNfUmVhZF9BbGwoKTsKKyNlbmRpZgorICAgIHBtaWNfaW5pdF9kb25lID0gRENMX1RSVUU7CisKK30KKwordm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpCit7CisgICAgdm9sYXRpbGUga2FsX3VpbnQzMiBpLGo7CisgICAgaj0wOworICAgIGZvciAoaSA9IDA7IGkgPCBQTUlDX01BWF9SRUdfTlVNOyBpICs9IDIpeworICAgICAgICBwbWljX3JlZ1tpXSA9IGRjbF9wbWljX2J5dGVfcmV0dXJuKGkpOworICAgIAl3aGlsZShqIT0weDIwMCl7aisrO30KKyAgICAJaj0wOworICAgIH0KK30KKyNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQordm9pZCBQTUlDX1VuaXRfVGVzdCh2b2lkKQoreworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9PTl9DVFJMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2RlID0gSFdfQ09OVFJPTDsgLy8gKFNXX0NPTlRST0xfQllfUkVHIC8gSFdfQ09OVFJPTCkKKwkJdmFsLm1vZCA9IFZNSVBJOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9PTl9DVFJMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWTUlQSTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKKwkJdmFsLm1vZCA9IFZQQV9TVzsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPTFRBR0UgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLm1vZD1WUEFfU1c7CisJCXZhbC52b2x0YWdlID0gUE1VX1ZPTFRfMDFfODAwMDAwX1Y7CisJCS8qICAgICBQTVVfVk9MVF8wMF81MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMF82MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMF83MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMF84MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMF85MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV8wMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV8xMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV8yMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV8zMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV80MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV81MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV82MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV83MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV84MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV85MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl8wMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl8xMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl8yMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl8zMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl80MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl81MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl82MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl83MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl84MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl85MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18wMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wM18xMDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18yMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wM18zMDAwMDBfViwgICAgICBQTVVfVk9MVF8wM180MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wM181MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM182MDAwMDBfViwgICAgICAqLworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2QgPSBWUEFfU1c7CisJCXZhbC5tb2RlID0gRk9SQ0VfUFdNX01PREU7IC8vIChBVVRPX01PREUgLyBGT1JDRV9QV01fTU9ERSkKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfTU9ERVNFVCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0NUUkwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLm1vZGUgPSBIV19DT05UUk9MOyAvLyAoU1dfQ09OVFJPTF9CWV9SRUcgLyBIV19DT05UUk9MKQorCQl2YWwubW9kID0gVlJGMTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fQ1RSTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fU0VMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5zZWwgPSBTUkNMS0VOX0lOMV9TRUw7CisJCS8qIFNSQ0xLRU5fSU4xX1NFTCAvIFNSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfT1JfU1JDTEtFTl9JTjJfU0VMLworCQkJU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTCAqLworCQl2YWwubW9kID0gVlJGMTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fU0VMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2QgPSBWUkYxOworCQl2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX01PREVTRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLnJlZ3ZhbCA9IDB4NzsgLy8gKDB4MH4weEYpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9DTFIgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLnJlZ3ZhbCA9IDB4NzsgLy8gKDB4MH4weEYpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9DTFIsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfVlJGMV9HRVRfTU9ERVNFVF9DS1BETiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQkvLyB2YWwucmVndmFsIHdpbGwgYmUgeW91ciByZXF1ZXN0IHZhbHVlICggbm8gbmVlZCBkbyBhbnkgc2hpZnQpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgVlJGMV9HRVRfTU9ERVNFVF9DS1BETiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fQ1RSTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kZSA9IEhXX0NPTlRST0w7IC8vIChTV19DT05UUk9MX0JZX1JFRyAvIEhXX0NPTlRST0wpCisJCXZhbC5tb2QgPSBWUkYyOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTl9DVFJMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTl9TRUwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLnNlbCA9IFNSQ0xLRU5fSU4xX1NFTDsKKwkJLyogU1JDTEtFTl9JTjFfU0VMIC8gU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMl9TRUwvCisJCQlTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMICovCisJCXZhbC5tb2QgPSBWUkYyOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTl9TRUwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKKwkJdmFsLm1vZCA9IFZSRjI7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2QgPSBWUkYxOworCQl2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX01PREVTRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1NSQ0xLX0VOX1NFTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuc2VsID0gU1JDTEtFTl9JTjFfU0VMOworCQkvKiBTUkNMS0VOX0lOMV9TRUwgLyBTUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX09SX1NSQ0xLRU5fSU4yX1NFTC8KKwkJCVNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwgKi8KKwkJdmFsLm1vZCA9IFZNSVBJOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9TUkNMS19FTl9TRUwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKKwkJdmFsLm1vZCA9IFZTSU0xOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLmVuYWJsZSA9IERDTF9UUlVFOyAvLyAoRENMX1RSVUUgLyBEQ0xfRkFMU0UpOworCQl2YWwubW9kID0gVlNJTTI7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2Q9VlNJTTE7CisJCXZhbC52b2x0YWdlID0gUE1VX1ZPTFRfMDFfODAwMDAwX1Y7CisJCS8qICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18wMDAwMDBfViwgICAqLworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2Q9VlNJTTI7CisJCXZhbC52b2x0YWdlID0gUE1VX1ZPTFRfMDFfODAwMDAwX1Y7CisJCS8qICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18wMDAwMDBfViwgICAqLworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KK30KKyNlbmRpZiAvLyBFbmQgb2YgI2lmIGRlZmluZWQoUE1JQ19VTklUX1RFU1QpCisKKyNlbmRpZiAvLyBFbmQgb2YgI2lmIGRlZmluZWQoUE1JQ182MzU4X1JFR19BUEkpCisKZGlmZiAtLWdpdCBhL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjM1OF9pbml0LmMgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNThfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMGM4NmQKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNThfaW5pdC5jCkBAIC0wLDAgKzEsMTMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTMKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgIGRjbF9wbWljNjM1OF9pbml0LmMKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgICBNT0xZIFNvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgICBUaGlzIGZpbGUgaXMgZm9yIFBNSUMgNjM1OAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImluaXQuaCIKKyNpbmNsdWRlICJkY2wuaCIKKworZXh0ZXJuIERDTF9VSU5UMzIgRFJWX1JlYWRfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyKTsKK2V4dGVybiB2b2lkIERSVl9Xcml0ZV9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIsIERDTF9VSU5UMzIgdmFsdWUpOworCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKKy8vIE1UNjM1OCBFQ09fRTEKK3ZvaWQgZGNsX3BtaWNfbW9kZW1fb25seV9pbml0KHZvaWQpCit7CisJLyogY2hhbmdlIFBNSUMgaW5pdGlhbCBzZXR0aW5nIHRvIHByZWxvYWRlciBmb3IgYWxsIFNXIGxvYWQuCisJICAgIElmIHlvdSB3YW50IHRvIGNoYW5nZSBwbWljIHNldHRpbmcsIHBsZWFzZSBjb250YWN0IFBUIExlYWQgJiBQTUlDIEFQIFNXICovCisKK30KZGlmZiAtLWdpdCBhL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjM1OS5jIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyMWVhYQotLS0gL2Rldi9udWxsCisrKyBiL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjM1OS5jCkBAIC0wLDAgKzEsMzEwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDE4CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuCisqCisqICBUSEUgVFJBTlNBQ1RJT04gQ09OVEVNUExBVEVEIEhFUkVVTkRFUiBTSEFMTCBCRSBDT05TVFJVRUQgSU4gQUNDT1JEQU5DRQorKiAgV0lUSCBUSEUgTEFXUyBPRiBUSEUgU1RBVEUgT0YgQ0FMSUZPUk5JQSwgVVNBLCBFWENMVURJTkcgSVRTIENPTkZMSUNUIE9GCisqICBMQVdTIFBSSU5DSVBMRVMuICBBTlkgRElTUFVURVMsIENPTlRST1ZFUlNJRVMgT1IgQ0xBSU1TIEFSSVNJTkcgVEhFUkVPRiBBTkQKKyogIFJFTEFURUQgVEhFUkVUTyBTSEFMTCBCRSBTRVRUTEVEIEJZIEFSQklUUkFUSU9OIElOIFNBTiBGUkFOQ0lTQ08sIENBLCBVTkRFUgorKiAgVEhFIFJVTEVTIE9GIFRIRSBJTlRFUk5BVElPTkFMIENIQU1CRVIgT0YgQ09NTUVSQ0UgKElDQykuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRmlsZW5hbWU6CisgKiAtLS0tLS0tLS0KKyAqICAgICBkY2xfcG1pYzYzNTkuYworICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICAgIE1PTFkgU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICAgIFRoaXMgZmlsZSBpcyBmb3IgUE1JQyA2MzU5CisgKgorICogQXV0aG9yOgorICogLS0tLS0tLQorICogLS0tLS0tLQorICoKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogSElTVE9SWQorICogQmVsb3cgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoRlBHQV9DVFApCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInJlZ19iYXNlLmgiCisjaW5jbHVkZSAiZHJ2X2NvbW0uaCIKKyNpbmNsdWRlICJpbml0LmgiCisjaW5jbHVkZSAiZGNsLmgiCisjaW5jbHVkZSAiZGNsX3BtdV9zdy5oIgorI2luY2x1ZGUgInBtaWNfd3JhcC5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAidXNfdGltZXIuaCIKKyNpbmNsdWRlICJldmVudF9pbmZvX3V0aWxpdHkuaCIgLy8gZm9yIE1PREVNX1dBUk5JTkdfTUVTU0FHRQorCisjaWYgZGVmaW5lZChQTUlDXzYzNTlfUkVHX0FQSSkKKworLy8gU3RhcnQgUE1JQ19VTklUX1RFU1QKKy8vI2RlZmluZSBQTUlDX1VOSVRfVEVTVAorLy8gQVJNIFNlY3Rpb24gUlcvUk8vWkkgVXNlIEludGVybmFsIFNSQU0KKyNkZWZpbmUgUE1JQ19JTlRFUk5BTF9TUkFNCisKKyNpZiAhZGVmaW5lZChfX0ZVRV9fKQorI2RlZmluZSBTQVZFQU5EU0VUSVJRTUFTSygpICAgICAgU2F2ZUFuZFNldElSUU1hc2soKQorI2RlZmluZSBSRVNUT1JFSVJRTUFTSyhtYXNrKSAgICAgUmVzdG9yZUlSUU1hc2sobWFzaykKKyNlbHNlIC8qZGVmaW5lZChfX0ZVRV9fKSovCisjZGVmaW5lIFNBVkVBTkRTRVRJUlFNQVNLKCkgICAgICAwCisjZGVmaW5lIFJFU1RPUkVJUlFNQVNLKG1hc2spICAgICB7fQorI2VuZGlmIC8qZGVmaW5lZChfX0ZVRV9fKSovCisKKyNkZWZpbmUgUE1JQ19NQVhfUkVHX05VTSAgICAgICAgICAgICAgICAweDNhMDAgLy8gMHgwMDAwfjB4M2EwMAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgRXhwb3J0ZWQgQVBJcyAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2V4dGVybiBEQ0xfVUlOVDE2IGRjbF9wbWljX2J5dGVfcmV0dXJuX25vbG9jayhEQ0xfVUlOVDE2IGFkZHIpOworZXh0ZXJuIERDTF9VSU5UMTYgZGNsX3BtaWNfYnl0ZV9yZXR1cm4oRENMX1VJTlQxNiBhZGRyKTsKK2V4dGVybiB2b2lkIGRjbF9wbWljX2J5dGVfd3JpdGVfbm9sb2NrKERDTF9VSU5UMTYgYWRkciwgRENMX1VJTlQxNiB2YWwpOworZXh0ZXJuIHZvaWQgZGNsX3BtaWNfYnl0ZV93cml0ZShEQ0xfVUlOVDE2IGFkZHIsIERDTF9VSU5UMTYgdmFsKTsKK2V4dGVybiBEQ0xfQk9PTCBkY2xfcG1pY19pbml0X2RvbmVfcXVlcnkodm9pZCk7Cit0eXBlZGVmIGVudW0KK3sKKyAgICBBVVhBRENfUkVBRF9JTklUID0gMCwKKyAgICBBVVhBRENfUkVBRF9SRVFVRVNUID0gMSwKKyAgICBBVVhBRENfUkVBRF9SRUFEWSA9IDIsCisgICAgQVVYQURDX1JFQURfQlVTWSA9IDMsCisgICAgQVVYQURDX1JFQURfREFUQSA9IDQKK31BVVhBRENfRlNNOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MzIgY29tbWFuZF9mbGFnOworICAgIGthbF91aW50MzIgcmVnX2JlZm9yZV93cml0ZTsKKyAgICBrYWxfdWludDMyIHdyaXRlX3ZhbHVlOworICAgIGthbF91aW50MzIgYWRkcmVzc19vZmZzZXQ7CisgICAga2FsX3VpbnQzMiByZWdfbWFzazsKKyAgICBrYWxfdWludDMyIHJlZ19zaGlmdDsKKyAgICBrYWxfdWludDMyIHJlZ19hZGRyOworICAgIGthbF91aW50MzIgcmVnX2RhdGE7Cit9UE1JQ19SRUdfTE9HOworCisvKiBBbGwgYnVjay9sZG8gdXNlIHRoZSBzYW1lIHN3L2h3IE9QX0VOIGNvbnRyb2wsIHNvIHVzZSB2Y29yZSBhcyByZWZlcmVuY2UKKyAqIGJpdCBzaGlmdAorICovCit0eXBlZGVmIGVudW0KK3sKKwlSR19CVUNLX0xET19IVzBfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcwX09QX0VOX1NISUZULAorCVJHX0JVQ0tfTERPX0hXMV9PUF9FTl9TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzFfT1BfRU5fU0hJRlQsCisJUkdfQlVDS19MRE9fSFcyX09QX0VOX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXMl9PUF9FTl9TSElGVCwKKwlSR19CVUNLX0xET19IVzNfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFczX09QX0VOX1NISUZULAorCVJHX0JVQ0tfTERPX0hXNF9PUF9FTl9TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzRfT1BfRU5fU0hJRlQsCisJUkdfQlVDS19MRE9fSFc1X09QX0VOX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXNV9PUF9FTl9TSElGVCwKKwlSR19CVUNLX0xET19IVzZfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc2X09QX0VOX1NISUZULAorCVJHX0JVQ0tfTERPX0hXN19PUF9FTl9TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzdfT1BfRU5fU0hJRlQsCisJUkdfQlVDS19MRE9fSFc4X09QX0VOX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXOF9PUF9FTl9TSElGVCwKKwlSR19CVUNLX0xET19IVzlfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc5X09QX0VOX1NISUZULAorCVJHX0JVQ0tfTERPX0hXMTBfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxMF9PUF9FTl9TSElGVCwKKwlSR19CVUNLX0xET19IVzExX09QX0VOX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXMTFfT1BfRU5fU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxMl9PUF9FTl9TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzEyX09QX0VOX1NISUZULAorCVJHX0JVQ0tfTERPX0hXMTNfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxM19PUF9FTl9TSElGVCwKKwlSR19CVUNLX0xET19IVzE0X09QX0VOX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXMTRfT1BfRU5fU0hJRlQsCisJUkdfQlVDS19MRE9fU1dfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfU1dfT1BfRU5fU0hJRlQsCit9UE1JQ19CVUNLX0xET19PUF9FTl9TSElGVF9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKwlSR19CVUNLX0xET19IVzBfT1BfQ0ZHX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXMF9PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxX09QX0NGR19TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzFfT1BfQ0ZHX1NISUZULAorCVJHX0JVQ0tfTERPX0hXMl9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcyX09QX0NGR19TSElGVCwKKwlSR19CVUNLX0xET19IVzNfT1BfQ0ZHX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXM19PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFc0X09QX0NGR19TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzRfT1BfQ0ZHX1NISUZULAorCVJHX0JVQ0tfTERPX0hXNV9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc1X09QX0NGR19TSElGVCwKKwlSR19CVUNLX0xET19IVzZfT1BfQ0ZHX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXNl9PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFc3X09QX0NGR19TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzdfT1BfQ0ZHX1NISUZULAorCVJHX0JVQ0tfTERPX0hXOF9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc4X09QX0NGR19TSElGVCwKKwlSR19CVUNLX0xET19IVzlfT1BfQ0ZHX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXOV9PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxMF9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxMF9PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxMV9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxMV9PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxMl9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxMl9PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxM19PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxM19PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxNF9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxNF9PUF9DRkdfU0hJRlQsCit9UE1JQ19CVUNLX0xET19PUF9DRkdfU0hJRlRfRU5VTTsKKworQVVYQURDX0ZTTSBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfSU5JVDsKK1BNSUNfUkVHX0xPRyBwbWljX3JlZ19sb2c7CisKKyNpZiAoZGVmaW5lZChfX01US19UQVJHRVRfXykgJiYgZGVmaW5lZChQTUlDX0lOVEVSTkFMX1NSQU0pKQorX19hdHRyaWJ1dGVfXyAoKHplcm9faW5pdCkpCisjZW5kaWYgLyogX19NVEtfVEFSR0VUX18gKi8KKwora2FsX3VpbnQ4IHBtaWNfaHdfdmVyc2lvbjsKK2thbF91aW50OCBwbWljX3N3X3ZlcnNpb247CitrYWxfdWludDE2IHBtaWNfcmVnW1BNSUNfTUFYX1JFR19OVU1dOworRENMX0JPT0wgcG1pY19pbml0X2RvbmUgPSBEQ0xfRkFMU0U7CisKK2thbF9zcGlubG9ja2lkIGRjbF9wbWljX2FjY2Vzc19zcGlubG9jazsKK2V4dGVybiBrYWxfc3BpbmxvY2tpZCBkY2xfcG1pY19jb250cm9sX3NwaW5sb2NrOworCitjb25zdCBQTUlDX0ZMQUdfVEFCTEVfRU5UUlkgcG1pY19mbGFnc190YWJsZVtdID0KK3sKKyAgICB7TVQ2MzU5X0hXQ0lELAkJUE1JQ19IV0NJRF9NQVNLLAkJUE1JQ19IV0NJRF9TSElGVCwJCX0sCisgICAge01UNjM1OV9TV0NJRCwJCVBNSUNfU1dDSURfTUFTSywJCVBNSUNfU1dDSURfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfVE9QX0NPTiwJCVBNSUNfUkdfU1JDTEtFTl9JTjBfRU5fTUFTSywJCVBNSUNfUkdfU1JDTEtFTl9JTjBfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfVE9QX0NPTiwJCVBNSUNfUkdfU1JDTEtFTl9JTjFfRU5fTUFTSywJCVBNSUNfUkdfU1JDTEtFTl9JTjFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfVE9QX0NPTiwJCVBNSUNfUkdfU1JDTEtFTl9JTjBfSFdfTU9ERV9NQVNLLAkJUE1JQ19SR19TUkNMS0VOX0lOMF9IV19NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X1RPUF9DT04sCQlQTUlDX1JHX1NSQ0xLRU5fSU4xX0hXX01PREVfTUFTSywJCVBNSUNfUkdfU1JDTEtFTl9JTjFfSFdfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1RPUF9FTFIxLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9WT1NFTF9MSU1JVF9TRUxfTUFTSywJUE1JQ19SR19CVUNLX1ZNT0RFTV9WT1NFTF9MSU1JVF9TRUxfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1RPUF9FTFIyLAkJUE1JQ19SR19CVUNLX1ZQQV9WT1NFTF9MSU1JVF9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WUEFfVk9TRUxfTElNSVRfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkNPUkVfQ09OMSwJCVBNSUNfUkdfQlVDS19WQ09SRV9WT1NFTF9TTEVFUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZDT1JFX1ZPU0VMX1NMRUVQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkNPUkVfREJHMCwJCVBNSUNfREFfVkNPUkVfVk9TRUxfTUFTSywJCVBNSUNfREFfVkNPUkVfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WQ09SRV9EQkcwLAkJUE1JQ19EQV9WQ09SRV9WT1NFTF9HUkFZX01BU0ssCQlQTUlDX0RBX1ZDT1JFX1ZPU0VMX0dSQVlfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WQ09SRV9FTFIwLAkJUE1JQ19SR19CVUNLX1ZDT1JFX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVkNPUkVfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fQ09OMCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fQ09OMCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fTFBfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fQ09OMSwJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfU0xFRVBfTUFTSywJUE1JQ19SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVk1PREVNX0VMUjAsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1NXX09QX0VOX01BU0ssCVBNSUNfUkdfQlVDS19WTU9ERU1fU1dfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZNT0RFTV9PUF9FTiwJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcwX09QX0VOX01BU0ssCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcwX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMV9PUF9FTl9NQVNLLAlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMV9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVk1PREVNX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzJfT1BfRU5fTUFTSywJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzJfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZNT0RFTV9PUF9FTl9TRVQsCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfRU5fU0VUX01BU0ssCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfRU5fU0VUX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fT1BfRU5fQ0xSLAlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0VOX0NMUl9NQVNLLAlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0VOX0NMUl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVk1PREVNX09QX0NGRywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcwX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMF9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZNT0RFTV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMV9PUF9DRkdfTUFTSywJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzFfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzJfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcyX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVk1PREVNX09QX0NGR19TRVQsCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVF9NQVNLLAlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSLAlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19DTFJfTUFTSywJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9DRkdfQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fREJHMCwJCVBNSUNfREFfVk1PREVNX1ZPU0VMX01BU0ssCQlQTUlDX0RBX1ZNT0RFTV9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZNT0RFTV9EQkcwLAkJUE1JQ19EQV9WTU9ERU1fVk9TRUxfR1JBWV9NQVNLLAkJUE1JQ19EQV9WTU9ERU1fVk9TRUxfR1JBWV9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVk1PREVNX0RCRzEsCQlQTUlDX0RBX1ZNT0RFTV9FTl9NQVNLLAkJCVBNSUNfREFfVk1PREVNX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVk1PREVNX0RCRzEsCQlQTUlDX0RBX1ZNT0RFTV9TVEJfTUFTSywJCVBNSUNfREFfVk1PREVNX1NUQl9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZTMV9WT1RFUiwJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZTMV9WT1RFUl9TRVQsCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX0VOX1NFVF9NQVNLLAlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX0VOX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlMxX1ZPVEVSX0NMUiwJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fQ0xSX01BU0ssCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUzFfVk9URVJfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZTMV9WT1RFUl9WT1NFTF9NQVNLLAlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX1ZPU0VMX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUzJfQ09OMSwJCVBNSUNfUkdfQlVDS19WUzJfVk9TRUxfU0xFRVBfTUFTSywJUE1JQ19SR19CVUNLX1ZTMl9WT1NFTF9TTEVFUF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlMyX1ZPVEVSLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlMyX1ZPVEVSX1NFVCwJCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfRU5fU0VUX01BU0ssCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfRU5fU0VUX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUzJfVk9URVJfQ0xSLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9DTFJfTUFTSywJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZTMl9WT1RFUl9DRkcsCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPVEVSX1ZPU0VMX01BU0ssCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfVk9TRUxfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZTMl9FTFIwLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1NFTF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZQQV9DT04wLAkJUE1JQ19SR19CVUNLX1ZQQV9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZQQV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZQQV9DT04xLAkJUE1JQ19SR19CVUNLX1ZQQV9WT1NFTF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZQQV9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9WTU9ERU1fQU5BX0NPTjMsCQlQTUlDX1JHX1ZNT0RFTV9GQ0NNX01BU0ssCQlQTUlDX1JHX1ZNT0RFTV9GQ0NNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X1ZTMl9BTkFfQ09OMiwJCVBNSUNfUkdfVlMyX0ZQV01fTUFTSywJCQlQTUlDX1JHX1ZTMl9GUFdNX1NISUZULAkJCX0sCisgICAge01UNjM1OV9WUEFfQU5BX0NPTjAsCQlQTUlDX1JHX1ZQQV9NT0RFU0VUX01BU0ssCQlQTUlDX1JHX1ZQQV9NT0RFU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0xET19WU1JBTV9PVEhFUlNfRUxSLAlQTUlDX1JHX0xET19WU1JBTV9PVEhFUlNfVk9TRUxfTUFTSywJUE1JQ19SR19MRE9fVlNSQU1fT1RIRVJTX1ZPU0VMX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0xX0NPTjAsCQlQTUlDX1JHX0xET19WU0lNMV9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0xX0NPTjAsCQlQTUlDX1JHX0xET19WU0lNMV9MUF9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTFfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0xX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTFfU1dfT1BfRU5fTUFTSywJUE1JQ19SR19MRE9fVlNJTTFfU1dfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTFfT1BfRU4sCQlQTUlDX1JHX0xET19WU0lNMV9IVzBfT1BfRU5fTUFTSywJUE1JQ19SR19MRE9fVlNJTTFfSFcwX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0xX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcxX09QX0VOX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0xX0hXMV9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMV9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMl9PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WU0lNMV9IVzJfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTFfT1BfRU5fU0VULAlQTUlDX1JHX0xET19WU0lNMV9PUF9FTl9TRVRfTUFTSywJUE1JQ19SR19MRE9fVlNJTTFfT1BfRU5fU0VUX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0xX09QX0VOX0NMUiwJUE1JQ19SR19MRE9fVlNJTTFfT1BfRU5fQ0xSX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0xX09QX0VOX0NMUl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMV9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMV9IVzBfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0xX0hXMF9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcxX09QX0NGR19NQVNLLAlQTUlDX1JHX0xET19WU0lNMV9IVzFfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0xX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMl9PUF9DRkdfTUFTSywJUE1JQ19SR19MRE9fVlNJTTFfSFcyX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMV9PUF9DRkdfU0VULAlQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfU0VUX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0xX09QX0NGR19TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTFfT1BfQ0ZHX0NMUiwJUE1JQ19SR19MRE9fVlNJTTFfT1BfQ0ZHX0NMUl9NQVNLLAlQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0xX0NPTjAsCQlQTUlDX1JHX0xET19WU0lNMV9PQ0ZCX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9PQ0ZCX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0xX01PTiwJCVBNSUNfREFfVlNJTTFfT0NGQl9FTl9NQVNLLAkJUE1JQ19EQV9WU0lNMV9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X1ZTSU0xX0FOQV9DT04wLAkJUE1JQ19SR19WU0lNMV9WT1NFTF9NQVNLLAkJUE1JQ19SR19WU0lNMV9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTJfQ09OMCwJCVBNSUNfUkdfTERPX1ZTSU0yX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTJfQ09OMCwJCVBNSUNfUkdfTERPX1ZTSU0yX0xQX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMl9MUF9TSElGVCwJCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTJfT1BfRU4sCQlQTUlDX1JHX0xET19WU0lNMl9TV19PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WU0lNMl9TV19PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMF9PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WU0lNMl9IVzBfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTJfT1BfRU4sCQlQTUlDX1JHX0xET19WU0lNMl9IVzFfT1BfRU5fTUFTSywJUE1JQ19SR19MRE9fVlNJTTJfSFcxX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0yX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcyX09QX0VOX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0yX0hXMl9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMl9PUF9FTl9TRVQsCVBNSUNfUkdfTERPX1ZTSU0yX09QX0VOX1NFVF9NQVNLLAlQTUlDX1JHX0xET19WU0lNMl9PUF9FTl9TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTJfT1BfRU5fQ0xSLAlQTUlDX1JHX0xET19WU0lNMl9PUF9FTl9DTFJfTUFTSywJUE1JQ19SR19MRE9fVlNJTTJfT1BfRU5fQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0yX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMF9PUF9DRkdfTUFTSywJUE1JQ19SR19MRE9fVlNJTTJfSFcwX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMl9IVzFfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0yX0hXMV9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcyX09QX0NGR19NQVNLLAlQTUlDX1JHX0xET19WU0lNMl9IVzJfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0yX09QX0NGR19TRVQsCVBNSUNfUkdfTERPX1ZTSU0yX09QX0NGR19TRVRfTUFTSywJUE1JQ19SR19MRE9fVlNJTTJfT1BfQ0ZHX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMl9PUF9DRkdfQ0xSLAlQTUlDX1JHX0xET19WU0lNMl9PUF9DRkdfQ0xSX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0yX09QX0NGR19DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTJfQ09OMCwJCVBNSUNfUkdfTERPX1ZTSU0yX09DRkJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX09DRkJfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTJfTU9OLAkJUE1JQ19EQV9WU0lNMl9PQ0ZCX0VOX01BU0ssCQlQTUlDX0RBX1ZTSU0yX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfVlNJTTJfQU5BX0NPTjAsCQlQTUlDX1JHX1ZTSU0yX1ZPU0VMX01BU0ssCQlQTUlDX1JHX1ZTSU0yX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0xET19WRkUyOF9DT04wLAkJUE1JQ19SR19MRE9fVkZFMjhfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0xET19WRkUyOF9DT04wLAkJUE1JQ19SR19MRE9fVkZFMjhfTFBfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0xET19WRkUyOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZGRTI4X1NXX09QX0VOX01BU0ssCVBNSUNfUkdfTERPX1ZGRTI4X1NXX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZGRTI4X09QX0VOLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcwX09QX0VOX01BU0ssCVBNSUNfUkdfTERPX1ZGRTI4X0hXMF9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WRkUyOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMV9PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WRkUyOF9IVzFfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVkZFMjhfT1BfRU4sCQlQTUlDX1JHX0xET19WRkUyOF9IVzJfT1BfRU5fTUFTSywJUE1JQ19SR19MRE9fVkZFMjhfSFcyX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZGRTI4X09QX0VOX1NFVCwJUE1JQ19SR19MRE9fVkZFMjhfT1BfRU5fU0VUX01BU0ssCVBNSUNfUkdfTERPX1ZGRTI4X09QX0VOX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WRkUyOF9PUF9FTl9DTFIsCVBNSUNfUkdfTERPX1ZGRTI4X09QX0VOX0NMUl9NQVNLLAlQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVkZFMjhfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcwX09QX0NGR19NQVNLLAlQTUlDX1JHX0xET19WRkUyOF9IVzBfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMV9PUF9DRkdfTUFTSywJUE1JQ19SR19MRE9fVkZFMjhfSFcxX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WRkUyOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WRkUyOF9IVzJfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfTERPX1ZGRTI4X0hXMl9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVkZFMjhfT1BfQ0ZHX1NFVCwJUE1JQ19SR19MRE9fVkZFMjhfT1BfQ0ZHX1NFVF9NQVNLLAlQTUlDX1JHX0xET19WRkUyOF9PUF9DRkdfU0VUX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZGRTI4X09QX0NGR19DTFIsCVBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19DTFJfTUFTSywJUE1JQ19SR19MRE9fVkZFMjhfT1BfQ0ZHX0NMUl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WRkUyOF9DT04wLAkJUE1JQ19SR19MRE9fVkZFMjhfT0NGQl9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfT0NGQl9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WRkUyOF9NT04sCQlQTUlDX0RBX1ZGRTI4X09DRkJfRU5fTUFTSywJCVBNSUNfREFfVkZFMjhfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9MRE9fVlJGMThfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjE4X0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9MRE9fVlJGMThfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjE4X0xQX01BU0ssCQlQTUlDX1JHX0xET19WUkYxOF9MUF9TSElGVCwJCX0sCisgICAge01UNjM1OV9MRE9fVlJGMThfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxOF9TV19PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WUkYxOF9TV19PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMF9PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WUkYxOF9IVzBfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMThfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxOF9IVzFfT1BfRU5fTUFTSywJUE1JQ19SR19MRE9fVlJGMThfSFcxX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjE4X09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMThfSFcyX09QX0VOX01BU0ssCVBNSUNfUkdfTERPX1ZSRjE4X0hXMl9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxOF9PUF9FTl9TRVQsCVBNSUNfUkdfTERPX1ZSRjE4X09QX0VOX1NFVF9NQVNLLAlQTUlDX1JHX0xET19WUkYxOF9PUF9FTl9TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMThfT1BfRU5fQ0xSLAlQTUlDX1JHX0xET19WUkYxOF9PUF9FTl9DTFJfTUFTSywJUE1JQ19SR19MRE9fVlJGMThfT1BfRU5fQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjE4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMF9PUF9DRkdfTUFTSywJUE1JQ19SR19MRE9fVlJGMThfSFcwX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF9IVzFfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfTERPX1ZSRjE4X0hXMV9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMThfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMThfSFcyX09QX0NGR19NQVNLLAlQTUlDX1JHX0xET19WUkYxOF9IVzJfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjE4X09QX0NGR19TRVQsCVBNSUNfUkdfTERPX1ZSRjE4X09QX0NGR19TRVRfTUFTSywJUE1JQ19SR19MRE9fVlJGMThfT1BfQ0ZHX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxOF9PUF9DRkdfQ0xSLAlQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfQ0xSX01BU0ssCVBNSUNfUkdfTERPX1ZSRjE4X09QX0NGR19DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMThfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjE4X09DRkJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X09DRkJfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMThfTU9OLAkJUE1JQ19EQV9WUkYxOF9PQ0ZCX0VOX01BU0ssCQlQTUlDX0RBX1ZSRjE4X09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjEyX0NPTjAsCQlQTUlDX1JHX0xET19WUkYxMl9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjEyX0NPTjAsCQlQTUlDX1JHX0xET19WUkYxMl9MUF9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjEyX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMTJfU1dfT1BfRU5fTUFTSywJUE1JQ19SR19MRE9fVlJGMTJfU1dfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMTJfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxMl9IVzBfT1BfRU5fTUFTSywJUE1JQ19SR19MRE9fVlJGMTJfSFcwX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjEyX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcxX09QX0VOX01BU0ssCVBNSUNfUkdfTERPX1ZSRjEyX0hXMV9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjEyX0hXMl9PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WUkYxMl9IVzJfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMTJfT1BfRU5fU0VULAlQTUlDX1JHX0xET19WUkYxMl9PUF9FTl9TRVRfTUFTSywJUE1JQ19SR19MRE9fVlJGMTJfT1BfRU5fU0VUX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjEyX09QX0VOX0NMUiwJUE1JQ19SR19MRE9fVlJGMTJfT1BfRU5fQ0xSX01BU0ssCVBNSUNfUkdfTERPX1ZSRjEyX09QX0VOX0NMUl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxMl9IVzBfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfTERPX1ZSRjEyX0hXMF9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcxX09QX0NGR19NQVNLLAlQTUlDX1JHX0xET19WUkYxMl9IVzFfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjEyX09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjEyX0hXMl9PUF9DRkdfTUFTSywJUE1JQ19SR19MRE9fVlJGMTJfSFcyX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxMl9PUF9DRkdfU0VULAlQTUlDX1JHX0xET19WUkYxMl9PUF9DRkdfU0VUX01BU0ssCVBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMTJfT1BfQ0ZHX0NMUiwJUE1JQ19SR19MRE9fVlJGMTJfT1BfQ0ZHX0NMUl9NQVNLLAlQTUlDX1JHX0xET19WUkYxMl9PUF9DRkdfQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjEyX0NPTjAsCQlQTUlDX1JHX0xET19WUkYxMl9PQ0ZCX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9PQ0ZCX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjEyX01PTiwJCVBNSUNfREFfVlJGMTJfT0NGQl9FTl9NQVNLLAkJUE1JQ19EQV9WUkYxMl9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X1ZYTzIyX0FOQV9DT04wLAkJUE1JQ19SR19WWE8yMl9WT1NFTF9NQVNLLAkJUE1JQ19SR19WWE8yMl9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjFfTU9ERV9NQVNLLAlQTUlDX1hPX0VYVEJVRjFfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjFfRU5fTV9NQVNLLAlQTUlDX1hPX0VYVEJVRjFfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjJfTU9ERV9NQVNLLAlQTUlDX1hPX0VYVEJVRjJfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjJfRU5fTV9NQVNLLAlQTUlDX1hPX0VYVEJVRjJfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjNfTU9ERV9NQVNLLAlQTUlDX1hPX0VYVEJVRjNfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjNfRU5fTV9NQVNLLAlQTUlDX1hPX0VYVEJVRjNfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjRfTU9ERV9NQVNLLAlQTUlDX1hPX0VYVEJVRjRfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VYVEJVRjRfRU5fTV9NQVNLLAlQTUlDX1hPX0VYVEJVRjRfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VOQkJfTUFOX01BU0ssCQlQTUlDX1hPX0VOQkJfTUFOX1NISUZULAkJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDAsCQlQTUlDX1hPX0VOQkJfRU5fTV9NQVNLLAkJUE1JQ19YT19FTkJCX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzAwLAkJUE1JQ19YT19DTEtTRUxfTUFOX01BU0ssCVBNSUNfWE9fQ0xLU0VMX01BTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDBfU0VULAlQTUlDX0RDWE9fQ1cwMF9TRVRfTUFTSywJUE1JQ19EQ1hPX0NXMDBfU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMF9DTFIsCVBNSUNfRENYT19DVzAwX0NMUl9NQVNLLAlQTUlDX0RDWE9fQ1cwMF9DTFJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzAyLAkJUE1JQ19YT19FTjMyS19NQU5fTUFTSywJCVBNSUNfWE9fRU4zMktfTUFOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMiwJCVBNSUNfWE9fRU4zMktfTV9NQVNLLAkJUE1JQ19YT19FTjMyS19NX1NISUZULAkJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDIsCQlQTUlDX1JHX1hPX0NCQU5LX1BPTF9NQVNLLAlQTUlDX1JHX1hPX0NCQU5LX1BPTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDIsCQlQTUlDX1hPX1hNT0RFX01fTUFTSywJCVBNSUNfWE9fWE1PREVfTV9TSElGVCwJCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzAyLAkJUE1JQ19YT19TVFJVUF9NT0RFX01BU0ssCVBNSUNfWE9fU1RSVVBfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDIsCQlQTUlDX1JHX1hPX1BDVEFUX0NDT01QX01BU0ssCVBNSUNfUkdfWE9fUENUQVRfQ0NPTVBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzAyLAkJUE1JQ19SR19YT19WVEVTVF9TRUxfTVVYX01BU0ssCVBNSUNfUkdfWE9fVlRFU1RfU0VMX01VWF9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDIsCQlQTUlDX1hPX1NXUlNUX01BU0ssCQlQTUlDX1hPX1NXUlNUX1NISUZULAkJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDIsCQlQTUlDX1hPX0NCQU5LX1NZTkNfRFlOX01BU0ssCVBNSUNfWE9fQ0JBTktfU1lOQ19EWU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzAyLAkJUE1JQ19YT19QQ1RBVF9FTl9NQU5fTUFTSywJUE1JQ19YT19QQ1RBVF9FTl9NQU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzAyLAkJUE1JQ19YT19QQ1RBVF9FTl9NX01BU0ssCVBNSUNfWE9fUENUQVRfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDQsCQlQTUlDX1hPX0NEQUNfRlBNX01BU0ssCQlQTUlDX1hPX0NEQUNfRlBNX1NISUZULAkJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDQsCQlQTUlDX1hPX0NEQUNfTFBNX01BU0ssCQlQTUlDX1hPX0NEQUNfTFBNX1NISUZULAkJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDUsCQlQTUlDX1hPXzMyS0RJVl9ORlJBQ19GUE1fTUFTSywJUE1JQ19YT18zMktESVZfTkZSQUNfRlBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwNSwJCVBNSUNfWE9fQ09GU1RfRlBNX01BU0ssCQlQTUlDX1hPX0NPRlNUX0ZQTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDYsCQlQTUlDX1hPXzMyS0RJVl9ORlJBQ19MUE1fTUFTSywJUE1JQ19YT18zMktESVZfTkZSQUNfTFBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwNiwJCVBNSUNfWE9fQ09GU1RfTFBNX01BU0ssCQlQTUlDX1hPX0NPRlNUX0xQTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfTUFOX01BU0ssCQlQTUlDX1hPX0NPUkVfTUFOX1NISUZULAkJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfRU5fTV9NQVNLLAkJUE1JQ19YT19DT1JFX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX1RVUkJPX0VOX1NZTkNfTV9NQVNLLAlQTUlDX1hPX0NPUkVfVFVSQk9fRU5fU1lOQ19NX1NISUZULAl9LAorICAgIHtNVDYzNTlfRENYT19DVzA3LAkJUE1JQ19SR19YT19QQ1RBVF9JU19FTl9NQVNLLAkJUE1JQ19SR19YT19QQ1RBVF9JU19FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDcsCQlQTUlDX1hPX1NUQVJUVVBfRU5fTV9NQVNLLAkJUE1JQ19YT19TVEFSVFVQX0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzA3LAkJUE1JQ19SR19YT19DTVBfR1NFTF9NQVNLLAkJUE1JQ19SR19YT19DTVBfR1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfVkJTRUxfU1lOQ19NX01BU0ssCQlQTUlDX1hPX0NPUkVfVkJTRUxfU1lOQ19NX1NISUZULAl9LAorICAgIHtNVDYzNTlfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX0ZQTUJJQVNfRU5fTV9NQVNLLAkJUE1JQ19YT19DT1JFX0ZQTUJJQVNfRU5fTV9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9MUE1DRl9TWU5DX0ZQTV9NQVNLLAlQTUlDX1hPX0NPUkVfTFBNQ0ZfU1lOQ19GUE1fU0hJRlQsCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfTFBNQ0ZfU1lOQ19MUE1fTUFTSywJUE1JQ19YT19DT1JFX0xQTUNGX1NZTkNfTFBNX1NISUZULAl9LAorICAgIHtNVDYzNTlfRENYT19DVzA3LAkJUE1JQ19SR19YT19DT1JFX0xQTV9JU0VMX01BTl9NQVNLLAlQTUlDX1JHX1hPX0NPUkVfTFBNX0lTRUxfTUFOX1NISUZULAl9LAorICAgIHtNVDYzNTlfRENYT19DVzA3LAkJUE1JQ19SR19YT19DT1JFX0xQTV9JREFDX01BU0ssCQlQTUlDX1JHX1hPX0NPUkVfTFBNX0lEQUNfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzA5LAkJUE1JQ19YT18zMktESVZfU1dSU1RfTUFTSywJCVBNSUNfWE9fMzJLRElWX1NXUlNUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwOSwJCVBNSUNfWE9fMzJLRElWX1JBVElPX01BTl9NQVNLLAkJUE1JQ19YT18zMktESVZfUkFUSU9fTUFOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwOSwJCVBNSUNfWE9fMzJLRElWX1RFU1RfRU5fTUFTSywJCVBNSUNfWE9fMzJLRElWX1RFU1RfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzA5LAkJUE1JQ19YT19DVExfU1lOQ19CVUZfTUFOX01BU0ssCQlQTUlDX1hPX0NUTF9TWU5DX0JVRl9NQU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzA5LAkJUE1JQ19YT19DVExfU1lOQ19CVUZfRU5fTV9NQVNLLAkJUE1JQ19YT19DVExfU1lOQ19CVUZfRU5fTV9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwOSwJCVBNSUNfUkdfWE9fSFZfUEJVRl9WU0VUX01BU0ssCQlQTUlDX1JHX1hPX0hWX1BCVUZfVlNFVF9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDksCQlQTUlDX1hPX0VYVEJVRjZfTU9ERV9NQVNLLAkJUE1JQ19YT19FWFRCVUY2X01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzA5LAkJUE1JQ19YT19FWFRCVUY2X0VOX01fTUFTSywJCVBNSUNfWE9fRVhUQlVGNl9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwOSwJCVBNSUNfWE9fRVhUQlVGN19NT0RFX01BU0ssCQlQTUlDX1hPX0VYVEJVRjdfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDksCQlQTUlDX1hPX0VYVEJVRjdfRU5fTV9NQVNLLAkJUE1JQ19YT19FWFRCVUY3X0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzE2LAkJUE1JQ19YT19TVEFUSUNfQVVYT1VUX1NFTF9NQVNLLAkJUE1JQ19YT19TVEFUSUNfQVVYT1VUX1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cxNiwJCVBNSUNfWE9fQVVYT1VUX1NFTF9NQVNLLAkJUE1JQ19YT19BVVhPVVRfU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cxNywJCVBNSUNfWE9fU1RBVElDX0FVWE9VVF9NQVNLLAkJUE1JQ19YT19TVEFUSUNfQVVYT1VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0FVWEFEQ19BREMxNiwJCVBNSUNfQVVYQURDX0FEQ19PVVRfQ0g3X0JZX01EX01BU0ssCVBNSUNfQVVYQURDX0FEQ19PVVRfQ0g3X0JZX01EX1NISUZULAl9LAorICAgIHtNVDYzNTlfQVVYQURDX0FEQzE2LAkJUE1JQ19BVVhBRENfQURDX1JEWV9DSDdfQllfTURfTUFTSywJUE1JQ19BVVhBRENfQURDX1JEWV9DSDdfQllfTURfU0hJRlQsCX0sCisgICAge01UNjM1OV9BVVhBRENfUlFTVDEsCQlQTUlDX0FVWEFEQ19SUVNUX0NIN19CWV9NRF9NQVNLLAlQTUlDX0FVWEFEQ19SUVNUX0NIN19CWV9NRF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X1ZSRjE4X0FOQV9DT04wLAkJUE1JQ19SR19WUkYxOF9WT0NBTF9NQVNLLAkJUE1JQ19SR19WUkYxOF9WT0NBTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9WUkYxMl9BTkFfQ09OMCwJCVBNSUNfUkdfVlJGMTJfVk9DQUxfTUFTSywJCVBNSUNfUkdfVlJGMTJfVk9DQUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfVlJGMThfRUxSXzAsCQlQTUlDX1JHX1ZSRjE4X1ZPVFJJTV9NQVNLLAkJUE1JQ19SR19WUkYxOF9WT1RSSU1fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfVlJGMThfRUxSXzIsCQlQTUlDX1JHX1ZSRjEyX1ZPVFJJTV9NQVNLLAkJUE1JQ19SR19WUkYxMl9WT1RSSU1fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19UT1BfT0NfQ09OMCwJCVBNSUNfUkdfQlVDS19WUEFfT0NfU0ROX1NUQVRVU19NQVNLLAlQTUlDX1JHX0JVQ0tfVlBBX09DX1NETl9TVEFUVVNfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1RPUF9FTFIwLAkJUE1JQ19SR19CVUNLX1ZQQV9PQ19TRE5fRU5fTUFTSywJUE1JQ19SR19CVUNLX1ZQQV9PQ19TRE5fRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNSQU1fTURfRUxSLAkJUE1JQ19SR19MRE9fVlNSQU1fTURfVk9TRUxfTUFTSywJUE1JQ19SR19MRE9fVlNSQU1fTURfVk9TRUxfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNSQU1fTURfVk9TRUwwLAlQTUlDX1JHX0xET19WU1JBTV9NRF9WT1NFTF9TTEVFUF9NQVNLLAlQTUlDX1JHX0xET19WU1JBTV9NRF9WT1NFTF9TTEVFUF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU1JBTV9NRF9WT1NFTDEsCVBNSUNfREFfVlNSQU1fTURfVk9TRUxfTUFTSywJCVBNSUNfREFfVlNSQU1fTURfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfTERPX1ZTUkFNX09USEVSU19WT1NFTDAsCVBNSUNfUkdfTERPX1ZTUkFNX09USEVSU19WT1NFTF9TTEVFUF9NQVNLLAlQTUlDX1JHX0xET19WU1JBTV9PVEhFUlNfVk9TRUxfU0xFRVBfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNSQU1fT1RIRVJTX1ZPU0VMMSwJUE1JQ19EQV9WU1JBTV9PVEhFUlNfVk9TRUxfTUFTSywJUE1JQ19EQV9WU1JBTV9PVEhFUlNfVk9TRUxfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMThfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjE4X09QX01PREVfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X09QX01PREVfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMTJfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjEyX09QX01PREVfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX09QX01PREVfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVkZFMjhfQ09OMCwJCVBNSUNfUkdfTERPX1ZGRTI4X09QX01PREVfTUFTSywJCVBNSUNfUkdfTERPX1ZGRTI4X09QX01PREVfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1RPUF9FTFIxLAkJUE1JQ19SR19CVUNLX1ZHUFUxMV9WT1NFTF9MSU1JVF9TRUxfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMV9WT1NFTF9MSU1JVF9TRUxfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9DT04wLAkJUE1JQ19SR19CVUNLX1ZHUFUxMV9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZHUFUxMV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9DT04wLAkJUE1JQ19SR19CVUNLX1ZHUFUxMV9MUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZHUFUxMV9MUF9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9DT04xLAkJUE1JQ19SR19CVUNLX1ZHUFUxMV9WT1NFTF9TTEVFUF9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTExX1ZPU0VMX1NMRUVQX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTFfRUxSMCwJCVBNSUNfUkdfQlVDS19WR1BVMTFfVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WR1BVMTFfVk9TRUxfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9PUF9FTiwJCVBNSUNfUkdfQlVDS19WR1BVMTFfU1dfT1BfRU5fTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMV9TV19PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTExX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZHUFUxMV9IVzBfT1BfRU5fTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMV9IVzBfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9PUF9FTiwJCVBNSUNfUkdfQlVDS19WR1BVMTFfSFcxX09QX0VOX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTFfSFcxX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTFfT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVkdQVTExX0hXMl9PUF9FTl9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTExX0hXMl9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTExX09QX0VOX1NFVCwJUE1JQ19SR19CVUNLX1ZHUFUxMV9PUF9FTl9TRVRfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMV9PUF9FTl9TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9PUF9FTl9DTFIsCVBNSUNfUkdfQlVDS19WR1BVMTFfT1BfRU5fQ0xSX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTFfT1BfRU5fQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTFfT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZHUFUxMV9IVzBfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTFfSFcwX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTExX09QX0NGRywJCVBNSUNfUkdfQlVDS19WR1BVMTFfSFcxX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTExX0hXMV9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVkdQVTExX0hXMl9PUF9DRkdfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMV9IVzJfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTFfT1BfQ0ZHX1NFVCwJUE1JQ19SR19CVUNLX1ZHUFUxMV9PUF9DRkdfU0VUX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTFfT1BfQ0ZHX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTExX09QX0NGR19DTFIsCVBNSUNfUkdfQlVDS19WR1BVMTFfT1BfQ0ZHX0NMUl9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTExX09QX0NGR19DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9EQkcwLAkJUE1JQ19EQV9WR1BVMTFfVk9TRUxfTUFTSywJCVBNSUNfREFfVkdQVTExX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTExX0RCRzAsCQlQTUlDX0RBX1ZHUFUxMV9WT1NFTF9HUkFZX01BU0ssCQlQTUlDX0RBX1ZHUFUxMV9WT1NFTF9HUkFZX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTFfREJHMSwJCVBNSUNfREFfVkdQVTExX0VOX01BU0ssCQkJUE1JQ19EQV9WR1BVMTFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTFfREJHMSwJCVBNSUNfREFfVkdQVTExX1NUQl9NQVNLLAkJUE1JQ19EQV9WR1BVMTFfU1RCX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X1ZHUFVWQ09SRV9BTkFfQ09OMiwJCVBNSUNfUkdfVkdQVTExX0ZDQ01fTUFTSywJCVBNSUNfUkdfVkdQVTExX0ZDQ01fU0hJRlQsCQl9LAorCXtNVDYzNTlfQlVDS19UT1BfRUxSMSwJCVBNSUNfUkdfQlVDS19WR1BVMTJfVk9TRUxfTElNSVRfU0VMX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTFfVk9TRUxfTElNSVRfU0VMX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfQ09OMCwJCVBNSUNfUkdfQlVDS19WR1BVMTJfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WR1BVMTJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfQ09OMCwJCVBNSUNfUkdfQlVDS19WR1BVMTJfTFBfTUFTSywJCVBNSUNfUkdfQlVDS19WR1BVMTJfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfQ09OMSwJCVBNSUNfUkdfQlVDS19WR1BVMTJfVk9TRUxfU0xFRVBfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMl9WT1NFTF9TTEVFUF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTEyX0VMUjAsCQlQTUlDX1JHX0JVQ0tfVkdQVTEyX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVkdQVTEyX1ZPU0VMX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVkdQVTEyX1NXX09QX0VOX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTJfU1dfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMl9PUF9FTiwJCVBNSUNfUkdfQlVDS19WR1BVMTJfSFcwX09QX0VOX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTJfSFcwX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVkdQVTEyX0hXMV9PUF9FTl9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTEyX0hXMV9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTEyX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZHUFUxMl9IVzJfT1BfRU5fTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMl9IVzJfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMl9PUF9FTl9TRVQsCVBNSUNfUkdfQlVDS19WR1BVMTJfT1BfRU5fU0VUX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTJfT1BfRU5fU0VUX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfT1BfRU5fQ0xSLAlQTUlDX1JHX0JVQ0tfVkdQVTEyX09QX0VOX0NMUl9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTEyX09QX0VOX0NMUl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTEyX09QX0NGRywJCVBNSUNfUkdfQlVDS19WR1BVMTJfSFcwX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTEyX0hXMF9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMl9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVkdQVTEyX0hXMV9PUF9DRkdfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMl9IVzFfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZHUFUxMl9IVzJfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTJfSFcyX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTEyX09QX0NGR19TRVQsCVBNSUNfUkdfQlVDS19WR1BVMTJfT1BfQ0ZHX1NFVF9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTEyX09QX0NGR19TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMl9PUF9DRkdfQ0xSLAlQTUlDX1JHX0JVQ0tfVkdQVTEyX09QX0NGR19DTFJfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMl9PUF9DRkdfQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfREJHMCwJCVBNSUNfREFfVkdQVTEyX1ZPU0VMX01BU0ssCQlQTUlDX0RBX1ZHUFUxMl9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMl9EQkcwLAkJUE1JQ19EQV9WR1BVMTJfVk9TRUxfR1JBWV9NQVNLLAkJUE1JQ19EQV9WR1BVMTJfVk9TRUxfR1JBWV9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTEyX0RCRzEsCQlQTUlDX0RBX1ZHUFUxMl9FTl9NQVNLLAkJCVBNSUNfREFfVkdQVTEyX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTEyX0RCRzEsCQlQTUlDX0RBX1ZHUFUxMl9TVEJfTUFTSywJCVBNSUNfREFfVkdQVTEyX1NUQl9TSElGVCwJCX0sCisgICAge01UNjM1OV9WR1BVVkNPUkVfQU5BX0NPTjgsCQlQTUlDX1JHX1ZHUFUxMl9GQ0NNX01BU0ssCQlQTUlDX1JHX1ZHUFUxMl9GQ0NNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0xET19WU1JBTV9QUk9DMV9FTFIsCQlQTUlDX1JHX0xET19WU1JBTV9QUk9DMV9WT1NFTF9NQVNLLAlQTUlDX1JHX0xET19WU1JBTV9QUk9DMV9WT1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU1JBTV9QUk9DMV9WT1NFTDAsCVBNSUNfUkdfTERPX1ZTUkFNX1BST0MxX1ZPU0VMX1NMRUVQX01BU0ssCVBNSUNfUkdfTERPX1ZTUkFNX1BST0MxX1ZPU0VMX1NMRUVQX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTUkFNX1BST0MxX1ZPU0VMMSwJUE1JQ19EQV9WU1JBTV9QUk9DMV9WT1NFTF9NQVNLLAkJUE1JQ19EQV9WU1JBTV9QUk9DMV9WT1NFTF9TSElGVCwJCX0sCisJe01UNjM1OV9CVUNLX1RPUF9FTFIxLAkJUE1JQ19SR19CVUNLX1ZQUk9DMV9WT1NFTF9MSU1JVF9TRUxfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMV9WT1NFTF9MSU1JVF9TRUxfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9DT04wLAkJUE1JQ19SR19CVUNLX1ZQUk9DMV9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZQUk9DMV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9DT04wLAkJUE1JQ19SR19CVUNLX1ZQUk9DMV9MUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZQUk9DMV9MUF9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9DT04xLAkJUE1JQ19SR19CVUNLX1ZQUk9DMV9WT1NFTF9TTEVFUF9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MxX1ZPU0VMX1NMRUVQX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzFfRUxSMCwJCVBNSUNfUkdfQlVDS19WUFJPQzFfVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WUFJPQzFfVk9TRUxfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9PUF9FTiwJCVBNSUNfUkdfQlVDS19WUFJPQzFfU1dfT1BfRU5fTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMV9TV19PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MxX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZQUk9DMV9IVzBfT1BfRU5fTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMV9IVzBfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9PUF9FTiwJCVBNSUNfUkdfQlVDS19WUFJPQzFfSFcxX09QX0VOX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzFfSFcxX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzFfT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVlBST0MxX0hXMl9PUF9FTl9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MxX0hXMl9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MxX09QX0VOX1NFVCwJUE1JQ19SR19CVUNLX1ZQUk9DMV9PUF9FTl9TRVRfTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMV9PUF9FTl9TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9PUF9FTl9DTFIsCVBNSUNfUkdfQlVDS19WUFJPQzFfT1BfRU5fQ0xSX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzFfT1BfRU5fQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzFfT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZQUk9DMV9IVzBfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzFfSFcwX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MxX09QX0NGRywJCVBNSUNfUkdfQlVDS19WUFJPQzFfSFcxX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MxX0hXMV9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVlBST0MxX0hXMl9PUF9DRkdfTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMV9IVzJfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzFfT1BfQ0ZHX1NFVCwJUE1JQ19SR19CVUNLX1ZQUk9DMV9PUF9DRkdfU0VUX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzFfT1BfQ0ZHX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MxX09QX0NGR19DTFIsCVBNSUNfUkdfQlVDS19WUFJPQzFfT1BfQ0ZHX0NMUl9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MxX09QX0NGR19DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9EQkcwLAkJUE1JQ19EQV9WUFJPQzFfVk9TRUxfTUFTSywJCVBNSUNfREFfVlBST0MxX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MxX0RCRzAsCQlQTUlDX0RBX1ZQUk9DMV9WT1NFTF9HUkFZX01BU0ssCQlQTUlDX0RBX1ZQUk9DMV9WT1NFTF9HUkFZX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzFfREJHMSwJCVBNSUNfREFfVlBST0MxX0VOX01BU0ssCQkJUE1JQ19EQV9WUFJPQzFfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzFfREJHMSwJCVBNSUNfREFfVlBST0MxX1NUQl9NQVNLLAkJUE1JQ19EQV9WUFJPQzFfU1RCX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X1ZQUk9DMV9BTkFfQ09OMywJCVBNSUNfUkdfVlBST0MxX0ZDQ01fTUFTSywJCVBNSUNfUkdfVlBST0MxX0ZDQ01fU0hJRlQsCQl9LAorCXtNVDYzNTlfTERPX1ZTUkFNX1BST0MyX0VMUiwJCVBNSUNfUkdfTERPX1ZTUkFNX1BST0MyX1ZPU0VMX01BU0ssIFBNSUNfUkdfTERPX1ZTUkFNX1BST0MyX1ZPU0VMX1NISUZULAl9LAorCXtNVDYzNTlfTERPX1ZTUkFNX1BST0MyX1ZPU0VMMCwgUE1JQ19SR19MRE9fVlNSQU1fUFJPQzJfVk9TRUxfU0xFRVBfTUFTSywJUE1JQ19SR19MRE9fVlNSQU1fUFJPQzJfVk9TRUxfU0xFRVBfU0hJRlQsCX0sCisJe01UNjM1OV9MRE9fVlNSQU1fUFJPQzJfVk9TRUwxLCBQTUlDX0RBX1ZTUkFNX1BST0MyX1ZPU0VMX01BU0ssIAlQTUlDX0RBX1ZTUkFNX1BST0MyX1ZPU0VMX1NISUZULAkJfSwKKwl7TVQ2MzU5X0JVQ0tfVE9QX0VMUjEsCQlQTUlDX1JHX0JVQ0tfVlBST0MyX1ZPU0VMX0xJTUlUX1NFTF9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTExX1ZPU0VMX0xJTUlUX1NFTF9TSElGVCwJfSwKKwl7TVQ2MzU5X0JVQ0tfVlBST0MyX0NPTjAsCQlQTUlDX1JHX0JVQ0tfVlBST0MyX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlBST0MyX0VOX1NISUZULAkJfSwKKwl7TVQ2MzU5X0JVQ0tfVlBST0MyX0NPTjAsCQlQTUlDX1JHX0JVQ0tfVlBST0MyX0xQX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlBST0MyX0xQX1NISUZULAkJfSwKKwl7TVQ2MzU5X0JVQ0tfVlBST0MyX0NPTjEsCQlQTUlDX1JHX0JVQ0tfVlBST0MyX1ZPU0VMX1NMRUVQX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzJfVk9TRUxfU0xFRVBfU0hJRlQsCX0sCisJe01UNjM1OV9CVUNLX1ZQUk9DMl9FTFIwLAkJUE1JQ19SR19CVUNLX1ZQUk9DMl9WT1NFTF9NQVNLLCAJUE1JQ19SR19CVUNLX1ZQUk9DMl9WT1NFTF9TSElGVCwJfSwKKwl7TVQ2MzU5X0JVQ0tfVlBST0MyX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZQUk9DMl9TV19PUF9FTl9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MyX1NXX09QX0VOX1NISUZULCB9LAorCXtNVDYzNTlfQlVDS19WUFJPQzJfT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVlBST0MyX0hXMF9PUF9FTl9NQVNLLCBQTUlDX1JHX0JVQ0tfVlBST0MyX0hXMF9PUF9FTl9TSElGVCwJfSwKKwl7TVQ2MzU5X0JVQ0tfVlBST0MyX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZQUk9DMl9IVzFfT1BfRU5fTUFTSywgUE1JQ19SR19CVUNLX1ZQUk9DMl9IVzFfT1BfRU5fU0hJRlQsCX0sCisJe01UNjM1OV9CVUNLX1ZQUk9DMl9PUF9FTiwJCVBNSUNfUkdfQlVDS19WUFJPQzJfSFcyX09QX0VOX01BU0ssIFBNSUNfUkdfQlVDS19WUFJPQzJfSFcyX09QX0VOX1NISUZULAl9LAorCXtNVDYzNTlfQlVDS19WUFJPQzJfT1BfRU5fU0VULAlQTUlDX1JHX0JVQ0tfVlBST0MyX09QX0VOX1NFVF9NQVNLLCBQTUlDX1JHX0JVQ0tfVlBST0MyX09QX0VOX1NFVF9TSElGVCwJfSwKKwl7TVQ2MzU5X0JVQ0tfVlBST0MyX09QX0VOX0NMUiwJUE1JQ19SR19CVUNLX1ZQUk9DMl9PUF9FTl9DTFJfTUFTSywgUE1JQ19SR19CVUNLX1ZQUk9DMl9PUF9FTl9DTFJfU0hJRlQsCX0sCisJe01UNjM1OV9CVUNLX1ZQUk9DMl9PUF9DRkcsIAlQTUlDX1JHX0JVQ0tfVlBST0MyX0hXMF9PUF9DRkdfTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMl9IVzBfT1BfQ0ZHX1NISUZULAl9LAorCXtNVDYzNTlfQlVDS19WUFJPQzJfT1BfQ0ZHLCAJUE1JQ19SR19CVUNLX1ZQUk9DMl9IVzFfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzJfSFcxX09QX0NGR19TSElGVCwJfSwKKwl7TVQ2MzU5X0JVQ0tfVlBST0MyX09QX0NGRywgCVBNSUNfUkdfQlVDS19WUFJPQzJfSFcyX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MyX0hXMl9PUF9DRkdfU0hJRlQsCX0sCisJe01UNjM1OV9CVUNLX1ZQUk9DMl9PUF9DRkdfU0VULCBQTUlDX1JHX0JVQ0tfVlBST0MyX09QX0NGR19TRVRfTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMl9PUF9DRkdfU0VUX1NISUZULAl9LAorCXtNVDYzNTlfQlVDS19WUFJPQzJfT1BfQ0ZHX0NMUiwgUE1JQ19SR19CVUNLX1ZQUk9DMl9PUF9DRkdfQ0xSX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzJfT1BfQ0ZHX0NMUl9TSElGVCwJfSwKKwl7TVQ2MzU5X0JVQ0tfVlBST0MyX0RCRzAsCQlQTUlDX0RBX1ZQUk9DMl9WT1NFTF9NQVNLLAkJUE1JQ19EQV9WUFJPQzJfVk9TRUxfU0hJRlQsIAl9LAorCXtNVDYzNTlfQlVDS19WUFJPQzJfREJHMCwJCVBNSUNfREFfVlBST0MyX1ZPU0VMX0dSQVlfTUFTSywgCVBNSUNfREFfVlBST0MyX1ZPU0VMX0dSQVlfU0hJRlQsCX0sCisJe01UNjM1OV9CVUNLX1ZQUk9DMl9EQkcxLAkJUE1JQ19EQV9WUFJPQzJfRU5fTUFTSywgCQlQTUlDX0RBX1ZQUk9DMl9FTl9TSElGVCwJCX0sCisJe01UNjM1OV9CVUNLX1ZQUk9DMl9EQkcxLAkJUE1JQ19EQV9WUFJPQzJfU1RCX01BU0ssCQlQTUlDX0RBX1ZQUk9DMl9TVEJfU0hJRlQsCQl9LAorCXtNVDYzNTlfVlBST0MyX0FOQV9DT04zLAkJUE1JQ19SR19WUFJPQzJfRkNDTV9NQVNLLAkJUE1JQ19SR19WUFJPQzJfRkNDTV9TSElGVCwJCX0sCisJe01UNjM1OV9CVUNLX1RPUF9FTFIxLAkJUE1JQ19SR19CVUNLX1ZQVV9WT1NFTF9MSU1JVF9TRUxfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMV9WT1NFTF9MSU1JVF9TRUxfU0hJRlQsCX0sCisJe01UNjM1OV9CVUNLX1ZQVV9DT04wLAkJUE1JQ19SR19CVUNLX1ZQVV9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZQVV9FTl9TSElGVCwJCX0sCisJe01UNjM1OV9CVUNLX1ZQVV9DT04wLAkJUE1JQ19SR19CVUNLX1ZQVV9MUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZQVV9MUF9TSElGVCwJCX0sCisJe01UNjM1OV9CVUNLX1ZQVV9DT04xLAkJUE1JQ19SR19CVUNLX1ZQVV9WT1NFTF9TTEVFUF9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBVX1ZPU0VMX1NMRUVQX1NISUZULCB9LAorCXtNVDYzNTlfQlVDS19WUFVfRUxSMCwJCVBNSUNfUkdfQlVDS19WUFVfVk9TRUxfTUFTSywJUE1JQ19SR19CVUNLX1ZQVV9WT1NFTF9TSElGVCwJfSwKKwl7TVQ2MzU5X0JVQ0tfVlBVX09QX0VOLCAJUE1JQ19SR19CVUNLX1ZQVV9TV19PUF9FTl9NQVNLLCBQTUlDX1JHX0JVQ0tfVlBVX1NXX09QX0VOX1NISUZULCB9LAorCXtNVDYzNTlfQlVDS19WUFVfT1BfRU4sIAlQTUlDX1JHX0JVQ0tfVlBVX0hXMF9PUF9FTl9NQVNLLCBQTUlDX1JHX0JVQ0tfVlBVX0hXMF9PUF9FTl9TSElGVCwJfSwKKwl7TVQ2MzU5X0JVQ0tfVlBVX09QX0VOLCAJUE1JQ19SR19CVUNLX1ZQVV9IVzFfT1BfRU5fTUFTSywgUE1JQ19SR19CVUNLX1ZQVV9IVzFfT1BfRU5fU0hJRlQsCX0sCisJe01UNjM1OV9CVUNLX1ZQVV9PUF9FTiwgCVBNSUNfUkdfQlVDS19WUFVfSFcyX09QX0VOX01BU0ssIFBNSUNfUkdfQlVDS19WUFVfSFcyX09QX0VOX1NISUZULAl9LAorCXtNVDYzNTlfQlVDS19WUFVfT1BfRU5fU0VULCBQTUlDX1JHX0JVQ0tfVlBVX09QX0VOX1NFVF9NQVNLLCBQTUlDX1JHX0JVQ0tfVlBVX09QX0VOX1NFVF9TSElGVCwJfSwKKwl7TVQ2MzU5X0JVQ0tfVlBVX09QX0VOX0NMUiwgUE1JQ19SR19CVUNLX1ZQVV9PUF9FTl9DTFJfTUFTSywgUE1JQ19SR19CVUNLX1ZQVV9PUF9FTl9DTFJfU0hJRlQsCX0sCisJe01UNjM1OV9CVUNLX1ZQVV9PUF9DRkcsCVBNSUNfUkdfQlVDS19WUFVfSFcwX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVlBVX0hXMF9PUF9DRkdfU0hJRlQsCX0sCisJe01UNjM1OV9CVUNLX1ZQVV9PUF9DRkcsCVBNSUNfUkdfQlVDS19WUFVfSFcxX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVlBVX0hXMV9PUF9DRkdfU0hJRlQsCX0sCisJe01UNjM1OV9CVUNLX1ZQVV9PUF9DRkcsCVBNSUNfUkdfQlVDS19WUFVfSFcyX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVlBVX0hXMl9PUF9DRkdfU0hJRlQsCX0sCisJe01UNjM1OV9CVUNLX1ZQVV9PUF9DRkdfU0VULCBQTUlDX1JHX0JVQ0tfVlBVX09QX0NGR19TRVRfTUFTSywJUE1JQ19SR19CVUNLX1ZQVV9PUF9DRkdfU0VUX1NISUZULAl9LAorCXtNVDYzNTlfQlVDS19WUFVfT1BfQ0ZHX0NMUiwgUE1JQ19SR19CVUNLX1ZQVV9PUF9DRkdfQ0xSX01BU0ssCVBNSUNfUkdfQlVDS19WUFVfT1BfQ0ZHX0NMUl9TSElGVCwJfSwKKwl7TVQ2MzU5X0JVQ0tfVlBVX0RCRzAsCQlQTUlDX0RBX1ZQVV9WT1NFTF9NQVNLLCAJUE1JQ19EQV9WUFVfVk9TRUxfU0hJRlQsCX0sCisJe01UNjM1OV9CVUNLX1ZQVV9EQkcwLAkJUE1JQ19EQV9WUFVfVk9TRUxfR1JBWV9NQVNLLAlQTUlDX0RBX1ZQVV9WT1NFTF9HUkFZX1NISUZULAl9LAorCXtNVDYzNTlfQlVDS19WUFVfREJHMSwJCVBNSUNfREFfVlBVX0VOX01BU0ssCQlQTUlDX0RBX1ZQVV9FTl9TSElGVCwJCX0sCisJe01UNjM1OV9CVUNLX1ZQVV9EQkcxLAkJUE1JQ19EQV9WUFVfU1RCX01BU0ssCQlQTUlDX0RBX1ZQVV9TVEJfU0hJRlQsCQl9LAorCXtNVDYzNTlfVlBVX0FOQV9DT04zLAkJUE1JQ19SR19WUFVfRkNDTV9NQVNLLAkJUE1JQ19SR19WUFVfRkNDTV9TSElGVCwgCX0sCisJe01UNjM1OV9CVUNLX1ZQVV9PUF9NT0RFLCAJUE1JQ19SR19CVUNLX1ZQUk9DMl9IVzBfT1BfTU9ERV9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MyX0hXMF9PUF9NT0RFX1NISUZULAl9LAorCXtNVDYzNTlfQlVDS19WUFVfT1BfTU9ERSwgCVBNSUNfUkdfQlVDS19WUFJPQzJfSFcxX09QX01PREVfTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMl9IVzFfT1BfTU9ERV9TSElGVCwJfSwKKwl7TVQ2MzU5X0JVQ0tfVlBVX09QX01PREUsIAlQTUlDX1JHX0JVQ0tfVlBST0MyX0hXMl9PUF9NT0RFX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzJfSFcyX09QX01PREVfU0hJRlQsCX0sCisJe01UNjM1OV9CVUNLX1ZQVV9PUF9NT0RFX1NFVCwgUE1JQ19SR19CVUNLX1ZQVV9PUF9NT0RFX1NFVF9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBVX09QX01PREVfU0VUX1NISUZULAl9LAorCXtNVDYzNTlfQlVDS19WUFVfT1BfTU9ERV9DTFIsIFBNSUNfUkdfQlVDS19WUFVfT1BfTU9ERV9DTFJfTUFTSywJUE1JQ19SR19CVUNLX1ZQVV9PUF9NT0RFX0NMUl9TSElGVCwJfSwKK307CisjaWYgZGVmaW5lZChEQ0xfUE1JQ19NT0RVTEVfQ09OVFJPTCkKK0RDTF9IQU5ETEUgY3VycmVudF9kY2xfaGFuZGxlID0gMDsKKyNlbmRpZgorCisvLyNkZWZpbmUgRENMX1BNSUNfUEVSTUlTU0lPTl9DT05UUk9MCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19QRVJNSVNTSU9OX0NPTlRST0wpCitQTVVfQ1RSTF9NSVNDX1NFVF9SRUdJU1RFUl9WQUxVRQlpbGxlZ2FsX21pc2Nfc2V0X3JlZ2lzdGVyX3ZhbHVlID0gezB9OworI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgICAgICAgICAgICAgIFdSSVRFIEFQSXMgICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNpZiBkZWZpbmVkKERDTF9QTUlDX1BFUk1JU1NJT05fQ09OVFJPTCkKK0RDTF9CT09MIGRjbF9wbWljX2NoZWNrX3Blcm1pc3Npb24oa2FsX3VpbnQxNiBvZmZzZXQpCit7CisJRENMX0JPT0wgcmV0ID0gRENMX0ZBTFNFOworCWthbF91aW50OCBjID0gKChvZmZzZXQ+PjgpICYgMHhGRik7CisKKwlzd2l0Y2goYykKKyAgICB7CisJCWNhc2UgMHg4MjoKKyAgICAgICAgeworCQkJLy9DTEsgOiBUT1BfQ0xLU1FfU0VUICgweDgyMjYpLFRPUF9DS1BETl9DT04wX0NMUiAoMHg4MjA0KSxUT1BfQ0xLU1EoMHg4MjI0KQorCQkJaWYob2Zmc2V0ID09IDB4ODIyNiB8fCBvZmZzZXQgPT0gMHg4MjA0IHx8IG9mZnNldCA9PSAweDgyMjQpCisJCQkJcmV0PURDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgMHg5MDoKKyAgICAgICAgeworCQkgICAgLy9MRE9fRElHOiAweDkwMUEsMHg5MDFDLCAweDkwMDYsIDB4OTAwOAorICAgICAgICAgICAgaWYob2Zmc2V0ID09IDB4OTAxQSB8fCBvZmZzZXQgPT0gMHg5MDFDIHx8IG9mZnNldCA9PSAweDkwMDYgfHwgb2Zmc2V0ID09IDB4OTAwOCkKKwkJCQlyZXQ9RENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDk4OgorICAgICAgICB7CisJCQkvL0F1ZGlvIEFuYWxvZyA6IDB4OTgwMH4weDk4NTIKKyAgICAgICAgICAgIGlmKG9mZnNldCA+PSAweDk4MDAgJiYgb2Zmc2V0IDw9IDB4OTg1MikKKwkJCQlyZXQ9RENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwkJY2FzZSAweDlBOgorICAgICAgICB7CisJCQkvL0F1ZGlvIERSRSA6IDB4OUEwMCB+MHg5QTBBCisJCQlpZihvZmZzZXQgPj0gMHg5QTAwICYmIG9mZnNldCA8PSAweDlBMEEpCisJCQkJcmV0PURDTF9UUlVFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJCWNhc2UgMHhFMDoKKwkJY2FzZSAweEUxOgorICAgICAgICB7CisJCQkvL0F1ZGlvIGRpZ2l0YWwgOiAweEUwMDAgfjB4RTEzOAorCQkJaWYob2Zmc2V0ID49IDB4RTAwMCAmJiBvZmZzZXQgPD0gMHhFMTM4KQorCQkJCXJldD1EQ0xfVFJVRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorCQkJcmV0PURDTF9GQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKy8vIFdyaXRlIFdob2xlIEJ5dGVzCit2b2lkIGRjbF9wbWljX2J5dGVfd3JpdGUoRENMX1VJTlQxNiBhZGRyLCBEQ0xfVUlOVDE2IHZhbCkKK3sKKwlEQ0xfVUlOVDMyIGlkeCwgdHlwZTsKKworCWthbF90YWtlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jaywgS0FMX0lORklOSVRFX1dBSVQpOworCisJdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKwlpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorICAgIGlmKGFkZHIgPCBQTUlDX01BWF9SRUdfTlVNKQorICAgIHsKKyAgICAgICAgcG1pY19yZWdbYWRkcl0gPSB2YWw7CisgICAgfQorCisJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBhZGRyLCB2YWwsIDB4MDApOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUpOworI2VuZGlmCisJa2FsX2dpdmVfc3BpbmxvY2soZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrKTsKK30KKworLy8gV3JpdGUgV2hvbGUgQnl0ZXMKK3ZvaWQgZGNsX3BtaWNfYnl0ZV93cml0ZV9ub2xvY2soRENMX1VJTlQxNiBhZGRyLCBEQ0xfVUlOVDE2IHZhbCkKK3sKKwlEQ0xfVUlOVDMyIGlkeCwgdHlwZTsKKworCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCXR5cGUgPSBQTUlDX0xPR19UWVBFX0hSVF9ET01BSU47CisJZWxzZQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCisJaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKworICAgIGlmKGFkZHIgPCBQTUlDX01BWF9SRUdfTlVNKQorICAgIHsKKyAgICAgICAgcG1pY19yZWdbYWRkcl0gPSB2YWw7CisgICAgfQorCisvLwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIGFkZHIsIHZhbCwgMHgwMCk7CisvLwllbHNlCisvLwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1dSSVRFLCBhZGRyLCB2YWwsIDB4MDApOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUpOworI2VuZGlmCisKK30KKworLy8gV3JpdGUgcmVnaXN0ZXIgZmllbGQKK3ZvaWQgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQzYzNTlfRkxBR1NfTElTVF9FTlVNIGZsYWcsIERDTF9VSU5UMTYgc2VsKQoreworICAgIGNvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSAqcFRhYmxlID0gcG1pY19mbGFnc190YWJsZTsKKwlEQ0xfVUlOVDMyIHR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisJRENMX1VJTlQzMiBpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworCWthbF90YWtlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jaywgS0FMX0lORklOSVRFX1dBSVQpOworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworICAgIHBtaWNfcmVnX2xvZy5jb21tYW5kX2ZsYWcgPSBmbGFnOworICAgIHBtaWNfcmVnX2xvZy5yZWdfYmVmb3JlX3dyaXRlID0gcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF07CisKKyAgICBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSAmPSB+KHBUYWJsZVtmbGFnXS5tYXNrIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisgICAgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gfD0gKChrYWxfdWludDE2KXNlbCA8PCBwVGFibGVbZmxhZ10uc2hpZnQpOworCisvLwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKy8vCWVsc2UKKy8vCQlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKworICAgIHBtaWNfcmVnX2xvZy53cml0ZV92YWx1ZSA9IHNlbDsKKyAgICBwbWljX3JlZ19sb2cuYWRkcmVzc19vZmZzZXQgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfbWFzayA9IHBUYWJsZVtmbGFnXS5tYXNrOworICAgIHBtaWNfcmVnX2xvZy5yZWdfc2hpZnQgPSBwVGFibGVbZmxhZ10uc2hpZnQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19hZGRyID0gcFRhYmxlW2ZsYWddLm9mZnNldDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2RhdGEgPSBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworCWthbF9naXZlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jayk7Cit9CisKKy8vIFdyaXRlIHJlZ2lzdGVyIGZpZWxkCit2b2lkIGRjbF9wbWljX2ZpZWxkX3dyaXRlX25vbG9jayhQTUlDNjM1OV9GTEFHU19MSVNUX0VOVU0gZmxhZywgRENMX1VJTlQxNiBzZWwpCit7CisgICAgY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZICpwVGFibGUgPSBwbWljX2ZsYWdzX3RhYmxlOworCURDTF9VSU5UMzIgdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKwlEQ0xfVUlOVDMyIGlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisgICAgcG1pY19yZWdfbG9nLmNvbW1hbmRfZmxhZyA9IGZsYWc7CisgICAgcG1pY19yZWdfbG9nLnJlZ19iZWZvcmVfd3JpdGUgPSBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworICAgIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdICY9IH4ocFRhYmxlW2ZsYWddLm1hc2sgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKyAgICBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSB8PSAoKGthbF91aW50MTYpc2VsIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisKKy8vCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9XUklURSwgcFRhYmxlW2ZsYWddLm9mZnNldCwgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0sIDB4MDApOworLy8JZWxzZQorLy8JCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9XUklURSwgcFRhYmxlW2ZsYWddLm9mZnNldCwgcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0sIDB4MDApOworCisgICAgcG1pY19yZWdfbG9nLndyaXRlX3ZhbHVlID0gc2VsOworICAgIHBtaWNfcmVnX2xvZy5hZGRyZXNzX29mZnNldCA9IHBUYWJsZVtmbGFnXS5vZmZzZXQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19tYXNrID0gcFRhYmxlW2ZsYWddLm1hc2s7CisgICAgcG1pY19yZWdfbG9nLnJlZ19zaGlmdCA9IHBUYWJsZVtmbGFnXS5zaGlmdDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2FkZHIgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfZGF0YSA9IHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCit9CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgICBSRUFEIEFQSXMgICAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIFJlYWQgV2hvbGUgQnl0ZXMKK0RDTF9VSU5UMTYgZGNsX3BtaWNfYnl0ZV9yZXR1cm4oRENMX1VJTlQxNiBhZGRyKQoreworICAgIERDTF9VSU5UMTYgcmVnX3RlbXA7CisJRENMX1VJTlQzMiBpZHgsIHR5cGU7CisKKwlrYWxfdGFrZV9zcGlubG9jayhkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2ssIEtBTF9JTkZJTklURV9XQUlUKTsKKworCXR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisJaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKy8vCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCAoRENMX1VJTlQzMilhZGRyLCAweDAwLCAmcmVnX3RlbXApOworLy8JZWxzZQorLy8JCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCAoRENMX1VJTlQzMilhZGRyLCAweDAwLCAmcmVnX3RlbXApOworCisgICAgaWYoYWRkciA8IFBNSUNfTUFYX1JFR19OVU0pCisgICAgeworICAgICAgICBwbWljX3JlZ1thZGRyXSA9IHJlZ190ZW1wOworICAgIH0KKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworCWthbF9naXZlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jayk7CisKKyAgICByZXR1cm4gcmVnX3RlbXA7Cit9CisKKy8vIFJlYWQgV2hvbGUgQnl0ZXMKK0RDTF9VSU5UMTYgZGNsX3BtaWNfYnl0ZV9yZXR1cm5fbm9sb2NrKERDTF9VSU5UMTYgYWRkcikKK3sKKyAgICBEQ0xfVUlOVDE2IHJlZ190ZW1wOworCURDTF9VSU5UMzIgaWR4LCB0eXBlOworCisJaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfSFJUX0RPTUFJTjsKKwllbHNlCisJCXR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisKKwlpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworLy8JaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1JFQUQsIChEQ0xfVUlOVDMyKWFkZHIsIDB4MDAsICZyZWdfdGVtcCk7CisvLwllbHNlCisvLwkJRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1JFQUQsIChEQ0xfVUlOVDMyKWFkZHIsIDB4MDAsICZyZWdfdGVtcCk7CisKKyAgICBpZihhZGRyIDwgUE1JQ19NQVhfUkVHX05VTSkKKyAgICB7CisgICAgICAgIHBtaWNfcmVnW2FkZHJdID0gcmVnX3RlbXA7CisgICAgfQorCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlZ190ZW1wOworfQorCisvLyBSZWFkIHJlZ2lzdGVyIGZpZWxkCitEQ0xfVUlOVDE2IGRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQzYzNTlfRkxBR1NfTElTVF9FTlVNIGZsYWcpCit7CisgICAgY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZICpwVGFibGUgPSBwbWljX2ZsYWdzX3RhYmxlOworICAgIERDTF9VSU5UMTYgcmVnX3JldHVybiA9IDA7CisJRENMX1VJTlQzMiB0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCURDTF9VSU5UMzIgaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9IUlRfRE9NQUlOOworCWVsc2UKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKworCWlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKy8vCWlmKCBEY2xQTVVfR2V0SHJ0RmxhZygpIT0gMCkgLy9pZihIUlQpCisJCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCBwVGFibGVbZmxhZ10ub2Zmc2V0LCAweDAwLCAmcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0pOworLy8JZWxzZQorLy8JCURydlBXUkFQX1dBQ1MwKFBNSUNfV1JBUF9SRUFELCBwVGFibGVbZmxhZ10ub2Zmc2V0LCAweDAwLCAmcG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0pOworCisgICAgcmVnX3JldHVybiA9ICgocG1pY19yZWdbcFRhYmxlW2ZsYWddLm9mZnNldF0gJiAocFRhYmxlW2ZsYWddLm1hc2sgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KSkgPj4gcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlZ19yZXR1cm47Cit9CisKKy8vIEV4cG9ydGVkIGZvciBFTSB1c2VkCit2b2lkIHBtaWNfRU1fcmVnX3dyaXRlKGthbF91aW50MTYgcmVnLCBrYWxfdWludDE2IHZhbCl7CisJZGNsX3BtaWNfYnl0ZV93cml0ZV9ub2xvY2socmVnLCB2YWwpOworLy8JICBkY2xfcG1pY19ieXRlX3dyaXRlKHJlZywgdmFsKTsKK30KKwora2FsX3VpbnQxNiBwbWljX0VNX3JlZ19yZWFkKGthbF91aW50MTYgcmVnKXsKKwlyZXR1cm4gIGRjbF9wbWljX2J5dGVfcmV0dXJuX25vbG9jayhyZWcpOworfQorCitjb25zdCBEQ0xfVUlOVDMyIHZwYV92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF8wMF81MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAwXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDBfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMF84MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAwXzkwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfMDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV8xMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzIwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfMzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV80MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAxXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV83MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfOTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl8wMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzEwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl8zMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl82MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzcwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfODAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl85MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wM18yMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAzXzMwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfNDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wM181MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCit9OworCitjb25zdCBEQ0xfVUlOVDMyIHZzaW0xX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUX0lOVkFMSUQsICAgICAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzcwMDAwMF9WLAorICAgIFBNVV9WT0xUXzAxXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsCisgICAgUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfSU5WQUxJRCwKK307CisKK2NvbnN0IERDTF9VSU5UMzIgdnhvMjJfdm9zZWxbXSA9Cit7CisgICAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgICAgIFBNVV9WT0xUXzAyXzIwMDAwMF9WLCAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfSU5WQUxJRCwgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfSU5WQUxJRCwKK307CisKK2NvbnN0IERDTF9VSU5UMzIgdm1vZGVtX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUXzAwXzUwMDAwMF9WLAlQTVVfVk9MVF8wMF81NTAwMDBfViwJUE1VX1ZPTFRfMDBfNjAwMDAwX1YsCVBNVV9WT0xUXzAwXzc1MDAwMF9WLAorICAgIFBNVV9WT0xUXzAwXzgwMDAwMF9WLAlQTVVfVk9MVF8wMF84NTAwMDBfViwJUE1VX1ZPTFRfSU5WQUxJRCwJUE1VX1ZPTFRfSU5WQUxJRCwKK307CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKworY29uc3QgRENMX1VJTlQzMiB2c3JhbV92bWRfdm9zZWxbXSA9Cit7CisgICAgUE1VX1ZPTFRfMDBfNTUwMDAwX1YsICAgUE1VX1ZPTFRfMDBfNjAwMDAwX1YsCVBNVV9WT0xUXzAwXzY1MDAwMF9WLAlQTVVfVk9MVF8wMF83NTAwMDBfViwKKyAgICBQTVVfVk9MVF8wMF84MDAwMDBfViwJUE1VX1ZPTFRfMDBfODUwMDAwX1YsCVBNVV9WT0xUX0lOVkFMSUQsCVBNVV9WT0xUX0lOVkFMSUQsCit9OworCitQTVVfUEFSQU1FVEVSX1RBQkxFX0VOVFJZIHBtdV9wYXJhbWV0ZXJfdGFibGVbXT0KK3sKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWUEFfU1cpLAkJICAgIAl2cGFfdm9zZWwsCQkgICAgTlVMTCwJICAgIEdFVEFSUk5VTSh2cGFfdm9zZWwpCQkJfSwKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWUEEpLAkJICAgIAl2cGFfdm9zZWwsCQkgICAgTlVMTCwJICAgIEdFVEFSUk5VTSh2cGFfdm9zZWwpCQkJfSwKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWU0lNMSksCQkgICAgCXZzaW0xX3Zvc2VsLAkJTlVMTCwJICAgIEdFVEFSUk5VTSh2c2ltMV92b3NlbCkJCQl9LAorICAgIHtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZTSU0yKSwJCSAgICAJdnNpbTFfdm9zZWwsCQlOVUxMLCAgIAlHRVRBUlJOVU0odnNpbTFfdm9zZWwpCSAgICAJfSwKKwl7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWWE8yMiksCQkgICAgCXZ4bzIyX3Zvc2VsLAkJTlVMTCwgICAJR0VUQVJSTlVNKHZ4bzIyX3Zvc2VsKQkgICAgCX0sCisJe0VOQyhMRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRSwgVk1PREVNKSwJCXZtb2RlbV92b3NlbCwJCU5VTEwsCQlHRVRBUlJOVU0odm1vZGVtX3Zvc2VsKQkJCX0sCisgICAge0VOQyhMRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRSwgVlNSQU1fTUQpLAkJdnNyYW1fdm1kX3Zvc2VsLAlOVUxMLCAgIAlHRVRBUlJOVU0odnNyYW1fdm1kX3Zvc2VsKQkJfSwKKwl7RU5DKExET19CVUNLX1NFVF9TTEVFUF9WT0xUQUdFLCBWR1BVMTEpLAkJdm1vZGVtX3Zvc2VsLAkJTlVMTCwJCUdFVEFSUk5VTSh2bW9kZW1fdm9zZWwpCQkJfSwKKwl7RU5DKExET19CVUNLX1NFVF9TTEVFUF9WT0xUQUdFLCBWR1BVMTIpLAkJdm1vZGVtX3Zvc2VsLAkJTlVMTCwJCUdFVEFSUk5VTSh2bW9kZW1fdm9zZWwpCQkJfSwKKyAgICB7RU5DKExET19CVUNLX1NFVF9TTEVFUF9WT0xUQUdFLCBWU1JBTV9QUk9DMSksCXZzcmFtX3ZtZF92b3NlbCwJTlVMTCwgICAJR0VUQVJSTlVNKHZzcmFtX3ZtZF92b3NlbCkJCX0sCisgICAge0VOQyhMRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRSwgVlNSQU1fUFJPQzIpLAl2c3JhbV92bWRfdm9zZWwsCU5VTEwsICAgCUdFVEFSUk5VTSh2c3JhbV92bWRfdm9zZWwpCQl9LAorfTsKKworCitleHRlcm4gUE1VX0NPTlRST0xfSEFORExFUiBwbXVfY29udHJvbF9oYW5kbGVyOworCitEQ0xfVUlOVDE2IHBtdV9wYXJhbWV0ZXJfc2l6ZSA9IDA7CisKK0RDTF9TVEFUVVMgUE1JQ19jb250cm9sX2hhbmRsZXIoRENMX0hBTkRMRSBoYW5kbGUsRENMX0NUUkxfQ01EIGNtZCxEQ0xfQ1RSTF9EQVRBX1QgKmRhdGEpCit7CisgICAgRENMX1VJTlQxNglyZWdWYWw7CisgICAgRENMX0lOVDMyCXJldHVybl92YWwgPSBTVEFUVVNfRkFJTDsKKyNpZiBkZWZpbmVkKERDTF9QTUlDX01PRFVMRV9DT05UUk9MKQorCWN1cnJlbnRfZGNsX2hhbmRsZSA9IGhhbmRsZTsKKyNlbmRpZgorICAgIHN3aXRjaChjbWQpCisgICAgeworICAgICAgICBjYXNlIExET19CVUNLX1NFVF9FTjoJLy9FbmFibGUgY29udHJvbCBpbiBTVyBtb2RlCisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiAqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tTZXRFbik7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlBBX1NXOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIEJVQ0tfVlBBX0NLX1NXX01PREUgYmVmb3JlIEVuYWJsZSBWUEEgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHBMZG9CdWNrQ3RybC0+ZW5hYmxlID09IDB4MSkKKyAgICAgICAgICAgICAgICAgICAgCWRjbF9wbWljX2J5dGVfd3JpdGVfbm9sb2NrKE1UNjM1OV9CVUNLX1ZQQV9EQkcxLCAweDMwMDApOworCisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlX25vbG9jayhQTUlDX0VOVU1fUkdfQlVDS19WUEFfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKworICAgICAgICAgICAgICAgICAgICAvKiBEaXNhYmxlIEJVQ0tfVlBBX0NLX1NXX01PREUgYWZ0ZXIgRGlzYWJsZSBWUEEgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHBMZG9CdWNrQ3RybC0+ZW5hYmxlID09IDB4MCkKKyAgICAgICAgICAgICAgICAgICAgCWRjbF9wbWljX2J5dGVfd3JpdGVfbm9sb2NrKE1UNjM1OV9CVUNLX1ZQQV9EQkcxLCAweDApOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIElOVF9TVEFUVVNfVlNJTTFfT0MgYmVmb3JlIEVuYWJsZSBWU0lNMSAqLworICAgICAgICAgICAgICAgICAgICBpZiAocExkb0J1Y2tDdHJsLT5lbmFibGUgPT0gMHgxKQorICAgICAgICAgICAgICAgICAgICAJZGNsX3BtaWNfYnl0ZV93cml0ZV9ub2xvY2soTVQ2MzU5X0xET19UT1BfSU5UX1NUQVRVUzEsIDB4MTApOworCisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTFfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgSU5UX1NUQVRVU19WU0lNMl9PQyBiZWZvcmUgRW5hYmxlIFZTSU0yICovCisgICAgICAgICAgICAgICAgICAgIGlmIChwTGRvQnVja0N0cmwtPmVuYWJsZSA9PSAweDEpCisgICAgICAgICAgICAgICAgICAgIAlkY2xfcG1pY19ieXRlX3dyaXRlX25vbG9jayhNVDYzNTlfTERPX1RPUF9JTlRfU1RBVFVTMSwgMHgyMCk7CisKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkZFMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZGRTI4X0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlX25vbG9jayhQTUlDX0VOVU1fUkdfTERPX1ZSRjE4X0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlX25vbG9jayhQTUlDX0VOVU1fUkdfTERPX1ZSRjEyX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUzFfVk9URVJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZTMl9WT1RFUl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkdQVTExOgorCQkJCXsKKwkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVkdQVTExX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWR1BVMTI6CisJCQkJeworCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WR1BVMTJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZQUk9DMToKKwkJCQl7CisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZQUk9DMV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlBST0MyOgorCQkJCXsKKwkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVlBST0MyX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWUFU6CisJCQkJeworCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUFVfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworCQkJCWJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJY2FzZSBMRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9MUF9NT0RFX1NFVCAqcExkb0J1Y2tDdHJsID0mIChkYXRhLT5yUE1VTGRvQnVja1NldExwTW9kZVNldCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZNT0RFTToKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZGRTI4OgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZGRTI4X0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWUkYxODoKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlJGMTI6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMTJfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCSAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZHUFUxMToKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVkdQVTExX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWR1BVMTI6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZHUFUxMl9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlBST0MxOgorCQkJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUFJPQzFfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZQUk9DMjoKKwkJCQl7CS8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVlBST0MyX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWUFU6CisJCQkJewkvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZQVV9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwljYXNlIExET19CVUNLX1NFVF9PQ0ZCX0VOOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT0NGQl9FTiAqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tTZXRPY2ZiRW4pOworCisgICAgICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWU0lNMToKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9PQ0ZCX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfT0NGQl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJY2FzZSBMRE9fQlVDS19HRVRfVk9TRUw6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1NFTCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja0dldFZvc2VsKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVkNPUkU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZDT1JFX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTUkFNX09USEVSUzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9PVEhFUlNfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WTU9ERU1fVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNSQU1fTUQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fTURfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVkdQVTExOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WR1BVMTFfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVkdQVTEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WR1BVMTJfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNSQU1fUFJPQzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fUFJPQzFfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlBST0MxOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WUFJPQzFfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNSQU1fUFJPQzI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fUFJPQzJfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlBST0MyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WUFJPQzJfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlBVOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WUFVfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwljYXNlIExET19CVUNLX1NFVF9WT1NFTDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPU0VMICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0Vm9zZWwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWQ09SRToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZDT1JFX1ZPU0VMLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX1ZPU0VMLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNSQU1fT1RIRVJTOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9PVEhFUlNfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU1JBTV9NRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fTURfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWR1BVMTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WR1BVMTFfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWR1BVMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WR1BVMTJfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU1JBTV9QUk9DMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fUFJPQzFfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUFJPQzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUFJPQzFfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU1JBTV9QUk9DMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fUFJPQzJfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUFJPQzI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUFJPQzJfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUFU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUFVfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCWNhc2UgTERPX0JVQ0tfR0VUX1ZPU0VMX1NMRUVQOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9TRUxfU0xFRVAgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWb3NlbFNsZWVwKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVkNPUkU6CisJCSAgICAgICAgICAgICAgICB7CisJCSAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WQ09SRV9WT1NFTF9TTEVFUCk7CisJCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWTU9ERU06CisJCSAgICAgICAgICAgICAgICB7CisJCSAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WTU9ERU1fVk9TRUxfU0xFRVApOworCQkgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCSAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlNSQU1fTUQ6CisJCSAgICAgICAgICAgICAgICB7CisJCSAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfTERPX1ZTUkFNX01EX1ZPU0VMX1NMRUVQKTsKKwkJICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX09USEVSUzoKKwkJICAgICAgICAgICAgICAgIHsKKwkJICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fT1RIRVJTX1ZPU0VMX1NMRUVQKTsKKwkJICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZHUFUxMToKKwkJCQkJCXsKKwkJCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZHUFUxMV9WT1NFTF9TTEVFUCk7CisJCQkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCisJCQkJY2FzZSBWR1BVMTI6CisJCQkJCQl7CisJCQkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WR1BVMTJfVk9TRUxfU0xFRVApOworCQkJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCWNhc2UgVlNSQU1fUFJPQzE6CisJCSAgICAgICAgICAgICAgICB7CisJCSAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfTERPX1ZTUkFNX1BST0MxX1ZPU0VMX1NMRUVQKTsKKwkJICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZQUk9DMToKKwkJCQkJCXsKKwkJCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZQUk9DMV9WT1NFTF9TTEVFUCk7CisJCQkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCisJCQkJY2FzZSBWU1JBTV9QUk9DMjoKKwkJICAgICAgICAgICAgICAgIHsKKwkJICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fUFJPQzJfVk9TRUxfU0xFRVApOworCQkgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCSAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlBST0MyOgorCQkJCQkJeworCQkJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVlBST0MyX1ZPU0VMX1NMRUVQKTsKKwkJCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZQVToKKwkJCQkJCXsKKwkJCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZQVV9WT1NFTF9TTEVFUCk7CisJCQkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCWNhc2UgTERPX0JVQ0tfU0VUX1ZPU0VMX1NMRUVQOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9TRUxfU0xFRVAgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWb3NlbFNsZWVwKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorCQkgICAgICAgICAgICAgICAgeworCQkgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKwkJICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorCQkgICAgICAgICAgICAgICAgeworCQkgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fTURfVk9TRUxfU0xFRVAsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisJCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU1JBTV9PVEhFUlM6CisJCSAgICAgICAgICAgICAgICB7CisJCSAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9PVEhFUlNfVk9TRUxfU0xFRVAsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisJCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWR1BVMTE6CisJCQkJCQl7CisJCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVkdQVTExX1ZPU0VMX1NMRUVQLCBwTGRvQnVja0N0cmwtPmNvZGUpOworCQkJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCWNhc2UgVkdQVTEyOgorCQkJCQkJeworCQkJCQkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZHUFUxMl9WT1NFTF9TTEVFUCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKwkJCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX1BST0MxOgorCQkgICAgICAgICAgICAgICAgeworCQkgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fUFJPQzFfVk9TRUxfU0xFRVAsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisJCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUFJPQzE6CisJCQkJCQl7CisJCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVlBST0MxX1ZPU0VMX1NMRUVQLCBwTGRvQnVja0N0cmwtPmNvZGUpOworCQkJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCWNhc2UgVlNSQU1fUFJPQzI6CisJCSAgICAgICAgICAgICAgICB7CisJCSAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9QUk9DMl9WT1NFTF9TTEVFUCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKwkJICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZQUk9DMjoKKwkJCQkJCXsKKwkJCQkJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUFJPQzJfVk9TRUxfU0xFRVAsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisJCQkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCisJCQkJY2FzZSBWUFU6CisJCQkJCQl7CisJCQkJCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVlBVX1ZPU0VMX1NMRUVQLCBwTGRvQnVja0N0cmwtPmNvZGUpOworCQkJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwljYXNlIExET19CVUNLX1NFVF9NT0RFU0VUOgorCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0TW9kZXNldCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9TVzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlX25vbG9jayhQTUlDX0VOVU1fUkdfVlBBX01PREVTRVQsIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVk1PREVNX0ZDQ00sIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUzI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlMyX0ZQV00sIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWR1BVMTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVkdQVTExX0ZDQ00sIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWR1BVMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVkdQVTEyX0ZDQ00sIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUFJPQzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlBST0MxX0ZDQ00sIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUFJPQzI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlBST0MyX0ZDQ00sIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUFU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlBVX0ZDQ00sIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwl9CisJYnJlYWs7CisKKwljYXNlIExET19CVUNLX1NFVF9PUF9FTjoKKwl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT1BfRU4gKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRPcEVuKTsKKworICAgIAkgICAga2FsX3VpbnQxNiBtb2RlID0oKHBMZG9CdWNrQ3RybC0+c3dfb3BfZW4gIDw8IFJHX0JVQ0tfTERPX1NXX09QX0VOX1NISUZUKSB8IChwTGRvQnVja0N0cmwtPmh3MF9vcF9lbiA8PCBSR19CVUNLX0xET19IVzBfT1BfRU5fU0hJRlQpIHwKKwkJCSAgICAgIChwTGRvQnVja0N0cmwtPmh3MV9vcF9lbiA8PCBSR19CVUNLX0xET19IVzFfT1BfRU5fU0hJRlQpIHwgKHBMZG9CdWNrQ3RybC0+aHcyX29wX2VuIDw8IFJHX0JVQ0tfTERPX0hXMl9PUF9FTl9TSElGVCkpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWTU9ERU06CisJCQkJeworCQkJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZTSU0xOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlNJTTFfT1BfRU5fU0VUX0FERFIsIG1vZGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlNJTTI6CisJCQkJeworCQkJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WU0lNMl9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZGRTI4X09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlJGMThfT1BfRU5fU0VUX0FERFIsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlJGMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxMl9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWR1BVMTE6CisJCQkJeworCQkJCQlwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVkdQVTExX09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZHUFUxMjoKKwkJCQl7CisJCQkJCXBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WR1BVMTJfT1BfRU5fU0VUX0FERFIsIG1vZGUpOworCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlBST0MxOgorCQkJCXsKKwkJCQkJcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZQUk9DMV9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWUFJPQzI6CisJCQkJeworCQkJCQlwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVlBST0MyX09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZQVToKKwkJCQl7CisJCQkJCXBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WUFVfT1BfRU5fU0VUX0FERFIsIG1vZGUpOworCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJfQorCWJyZWFrOworCisJY2FzZSBMRE9fQlVDS19DTFJfT1BfRU46CisJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09QX0VOICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0T3BFbik7CisKKyAgICAJICAgIGthbF91aW50MTYgbW9kZSA9KChwTGRvQnVja0N0cmwtPnN3X29wX2VuICA8PCBSR19CVUNLX0xET19TV19PUF9FTl9TSElGVCkgfCAocExkb0J1Y2tDdHJsLT5odzBfb3BfZW4gPDwgUkdfQlVDS19MRE9fSFcwX09QX0VOX1NISUZUKSB8CisJCQkgICAgICAocExkb0J1Y2tDdHJsLT5odzFfb3BfZW4gPDwgUkdfQlVDS19MRE9fSFcxX09QX0VOX1NISUZUKSB8IChwTGRvQnVja0N0cmwtPmh3Ml9vcF9lbiA8PCBSR19CVUNLX0xET19IVzJfT1BfRU5fU0hJRlQpKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKwkJCQl7CisJCQkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0xX09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKwkJCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZTSU0yOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlNJTTJfT1BfRU5fQ0xSX0FERFIsIG1vZGUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVkZFMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjE4X09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlJGMTJfT1BfRU5fQ0xSX0FERFIsIG1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkdQVTExOgorCQkJCXsKKwkJCQkJcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZHUFUxMV9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWR1BVMTI6CisJCQkJeworCQkJCQlwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVkdQVTEyX09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZQUk9DMToKKwkJCQl7CisJCQkJCXBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WUFJPQzFfT1BfRU5fQ0xSX0FERFIsIG1vZGUpOworCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJCWNhc2UgVlBST0MyOgorCQkJCXsKKwkJCQkJcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZQUk9DMl9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQkJY2FzZSBWUFU6CisJCQkJeworCQkJCQlwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVlBVX09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKwkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQl9CisJCQkJYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworCWNhc2UgTERPX0JVQ0tfU0VUX0hXX09QX0NGRzoKKwl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfSFdfT1BfQ0ZHICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0SHdPcCk7CisKKyAgICAJICAgIGthbF91aW50MTYgdmFsdWUgPSgocExkb0J1Y2tDdHJsLT5odzBfb3BfY2ZnIDw8IFJHX0JVQ0tfTERPX0hXMF9PUF9DRkdfU0hJRlQpIHwKKwkJCSAgICAgICAocExkb0J1Y2tDdHJsLT5odzFfb3BfY2ZnIDw8IFJHX0JVQ0tfTERPX0hXMV9PUF9DRkdfU0hJRlQpIHwKKwkJCSAgICAgICAocExkb0J1Y2tDdHJsLT5odzJfb3BfY2ZnIDw8IFJHX0JVQ0tfTERPX0hXMl9PUF9DRkdfU0hJRlQpKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorCQkgICAgICAgICAgICAgICAgeworCQkgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisJCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKwkJICAgICAgICAgICAgICAgIHsKKwkJICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKwkJICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0yOgorCQkgICAgICAgICAgICAgICAgeworCQkgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0yX09QX0NGR19TRVRfQUREUiwgdmFsdWUpOworCQkgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCSAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkZFMjg6CisJCSAgICAgICAgICAgICAgICB7CisJCSAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVkZFMjhfT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisJCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxODoKKwkJICAgICAgICAgICAgICAgIHsKKwkJICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKwkJICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorCQkgICAgICAgICAgICAgICAgeworCQkgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19TRVRfQUREUiwgdmFsdWUpOworCQkgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCSAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkdQVTExOgorCQkJCQkJeworCQkJCQkJCXBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WR1BVMTFfT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisJCQkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCisJCQkJY2FzZSBWR1BVMTI6CisJCQkJCQl7CisJCQkJCQkJcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZHUFUxMl9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKwkJCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZQUk9DMToKKwkJCQkJCXsKKwkJCQkJCQlwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVlBST0MxX09QX0NGR19TRVRfQUREUiwgdmFsdWUpOworCQkJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCWNhc2UgVlBST0MyOgorCQkJCQkJeworCQkJCQkJCXBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WUFJPQzJfT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisJCQkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCisJCQkJY2FzZSBWUFU6CisJCQkJCQl7CisJCQkJCQkJcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZQVV9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKwkJCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworCWNhc2UgTERPX0JVQ0tfQ0xSX0hXX09QX0NGRzoKKwl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19DTFJfSFdfT1BfQ0ZHICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrQ2xySHdPcCk7CisKKyAgICAJICAgIGthbF91aW50MTYgdmFsdWUgPSgocExkb0J1Y2tDdHJsLT5odzBfb3BfY2ZnIDw8IFJHX0JVQ0tfTERPX0hXMF9PUF9DRkdfU0hJRlQpIHwKKwkJCSAgICAgICAocExkb0J1Y2tDdHJsLT5odzFfb3BfY2ZnIDw8IFJHX0JVQ0tfTERPX0hXMV9PUF9DRkdfU0hJRlQpIHwKKwkJCSAgICAgICAocExkb0J1Y2tDdHJsLT5odzJfb3BfY2ZnIDw8IFJHX0JVQ0tfTERPX0hXMl9PUF9DRkdfU0hJRlQpKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorCQkgICAgICAgICAgICAgICAgeworCQkgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisJCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWU0lNMToKKwkJICAgICAgICAgICAgICAgIHsKKwkJICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKwkJICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTSU0yOgorCQkgICAgICAgICAgICAgICAgeworCQkgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0yX09QX0NGR19DTFJfQUREUiwgdmFsdWUpOworCQkgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCSAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkZFMjg6CisJCSAgICAgICAgICAgICAgICB7CisJCSAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVkZFMjhfT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisJCSAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJICAgICAgICAgICAgICAgIH0KKwkJICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkJY2FzZSBWUkYxODoKKwkJICAgICAgICAgICAgICAgIHsKKwkJICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKwkJICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZSRjEyOgorCQkgICAgICAgICAgICAgICAgeworCQkgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19DTFJfQUREUiwgdmFsdWUpOworCQkgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCSAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkdQVTExOgorCQkJCQkJeworCQkJCQkJCXBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WR1BVMTFfT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisJCQkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCisJCQkJY2FzZSBWR1BVMTI6CisJCQkJCQl7CisJCQkJCQkJcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZHUFUxMl9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKwkJCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZQUk9DMToKKwkJCQkJCXsKKwkJCQkJCQlwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVlBST0MxX09QX0NGR19DTFJfQUREUiwgdmFsdWUpOworCQkJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCWNhc2UgVlBST0MyOgorCQkJCQkJeworCQkJCQkJCXBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WUFJPQzJfT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisJCQkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCisJCQkJY2FzZSBWUFU6CisJCQkJCQl7CisJCQkJCQkJcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZQVV9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKwkJCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworICAgIGNhc2UgTERPX0JVQ0tfU0VUX1ZPTFRBR0U6CisgICAgeworICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvbHRhZ2UpOworICAgICAgICByZWdWYWwgPSBQTVVfUGFyYW1ldGVyX3RvX1ZhbHVlKEVOQyhjbWQsIHBMZG9CdWNrQ3RybC0+bW9kKSwgcExkb0J1Y2tDdHJsLT52b2x0YWdlKTsKKworICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgVlNJTTE6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZTSU0xX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBWU0lNMjoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlNJTTJfVk9TRUwsIHJlZ1ZhbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFZQQV9TVzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZV9ub2xvY2soUE1JQ19FTlVNX1JHX0JVQ0tfVlBBX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworCWNhc2UgVlhPMjI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZYTzIyX1ZPU0VMLCByZWdWYWwpOworICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKworCWNhc2UgTERPX0JVQ0tfR0VUX1ZPTFRBR0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT0xUQUdFCSpwTGRvQnVja0N0cmw9JihkYXRhLT5yUE1VTGRvQnVja0dldFZvbHQpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCQkJY2FzZSBWTU9ERU06CisJCSAgICAgICAgICAgICAgICB7CisJCSAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fREFfVk1PREVNX1ZPU0VMKTsKKwkJICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX01EOgorCQkgICAgICAgICAgICAgICAgeworCQkgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0RBX1ZTUkFNX01EX1ZPU0VMKTsKKwkJICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX09USEVSUzoKKwkJICAgICAgICAgICAgICAgIHsKKwkJICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9EQV9WU1JBTV9PVEhFUlNfVk9TRUwpOworCQkgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCSAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkdQVTExOgorCQkJCQkJeworCQkJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0RBX1ZHUFUxMV9WT1NFTCk7CisJCQkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCisJCQkJY2FzZSBWR1BVMTI6CisJCQkJCQl7CisJCQkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fREFfVkdQVTEyX1ZPU0VMKTsKKwkJCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFZTUkFNX1BST0MxOgorCQkgICAgICAgICAgICAgICAgeworCQkgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0RBX1ZTUkFNX1BST0MxX1ZPU0VMKTsKKwkJICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkgICAgICAgICAgICAgICAgfQorCQkgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCQljYXNlIFZQUk9DMToKKwkJCQkJCXsKKwkJCQkJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9EQV9WUFJPQzFfVk9TRUwpOworCQkJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCWNhc2UgVlNSQU1fUFJPQzI6CisJCSAgICAgICAgICAgICAgICB7CisJCSAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fREFfVlNSQU1fUFJPQzJfVk9TRUwpOworCQkgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCSAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVlBST0MyOgorCQkJCQkJeworCQkJCQkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0RBX1ZQUk9DMl9WT1NFTCk7CisJCQkJCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCisJCQkJY2FzZSBWUFU6CisJCQkJCQl7CisJCQkJCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fREFfVlBVX1ZPU0VMKTsKKwkJCQkJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJY2FzZSBWUEFfR0VUX1ZPTFRBR0VfTElTVDoKKwl7CisgICAgICAgICAgICBQTVVfQ1RSTF9WUEFfR0VUX1ZPTFRBR0VfTElTVCAqcFZwYUN0cmwgPSAmKGRhdGEtPnJQTVVWcGFHZXRWb2x0YWdlTGlzdCk7CisgICAgICAgICAgICBwVnBhQ3RybC0+cFZvbHRhZ2VMaXN0ID0gdnBhX3Zvc2VsOworICAgICAgICAgICAgcFZwYUN0cmwtPm51bWJlciA9IEdFVEFSUk5VTSh2cGFfdm9zZWwpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwl9CisJYnJlYWs7CisKKyAgICAgICAgY2FzZSBBRENfU0VUX1JRU1Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vUE1VX0NUUkxfQURDX1NFVF9SUVNUICpwQWRjQ3RybCA9ICYoZGF0YS0+clBNVUFkY1NldFJxc3QpOworICAgICAgICAgICAgaWYoKEFVWEFEQ19TdGF0dXMgIT0gQVVYQURDX1JFQURfSU5JVCkgJiYgKEFVWEFEQ19TdGF0dXMgIT0gQVVYQURDX1JFQURfREFUQSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUKDApOworCQlNT0RFTV9XQVJOSU5HX01FU1NBR0UoMCwgIkFEQ19TRVRfUlFTVCBlcnJvciIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gRW5hYmxlIENMS1NRIGZvciBNRCAoU1cgbW9kZSkgUkdfQ0xLU1FfRU5fQVVYX01ECisgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX0FVWEFEQ19SUVNUX0NIN19CWV9NRF9BRERSLCAoMHgxIDw8IFBNSUNfQVVYQURDX1JRU1RfQ0g3X0JZX01EX1NISUZUKSk7CisgICAgICAgICAgICBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfUkVRVUVTVDsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKworICAgICAgICBjYXNlIEFEQ19HRVRfUkRZX01EOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9BRENfR0VUX1JEWV9NRCAqcEFkY0N0cmwgPSAmKGRhdGEtPnJQTVVBZGNHZXRSZHlNZCk7CisgICAgICAgICAgICBwQWRjQ3RybC0+c3RhdHVzID0gKERDTF9CT09MKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0FVWEFEQ19BRENfUkRZX0NIN19CWV9NRCk7CisgICAgICAgICAgICBpZigoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9SRVFVRVNUKSAmJiAoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9CVVNZKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJVR19BU1NFUlQoMCk7CisJCU1PREVNX1dBUk5JTkdfTUVTU0FHRSgwLCAiQURDX0dFVF9SRFlfTUQgZXJyb3IiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYocEFkY0N0cmwtPnN0YXR1cyA9PSBEQ0xfVFJVRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBVVhBRENfU3RhdHVzID0gQVVYQURDX1JFQURfUkVBRFk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0JVU1k7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwljYXNlIEFEQ19HRVRfT1VUX01EOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9BRENfR0VUX09VVF9NRCAqcEFkY0N0cmwgPSAmKGRhdGEtPnJQTVVBZGNHZXRPdXRNZCk7CisgICAgICAgICAgICBpZihBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX1JFQURZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVCgwKTsKKwkJTU9ERU1fV0FSTklOR19NRVNTQUdFKDAsICJBRENfR0VUX09VVF9NRCBlcnJvciIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEFkY0N0cmwtPmRhdGEgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9BVVhBRENfQURDX09VVF9DSDdfQllfTUQpOworICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX0RBVEE7CisgICAgICAgICAgICAvLyBEaXNhYmxlIENMS1NRIGZvciBNRCAoU1cgbW9kZSkgUkdfQ0xLU1FfRU5fQVVYX01ECisKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwljYXNlIFRPUF9TRVRfU1JDTEtFTl9JTl9FTjoKKwl7CisgICAgCSAgICBQTVVfQ1RSTF9UT1BfU0VUX1NSQ0xLRU5fSU5fRU4gKnBUb3BTcmNsa2VuQ3RybCA9ICYoZGF0YS0+clBNVVRvcFNldFNyY2xrZW5JbkVuKTsKKworICAgICAgICAgICAgc3dpdGNoKHBUb3BTcmNsa2VuQ3RybC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgUE1JQ19TUkNMS0VOX0lOMDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19TUkNMS0VOX0lOMF9FTiwgcFRvcFNyY2xrZW5DdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBQTUlDX1NSQ0xLRU5fSU4xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1NSQ0xLRU5fSU4xX0VOLCBwVG9wU3JjbGtlbkN0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJfQorCWJyZWFrOworCisJY2FzZSBUT1BfU0VUX1NSQ0xLRU5fSU5fTU9ERToKKwl7CisgICAgCSAgICBQTVVfQ1RSTF9UT1BfU0VUX1NSQ0xLRU5fSU5fTU9ERSAqcFRvcFNyY2xrZW5DdHJsID0gJihkYXRhLT5yUE1VVG9wU2V0U3JjbGtlbkluTW9kZSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwVG9wU3JjbGtlbkN0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBNSUNfU1JDTEtFTl9JTjA6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfU1JDTEtFTl9JTjBfSFdfTU9ERSwgcFRvcFNyY2xrZW5DdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBQTUlDX1NSQ0xLRU5fSU4xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1NSQ0xLRU5fSU4xX0hXX01PREUsIHBUb3BTcmNsa2VuQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwl9CisJYnJlYWs7CisKKwljYXNlIExET19CVUNLX1NFVF9GUFdNOgorCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9GUFdNICpwTGRvQnVja1NldEZwd20gPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0RnB3bSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja1NldEZwd20tPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WTU9ERU1fRkNDTSwgcExkb0J1Y2tTZXRGcHdtLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVkdQVTExOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZHUFUxMV9GQ0NNLCBwTGRvQnVja1NldEZwd20tPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWR1BVMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVkdQVTEyX0ZDQ00sIHBMZG9CdWNrU2V0RnB3bS0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZQUk9DMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WUFJPQzFfRkNDTSwgcExkb0J1Y2tTZXRGcHdtLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlBST0MyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZQUk9DMl9GQ0NNLCBwTGRvQnVja1NldEZwd20tPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUFU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlBVX0ZDQ00sIHBMZG9CdWNrU2V0RnB3bS0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworCWNhc2UgTERPX0JVQ0tfR0VUX0ZQV006CisJeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX0ZQV00gKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tHZXRGcHdtKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVk1PREVNOgorCQkgICAgICAgICAgICAgICAgeworCQkgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+ZW5hYmxlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVk1PREVNX0ZDQ00pOworCQkgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCSAgICAgICAgICAgICAgICB9CisJCSAgICAgICAgICAgICAgICBicmVhazsKKworCQkJCWNhc2UgVkdQVTExOgorCQkJCQkJeworCQkJCQkJCXBMZG9CdWNrQ3RybC0+ZW5hYmxlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVkdQVTExX0ZDQ00pOworCQkJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCWNhc2UgVkdQVTEyOgorCQkJCQkJeworCQkJCQkJCXBMZG9CdWNrQ3RybC0+ZW5hYmxlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVkdQVTEyX0ZDQ00pOworCQkJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCWNhc2UgVlBST0MxOgorCQkJCQkJeworCQkJCQkJCXBMZG9CdWNrQ3RybC0+ZW5hYmxlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVlBST0MxX0ZDQ00pOworCQkJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCWNhc2UgVlBST0MyOgorCQkJCQkJeworCQkJCQkJCXBMZG9CdWNrQ3RybC0+ZW5hYmxlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVlBST0MyX0ZDQ00pOworCQkJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworCQkJCWNhc2UgVlBVOgorCQkJCQkJeworCQkJCQkJCXBMZG9CdWNrQ3RybC0+ZW5hYmxlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVlBVX0ZDQ00pOworCQkJCQkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJfQorCWJyZWFrOworCisJY2FzZSBEQ1hPX1NFVF9SRUdJU1RFUl9WQUxVRToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfRENYT19TRVRfUkVHSVNURVJfVkFMVUUJKnBDaHJDdHJsID0gJihkYXRhLT5yUE1VRGN4b1NldFJlZ2lzdGVyVmFsdWUpOworCisgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShwQ2hyQ3RybC0+b2Zmc2V0LCBwQ2hyQ3RybC0+dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRENYT19HRVRfUkVHSVNURVJfVkFMVUU6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0RDWE9fR0VUX1JFR0lTVEVSX1ZBTFVFCSpwQ2hyQ3RybD0mKGRhdGEtPnJQTVVEY3hvR2V0UmVnaXN0ZXJWYWx1ZSk7CisgICAgICAgICAgICBwQ2hyQ3RybC0+dmFsdWUgPSBwbWljX0VNX3JlZ19yZWFkKHBDaHJDdHJsLT5vZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1JU0NfU0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9NSVNDX1NFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmwgPSAmKGRhdGEtPnJQTVVNaXNjU2V0UmVnaXN0ZXJWYWx1ZSk7CisjaWYgZGVmaW5lZChEQ0xfUE1JQ19QRVJNSVNTSU9OX0NPTlRST0wpCisgICAgICAgICAgICBpZihkY2xfcG1pY19jaGVja19wZXJtaXNzaW9uKHBDaHJDdHJsLT5vZmZzZXQpPT0gRENMX1RSVUUpCisjZW5kaWYKKyAgICAgICAgICAgIHsKKwkJcG1pY19FTV9yZWdfd3JpdGUocENockN0cmwtPm9mZnNldCwgcENockN0cmwtPnZhbHVlKTsKKwkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgIH0KKyNpZiBkZWZpbmVkKERDTF9QTUlDX1BFUk1JU1NJT05fQ09OVFJPTCkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKwkJaWxsZWdhbF9taXNjX3NldF9yZWdpc3Rlcl92YWx1ZS5vZmZzZXQgPSBwQ2hyQ3RybC0+b2Zmc2V0OworCQlpbGxlZ2FsX21pc2Nfc2V0X3JlZ2lzdGVyX3ZhbHVlLnZhbHVlID0gcENockN0cmwtPnZhbHVlOworCQlERUJVR19BU1NFUlQoMCk7CisJCU1PREVNX1dBUk5JTkdfTUVTU0FHRSgwLCAiTUlTQ19TRVRfUkVHSVNURVJfVkFMVUUgZXJyb3IiKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUlTQ19HRVRfUkVHSVNURVJfVkFMVUU6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX01JU0NfR0VUX1JFR0lTVEVSX1ZBTFVFCSpwQ2hyQ3RybD0mKGRhdGEtPnJQTVVNaXNjR2V0UmVnaXN0ZXJWYWx1ZSk7CisgICAgICAgICAgICBwQ2hyQ3RybC0+dmFsdWUgPSBwbWljX0VNX3JlZ19yZWFkKHBDaHJDdHJsLT5vZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCWNhc2UgTERPX0JVQ0tfU0VUX1ZPQ0FMOgorCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0NBTCAqcExkb0J1Y2tTZXRWb2NhbCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWb2NhbCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja1NldFZvY2FsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUkYxOF9WT0NBTDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WUkYxOF9WT0NBTCwgcExkb0J1Y2tTZXRWb2NhbC0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTJfVk9DQUw6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlJGMTJfVk9DQUwsIHBMZG9CdWNrU2V0Vm9jYWwtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworCWNhc2UgTERPX0JVQ0tfR0VUX1ZPQ0FMOgorCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT0NBTCAqcExkb0J1Y2tHZXRWb2NhbCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWb2NhbCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0dldFZvY2FsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUkYxOF9WT0NBTDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrR2V0Vm9jYWwtPnZhbHVlID0gKERDTF9VSU5UMTYpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVlJGMThfVk9DQUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTJfVk9DQUw6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0dldFZvY2FsLT52YWx1ZSA9IChEQ0xfVUlOVDE2KWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX1ZSRjEyX1ZPQ0FMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworCisJY2FzZSBMRE9fQlVDS19TRVRfVk9UUklNOgorCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1RSSU0gKnBMZG9CdWNrU2V0Vm90cmltID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvdHJpbSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja1NldFZvdHJpbS0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfVk9UUklNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZSRjE4X1ZPVFJJTSwgcExkb0J1Y2tTZXRWb3RyaW0tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjEyX1ZPVFJJTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WUkYxMl9WT1RSSU0sIHBMZG9CdWNrU2V0Vm90cmltLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwl9CisJYnJlYWs7CisKKwljYXNlIExET19CVUNLX0dFVF9WT1RSSU06CisJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPVFJJTSAqcExkb0J1Y2tHZXRWb3RyaW0gPSAmKGRhdGEtPnJQTVVMZG9CdWNrR2V0Vm90cmltKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrR2V0Vm90cmltLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUkYxOF9WT1RSSU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0dldFZvdHJpbS0+dmFsdWUgPSAoRENMX1VJTlQxNilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19WUkYxOF9WT1RSSU0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTJfVk9UUklNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tHZXRWb3RyaW0tPnZhbHVlID0gKERDTF9VSU5UMTYpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVlJGMTJfVk9UUklNKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworCWNhc2UgTERPX0JVQ0tfU0VUX1ZQQV9PQ19TRE5fU1RBVFVTOgorCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WUEFfT0NfU0ROX1NUQVRVUyAqcExkb0J1Y2tTZXRWcGFPY1NkblN0YXR1cyA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWcGFPY1NkblN0YXR1cyk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja1NldFZwYU9jU2RuU3RhdHVzLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUEFfT0NfU0ROX1NUQVRVUzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZQQV9PQ19TRE5fU1RBVFVTLCBwTGRvQnVja1NldFZwYU9jU2RuU3RhdHVzLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwl9CisJYnJlYWs7CisKKwljYXNlIExET19CVUNLX0dFVF9WUEFfT0NfU0ROX1NUQVRVUzoKKwl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVlBBX09DX1NETl9TVEFUVVMgKnBMZG9CdWNrR2V0VnBhT2NTZG5TdGF0dXMgPSAmKGRhdGEtPnJQTVVMZG9CdWNrR2V0VnBhT2NTZG5TdGF0dXMpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tHZXRWcGFPY1NkblN0YXR1cy0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlBBX09DX1NETl9TVEFUVVM6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0dldFZwYU9jU2RuU3RhdHVzLT52YWx1ZSA9IChEQ0xfVUlOVDE2KWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVlBBX09DX1NETl9TVEFUVVMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJfQorCWJyZWFrOworCisJY2FzZSBMRE9fQlVDS19TRVRfVlBBX09DX1NETl9FTjoKKwl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVlBBX09DX1NETl9FTiAqcExkb0J1Y2tTZXRWcGFPY1NkbkVuID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZwYU9jU2RuRW4pOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tTZXRWcGFPY1NkbkVuLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUEFfT0NfU0ROX0VOOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVlBBX09DX1NETl9FTiwgcExkb0J1Y2tTZXRWcGFPY1NkbkVuLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwl9CisJYnJlYWs7CisKKwljYXNlIExET19CVUNLX0dFVF9WUEFfT0NfU0ROX0VOOgorCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WUEFfT0NfU0ROX0VOICpwTGRvQnVja0dldFZwYU9jU2RuRW4gPSAmKGRhdGEtPnJQTVVMZG9CdWNrR2V0VnBhT2NTZG5Fbik7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0dldFZwYU9jU2RuRW4tPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9PQ19TRE5fRU46CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0dldFZwYU9jU2RuRW4tPnZhbHVlID0gKERDTF9VSU5UMTYpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WUEFfT0NfU0ROX0VOKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworCWNhc2UgTERPX0JVQ0tfU0VUX09QX01PREU6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9PUF9NT0RFICpwTGRvQnVja1NldE9wTW9kZSA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRPcE1vZGUpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tTZXRPcE1vZGUtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJY2FzZSBWUkYxODoKKwkJeworCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF9PUF9NT0RFLCBwTGRvQnVja1NldE9wTW9kZS0+dmFsdWUpOworCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZSRjEyOgorCQl7CisJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjEyX09QX01PREUsIHBMZG9CdWNrU2V0T3BNb2RlLT52YWx1ZSk7CisJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVkZFMjhfT1BfTU9ERSwgcExkb0J1Y2tTZXRPcE1vZGUtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJY2FzZSBMRE9fQlVDS19TRVRfQlVDS19IV19PUF9NT0RFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfQlVDS19IV19PUF9NT0RFICpwTGRvQnVja1NldEJ1Y2tId09wTW9kZSA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRCdWNrSHdPcE1vZGUpOworCisgICAgCSAgICBrYWxfdWludDE2IHZhbHVlID0oKHBMZG9CdWNrU2V0QnVja0h3T3BNb2RlLT5odzBfb3BfbW9kZSA8PCBQTUlDX1JHX0JVQ0tfVlBVX0hXMF9PUF9NT0RFX1NISUZUKSB8CisJCQkgICAgICAgKHBMZG9CdWNrU2V0QnVja0h3T3BNb2RlLT5odzFfb3BfbW9kZSA8PCBQTUlDX1JHX0JVQ0tfVlBVX0hXMV9PUF9NT0RFX1NISUZUKSB8CisJCQkgICAgICAgKHBMZG9CdWNrU2V0QnVja0h3T3BNb2RlLT5odzJfb3BfbW9kZSA8PCBQTUlDX1JHX0JVQ0tfVlBVX0hXMl9PUF9NT0RFX1NISUZUKSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja1NldEJ1Y2tId09wTW9kZS0+bW9kKQorICAgICAgICAgICAgeworCQkJCWNhc2UgVlBVOgorCQkJCXsKKwkJCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZQVV9PUF9NT0RFX1NFVF9BRERSLCB2YWx1ZSk7CisJCQkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCQkJfQorCQkJCWJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCWNhc2UgTERPX0JVQ0tfQ0xSX0JVQ0tfSFdfT1BfTU9ERToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfQ0xSX0JVQ0tfSFdfT1BfTU9ERSAqcExkb0J1Y2tDbHJCdWNrSHdPcE1vZGUgPSAmKGRhdGEtPnJQTVVMZG9CdWNrQ2xyQnVja0h3T3BNb2RlKTsKKworICAgIAkgICAga2FsX3VpbnQxNiB2YWx1ZSA9KChwTGRvQnVja0NsckJ1Y2tId09wTW9kZS0+aHcwX29wX21vZGUgPDwgUE1JQ19SR19CVUNLX1ZQVV9IVzBfT1BfTU9ERV9TSElGVCkgfAorCQkJICAgICAgIChwTGRvQnVja0NsckJ1Y2tId09wTW9kZS0+aHcxX29wX21vZGUgPDwgUE1JQ19SR19CVUNLX1ZQVV9IVzFfT1BfTU9ERV9TSElGVCkgfAorCQkJICAgICAgIChwTGRvQnVja0NsckJ1Y2tId09wTW9kZS0+aHcyX29wX21vZGUgPDwgUE1JQ19SR19CVUNLX1ZQVV9IVzJfT1BfTU9ERV9TSElGVCkpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDbHJCdWNrSHdPcE1vZGUtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJCQljYXNlIFZQVToKKwkJCQl7CisJCQkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WUFVfT1BfTU9ERV9DTFJfQUREUiwgdmFsdWUpOworCQkJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQkJCX0KKwkJCQlicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwljYXNlIExET19CVUNLX1NFVF9WT1RFUl9WT0xUQUdFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9URVJfVk9MVEFHRSAqcExkb0J1Y2tTZXRWb3RlclZvbHRhZ2UgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0Vm90ZXJWb2x0YWdlKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrU2V0Vm90ZXJWb2x0YWdlLT5tb2QpCisgICAgICAgICAgICB7CisJCWNhc2UgVlMxOgorCQl7CisJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUzFfVk9URVJfVk9TRUwsIHBMZG9CdWNrU2V0Vm90ZXJWb2x0YWdlLT52YWx1ZSk7CisJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVlMyOgorCQl7CisJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUzJfVk9URVJfVk9TRUwsIHBMZG9CdWNrU2V0Vm90ZXJWb2x0YWdlLT52YWx1ZSk7CisJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUlTQ19HRVRfQ0lEOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9NSVNDX0dFVF9DSUQgKnBNaXNjR2V0Q3RybCA9ICYoZGF0YS0+clBNVU1pc2NHZXRDaWQpOworICAgICAgICAgICAgcE1pc2NHZXRDdHJsLT5jaWRfdmFsdWUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9IV0NJRCk7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICBicmVhazsKKyAgICB9CisjaWYgZGVmaW5lZChEQ0xfUE1JQ19NT0RVTEVfQ09OVFJPTCkKKwljdXJyZW50X2RjbF9oYW5kbGUgPSAwOworI2VuZGlmCisgICAgcmV0dXJuIHJldHVybl92YWw7CisKK30KKworZXh0ZXJuIHZvaWQgZGNsX3BtaWNfbW9kZW1fb25seV9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgUE1JQ19SZWFkX0FsbCh2b2lkKTsKKyNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQorZXh0ZXJuIHZvaWQgUE1JQ19SZWFkX0FsbCh2b2lkKTsKK2V4dGVybiB2b2lkIFBNSUNfVW5pdF9UZXN0KHZvaWQpOworI2VuZGlmCitEQ0xfVUlOVDMyIERSVl9SZWFkX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkcikKK3sKKyAgICByZXR1cm4gZGNsX3BtaWNfYnl0ZV9yZXR1cm4ocG1pY19hZGRyKTsKK30KKwordm9pZCBEUlZfV3JpdGVfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyLCBEQ0xfVUlOVDMyIHZhbHVlKQoreworICAgIGRjbF9wbWljX2J5dGVfd3JpdGUocG1pY19hZGRyLCB2YWx1ZSk7Cit9CisKK3ZvaWQgZGNsX3BtaWNfaW5pdCh2b2lkKXsKKyAgICBleHRlcm4gdm9pZCBwbWljX3dyYXBfZHVtcF9pbml0KHZvaWQpOworICAgIHBtdV9jb250cm9sX2hhbmRsZXIgPSBQTUlDX2NvbnRyb2xfaGFuZGxlcjsKKyAgICBwbXVfcGFyYW1ldGVyX3NpemUgPSBHRVRBUlJOVU0ocG11X3BhcmFtZXRlcl90YWJsZSk7CisKKyAgICBwbWljX3dyYXBfZHVtcF9pbml0KCk7CisKKwlkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2sgPSBrYWxfY3JlYXRlX3NwaW5sb2NrKCJwbWljIGFjY2VzcyIpOworCWRjbF9wbWljX2NvbnRyb2xfc3BpbmxvY2sgPSBrYWxfY3JlYXRlX3NwaW5sb2NrKCJwbWljIGNvbnRyb2wiKTsKKworI2lmICAhZGVmaW5lZChfX1NNQVJUX1BIT05FX01PREVNX18pCisgICAgRHJ2UFdSQVBfSW5pdCgpOworI2VuZGlmCisgICAgcG1pY19od192ZXJzaW9uID0gZGNsX3BtaWNfYnl0ZV9yZXR1cm4oTVQ2MzU5X0hXQ0lEKTsKKwlpZiAocG1pY19od192ZXJzaW9uID09IDB4MCkgeworCQlERUJVR19BU1NFUlQoMCk7CisJCU1PREVNX1dBUk5JTkdfTUVTU0FHRSgwLCAiR2V0IEhXQ0lEIGVycm9yIik7CisJfQorCisgICAgUE1JQ19SZWFkX0FsbCgpOworCisjaWYgIWRlZmluZWQoX19TTUFSVF9QSE9ORV9NT0RFTV9fKQorCisvKgorCWlmKERydlBXUkFQX0NoZWNrQ0lQSEVSKCkgPT0gMSkKKyAgICBkY2xfcG1pYzYzNTVfbW9kZW1fb25seV9pbml0KCk7CisJZWxzZQorKi8KKwlkY2xfcG1pY19tb2RlbV9vbmx5X2luaXQoKTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQorICAgIFBNSUNfUmVhZF9BbGwoKTsKKyAgICBQTUlDX1VuaXRfVGVzdCgpOworICAgIFBNSUNfUmVhZF9BbGwoKTsKKyNlbmRpZgorICAgIHBtaWNfaW5pdF9kb25lID0gRENMX1RSVUU7CisKK30KKwordm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpCit7CisgICAgdm9sYXRpbGUga2FsX3VpbnQzMiBpLGo7CisgICAgaj0wOworICAgIGZvciAoaSA9IDA7IGkgPCBQTUlDX01BWF9SRUdfTlVNOyBpICs9IDIpeworICAgICAgICBwbWljX3JlZ1tpXSA9IGRjbF9wbWljX2J5dGVfcmV0dXJuKGkpOworICAgIAl3aGlsZShqIT0weDIwMCl7aisrO30KKyAgICAJaj0wOworICAgIH0KK30KKyNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQordm9pZCBQTUlDX1VuaXRfVGVzdCh2b2lkKQoreworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9PTl9DVFJMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2RlID0gSFdfQ09OVFJPTDsgLy8gKFNXX0NPTlRST0xfQllfUkVHIC8gSFdfQ09OVFJPTCkKKwkJdmFsLm1vZCA9IFZNSVBJOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9PTl9DVFJMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWTUlQSTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKKwkJdmFsLm1vZCA9IFZQQV9TVzsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPTFRBR0UgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLm1vZD1WUEFfU1c7CisJCXZhbC52b2x0YWdlID0gUE1VX1ZPTFRfMDFfODAwMDAwX1Y7CisJCS8qICAgICBQTVVfVk9MVF8wMF81MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMF82MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMF83MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMF84MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMF85MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV8wMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV8xMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV8yMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV8zMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV80MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV81MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV82MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV83MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMV84MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMV85MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl8wMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl8xMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl8yMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl8zMDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl80MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl81MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl82MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl83MDAwMDBfViwgICAgICBQTVVfVk9MVF8wMl84MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wMl85MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18wMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wM18xMDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18yMDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wM18zMDAwMDBfViwgICAgICBQTVVfVk9MVF8wM180MDAwMDBfViwKKwkJCQlQTVVfVk9MVF8wM181MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM182MDAwMDBfViwgICAgICAqLworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2QgPSBWUEFfU1c7CisJCXZhbC5tb2RlID0gRk9SQ0VfUFdNX01PREU7IC8vIChBVVRPX01PREUgLyBGT1JDRV9QV01fTU9ERSkKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfTU9ERVNFVCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0NUUkwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLm1vZGUgPSBIV19DT05UUk9MOyAvLyAoU1dfQ09OVFJPTF9CWV9SRUcgLyBIV19DT05UUk9MKQorCQl2YWwubW9kID0gVlJGMTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fQ1RSTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fU0VMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5zZWwgPSBTUkNMS0VOX0lOMV9TRUw7CisJCS8qIFNSQ0xLRU5fSU4xX1NFTCAvIFNSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfT1JfU1JDTEtFTl9JTjJfU0VMLworCQkJU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTCAqLworCQl2YWwubW9kID0gVlJGMTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fU0VMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2QgPSBWUkYxOworCQl2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX01PREVTRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLnJlZ3ZhbCA9IDB4NzsgLy8gKDB4MH4weEYpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9TRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9DTFIgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLnJlZ3ZhbCA9IDB4NzsgLy8gKDB4MH4weEYpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgVlJGMV9TRVRfTU9ERVNFVF9DS1BETl9DTFIsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfVlJGMV9HRVRfTU9ERVNFVF9DS1BETiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQkvLyB2YWwucmVndmFsIHdpbGwgYmUgeW91ciByZXF1ZXN0IHZhbHVlICggbm8gbmVlZCBkbyBhbnkgc2hpZnQpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgVlJGMV9HRVRfTU9ERVNFVF9DS1BETiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fQ1RSTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kZSA9IEhXX0NPTlRST0w7IC8vIChTV19DT05UUk9MX0JZX1JFRyAvIEhXX0NPTlRST0wpCisJCXZhbC5tb2QgPSBWUkYyOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTl9DVFJMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTl9TRUwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLnNlbCA9IFNSQ0xLRU5fSU4xX1NFTDsKKwkJLyogU1JDTEtFTl9JTjFfU0VMIC8gU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMl9TRUwvCisJCQlTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMICovCisJCXZhbC5tb2QgPSBWUkYyOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTl9TRUwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKKwkJdmFsLm1vZCA9IFZSRjI7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2QgPSBWUkYxOworCQl2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX01PREVTRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1NSQ0xLX0VOX1NFTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuc2VsID0gU1JDTEtFTl9JTjFfU0VMOworCQkvKiBTUkNMS0VOX0lOMV9TRUwgLyBTUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX09SX1NSQ0xLRU5fSU4yX1NFTC8KKwkJCVNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwgKi8KKwkJdmFsLm1vZCA9IFZNSVBJOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9TUkNMS19FTl9TRUwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKKwkJdmFsLm1vZCA9IFZTSU0xOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLmVuYWJsZSA9IERDTF9UUlVFOyAvLyAoRENMX1RSVUUgLyBEQ0xfRkFMU0UpOworCQl2YWwubW9kID0gVlNJTTI7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2Q9VlNJTTE7CisJCXZhbC52b2x0YWdlID0gUE1VX1ZPTFRfMDFfODAwMDAwX1Y7CisJCS8qICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18wMDAwMDBfViwgICAqLworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2Q9VlNJTTI7CisJCXZhbC52b2x0YWdlID0gUE1VX1ZPTFRfMDFfODAwMDAwX1Y7CisJCS8qICBQTVVfVk9MVF8wMV84MDAwMDBfViwgICAgICBQTVVfVk9MVF8wM18wMDAwMDBfViwgICAqLworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9WT0xUQUdFLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KK30KKyNlbmRpZiAvLyBFbmQgb2YgI2lmIGRlZmluZWQoUE1JQ19VTklUX1RFU1QpCisKKyNlbmRpZiAvLyBFbmQgb2YgI2lmIGRlZmluZWQoUE1JQ182MzU5X1JFR19BUEkpCisKZGlmZiAtLWdpdCBhL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbWljNjM1OV9pbml0LmMgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTlfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTA3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTlfaW5pdC5jCkBAIC0wLDAgKzEsMTMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTgKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgIGRjbF9wbWljNjM1OV9pbml0LmMKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgICBNT0xZIFNvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgICBUaGlzIGZpbGUgaXMgZm9yIFBNSUMgNjM1OQorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBVcHBlciB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImluaXQuaCIKKyNpbmNsdWRlICJkY2wuaCIKKworZXh0ZXJuIERDTF9VSU5UMzIgRFJWX1JlYWRfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyKTsKK2V4dGVybiB2b2lkIERSVl9Xcml0ZV9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIsIERDTF9VSU5UMzIgdmFsdWUpOworCisjaWYgMAorLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworLyogdW5kZXIgY29uc3RydWN0aW9uICEqLworI2VuZGlmCisKKy8vIE1UNjM1OSBFQ09fRTEKK3ZvaWQgZGNsX3BtaWNfbW9kZW1fb25seV9pbml0KHZvaWQpCit7CisJLyogY2hhbmdlIFBNSUMgaW5pdGlhbCBzZXR0aW5nIHRvIHByZWxvYWRlciBmb3IgYWxsIFNXIGxvYWQuCisJICAgSWYgeW91IHdhbnQgdG8gY2hhbmdlIHBtaWMgc2V0dGluZywgcGxlYXNlIGNvbnRhY3QgUFQgTGVhZCAmIFBNSUMgQVAgU1cgKi8KKworfQpkaWZmIC0tZ2l0IGEvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU5cC5jIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU5cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YTUwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTlwLmMKQEAgLTAsMCArMSwzMjM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMTkKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgIGRjbF9wbWljNjM1OXAuYworICoKKyAqIFByb2plY3Q6CisgKiAtLS0tLS0tLQorICogICAgIE1PTFkgU29mdHdhcmUKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICAgIFRoaXMgZmlsZSBpcyBmb3IgUE1JQyA2MzU5UAorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEhJU1RPUlkKKyAqIEJlbG93IHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFVwcGVyIHRoaXMgbGluZSwgdGhpcyBwYXJ0IGlzIGNvbnRyb2xsZWQgYnkgUFZDUyBWTS4gRE8gTk9UIE1PRElGWSEhCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChGUEdBX0NUUCkKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSAicmVnX2Jhc2UuaCIKKyNpbmNsdWRlICJkcnZfY29tbS5oIgorI2luY2x1ZGUgImluaXQuaCIKKyNpbmNsdWRlICJkY2wuaCIKKyNpbmNsdWRlICJkY2xfcG11X3N3LmgiCisjaW5jbHVkZSAicG1pY193cmFwLmgiCisjaW5jbHVkZSAia2FsX3B1YmxpY19hcGkuaCIKKyNpbmNsdWRlICJ1c190aW1lci5oIgorI2luY2x1ZGUgImV2ZW50X2luZm9fdXRpbGl0eS5oIiAvLyBmb3IgTU9ERU1fV0FSTklOR19NRVNTQUdFCisKKyNpZiBkZWZpbmVkKFBNSUNfNjM1OVBfUkVHX0FQSSkKKworLy8gU3RhcnQgUE1JQ19VTklUX1RFU1QKKy8vI2RlZmluZSBQTUlDX1VOSVRfVEVTVAorLy8gQVJNIFNlY3Rpb24gUlcvUk8vWkkgVXNlIEludGVybmFsIFNSQU0KKyNkZWZpbmUgUE1JQ19JTlRFUk5BTF9TUkFNCisKKyNpZiAhZGVmaW5lZChfX0ZVRV9fKQorI2RlZmluZSBTQVZFQU5EU0VUSVJRTUFTSygpICAgICAgU2F2ZUFuZFNldElSUU1hc2soKQorI2RlZmluZSBSRVNUT1JFSVJRTUFTSyhtYXNrKSAgICAgUmVzdG9yZUlSUU1hc2sobWFzaykKKyNlbHNlIC8qZGVmaW5lZChfX0ZVRV9fKSovCisjZGVmaW5lIFNBVkVBTkRTRVRJUlFNQVNLKCkgICAgICAwCisjZGVmaW5lIFJFU1RPUkVJUlFNQVNLKG1hc2spICAgICB7fQorI2VuZGlmIC8qZGVmaW5lZChfX0ZVRV9fKSovCisKKyNkZWZpbmUgUE1JQ19NQVhfUkVHX05VTSAgICAgICAgICAgICAgICAweDNhMDAgLy8gMHgwMDAwfjB4M2EwMAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAgICAgICAgICAgICAgRXhwb3J0ZWQgQVBJcyAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2V4dGVybiBEQ0xfVUlOVDE2IGRjbF9wbWljX2J5dGVfcmV0dXJuX25vbG9jayhEQ0xfVUlOVDE2IGFkZHIpOworZXh0ZXJuIERDTF9VSU5UMTYgZGNsX3BtaWNfYnl0ZV9yZXR1cm4oRENMX1VJTlQxNiBhZGRyKTsKK2V4dGVybiB2b2lkIGRjbF9wbWljX2J5dGVfd3JpdGVfbm9sb2NrKERDTF9VSU5UMTYgYWRkciwgRENMX1VJTlQxNiB2YWwpOworZXh0ZXJuIHZvaWQgZGNsX3BtaWNfYnl0ZV93cml0ZShEQ0xfVUlOVDE2IGFkZHIsIERDTF9VSU5UMTYgdmFsKTsKK2V4dGVybiBEQ0xfQk9PTCBkY2xfcG1pY19pbml0X2RvbmVfcXVlcnkodm9pZCk7Cit0eXBlZGVmIGVudW0KK3sKKyAgICBBVVhBRENfUkVBRF9JTklUID0gMCwKKyAgICBBVVhBRENfUkVBRF9SRVFVRVNUID0gMSwKKyAgICBBVVhBRENfUkVBRF9SRUFEWSA9IDIsCisgICAgQVVYQURDX1JFQURfQlVTWSA9IDMsCisgICAgQVVYQURDX1JFQURfREFUQSA9IDQKK31BVVhBRENfRlNNOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGthbF91aW50MzIgY29tbWFuZF9mbGFnOworICAgIGthbF91aW50MzIgcmVnX2JlZm9yZV93cml0ZTsKKyAgICBrYWxfdWludDMyIHdyaXRlX3ZhbHVlOworICAgIGthbF91aW50MzIgYWRkcmVzc19vZmZzZXQ7CisgICAga2FsX3VpbnQzMiByZWdfbWFzazsKKyAgICBrYWxfdWludDMyIHJlZ19zaGlmdDsKKyAgICBrYWxfdWludDMyIHJlZ19hZGRyOworICAgIGthbF91aW50MzIgcmVnX2RhdGE7Cit9UE1JQ19SRUdfTE9HOworCisvKiBBbGwgYnVjay9sZG8gdXNlIHRoZSBzYW1lIHN3L2h3IE9QX0VOIGNvbnRyb2wsIHNvIHVzZSB2Y29yZSBhcyByZWZlcmVuY2UKKyAqIGJpdCBzaGlmdAorICovCit0eXBlZGVmIGVudW0KK3sKKwlSR19CVUNLX0xET19IVzBfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcwX09QX0VOX1NISUZULAorCVJHX0JVQ0tfTERPX0hXMV9PUF9FTl9TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzFfT1BfRU5fU0hJRlQsCisJUkdfQlVDS19MRE9fSFcyX09QX0VOX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXMl9PUF9FTl9TSElGVCwKKwlSR19CVUNLX0xET19IVzNfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFczX09QX0VOX1NISUZULAorCVJHX0JVQ0tfTERPX0hXNF9PUF9FTl9TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzRfT1BfRU5fU0hJRlQsCisJUkdfQlVDS19MRE9fSFc1X09QX0VOX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXNV9PUF9FTl9TSElGVCwKKwlSR19CVUNLX0xET19IVzZfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc2X09QX0VOX1NISUZULAorCVJHX0JVQ0tfTERPX0hXN19PUF9FTl9TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzdfT1BfRU5fU0hJRlQsCisJUkdfQlVDS19MRE9fSFc4X09QX0VOX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXOF9PUF9FTl9TSElGVCwKKwlSR19CVUNLX0xET19IVzlfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc5X09QX0VOX1NISUZULAorCVJHX0JVQ0tfTERPX0hXMTBfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxMF9PUF9FTl9TSElGVCwKKwlSR19CVUNLX0xET19IVzExX09QX0VOX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXMTFfT1BfRU5fU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxMl9PUF9FTl9TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzEyX09QX0VOX1NISUZULAorCVJHX0JVQ0tfTERPX0hXMTNfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxM19PUF9FTl9TSElGVCwKKwlSR19CVUNLX0xET19IVzE0X09QX0VOX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXMTRfT1BfRU5fU0hJRlQsCisJUkdfQlVDS19MRE9fU1dfT1BfRU5fU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfU1dfT1BfRU5fU0hJRlQsCit9UE1JQ19CVUNLX0xET19PUF9FTl9TSElGVF9FTlVNOworCit0eXBlZGVmIGVudW0KK3sKKwlSR19CVUNLX0xET19IVzBfT1BfQ0ZHX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXMF9PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxX09QX0NGR19TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzFfT1BfQ0ZHX1NISUZULAorCVJHX0JVQ0tfTERPX0hXMl9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcyX09QX0NGR19TSElGVCwKKwlSR19CVUNLX0xET19IVzNfT1BfQ0ZHX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXM19PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFc0X09QX0NGR19TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzRfT1BfQ0ZHX1NISUZULAorCVJHX0JVQ0tfTERPX0hXNV9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc1X09QX0NGR19TSElGVCwKKwlSR19CVUNLX0xET19IVzZfT1BfQ0ZHX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXNl9PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFc3X09QX0NGR19TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzdfT1BfQ0ZHX1NISUZULAorCVJHX0JVQ0tfTERPX0hXOF9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc4X09QX0NGR19TSElGVCwKKwlSR19CVUNLX0xET19IVzlfT1BfQ0ZHX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXOV9PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxMF9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxMF9PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxMV9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxMV9PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxMl9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxMl9PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxM19PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxM19PUF9DRkdfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxNF9PUF9DRkdfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxNF9PUF9DRkdfU0hJRlQsCit9UE1JQ19CVUNLX0xET19PUF9DRkdfU0hJRlRfRU5VTTsKKwordHlwZWRlZiBlbnVtCit7CisJUkdfQlVDS19MRE9fSFcwX09QX01PREVfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcwX09QX01PREVfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxX09QX01PREVfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxX09QX01PREVfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcyX09QX01PREVfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcyX09QX01PREVfU0hJRlQsCisJUkdfQlVDS19MRE9fSFczX09QX01PREVfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFczX09QX01PREVfU0hJRlQsCisJUkdfQlVDS19MRE9fSFc0X09QX01PREVfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc0X09QX01PREVfU0hJRlQsCisJUkdfQlVDS19MRE9fSFc1X09QX01PREVfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc1X09QX01PREVfU0hJRlQsCisJUkdfQlVDS19MRE9fSFc2X09QX01PREVfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc2X09QX01PREVfU0hJRlQsCisJUkdfQlVDS19MRE9fSFc3X09QX01PREVfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc3X09QX01PREVfU0hJRlQsCisJUkdfQlVDS19MRE9fSFc4X09QX01PREVfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc4X09QX01PREVfU0hJRlQsCisJUkdfQlVDS19MRE9fSFc5X09QX01PREVfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFc5X09QX01PREVfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxMF9PUF9NT0RFX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXMTBfT1BfTU9ERV9TSElGVCwKKwlSR19CVUNLX0xET19IVzExX09QX01PREVfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxMV9PUF9NT0RFX1NISUZULAorCVJHX0JVQ0tfTERPX0hXMTJfT1BfTU9ERV9TSElGVCA9IFBNSUNfUkdfQlVDS19WQ09SRV9IVzEyX09QX01PREVfU0hJRlQsCisJUkdfQlVDS19MRE9fSFcxM19PUF9NT0RFX1NISUZUID0gUE1JQ19SR19CVUNLX1ZDT1JFX0hXMTNfT1BfTU9ERV9TSElGVCwKKwlSR19CVUNLX0xET19IVzE0X09QX01PREVfU0hJRlQgPSBQTUlDX1JHX0JVQ0tfVkNPUkVfSFcxNF9PUF9NT0RFX1NISUZULAorfVBNSUNfQlVDS19MRE9fT1BfTU9ERV9TSElGVF9FTlVNOworCitBVVhBRENfRlNNIEFVWEFEQ19TdGF0dXMgPSBBVVhBRENfUkVBRF9JTklUOworUE1JQ19SRUdfTE9HIHBtaWNfcmVnX2xvZzsKKworI2lmIChkZWZpbmVkKF9fTVRLX1RBUkdFVF9fKSAmJiBkZWZpbmVkKFBNSUNfSU5URVJOQUxfU1JBTSkpCitfX2F0dHJpYnV0ZV9fICgoemVyb19pbml0KSkKKyNlbmRpZiAvKiBfX01US19UQVJHRVRfXyAqLworCitrYWxfdWludDggcG1pY19od192ZXJzaW9uOwora2FsX3VpbnQ4IHBtaWNfc3dfdmVyc2lvbjsKK2thbF91aW50MTYgcG1pY19yZWdbUE1JQ19NQVhfUkVHX05VTV07CitEQ0xfQk9PTCBwbWljX2luaXRfZG9uZSA9IERDTF9GQUxTRTsKKwora2FsX3NwaW5sb2NraWQgZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrOworZXh0ZXJuIGthbF9zcGlubG9ja2lkIGRjbF9wbWljX2NvbnRyb2xfc3BpbmxvY2s7CisKK2NvbnN0IFBNSUNfRkxBR19UQUJMRV9FTlRSWSBwbWljX2ZsYWdzX3RhYmxlW10gPQoreworICAgIHtNVDYzNTlfSFdDSUQsCQlQTUlDX0hXQ0lEX01BU0ssCQlQTUlDX0hXQ0lEX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X1NXQ0lELAkJUE1JQ19TV0NJRF9NQVNLLAkJUE1JQ19TV0NJRF9TSElGVCwJCX0sCisgICAge01UNjM1OV9UT1BfQ09OLAkJUE1JQ19SR19TUkNMS0VOX0lOMF9FTl9NQVNLLAkJUE1JQ19SR19TUkNMS0VOX0lOMF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9UT1BfQ09OLAkJUE1JQ19SR19TUkNMS0VOX0lOMV9FTl9NQVNLLAkJUE1JQ19SR19TUkNMS0VOX0lOMV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9UT1BfQ09OLAkJUE1JQ19SR19TUkNMS0VOX0lOMF9IV19NT0RFX01BU0ssCQlQTUlDX1JHX1NSQ0xLRU5fSU4wX0hXX01PREVfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfVE9QX0NPTiwJCVBNSUNfUkdfU1JDTEtFTl9JTjFfSFdfTU9ERV9NQVNLLAkJUE1JQ19SR19TUkNMS0VOX0lOMV9IV19NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVE9QX0VMUjEsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX0xJTUlUX1NFTF9NQVNLLAlQTUlDX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX0xJTUlUX1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVE9QX0VMUjIsCQlQTUlDX1JHX0JVQ0tfVlBBX1ZPU0VMX0xJTUlUX1NFTF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZQQV9WT1NFTF9MSU1JVF9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WQ09SRV9DT04xLAkJUE1JQ19SR19CVUNLX1ZDT1JFX1ZPU0VMX1NMRUVQX01BU0ssCQlQTUlDX1JHX0JVQ0tfVkNPUkVfVk9TRUxfU0xFRVBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WQ09SRV9EQkcwLAkJUE1JQ19EQV9WQ09SRV9WT1NFTF9NQVNLLAkJUE1JQ19EQV9WQ09SRV9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZDT1JFX0RCRzAsCQlQTUlDX0RBX1ZDT1JFX1ZPU0VMX0dSQVlfTUFTSywJCVBNSUNfREFfVkNPUkVfVk9TRUxfR1JBWV9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZDT1JFX0VMUjAsCQlQTUlDX1JHX0JVQ0tfVkNPUkVfVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WQ09SRV9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZNT0RFTV9DT04wLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZNT0RFTV9DT04wLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9MUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9MUF9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZNT0RFTV9DT04xLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUF9NQVNLLAlQTUlDX1JHX0JVQ0tfVk1PREVNX1ZPU0VMX1NMRUVQX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fRUxSMCwJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WTU9ERU1fVk9TRUxfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZNT0RFTV9PUF9FTiwJCVBNSUNfUkdfQlVDS19WTU9ERU1fU1dfT1BfRU5fTUFTSywJUE1JQ19SR19CVUNLX1ZNT0RFTV9TV19PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVk1PREVNX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzBfT1BfRU5fTUFTSywJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzBfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZNT0RFTV9PUF9FTiwJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcxX09QX0VOX01BU0ssCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcxX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMl9PUF9FTl9NQVNLLAlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMl9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVk1PREVNX09QX0VOX1NFVCwJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9FTl9TRVRfTUFTSywJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9FTl9TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZNT0RFTV9PUF9FTl9DTFIsCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfRU5fQ0xSX01BU0ssCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfRU5fQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzBfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcwX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVk1PREVNX09QX0NGRywJCVBNSUNfUkdfQlVDS19WTU9ERU1fSFcxX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMV9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZNT0RFTV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVk1PREVNX0hXMl9PUF9DRkdfTUFTSywJUE1JQ19SR19CVUNLX1ZNT0RFTV9IVzJfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVCwJUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9DRkdfU0VUX01BU0ssCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVk1PREVNX09QX0NGR19DTFIsCVBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX0NMUl9NQVNLLAlQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZNT0RFTV9EQkcwLAkJUE1JQ19EQV9WTU9ERU1fVk9TRUxfTUFTSywJCVBNSUNfREFfVk1PREVNX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVk1PREVNX0RCRzAsCQlQTUlDX0RBX1ZNT0RFTV9WT1NFTF9HUkFZX01BU0ssCQlQTUlDX0RBX1ZNT0RFTV9WT1NFTF9HUkFZX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fREJHMSwJCVBNSUNfREFfVk1PREVNX0VOX01BU0ssCQkJUE1JQ19EQV9WTU9ERU1fRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WTU9ERU1fREJHMSwJCVBNSUNfREFfVk1PREVNX1NUQl9NQVNLLAkJUE1JQ19EQV9WTU9ERU1fU1RCX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlMxX1ZPVEVSLAkJUE1JQ19SR19CVUNLX1ZTMV9WT1RFUl9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZTMV9WT1RFUl9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlMxX1ZPVEVSX1NFVCwJCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fU0VUX01BU0ssCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfRU5fU0VUX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUzFfVk9URVJfQ0xSLAkJUE1JQ19SR19CVUNLX1ZTMV9WT1RFUl9FTl9DTFJfTUFTSywJUE1JQ19SR19CVUNLX1ZTMV9WT1RFUl9FTl9DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZTMV9WT1RFUl9DRkcsCQlQTUlDX1JHX0JVQ0tfVlMxX1ZPVEVSX1ZPU0VMX01BU0ssCVBNSUNfUkdfQlVDS19WUzFfVk9URVJfVk9TRUxfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZTMl9DT04xLAkJUE1JQ19SR19CVUNLX1ZTMl9WT1NFTF9TTEVFUF9NQVNLLAlQTUlDX1JHX0JVQ0tfVlMyX1ZPU0VMX1NMRUVQX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUzJfVk9URVIsCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPVEVSX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPVEVSX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUzJfVk9URVJfU0VULAkJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9TRVRfTUFTSywJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9FTl9TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZTMl9WT1RFUl9DTFIsCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPVEVSX0VOX0NMUl9NQVNLLAlQTUlDX1JHX0JVQ0tfVlMyX1ZPVEVSX0VOX0NMUl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlMyX1ZPVEVSX0NGRywJCVBNSUNfUkdfQlVDS19WUzJfVk9URVJfVk9TRUxfTUFTSywJUE1JQ19SR19CVUNLX1ZTMl9WT1RFUl9WT1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlMyX0VMUjAsCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlMyX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBBX0NPTjAsCQlQTUlDX1JHX0JVQ0tfVlBBX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlBBX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBBX0NPTjEsCQlQTUlDX1JHX0JVQ0tfVlBBX1ZPU0VMX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlBBX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X1ZNT0RFTV9BTkFfQ09OMywJCVBNSUNfUkdfVk1PREVNX0ZDQ01fTUFTSywJCVBNSUNfUkdfVk1PREVNX0ZDQ01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfVlMyX0FOQV9DT04yLAkJUE1JQ19SR19WUzJfRlBXTV9NQVNLLAkJCVBNSUNfUkdfVlMyX0ZQV01fU0hJRlQsCQkJfSwKKyAgICB7TVQ2MzU5X1ZQQV9BTkFfQ09OMCwJCVBNSUNfUkdfVlBBX01PREVTRVRfTUFTSywJCVBNSUNfUkdfVlBBX01PREVTRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfTERPX1ZTUkFNX09USEVSU19FTFIsCVBNSUNfUkdfTERPX1ZTUkFNX09USEVSU19WT1NFTF9NQVNLLAlQTUlDX1JHX0xET19WU1JBTV9PVEhFUlNfVk9TRUxfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTFfQ09OMCwJCVBNSUNfUkdfTERPX1ZTSU0xX0VOX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTFfQ09OMCwJCVBNSUNfUkdfTERPX1ZTSU0xX0xQX01BU0ssCQlQTUlDX1JHX0xET19WU0lNMV9MUF9TSElGVCwJCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTFfT1BfRU4sCQlQTUlDX1JHX0xET19WU0lNMV9TV19PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WU0lNMV9TV19PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMV9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMF9PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WU0lNMV9IVzBfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTFfT1BfRU4sCQlQTUlDX1JHX0xET19WU0lNMV9IVzFfT1BfRU5fTUFTSywJUE1JQ19SR19MRE9fVlNJTTFfSFcxX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0xX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcyX09QX0VOX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0xX0hXMl9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMV9PUF9FTl9TRVQsCVBNSUNfUkdfTERPX1ZTSU0xX09QX0VOX1NFVF9NQVNLLAlQTUlDX1JHX0xET19WU0lNMV9PUF9FTl9TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTFfT1BfRU5fQ0xSLAlQTUlDX1JHX0xET19WU0lNMV9PUF9FTl9DTFJfTUFTSywJUE1JQ19SR19MRE9fVlNJTTFfT1BfRU5fQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0xX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0xX0hXMF9PUF9DRkdfTUFTSywJUE1JQ19SR19MRE9fVlNJTTFfSFcwX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMV9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMV9IVzFfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0xX0hXMV9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTFfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTFfSFcyX09QX0NGR19NQVNLLAlQTUlDX1JHX0xET19WU0lNMV9IVzJfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0xX09QX0NGR19TRVQsCVBNSUNfUkdfTERPX1ZTSU0xX09QX0NGR19TRVRfTUFTSywJUE1JQ19SR19MRE9fVlNJTTFfT1BfQ0ZHX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMV9PUF9DRkdfQ0xSLAlQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfQ0xSX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0xX09QX0NGR19DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTFfQ09OMCwJCVBNSUNfUkdfTERPX1ZTSU0xX09DRkJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0xX09DRkJfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTFfTU9OLAkJUE1JQ19EQV9WU0lNMV9PQ0ZCX0VOX01BU0ssCQlQTUlDX0RBX1ZTSU0xX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfVlNJTTFfQU5BX0NPTjAsCQlQTUlDX1JHX1ZTSU0xX1ZPU0VMX01BU0ssCQlQTUlDX1JHX1ZTSU0xX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMl9DT04wLAkJUE1JQ19SR19MRE9fVlNJTTJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMl9DT04wLAkJUE1JQ19SR19MRE9fVlNJTTJfTFBfTUFTSywJCVBNSUNfUkdfTERPX1ZTSU0yX0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0yX1NXX09QX0VOX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0yX1NXX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0yX09QX0VOLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcwX09QX0VOX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0yX0hXMF9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMV9PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WU0lNMl9IVzFfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTJfT1BfRU4sCQlQTUlDX1JHX0xET19WU0lNMl9IVzJfT1BfRU5fTUFTSywJUE1JQ19SR19MRE9fVlNJTTJfSFcyX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0yX09QX0VOX1NFVCwJUE1JQ19SR19MRE9fVlNJTTJfT1BfRU5fU0VUX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0yX09QX0VOX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMl9PUF9FTl9DTFIsCVBNSUNfUkdfTERPX1ZTSU0yX09QX0VOX0NMUl9NQVNLLAlQTUlDX1JHX0xET19WU0lNMl9PUF9FTl9DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlNJTTJfSFcwX09QX0NGR19NQVNLLAlQTUlDX1JHX0xET19WU0lNMl9IVzBfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0yX09QX0NGRywJCVBNSUNfUkdfTERPX1ZTSU0yX0hXMV9PUF9DRkdfTUFTSywJUE1JQ19SR19MRE9fVlNJTTJfSFcxX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WU0lNMl9IVzJfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfTERPX1ZTSU0yX0hXMl9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNJTTJfT1BfQ0ZHX1NFVCwJUE1JQ19SR19MRE9fVlNJTTJfT1BfQ0ZHX1NFVF9NQVNLLAlQTUlDX1JHX0xET19WU0lNMl9PUF9DRkdfU0VUX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTSU0yX09QX0NGR19DTFIsCVBNSUNfUkdfTERPX1ZTSU0yX09QX0NGR19DTFJfTUFTSywJUE1JQ19SR19MRE9fVlNJTTJfT1BfQ0ZHX0NMUl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMl9DT04wLAkJUE1JQ19SR19MRE9fVlNJTTJfT0NGQl9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlNJTTJfT0NGQl9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU0lNMl9NT04sCQlQTUlDX0RBX1ZTSU0yX09DRkJfRU5fTUFTSywJCVBNSUNfREFfVlNJTTJfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9WU0lNMl9BTkFfQ09OMCwJCVBNSUNfUkdfVlNJTTJfVk9TRUxfTUFTSywJCVBNSUNfUkdfVlNJTTJfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfTERPX1ZGRTI4X0NPTjAsCQlQTUlDX1JHX0xET19WRkUyOF9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfTERPX1ZGRTI4X0NPTjAsCQlQTUlDX1JHX0xET19WRkUyOF9MUF9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfTERPX1ZGRTI4X09QX0VOLAkJUE1JQ19SR19MRE9fVkZFMjhfU1dfT1BfRU5fTUFTSywJUE1JQ19SR19MRE9fVkZFMjhfU1dfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVkZFMjhfT1BfRU4sCQlQTUlDX1JHX0xET19WRkUyOF9IVzBfT1BfRU5fTUFTSywJUE1JQ19SR19MRE9fVkZFMjhfSFcwX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZGRTI4X09QX0VOLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcxX09QX0VOX01BU0ssCVBNSUNfUkdfTERPX1ZGRTI4X0hXMV9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WRkUyOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMl9PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WRkUyOF9IVzJfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVkZFMjhfT1BfRU5fU0VULAlQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9TRVRfTUFTSywJUE1JQ19SR19MRE9fVkZFMjhfT1BfRU5fU0VUX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZGRTI4X09QX0VOX0NMUiwJUE1JQ19SR19MRE9fVkZFMjhfT1BfRU5fQ0xSX01BU0ssCVBNSUNfUkdfTERPX1ZGRTI4X09QX0VOX0NMUl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WRkUyOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WRkUyOF9IVzBfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfTERPX1ZGRTI4X0hXMF9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVkZFMjhfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVkZFMjhfSFcxX09QX0NGR19NQVNLLAlQTUlDX1JHX0xET19WRkUyOF9IVzFfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZGRTI4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZGRTI4X0hXMl9PUF9DRkdfTUFTSywJUE1JQ19SR19MRE9fVkZFMjhfSFcyX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WRkUyOF9PUF9DRkdfU0VULAlQTUlDX1JHX0xET19WRkUyOF9PUF9DRkdfU0VUX01BU0ssCVBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVkZFMjhfT1BfQ0ZHX0NMUiwJUE1JQ19SR19MRE9fVkZFMjhfT1BfQ0ZHX0NMUl9NQVNLLAlQTUlDX1JHX0xET19WRkUyOF9PUF9DRkdfQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZGRTI4X0NPTjAsCQlQTUlDX1JHX0xET19WRkUyOF9PQ0ZCX0VOX01BU0ssCQlQTUlDX1JHX0xET19WRkUyOF9PQ0ZCX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZGRTI4X01PTiwJCVBNSUNfREFfVkZFMjhfT0NGQl9FTl9NQVNLLAkJUE1JQ19EQV9WRkUyOF9PQ0ZCX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxOF9DT04wLAkJUE1JQ19SR19MRE9fVlJGMThfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxOF9DT04wLAkJUE1JQ19SR19MRE9fVlJGMThfTFBfTUFTSywJCVBNSUNfUkdfTERPX1ZSRjE4X0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjE4X1NXX09QX0VOX01BU0ssCVBNSUNfUkdfTERPX1ZSRjE4X1NXX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjE4X09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMThfSFcwX09QX0VOX01BU0ssCVBNSUNfUkdfTERPX1ZSRjE4X0hXMF9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxOF9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMV9PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WUkYxOF9IVzFfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMThfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxOF9IVzJfT1BfRU5fTUFTSywJUE1JQ19SR19MRE9fVlJGMThfSFcyX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjE4X09QX0VOX1NFVCwJUE1JQ19SR19MRE9fVlJGMThfT1BfRU5fU0VUX01BU0ssCVBNSUNfUkdfTERPX1ZSRjE4X09QX0VOX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxOF9PUF9FTl9DTFIsCVBNSUNfUkdfTERPX1ZSRjE4X09QX0VOX0NMUl9NQVNLLAlQTUlDX1JHX0xET19WUkYxOF9PUF9FTl9DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMThfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMThfSFcwX09QX0NGR19NQVNLLAlQTUlDX1JHX0xET19WUkYxOF9IVzBfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjE4X09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjE4X0hXMV9PUF9DRkdfTUFTSywJUE1JQ19SR19MRE9fVlJGMThfSFcxX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxOF9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxOF9IVzJfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfTERPX1ZSRjE4X0hXMl9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMThfT1BfQ0ZHX1NFVCwJUE1JQ19SR19MRE9fVlJGMThfT1BfQ0ZHX1NFVF9NQVNLLAlQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfU0VUX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjE4X09QX0NGR19DTFIsCVBNSUNfUkdfTERPX1ZSRjE4X09QX0NGR19DTFJfTUFTSywJUE1JQ19SR19MRE9fVlJGMThfT1BfQ0ZHX0NMUl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxOF9DT04wLAkJUE1JQ19SR19MRE9fVlJGMThfT0NGQl9FTl9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfT0NGQl9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxOF9NT04sCQlQTUlDX0RBX1ZSRjE4X09DRkJfRU5fTUFTSywJCVBNSUNfREFfVlJGMThfT0NGQl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9MRE9fVlJGMTJfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjEyX0VOX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9MRE9fVlJGMTJfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjEyX0xQX01BU0ssCQlQTUlDX1JHX0xET19WUkYxMl9MUF9TSElGVCwJCX0sCisgICAge01UNjM1OV9MRE9fVlJGMTJfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxMl9TV19PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WUkYxMl9TV19PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxMl9PUF9FTiwJCVBNSUNfUkdfTERPX1ZSRjEyX0hXMF9PUF9FTl9NQVNLLAlQTUlDX1JHX0xET19WUkYxMl9IVzBfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMTJfT1BfRU4sCQlQTUlDX1JHX0xET19WUkYxMl9IVzFfT1BfRU5fTUFTSywJUE1JQ19SR19MRE9fVlJGMTJfSFcxX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjEyX09QX0VOLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcyX09QX0VOX01BU0ssCVBNSUNfUkdfTERPX1ZSRjEyX0hXMl9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxMl9PUF9FTl9TRVQsCVBNSUNfUkdfTERPX1ZSRjEyX09QX0VOX1NFVF9NQVNLLAlQTUlDX1JHX0xET19WUkYxMl9PUF9FTl9TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMTJfT1BfRU5fQ0xSLAlQTUlDX1JHX0xET19WUkYxMl9PUF9FTl9DTFJfTUFTSywJUE1JQ19SR19MRE9fVlJGMTJfT1BfRU5fQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjEyX09QX0NGRywJCVBNSUNfUkdfTERPX1ZSRjEyX0hXMF9PUF9DRkdfTUFTSywJUE1JQ19SR19MRE9fVlJGMTJfSFcwX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxMl9PUF9DRkcsCQlQTUlDX1JHX0xET19WUkYxMl9IVzFfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfTERPX1ZSRjEyX0hXMV9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMTJfT1BfQ0ZHLAkJUE1JQ19SR19MRE9fVlJGMTJfSFcyX09QX0NGR19NQVNLLAlQTUlDX1JHX0xET19WUkYxMl9IVzJfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZSRjEyX09QX0NGR19TRVQsCVBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19TRVRfTUFTSywJUE1JQ19SR19MRE9fVlJGMTJfT1BfQ0ZHX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxMl9PUF9DRkdfQ0xSLAlQTUlDX1JHX0xET19WUkYxMl9PUF9DRkdfQ0xSX01BU0ssCVBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMTJfQ09OMCwJCVBNSUNfUkdfTERPX1ZSRjEyX09DRkJfRU5fTUFTSywJCVBNSUNfUkdfTERPX1ZSRjEyX09DRkJfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlJGMTJfTU9OLAkJUE1JQ19EQV9WUkYxMl9PQ0ZCX0VOX01BU0ssCQlQTUlDX0RBX1ZSRjEyX09DRkJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfVlhPMjJfQU5BX0NPTjAsCQlQTUlDX1JHX1ZYTzIyX1ZPU0VMX01BU0ssCQlQTUlDX1JHX1ZYTzIyX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGMV9NT0RFX01BU0ssCVBNSUNfWE9fRVhUQlVGMV9NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGMV9FTl9NX01BU0ssCVBNSUNfWE9fRVhUQlVGMV9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGMl9NT0RFX01BU0ssCVBNSUNfWE9fRVhUQlVGMl9NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGMl9FTl9NX01BU0ssCVBNSUNfWE9fRVhUQlVGMl9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGM19NT0RFX01BU0ssCVBNSUNfWE9fRVhUQlVGM19NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGM19FTl9NX01BU0ssCVBNSUNfWE9fRVhUQlVGM19FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGNF9NT0RFX01BU0ssCVBNSUNfWE9fRVhUQlVGNF9NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRVhUQlVGNF9FTl9NX01BU0ssCVBNSUNfWE9fRVhUQlVGNF9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRU5CQl9NQU5fTUFTSywJCVBNSUNfWE9fRU5CQl9NQU5fU0hJRlQsCQkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMCwJCVBNSUNfWE9fRU5CQl9FTl9NX01BU0ssCQlQTUlDX1hPX0VOQkJfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDAsCQlQTUlDX1hPX0NMS1NFTF9NQU5fTUFTSywJUE1JQ19YT19DTEtTRUxfTUFOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMF9TRVQsCVBNSUNfRENYT19DVzAwX1NFVF9NQVNLLAlQTUlDX0RDWE9fQ1cwMF9TRVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzAwX0NMUiwJUE1JQ19EQ1hPX0NXMDBfQ0xSX01BU0ssCVBNSUNfRENYT19DVzAwX0NMUl9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDIsCQlQTUlDX1hPX0VOMzJLX01BTl9NQVNLLAkJUE1JQ19YT19FTjMyS19NQU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzAyLAkJUE1JQ19YT19FTjMyS19NX01BU0ssCQlQTUlDX1hPX0VOMzJLX01fU0hJRlQsCQkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMiwJCVBNSUNfUkdfWE9fQ0JBTktfUE9MX01BU0ssCVBNSUNfUkdfWE9fQ0JBTktfUE9MX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMiwJCVBNSUNfWE9fWE1PREVfTV9NQVNLLAkJUE1JQ19YT19YTU9ERV9NX1NISUZULAkJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDIsCQlQTUlDX1hPX1NUUlVQX01PREVfTUFTSywJUE1JQ19YT19TVFJVUF9NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMiwJCVBNSUNfUkdfWE9fUENUQVRfQ0NPTVBfTUFTSywJUE1JQ19SR19YT19QQ1RBVF9DQ09NUF9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDIsCQlQTUlDX1JHX1hPX1ZURVNUX1NFTF9NVVhfTUFTSywJUE1JQ19SR19YT19WVEVTVF9TRUxfTVVYX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMiwJCVBNSUNfWE9fU1dSU1RfTUFTSywJCVBNSUNfWE9fU1dSU1RfU0hJRlQsCQkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwMiwJCVBNSUNfWE9fQ0JBTktfU1lOQ19EWU5fTUFTSywJUE1JQ19YT19DQkFOS19TWU5DX0RZTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDIsCQlQTUlDX1hPX1BDVEFUX0VOX01BTl9NQVNLLAlQTUlDX1hPX1BDVEFUX0VOX01BTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDIsCQlQTUlDX1hPX1BDVEFUX0VOX01fTUFTSywJUE1JQ19YT19QQ1RBVF9FTl9NX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwNCwJCVBNSUNfWE9fQ0RBQ19GUE1fTUFTSywJCVBNSUNfWE9fQ0RBQ19GUE1fU0hJRlQsCQkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwNCwJCVBNSUNfWE9fQ0RBQ19MUE1fTUFTSywJCVBNSUNfWE9fQ0RBQ19MUE1fU0hJRlQsCQkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwNSwJCVBNSUNfWE9fMzJLRElWX05GUkFDX0ZQTV9NQVNLLAlQTUlDX1hPXzMyS0RJVl9ORlJBQ19GUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzA1LAkJUE1JQ19YT19DT0ZTVF9GUE1fTUFTSywJCVBNSUNfWE9fQ09GU1RfRlBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwNiwJCVBNSUNfWE9fMzJLRElWX05GUkFDX0xQTV9NQVNLLAlQTUlDX1hPXzMyS0RJVl9ORlJBQ19MUE1fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzA2LAkJUE1JQ19YT19DT0ZTVF9MUE1fTUFTSywJCVBNSUNfWE9fQ09GU1RfTFBNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9NQU5fTUFTSywJCVBNSUNfWE9fQ09SRV9NQU5fU0hJRlQsCQkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9FTl9NX01BU0ssCQlQTUlDX1hPX0NPUkVfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfVFVSQk9fRU5fU1lOQ19NX01BU0ssCVBNSUNfWE9fQ09SRV9UVVJCT19FTl9TWU5DX01fU0hJRlQsCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDcsCQlQTUlDX1JHX1hPX1BDVEFUX0lTX0VOX01BU0ssCQlQTUlDX1JHX1hPX1BDVEFUX0lTX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwNywJCVBNSUNfWE9fU1RBUlRVUF9FTl9NX01BU0ssCQlQTUlDX1hPX1NUQVJUVVBfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDcsCQlQTUlDX1JHX1hPX0NNUF9HU0VMX01BU0ssCQlQTUlDX1JHX1hPX0NNUF9HU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9WQlNFTF9TWU5DX01fTUFTSywJCVBNSUNfWE9fQ09SRV9WQlNFTF9TWU5DX01fU0hJRlQsCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDcsCQlQTUlDX1hPX0NPUkVfRlBNQklBU19FTl9NX01BU0ssCQlQTUlDX1hPX0NPUkVfRlBNQklBU19FTl9NX1NISUZULAl9LAorICAgIHtNVDYzNTlfRENYT19DVzA3LAkJUE1JQ19YT19DT1JFX0xQTUNGX1NZTkNfRlBNX01BU0ssCVBNSUNfWE9fQ09SRV9MUE1DRl9TWU5DX0ZQTV9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwNywJCVBNSUNfWE9fQ09SRV9MUE1DRl9TWU5DX0xQTV9NQVNLLAlQTUlDX1hPX0NPUkVfTFBNQ0ZfU1lOQ19MUE1fU0hJRlQsCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDcsCQlQTUlDX1JHX1hPX0NPUkVfTFBNX0lTRUxfTUFOX01BU0ssCVBNSUNfUkdfWE9fQ09SRV9MUE1fSVNFTF9NQU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDcsCQlQTUlDX1JHX1hPX0NPUkVfTFBNX0lEQUNfTUFTSywJCVBNSUNfUkdfWE9fQ09SRV9MUE1fSURBQ19TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDksCQlQTUlDX1hPXzMyS0RJVl9TV1JTVF9NQVNLLAkJUE1JQ19YT18zMktESVZfU1dSU1RfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzA5LAkJUE1JQ19YT18zMktESVZfUkFUSU9fTUFOX01BU0ssCQlQTUlDX1hPXzMyS0RJVl9SQVRJT19NQU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzA5LAkJUE1JQ19YT18zMktESVZfVEVTVF9FTl9NQVNLLAkJUE1JQ19YT18zMktESVZfVEVTVF9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDksCQlQTUlDX1hPX0NUTF9TWU5DX0JVRl9NQU5fTUFTSywJCVBNSUNfWE9fQ1RMX1NZTkNfQlVGX01BTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDksCQlQTUlDX1hPX0NUTF9TWU5DX0JVRl9FTl9NX01BU0ssCQlQTUlDX1hPX0NUTF9TWU5DX0JVRl9FTl9NX1NISUZULAl9LAorICAgIHtNVDYzNTlfRENYT19DVzA5LAkJUE1JQ19SR19YT19IVl9QQlVGX1ZTRVRfTUFTSywJCVBNSUNfUkdfWE9fSFZfUEJVRl9WU0VUX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwOSwJCVBNSUNfWE9fRVhUQlVGNl9NT0RFX01BU0ssCQlQTUlDX1hPX0VYVEJVRjZfTU9ERV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMDksCQlQTUlDX1hPX0VYVEJVRjZfRU5fTV9NQVNLLAkJUE1JQ19YT19FWFRCVUY2X0VOX01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzA5LAkJUE1JQ19YT19FWFRCVUY3X01PREVfTUFTSywJCVBNSUNfWE9fRVhUQlVGN19NT0RFX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0RDWE9fQ1cwOSwJCVBNSUNfWE9fRVhUQlVGN19FTl9NX01BU0ssCQlQTUlDX1hPX0VYVEJVRjdfRU5fTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9EQ1hPX0NXMTYsCQlQTUlDX1hPX1NUQVRJQ19BVVhPVVRfU0VMX01BU0ssCQlQTUlDX1hPX1NUQVRJQ19BVVhPVVRfU0VMX1NISUZULAl9LAorICAgIHtNVDYzNTlfRENYT19DVzE2LAkJUE1JQ19YT19BVVhPVVRfU0VMX01BU0ssCQlQTUlDX1hPX0FVWE9VVF9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfRENYT19DVzE3LAkJUE1JQ19YT19TVEFUSUNfQVVYT1VUX01BU0ssCQlQTUlDX1hPX1NUQVRJQ19BVVhPVVRfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQVVYQURDX0FEQzE2LAkJUE1JQ19BVVhBRENfQURDX09VVF9DSDdfQllfTURfTUFTSywJUE1JQ19BVVhBRENfQURDX09VVF9DSDdfQllfTURfU0hJRlQsCX0sCisgICAge01UNjM1OV9BVVhBRENfQURDMTYsCQlQTUlDX0FVWEFEQ19BRENfUkRZX0NIN19CWV9NRF9NQVNLLAlQTUlDX0FVWEFEQ19BRENfUkRZX0NIN19CWV9NRF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0FVWEFEQ19SUVNUMSwJCVBNSUNfQVVYQURDX1JRU1RfQ0g3X0JZX01EX01BU0ssCVBNSUNfQVVYQURDX1JRU1RfQ0g3X0JZX01EX1NISUZULAl9LAorICAgIHtNVDYzNTlfVlJGMThfQU5BX0NPTjAsCQlQTUlDX1JHX1ZSRjE4X1ZPQ0FMX01BU0ssCQlQTUlDX1JHX1ZSRjE4X1ZPQ0FMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X1ZSRjEyX0FOQV9DT04wLAkJUE1JQ19SR19WUkYxMl9WT0NBTF9NQVNLLAkJUE1JQ19SR19WUkYxMl9WT0NBTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9WUkYxOF9FTFJfMCwJCVBNSUNfUkdfVlJGMThfVk9UUklNX01BU0ssCQlQTUlDX1JHX1ZSRjE4X1ZPVFJJTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9WUkYxOF9FTFJfMiwJCVBNSUNfUkdfVlJGMTJfVk9UUklNX01BU0ssCQlQTUlDX1JHX1ZSRjEyX1ZPVFJJTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1RPUF9PQ19DT04wLAkJUE1JQ19SR19CVUNLX1ZQQV9PQ19TRE5fU1RBVFVTX01BU0ssCVBNSUNfUkdfQlVDS19WUEFfT0NfU0ROX1NUQVRVU19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVE9QX0VMUjAsCQlQTUlDX1JHX0JVQ0tfVlBBX09DX1NETl9FTl9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBBX09DX1NETl9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU1JBTV9NRF9FTFIsCQlQTUlDX1JHX0xET19WU1JBTV9NRF9WT1NFTF9NQVNLLAlQTUlDX1JHX0xET19WU1JBTV9NRF9WT1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU1JBTV9NRF9WT1NFTDAsCVBNSUNfUkdfTERPX1ZTUkFNX01EX1ZPU0VMX1NMRUVQX01BU0ssCVBNSUNfUkdfTERPX1ZTUkFNX01EX1ZPU0VMX1NMRUVQX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTUkFNX01EX1ZPU0VMMSwJUE1JQ19EQV9WU1JBTV9NRF9WT1NFTF9NQVNLLAkJUE1JQ19EQV9WU1JBTV9NRF9WT1NFTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9MRE9fVlNSQU1fT1RIRVJTX1ZPU0VMMCwJUE1JQ19SR19MRE9fVlNSQU1fT1RIRVJTX1ZPU0VMX1NMRUVQX01BU0ssCVBNSUNfUkdfTERPX1ZTUkFNX09USEVSU19WT1NFTF9TTEVFUF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU1JBTV9PVEhFUlNfVk9TRUwxLAlQTUlDX0RBX1ZTUkFNX09USEVSU19WT1NFTF9NQVNLLAlQTUlDX0RBX1ZTUkFNX09USEVSU19WT1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxOF9DT04xLAkJUE1JQ19SR19MRE9fVlJGMThfT1BfTU9ERV9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMThfT1BfTU9ERV9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WUkYxMl9DT04xLAkJUE1JQ19SR19MRE9fVlJGMTJfT1BfTU9ERV9NQVNLLAkJUE1JQ19SR19MRE9fVlJGMTJfT1BfTU9ERV9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WRkUyOF9DT04xLAkJUE1JQ19SR19MRE9fVkZFMjhfT1BfTU9ERV9NQVNLLAkJUE1JQ19SR19MRE9fVkZFMjhfT1BfTU9ERV9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVE9QX0VMUjEsCQlQTUlDX1JHX0JVQ0tfVkdQVTExX1ZPU0VMX0xJTUlUX1NFTF9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTExX1ZPU0VMX0xJTUlUX1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTExX0NPTjAsCQlQTUlDX1JHX0JVQ0tfVkdQVTExX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVkdQVTExX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTExX0NPTjAsCQlQTUlDX1JHX0JVQ0tfVkdQVTExX0xQX01BU0ssCQlQTUlDX1JHX0JVQ0tfVkdQVTExX0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTExX0NPTjEsCQlQTUlDX1JHX0JVQ0tfVkdQVTExX1ZPU0VMX1NMRUVQX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTFfVk9TRUxfU0xFRVBfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9FTFIwLAkJUE1JQ19SR19CVUNLX1ZHUFUxMV9WT1NFTF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZHUFUxMV9WT1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTExX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZHUFUxMV9TV19PUF9FTl9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTExX1NXX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTFfT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVkdQVTExX0hXMF9PUF9FTl9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTExX0hXMF9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTExX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZHUFUxMV9IVzFfT1BfRU5fTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMV9IVzFfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9PUF9FTiwJCVBNSUNfUkdfQlVDS19WR1BVMTFfSFcyX09QX0VOX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTFfSFcyX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTFfT1BfRU5fU0VULAlQTUlDX1JHX0JVQ0tfVkdQVTExX09QX0VOX1NFVF9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTExX09QX0VOX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTExX09QX0VOX0NMUiwJUE1JQ19SR19CVUNLX1ZHUFUxMV9PUF9FTl9DTFJfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMV9PUF9FTl9DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVkdQVTExX0hXMF9PUF9DRkdfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMV9IVzBfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTFfT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZHUFUxMV9IVzFfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTFfSFcxX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTExX09QX0NGRywJCVBNSUNfUkdfQlVDS19WR1BVMTFfSFcyX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTExX0hXMl9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9PUF9DRkdfU0VULAlQTUlDX1JHX0JVQ0tfVkdQVTExX09QX0NGR19TRVRfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMV9PUF9DRkdfU0VUX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTFfT1BfQ0ZHX0NMUiwJUE1JQ19SR19CVUNLX1ZHUFUxMV9PUF9DRkdfQ0xSX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTFfT1BfQ0ZHX0NMUl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTExX0RCRzAsCQlQTUlDX0RBX1ZHUFUxMV9WT1NFTF9NQVNLLAkJUE1JQ19EQV9WR1BVMTFfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTFfREJHMCwJCVBNSUNfREFfVkdQVTExX1ZPU0VMX0dSQVlfTUFTSywJCVBNSUNfREFfVkdQVTExX1ZPU0VMX0dSQVlfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9EQkcxLAkJUE1JQ19EQV9WR1BVMTFfRU5fTUFTSywJCQlQTUlDX0RBX1ZHUFUxMV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMV9EQkcxLAkJUE1JQ19EQV9WR1BVMTFfU1RCX01BU0ssCQlQTUlDX0RBX1ZHUFUxMV9TVEJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfVkdQVVZDT1JFX0FOQV9DT04yLAkJUE1JQ19SR19WR1BVMTFfRkNDTV9NQVNLLAkJUE1JQ19SR19WR1BVMTFfRkNDTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1RPUF9FTFIxLAkJUE1JQ19SR19CVUNLX1ZHUFUxMl9WT1NFTF9MSU1JVF9TRUxfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMV9WT1NFTF9MSU1JVF9TRUxfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMl9DT04wLAkJUE1JQ19SR19CVUNLX1ZHUFUxMl9FTl9NQVNLLAkJUE1JQ19SR19CVUNLX1ZHUFUxMl9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMl9DT04wLAkJUE1JQ19SR19CVUNLX1ZHUFUxMl9MUF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZHUFUxMl9MUF9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMl9DT04xLAkJUE1JQ19SR19CVUNLX1ZHUFUxMl9WT1NFTF9TTEVFUF9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTEyX1ZPU0VMX1NMRUVQX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfRUxSMCwJCVBNSUNfUkdfQlVDS19WR1BVMTJfVk9TRUxfTUFTSywJCVBNSUNfUkdfQlVDS19WR1BVMTJfVk9TRUxfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMl9PUF9FTiwJCVBNSUNfUkdfQlVDS19WR1BVMTJfU1dfT1BfRU5fTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMl9TV19PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTEyX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZHUFUxMl9IVzBfT1BfRU5fTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMl9IVzBfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMl9PUF9FTiwJCVBNSUNfUkdfQlVDS19WR1BVMTJfSFcxX09QX0VOX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTJfSFcxX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVkdQVTEyX0hXMl9PUF9FTl9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTEyX0hXMl9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTEyX09QX0VOX1NFVCwJUE1JQ19SR19CVUNLX1ZHUFUxMl9PUF9FTl9TRVRfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMl9PUF9FTl9TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMl9PUF9FTl9DTFIsCVBNSUNfUkdfQlVDS19WR1BVMTJfT1BfRU5fQ0xSX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTJfT1BfRU5fQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZHUFUxMl9IVzBfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTJfSFcwX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTEyX09QX0NGRywJCVBNSUNfUkdfQlVDS19WR1BVMTJfSFcxX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTEyX0hXMV9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMl9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVkdQVTEyX0hXMl9PUF9DRkdfTUFTSywJUE1JQ19SR19CVUNLX1ZHUFUxMl9IVzJfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfT1BfQ0ZHX1NFVCwJUE1JQ19SR19CVUNLX1ZHUFUxMl9PUF9DRkdfU0VUX01BU0ssCVBNSUNfUkdfQlVDS19WR1BVMTJfT1BfQ0ZHX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTEyX09QX0NGR19DTFIsCVBNSUNfUkdfQlVDS19WR1BVMTJfT1BfQ0ZHX0NMUl9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTEyX09QX0NGR19DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZHUFUxMl9EQkcwLAkJUE1JQ19EQV9WR1BVMTJfVk9TRUxfTUFTSywJCVBNSUNfREFfVkdQVTEyX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkdQVTEyX0RCRzAsCQlQTUlDX0RBX1ZHUFUxMl9WT1NFTF9HUkFZX01BU0ssCQlQTUlDX0RBX1ZHUFUxMl9WT1NFTF9HUkFZX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfREJHMSwJCVBNSUNfREFfVkdQVTEyX0VOX01BU0ssCQkJUE1JQ19EQV9WR1BVMTJfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WR1BVMTJfREJHMSwJCVBNSUNfREFfVkdQVTEyX1NUQl9NQVNLLAkJUE1JQ19EQV9WR1BVMTJfU1RCX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X1ZHUFVWQ09SRV9BTkFfQ09OOCwJCVBNSUNfUkdfVkdQVTEyX0ZDQ01fTUFTSywJCVBNSUNfUkdfVkdQVTEyX0ZDQ01fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfTERPX1ZTUkFNX1BST0MxX0VMUiwJCVBNSUNfUkdfTERPX1ZTUkFNX1BST0MxX1ZPU0VMX01BU0ssCVBNSUNfUkdfTERPX1ZTUkFNX1BST0MxX1ZPU0VMX1NISUZULAl9LAorICAgIHtNVDYzNTlfTERPX1ZTUkFNX1BST0MxX1ZPU0VMMCwJUE1JQ19SR19MRE9fVlNSQU1fUFJPQzFfVk9TRUxfU0xFRVBfTUFTSywJUE1JQ19SR19MRE9fVlNSQU1fUFJPQzFfVk9TRUxfU0xFRVBfU0hJRlQsCX0sCisgICAge01UNjM1OV9MRE9fVlNSQU1fUFJPQzFfVk9TRUwxLAlQTUlDX0RBX1ZTUkFNX1BST0MxX1ZPU0VMX01BU0ssCQlQTUlDX0RBX1ZTUkFNX1BST0MxX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVE9QX0VMUjEsCQlQTUlDX1JHX0JVQ0tfVlBST0MxX1ZPU0VMX0xJTUlUX1NFTF9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTExX1ZPU0VMX0xJTUlUX1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MxX0NPTjAsCQlQTUlDX1JHX0JVQ0tfVlBST0MxX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlBST0MxX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MxX0NPTjAsCQlQTUlDX1JHX0JVQ0tfVlBST0MxX0xQX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlBST0MxX0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MxX0NPTjEsCQlQTUlDX1JHX0JVQ0tfVlBST0MxX1ZPU0VMX1NMRUVQX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzFfVk9TRUxfU0xFRVBfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9FTFIwLAkJUE1JQ19SR19CVUNLX1ZQUk9DMV9WT1NFTF9NQVNLLAkJUE1JQ19SR19CVUNLX1ZQUk9DMV9WT1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MxX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZQUk9DMV9TV19PUF9FTl9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MxX1NXX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzFfT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVlBST0MxX0hXMF9PUF9FTl9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MxX0hXMF9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MxX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZQUk9DMV9IVzFfT1BfRU5fTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMV9IVzFfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9PUF9FTiwJCVBNSUNfUkdfQlVDS19WUFJPQzFfSFcyX09QX0VOX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzFfSFcyX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzFfT1BfRU5fU0VULAlQTUlDX1JHX0JVQ0tfVlBST0MxX09QX0VOX1NFVF9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MxX09QX0VOX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MxX09QX0VOX0NMUiwJUE1JQ19SR19CVUNLX1ZQUk9DMV9PUF9FTl9DTFJfTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMV9PUF9FTl9DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVlBST0MxX0hXMF9PUF9DRkdfTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMV9IVzBfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzFfT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZQUk9DMV9IVzFfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzFfSFcxX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MxX09QX0NGRywJCVBNSUNfUkdfQlVDS19WUFJPQzFfSFcyX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MxX0hXMl9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9PUF9DRkdfU0VULAlQTUlDX1JHX0JVQ0tfVlBST0MxX09QX0NGR19TRVRfTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMV9PUF9DRkdfU0VUX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzFfT1BfQ0ZHX0NMUiwJUE1JQ19SR19CVUNLX1ZQUk9DMV9PUF9DRkdfQ0xSX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzFfT1BfQ0ZHX0NMUl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MxX0RCRzAsCQlQTUlDX0RBX1ZQUk9DMV9WT1NFTF9NQVNLLAkJUE1JQ19EQV9WUFJPQzFfVk9TRUxfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzFfREJHMCwJCVBNSUNfREFfVlBST0MxX1ZPU0VMX0dSQVlfTUFTSywJCVBNSUNfREFfVlBST0MxX1ZPU0VMX0dSQVlfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9EQkcxLAkJUE1JQ19EQV9WUFJPQzFfRU5fTUFTSywJCQlQTUlDX0RBX1ZQUk9DMV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMV9EQkcxLAkJUE1JQ19EQV9WUFJPQzFfU1RCX01BU0ssCQlQTUlDX0RBX1ZQUk9DMV9TVEJfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfVlBST0MxX0FOQV9DT04zLAkJUE1JQ19SR19WUFJPQzFfRkNDTV9NQVNLLAkJUE1JQ19SR19WUFJPQzFfRkNDTV9TSElGVCwJCX0sCisgICAge01UNjM1OV9MRE9fVlNSQU1fUFJPQzJfRUxSLAlQTUlDX1JHX0xET19WU1JBTV9QUk9DMl9WT1NFTF9NQVNLLCBQTUlDX1JHX0xET19WU1JBTV9QUk9DMl9WT1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU1JBTV9QUk9DMl9WT1NFTDAsIAlQTUlDX1JHX0xET19WU1JBTV9QUk9DMl9WT1NFTF9TTEVFUF9NQVNLLAlQTUlDX1JHX0xET19WU1JBTV9QUk9DMl9WT1NFTF9TTEVFUF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0xET19WU1JBTV9QUk9DMl9WT1NFTDEsIAlQTUlDX0RBX1ZTUkFNX1BST0MyX1ZPU0VMX01BU0ssIAlQTUlDX0RBX1ZTUkFNX1BST0MyX1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVE9QX0VMUjEsCQlQTUlDX1JHX0JVQ0tfVlBST0MyX1ZPU0VMX0xJTUlUX1NFTF9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTExX1ZPU0VMX0xJTUlUX1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MyX0NPTjAsCQlQTUlDX1JHX0JVQ0tfVlBST0MyX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlBST0MyX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MyX0NPTjAsCQlQTUlDX1JHX0JVQ0tfVlBST0MyX0xQX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlBST0MyX0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MyX0NPTjEsCQlQTUlDX1JHX0JVQ0tfVlBST0MyX1ZPU0VMX1NMRUVQX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzJfVk9TRUxfU0xFRVBfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMl9FTFIwLAkJUE1JQ19SR19CVUNLX1ZQUk9DMl9WT1NFTF9NQVNLLCAJUE1JQ19SR19CVUNLX1ZQUk9DMl9WT1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MyX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZQUk9DMl9TV19PUF9FTl9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MyX1NXX09QX0VOX1NISUZULCB9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzJfT1BfRU4sCQlQTUlDX1JHX0JVQ0tfVlBST0MyX0hXMF9PUF9FTl9NQVNLLCBQTUlDX1JHX0JVQ0tfVlBST0MyX0hXMF9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MyX09QX0VOLAkJUE1JQ19SR19CVUNLX1ZQUk9DMl9IVzFfT1BfRU5fTUFTSywgUE1JQ19SR19CVUNLX1ZQUk9DMl9IVzFfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMl9PUF9FTiwJCVBNSUNfUkdfQlVDS19WUFJPQzJfSFcyX09QX0VOX01BU0ssIFBNSUNfUkdfQlVDS19WUFJPQzJfSFcyX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzJfT1BfRU5fU0VULAlQTUlDX1JHX0JVQ0tfVlBST0MyX09QX0VOX1NFVF9NQVNLLCBQTUlDX1JHX0JVQ0tfVlBST0MyX09QX0VOX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MyX09QX0VOX0NMUiwJUE1JQ19SR19CVUNLX1ZQUk9DMl9PUF9FTl9DTFJfTUFTSywgUE1JQ19SR19CVUNLX1ZQUk9DMl9PUF9FTl9DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMl9PUF9DRkcsIAlQTUlDX1JHX0JVQ0tfVlBST0MyX0hXMF9PUF9DRkdfTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMl9IVzBfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzJfT1BfQ0ZHLCAJUE1JQ19SR19CVUNLX1ZQUk9DMl9IVzFfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzJfSFcxX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MyX09QX0NGRywgCVBNSUNfUkdfQlVDS19WUFJPQzJfSFcyX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MyX0hXMl9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMl9PUF9DRkdfU0VULCAJUE1JQ19SR19CVUNLX1ZQUk9DMl9PUF9DRkdfU0VUX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzJfT1BfQ0ZHX1NFVF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MyX09QX0NGR19DTFIsIAlQTUlDX1JHX0JVQ0tfVlBST0MyX09QX0NGR19DTFJfTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMl9PUF9DRkdfQ0xSX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFJPQzJfREJHMCwJCVBNSUNfREFfVlBST0MyX1ZPU0VMX01BU0ssCQlQTUlDX0RBX1ZQUk9DMl9WT1NFTF9TSElGVCwgCX0sCisgICAge01UNjM1OV9CVUNLX1ZQUk9DMl9EQkcwLAkJUE1JQ19EQV9WUFJPQzJfVk9TRUxfR1JBWV9NQVNLLCAJUE1JQ19EQV9WUFJPQzJfVk9TRUxfR1JBWV9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MyX0RCRzEsCQlQTUlDX0RBX1ZQUk9DMl9FTl9NQVNLLCAJCVBNSUNfREFfVlBST0MyX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBST0MyX0RCRzEsCQlQTUlDX0RBX1ZQUk9DMl9TVEJfTUFTSywJCVBNSUNfREFfVlBST0MyX1NUQl9TSElGVCwJCX0sCisgICAge01UNjM1OV9WUFJPQzJfQU5BX0NPTjMsCQlQTUlDX1JHX1ZQUk9DMl9GQ0NNX01BU0ssCQlQTUlDX1JHX1ZQUk9DMl9GQ0NNX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVE9QX0VMUjEsCQlQTUlDX1JHX0JVQ0tfVlBVX1ZPU0VMX0xJTUlUX1NFTF9NQVNLLAlQTUlDX1JHX0JVQ0tfVkdQVTExX1ZPU0VMX0xJTUlUX1NFTF9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBVX0NPTjAsCQlQTUlDX1JHX0JVQ0tfVlBVX0VOX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlBVX0VOX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBVX0NPTjAsCQlQTUlDX1JHX0JVQ0tfVlBVX0xQX01BU0ssCQlQTUlDX1JHX0JVQ0tfVlBVX0xQX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBVX0NPTjEsCQlQTUlDX1JHX0JVQ0tfVlBVX1ZPU0VMX1NMRUVQX01BU0ssCVBNSUNfUkdfQlVDS19WUFVfVk9TRUxfU0xFRVBfU0hJRlQsIH0sCisgICAge01UNjM1OV9CVUNLX1ZQVV9FTFIwLAkJUE1JQ19SR19CVUNLX1ZQVV9WT1NFTF9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBVX1ZPU0VMX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFVfT1BfRU4sIAkJUE1JQ19SR19CVUNLX1ZQVV9TV19PUF9FTl9NQVNLLCBQTUlDX1JHX0JVQ0tfVlBVX1NXX09QX0VOX1NISUZULCB9LAorICAgIHtNVDYzNTlfQlVDS19WUFVfT1BfRU4sIAkJUE1JQ19SR19CVUNLX1ZQVV9IVzBfT1BfRU5fTUFTSywgUE1JQ19SR19CVUNLX1ZQVV9IVzBfT1BfRU5fU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQVV9PUF9FTiwgCQlQTUlDX1JHX0JVQ0tfVlBVX0hXMV9PUF9FTl9NQVNLLCBQTUlDX1JHX0JVQ0tfVlBVX0hXMV9PUF9FTl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBVX09QX0VOLCAJCVBNSUNfUkdfQlVDS19WUFVfSFcyX09QX0VOX01BU0ssIFBNSUNfUkdfQlVDS19WUFVfSFcyX09QX0VOX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFVfT1BfRU5fU0VULCAJUE1JQ19SR19CVUNLX1ZQVV9PUF9FTl9TRVRfTUFTSywgUE1JQ19SR19CVUNLX1ZQVV9PUF9FTl9TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQVV9PUF9FTl9DTFIsIAlQTUlDX1JHX0JVQ0tfVlBVX09QX0VOX0NMUl9NQVNLLCBQTUlDX1JHX0JVQ0tfVlBVX09QX0VOX0NMUl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBVX09QX0NGRywJCVBNSUNfUkdfQlVDS19WUFVfSFcwX09QX0NGR19NQVNLLAlQTUlDX1JHX0JVQ0tfVlBVX0hXMF9PUF9DRkdfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQVV9PUF9DRkcsCQlQTUlDX1JHX0JVQ0tfVlBVX0hXMV9PUF9DRkdfTUFTSywJUE1JQ19SR19CVUNLX1ZQVV9IVzFfT1BfQ0ZHX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFVfT1BfQ0ZHLAkJUE1JQ19SR19CVUNLX1ZQVV9IVzJfT1BfQ0ZHX01BU0ssCVBNSUNfUkdfQlVDS19WUFVfSFcyX09QX0NGR19TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBVX09QX0NGR19TRVQsIAlQTUlDX1JHX0JVQ0tfVlBVX09QX0NGR19TRVRfTUFTSywJUE1JQ19SR19CVUNLX1ZQVV9PUF9DRkdfU0VUX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFVfT1BfQ0ZHX0NMUiwgCVBNSUNfUkdfQlVDS19WUFVfT1BfQ0ZHX0NMUl9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBVX09QX0NGR19DTFJfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQVV9EQkcwLAkJUE1JQ19EQV9WUFVfVk9TRUxfTUFTSywgCVBNSUNfREFfVlBVX1ZPU0VMX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFVfREJHMCwJCVBNSUNfREFfVlBVX1ZPU0VMX0dSQVlfTUFTSywJUE1JQ19EQV9WUFVfVk9TRUxfR1JBWV9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBVX0RCRzEsCQlQTUlDX0RBX1ZQVV9FTl9NQVNLLAkJUE1JQ19EQV9WUFVfRU5fU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfQlVDS19WUFVfREJHMSwJCVBNSUNfREFfVlBVX1NUQl9NQVNLLAkJUE1JQ19EQV9WUFVfU1RCX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X1ZQVV9BTkFfQ09OMywJCVBNSUNfUkdfVlBVX0ZDQ01fTUFTSywJCVBNSUNfUkdfVlBVX0ZDQ01fU0hJRlQsIAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFVfT1BfTU9ERSwgCQlQTUlDX1JHX0JVQ0tfVlBST0MyX0hXMF9PUF9NT0RFX01BU0ssCVBNSUNfUkdfQlVDS19WUFJPQzJfSFcwX09QX01PREVfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQVV9PUF9NT0RFLCAJCVBNSUNfUkdfQlVDS19WUFJPQzJfSFcxX09QX01PREVfTUFTSywJUE1JQ19SR19CVUNLX1ZQUk9DMl9IVzFfT1BfTU9ERV9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVlBVX09QX01PREUsIAkJUE1JQ19SR19CVUNLX1ZQUk9DMl9IVzJfT1BfTU9ERV9NQVNLLAlQTUlDX1JHX0JVQ0tfVlBST0MyX0hXMl9PUF9NT0RFX1NISUZULAl9LAorICAgIHtNVDYzNTlfQlVDS19WUFVfT1BfTU9ERV9TRVQsIAlQTUlDX1JHX0JVQ0tfVlBVX09QX01PREVfU0VUX01BU0ssCVBNSUNfUkdfQlVDS19WUFVfT1BfTU9ERV9TRVRfU0hJRlQsCX0sCisgICAge01UNjM1OV9CVUNLX1ZQVV9PUF9NT0RFX0NMUiwgCVBNSUNfUkdfQlVDS19WUFVfT1BfTU9ERV9DTFJfTUFTSywJUE1JQ19SR19CVUNLX1ZQVV9PUF9NT0RFX0NMUl9TSElGVCwJfSwKKyAgICB7TVQ2MzU5X0JVQ0tfVkNPUkVfQ09OMCwgCQlQTUlDX1JHX0JVQ0tfVkNPUkVfRU5fTUFTSywJCVBNSUNfUkdfQlVDS19WQ09SRV9FTl9TSElGVCwJCX0sCisgICAge01UNjM1OV9CVUNLX1ZDT1JFX0NPTjAsIAkJUE1JQ19SR19CVUNLX1ZDT1JFX0xQX01BU0ssCQlQTUlDX1JHX0JVQ0tfVkNPUkVfTFBfU0hJRlQsCQl9LAorICAgIHtNVDYzNTlfVklPMThfQU5BX0NPTjAsIAkJUE1JQ19SR19WSU8xOF9WT0NBTF9NQVNLLAkJUE1JQ19SR19WSU8xOF9WT0NBTF9TSElGVCwJCX0sCisgICAge01UNjM1OV9WSU8xOF9BTkFfQ09OMCwgCQlQTUlDX1JHX1ZJTzE4X1ZPU0VMX01BU0ssCQlQTUlDX1JHX1ZJTzE4X1ZPU0VMX1NISUZULAkJfSwKKyAgICB7TVQ2MzU5X1ZSRjE4X0VMUl8xLCAJCQlQTUlDX1JHX1ZJTzE4X1ZPVFJJTV9NQVNLLAkJUE1JQ19SR19WSU8xOF9WT1RSSU1fU0hJRlQsCQl9LAorfTsKKyNpZiBkZWZpbmVkKERDTF9QTUlDX01PRFVMRV9DT05UUk9MKQorRENMX0hBTkRMRSBjdXJyZW50X2RjbF9oYW5kbGUgPSAwOworI2VuZGlmCisKKy8vI2RlZmluZSBEQ0xfUE1JQ19QRVJNSVNTSU9OX0NPTlRST0wKKyNpZiBkZWZpbmVkKERDTF9QTUlDX1BFUk1JU1NJT05fQ09OVFJPTCkKK1BNVV9DVFJMX01JU0NfU0VUX1JFR0lTVEVSX1ZBTFVFCWlsbGVnYWxfbWlzY19zZXRfcmVnaXN0ZXJfdmFsdWUgPSB7MH07CisjZW5kaWYKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICAgICAgICAgICAgICAgICAgV1JJVEUgQVBJcyAgICAgICAgICAgICAgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2lmIGRlZmluZWQoRENMX1BNSUNfUEVSTUlTU0lPTl9DT05UUk9MKQorRENMX0JPT0wgZGNsX3BtaWNfY2hlY2tfcGVybWlzc2lvbihrYWxfdWludDE2IG9mZnNldCkKK3sKKwlEQ0xfQk9PTCByZXQgPSBEQ0xfRkFMU0U7CisJa2FsX3VpbnQ4IGMgPSAoKG9mZnNldD4+OCkgJiAweEZGKTsKKworCXN3aXRjaChjKQorICAgIHsKKwljYXNlIDB4ODI6CisgICAgICAgIHsKKwkJLy9DTEsgOiBUT1BfQ0xLU1FfU0VUICgweDgyMjYpLFRPUF9DS1BETl9DT04wX0NMUiAoMHg4MjA0KSxUT1BfQ0xLU1EoMHg4MjI0KQorCQlpZihvZmZzZXQgPT0gMHg4MjI2IHx8IG9mZnNldCA9PSAweDgyMDQgfHwgb2Zmc2V0ID09IDB4ODIyNCkKKwkJCXJldD1EQ0xfVFJVRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCWNhc2UgMHg5MDoKKyAgICAgICAgeworCQkvL0xET19ESUc6IDB4OTAxQSwweDkwMUMsIDB4OTAwNiwgMHg5MDA4CisJCWlmKG9mZnNldCA9PSAweDkwMUEgfHwgb2Zmc2V0ID09IDB4OTAxQyB8fCBvZmZzZXQgPT0gMHg5MDA2IHx8IG9mZnNldCA9PSAweDkwMDgpCisJCQlyZXQ9RENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAweDk4OgorICAgICAgICB7CisJCS8vQXVkaW8gQW5hbG9nIDogMHg5ODAwfjB4OTg1MgorCQlpZihvZmZzZXQgPj0gMHg5ODAwICYmIG9mZnNldCA8PSAweDk4NTIpCisJCQlyZXQ9RENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwljYXNlIDB4OUE6CisgICAgICAgIHsKKwkJLy9BdWRpbyBEUkUgOiAweDlBMDAgfjB4OUEwQQorCQlpZihvZmZzZXQgPj0gMHg5QTAwICYmIG9mZnNldCA8PSAweDlBMEEpCisJCQlyZXQ9RENMX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwljYXNlIDB4RTA6CisJY2FzZSAweEUxOgorICAgICAgICB7CisJCS8vQXVkaW8gZGlnaXRhbCA6IDB4RTAwMCB+MHhFMTM4CisJCWlmKG9mZnNldCA+PSAweEUwMDAgJiYgb2Zmc2V0IDw9IDB4RTEzOCkKKwkJCXJldD1EQ0xfVFJVRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorCQlyZXQ9RENMX0ZBTFNFOworICAgICAgICBicmVhazsKKyAgICB9CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorLy8gV3JpdGUgV2hvbGUgQnl0ZXMKK3ZvaWQgZGNsX3BtaWNfYnl0ZV93cml0ZShEQ0xfVUlOVDE2IGFkZHIsIERDTF9VSU5UMTYgdmFsKQoreworCURDTF9VSU5UMzIgaWR4LCB0eXBlOworCisJa2FsX3Rha2Vfc3BpbmxvY2soZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrLCBLQUxfSU5GSU5JVEVfV0FJVCk7CisKKwl0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCWlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisgICAgaWYoYWRkciA8IFBNSUNfTUFYX1JFR19OVU0pCisgICAgeworICAgICAgICBwbWljX3JlZ1thZGRyXSA9IHZhbDsKKyAgICB9CisKKwlEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIGFkZHIsIHZhbCwgMHgwMCk7CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lLAorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKwlrYWxfZ2l2ZV9zcGlubG9jayhkY2xfcG1pY19hY2Nlc3Nfc3BpbmxvY2spOworfQorCisvLyBXcml0ZSBXaG9sZSBCeXRlcwordm9pZCBkY2xfcG1pY19ieXRlX3dyaXRlX25vbG9jayhEQ0xfVUlOVDE2IGFkZHIsIERDTF9VSU5UMTYgdmFsKQoreworCURDTF9VSU5UMzIgaWR4LCB0eXBlOworCisJaWYoIERjbFBNVV9HZXRIcnRGbGFnKCkhPSAwKSAvL2lmKEhSVCkKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfSFJUX0RPTUFJTjsKKwllbHNlCisJCXR5cGUgPSBQTUlDX0xPR19UWVBFX05PUk1BTF9ET01BSU47CisKKwlpZHggPSBwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisjZW5kaWYKKworCisgICAgaWYoYWRkciA8IFBNSUNfTUFYX1JFR19OVU0pCisgICAgeworICAgICAgICBwbWljX3JlZ1thZGRyXSA9IHZhbDsKKyAgICB9CisKKyAgICBEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIGFkZHIsIHZhbCwgMHgwMCk7CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lLAorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworfQorCisvLyBXcml0ZSByZWdpc3RlciBmaWVsZAordm9pZCBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDNjM1OV9GTEFHU19MSVNUX0VOVU0gZmxhZywgRENMX1VJTlQxNiBzZWwpCit7CisgICAgY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZICpwVGFibGUgPSBwbWljX2ZsYWdzX3RhYmxlOworCURDTF9VSU5UMzIgdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKwlEQ0xfVUlOVDMyIGlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisJa2FsX3Rha2Vfc3BpbmxvY2soZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrLCBLQUxfSU5GSU5JVEVfV0FJVCk7CisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisgICAgcG1pY19yZWdfbG9nLmNvbW1hbmRfZmxhZyA9IGZsYWc7CisgICAgcG1pY19yZWdfbG9nLnJlZ19iZWZvcmVfd3JpdGUgPSBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworICAgIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdICY9IH4ocFRhYmxlW2ZsYWddLm1hc2sgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKyAgICBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSB8PSAoKGthbF91aW50MTYpc2VsIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisKKyAgICBEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKworICAgIHBtaWNfcmVnX2xvZy53cml0ZV92YWx1ZSA9IHNlbDsKKyAgICBwbWljX3JlZ19sb2cuYWRkcmVzc19vZmZzZXQgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfbWFzayA9IHBUYWJsZVtmbGFnXS5tYXNrOworICAgIHBtaWNfcmVnX2xvZy5yZWdfc2hpZnQgPSBwVGFibGVbZmxhZ10uc2hpZnQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19hZGRyID0gcFRhYmxlW2ZsYWddLm9mZnNldDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2RhdGEgPSBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworCWthbF9naXZlX3NwaW5sb2NrKGRjbF9wbWljX2FjY2Vzc19zcGlubG9jayk7Cit9CisKKy8vIFdyaXRlIHJlZ2lzdGVyIGZpZWxkCit2b2lkIGRjbF9wbWljX2ZpZWxkX3dyaXRlX25vbG9jayhQTUlDNjM1OV9GTEFHU19MSVNUX0VOVU0gZmxhZywgRENMX1VJTlQxNiBzZWwpCit7CisgICAgY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZICpwVGFibGUgPSBwbWljX2ZsYWdzX3RhYmxlOworCURDTF9VSU5UMzIgdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKwlEQ0xfVUlOVDMyIGlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisgICAgcG1pY19yZWdfbG9nLmNvbW1hbmRfZmxhZyA9IGZsYWc7CisgICAgcG1pY19yZWdfbG9nLnJlZ19iZWZvcmVfd3JpdGUgPSBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworICAgIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdICY9IH4ocFRhYmxlW2ZsYWddLm1hc2sgPDwgcFRhYmxlW2ZsYWddLnNoaWZ0KTsKKyAgICBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XSB8PSAoKGthbF91aW50MTYpc2VsIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisKKyAgICBEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfV1JJVEUsIHBUYWJsZVtmbGFnXS5vZmZzZXQsIHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdLCAweDAwKTsKKworICAgIHBtaWNfcmVnX2xvZy53cml0ZV92YWx1ZSA9IHNlbDsKKyAgICBwbWljX3JlZ19sb2cuYWRkcmVzc19vZmZzZXQgPSBwVGFibGVbZmxhZ10ub2Zmc2V0OworICAgIHBtaWNfcmVnX2xvZy5yZWdfbWFzayA9IHBUYWJsZVtmbGFnXS5tYXNrOworICAgIHBtaWNfcmVnX2xvZy5yZWdfc2hpZnQgPSBwVGFibGVbZmxhZ10uc2hpZnQ7CisgICAgcG1pY19yZWdfbG9nLnJlZ19hZGRyID0gcFRhYmxlW2ZsYWddLm9mZnNldDsKKyAgICBwbWljX3JlZ19sb2cucmVnX2RhdGEgPSBwbWljX3JlZ1twVGFibGVbZmxhZ10ub2Zmc2V0XTsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZW5kX3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworICAgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uZHVyYXRpb25fdGltZSA9IHVzdF91c19kdXJhdGlvbihwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUsIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICAgICAgICAgICAgICAgICAgUkVBRCBBUElzICAgICAgICAgICAgICAgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBSZWFkIFdob2xlIEJ5dGVzCitEQ0xfVUlOVDE2IGRjbF9wbWljX2J5dGVfcmV0dXJuKERDTF9VSU5UMTYgYWRkcikKK3sKKyAgICBEQ0xfVUlOVDE2IHJlZ190ZW1wOworCURDTF9VSU5UMzIgaWR4LCB0eXBlOworCisJa2FsX3Rha2Vfc3BpbmxvY2soZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrLCBLQUxfSU5GSU5JVEVfV0FJVCk7CisKKwl0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCWlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisgICAgRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1JFQUQsIChEQ0xfVUlOVDMyKWFkZHIsIDB4MDAsICZyZWdfdGVtcCk7CisKKyAgICBpZihhZGRyIDwgUE1JQ19NQVhfUkVHX05VTSkKKyAgICB7CisgICAgICAgIHBtaWNfcmVnW2FkZHJdID0gcmVnX3RlbXA7CisgICAgfQorCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisJa2FsX2dpdmVfc3BpbmxvY2soZGNsX3BtaWNfYWNjZXNzX3NwaW5sb2NrKTsKKworICAgIHJldHVybiByZWdfdGVtcDsKK30KKworLy8gUmVhZCBXaG9sZSBCeXRlcworRENMX1VJTlQxNiBkY2xfcG1pY19ieXRlX3JldHVybl9ub2xvY2soRENMX1VJTlQxNiBhZGRyKQoreworICAgIERDTF9VSU5UMTYgcmVnX3RlbXA7CisJRENMX1VJTlQzMiBpZHgsIHR5cGU7CisKKwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9IUlRfRE9NQUlOOworCWVsc2UKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKworCWlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyNlbmRpZgorCisgICAgRHJ2UFdSQVBfV0FDUzAoUE1JQ19XUkFQX1JFQUQsIChEQ0xfVUlOVDMyKWFkZHIsIDB4MDAsICZyZWdfdGVtcCk7CisKKyAgICBpZihhZGRyIDwgUE1JQ19NQVhfUkVHX05VTSkKKyAgICB7CisgICAgICAgIHBtaWNfcmVnW2FkZHJdID0gcmVnX3RlbXA7CisgICAgfQorCisjaWYgZGVmaW5lZChEQ0xfUE1JQ19BQ0NFU1NfVElNRV9MT0cpCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0lOVEVSRkFDRV9EQkddW2lkeF0uc3RhcnRfdGltZSwgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlZ190ZW1wOworfQorCisvLyBSZWFkIHJlZ2lzdGVyIGZpZWxkCitEQ0xfVUlOVDE2IGRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQzYzNTlfRkxBR1NfTElTVF9FTlVNIGZsYWcpCit7CisgICAgY29uc3QgUE1JQ19GTEFHX1RBQkxFX0VOVFJZICpwVGFibGUgPSBwbWljX2ZsYWdzX3RhYmxlOworICAgIERDTF9VSU5UMTYgcmVnX3JldHVybiA9IDA7CisJRENMX1VJTlQzMiB0eXBlID0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOOworCURDTF9VSU5UMzIgaWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisKKwlpZiggRGNsUE1VX0dldEhydEZsYWcoKSE9IDApIC8vaWYoSFJUKQorCQl0eXBlID0gUE1JQ19MT0dfVFlQRV9IUlRfRE9NQUlOOworCWVsc2UKKwkJdHlwZSA9IFBNSUNfTE9HX1RZUEVfTk9STUFMX0RPTUFJTjsKKworCWlkeCA9IHBtaWNfYWNjZXNzX2R1cmF0aW9uX2luZGV4W3R5cGVdOworCisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworI2VuZGlmCisKKyAgICBEcnZQV1JBUF9XQUNTMChQTUlDX1dSQVBfUkVBRCwgcFRhYmxlW2ZsYWddLm9mZnNldCwgMHgwMCwgJnBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdKTsKKworICAgIHJlZ19yZXR1cm4gPSAoKHBtaWNfcmVnW3BUYWJsZVtmbGFnXS5vZmZzZXRdICYgKHBUYWJsZVtmbGFnXS5tYXNrIDw8IHBUYWJsZVtmbGFnXS5zaGlmdCkpID4+IHBUYWJsZVtmbGFnXS5zaGlmdCk7CisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmVuZF90aW1lID0gdXN0X2dldF9jdXJyZW50X3RpbWUoKTsKKyAgICBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19JTlRFUkZBQ0VfREJHXVtpZHhdLmR1cmF0aW9uX3RpbWUgPSB1c3RfdXNfZHVyYXRpb24ocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5zdGFydF90aW1lLAorCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfSU5URVJGQUNFX0RCR11baWR4XS5lbmRfdGltZSk7CisjZW5kaWYKKworICAgIHJldHVybiByZWdfcmV0dXJuOworfQorCisvLyBFeHBvcnRlZCBmb3IgRU0gdXNlZAordm9pZCBwbWljX0VNX3JlZ193cml0ZShrYWxfdWludDE2IHJlZywga2FsX3VpbnQxNiB2YWwpeworCWRjbF9wbWljX2J5dGVfd3JpdGVfbm9sb2NrKHJlZywgdmFsKTsKK30KKwora2FsX3VpbnQxNiBwbWljX0VNX3JlZ19yZWFkKGthbF91aW50MTYgcmVnKXsKKwlyZXR1cm4gIGRjbF9wbWljX2J5dGVfcmV0dXJuX25vbG9jayhyZWcpOworfQorCitjb25zdCBEQ0xfVUlOVDMyIHZwYV92b3NlbFtdID0KK3sKKyAgICBQTVVfVk9MVF8wMF81MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAwXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDBfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMF84MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAwXzkwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfMDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV8xMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzIwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfMzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMV80MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAxXzUwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDFfNjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMV83MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDFfOTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl8wMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzEwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl8zMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAyXzQwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfNTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wMl82MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAyXzcwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDJfODAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wMl85MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzAwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF8wM18yMDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUXzAzXzMwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfNDAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwKKyAgICBQTVVfVk9MVF8wM181MDAwMDBfViwgICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAzXzYwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsCit9OworCitjb25zdCBEQ0xfVUlOVDMyIHZzaW0xX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUX0lOVkFMSUQsICAgICAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUXzAxXzcwMDAwMF9WLAorICAgIFBNVV9WT0xUXzAxXzgwMDAwMF9WLCAgIFBNVV9WT0xUX0lOVkFMSUQsICBQTVVfVk9MVF9JTlZBTElELCAgIFBNVV9WT0xUX0lOVkFMSUQsCisgICAgUE1VX1ZPTFRfMDJfNzAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsCisgICAgUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgUE1VX1ZPTFRfSU5WQUxJRCwgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfSU5WQUxJRCwKK307CisKK2NvbnN0IERDTF9VSU5UMzIgdnhvMjJfdm9zZWxbXSA9Cit7CisgICAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgICAgIFBNVV9WT0xUXzAyXzIwMDAwMF9WLCAgUE1VX1ZPTFRfSU5WQUxJRCwgICBQTVVfVk9MVF9JTlZBTElELAorICAgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfSU5WQUxJRCwgIFBNVV9WT0xUX0lOVkFMSUQsICAgUE1VX1ZPTFRfSU5WQUxJRCwKK307CisKK2NvbnN0IERDTF9VSU5UMzIgdm1vZGVtX3Zvc2VsW10gPQoreworICAgIFBNVV9WT0xUXzAwXzUwMDAwMF9WLAlQTVVfVk9MVF8wMF81NTAwMDBfViwJUE1VX1ZPTFRfMDBfNjAwMDAwX1YsCVBNVV9WT0xUXzAwXzc1MDAwMF9WLAorICAgIFBNVV9WT0xUXzAwXzgwMDAwMF9WLAlQTVVfVk9MVF8wMF84NTAwMDBfViwJUE1VX1ZPTFRfSU5WQUxJRCwJUE1VX1ZPTFRfSU5WQUxJRCwKK307CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKworY29uc3QgRENMX1VJTlQzMiB2c3JhbV92bWRfdm9zZWxbXSA9Cit7CisgICAgUE1VX1ZPTFRfMDBfNTUwMDAwX1YsICAgUE1VX1ZPTFRfMDBfNjAwMDAwX1YsCVBNVV9WT0xUXzAwXzY1MDAwMF9WLAlQTVVfVk9MVF8wMF83NTAwMDBfViwKKyAgICBQTVVfVk9MVF8wMF84MDAwMDBfViwJUE1VX1ZPTFRfMDBfODUwMDAwX1YsCVBNVV9WT0xUX0lOVkFMSUQsCVBNVV9WT0xUX0lOVkFMSUQsCit9OworCitQTVVfUEFSQU1FVEVSX1RBQkxFX0VOVFJZIHBtdV9wYXJhbWV0ZXJfdGFibGVbXT0KK3sKKyAgICB7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWUEFfU1cpLAkJICAgIAl2cGFfdm9zZWwsCQlOVUxMLCAgIAlHRVRBUlJOVU0odnBhX3Zvc2VsKQkJCX0sCisgICAge0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlBBKSwJCSAgICAJdnBhX3Zvc2VsLAkJTlVMTCwgICAJR0VUQVJSTlVNKHZwYV92b3NlbCkJCQl9LAorICAgIHtFTkMoTERPX0JVQ0tfU0VUX1ZPTFRBR0UsIFZTSU0xKSwJCSAgICAJdnNpbTFfdm9zZWwsCQlOVUxMLCAgIAlHRVRBUlJOVU0odnNpbTFfdm9zZWwpCQkJfSwKKyAgICB7RU5DKExET19CVUNLX1NFVF9WT0xUQUdFLCBWU0lNMiksCQkgICAgCXZzaW0xX3Zvc2VsLAkJTlVMTCwgICAJR0VUQVJSTlVNKHZzaW0xX3Zvc2VsKQkgICAgCX0sCisgICAge0VOQyhMRE9fQlVDS19TRVRfVk9MVEFHRSwgVlhPMjIpLAkJICAgIAl2eG8yMl92b3NlbCwJCU5VTEwsICAgCUdFVEFSUk5VTSh2eG8yMl92b3NlbCkJICAgIAl9LAorICAgIHtFTkMoTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0UsIFZNT0RFTSksCQl2bW9kZW1fdm9zZWwsCQlOVUxMLAkJR0VUQVJSTlVNKHZtb2RlbV92b3NlbCkJCQl9LAorICAgIHtFTkMoTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0UsIFZTUkFNX01EKSwJCXZzcmFtX3ZtZF92b3NlbCwJTlVMTCwgICAJR0VUQVJSTlVNKHZzcmFtX3ZtZF92b3NlbCkJCX0sCisgICAge0VOQyhMRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRSwgVkdQVTExKSwJCXZtb2RlbV92b3NlbCwJCU5VTEwsCQlHRVRBUlJOVU0odm1vZGVtX3Zvc2VsKQkJCX0sCisgICAge0VOQyhMRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRSwgVkdQVTEyKSwJCXZtb2RlbV92b3NlbCwJCU5VTEwsCQlHRVRBUlJOVU0odm1vZGVtX3Zvc2VsKQkJCX0sCisgICAge0VOQyhMRE9fQlVDS19TRVRfU0xFRVBfVk9MVEFHRSwgVlNSQU1fUFJPQzEpLAl2c3JhbV92bWRfdm9zZWwsCU5VTEwsICAgCUdFVEFSUk5VTSh2c3JhbV92bWRfdm9zZWwpCQl9LAorICAgIHtFTkMoTERPX0JVQ0tfU0VUX1NMRUVQX1ZPTFRBR0UsIFZTUkFNX1BST0MyKSwJdnNyYW1fdm1kX3Zvc2VsLAlOVUxMLCAgIAlHRVRBUlJOVU0odnNyYW1fdm1kX3Zvc2VsKQkJfSwKK307CisKKworZXh0ZXJuIFBNVV9DT05UUk9MX0hBTkRMRVIgcG11X2NvbnRyb2xfaGFuZGxlcjsKKworRENMX1VJTlQxNiBwbXVfcGFyYW1ldGVyX3NpemUgPSAwOworCitEQ0xfU1RBVFVTIFBNSUNfY29udHJvbF9oYW5kbGVyKERDTF9IQU5ETEUgaGFuZGxlLERDTF9DVFJMX0NNRCBjbWQsRENMX0NUUkxfREFUQV9UICpkYXRhKQoreworICAgIERDTF9VSU5UMTYJcmVnVmFsOworICAgIERDTF9JTlQzMglyZXR1cm5fdmFsID0gU1RBVFVTX0ZBSUw7CisjaWYgZGVmaW5lZChEQ0xfUE1JQ19NT0RVTEVfQ09OVFJPTCkKKwljdXJyZW50X2RjbF9oYW5kbGUgPSBoYW5kbGU7CisjZW5kaWYKKyAgICBzd2l0Y2goY21kKQorICAgIHsKKyAgICAgICAgY2FzZSBMRE9fQlVDS19TRVRfRU46CS8vRW5hYmxlIGNvbnRyb2wgaW4gU1cgbW9kZQorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gKnBMZG9CdWNrQ3RybD0mKGRhdGEtPnJQTVVMZG9CdWNrU2V0RW4pOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCWNhc2UgVkNPUkU6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVkNPUkVfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZQQV9TVzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBCVUNLX1ZQQV9DS19TV19NT0RFIGJlZm9yZSBFbmFibGUgVlBBICovCisgICAgICAgICAgICAgICAgICAgIGlmIChwTGRvQnVja0N0cmwtPmVuYWJsZSA9PSAweDEpCisgICAgICAgICAgICAgICAgICAgIAlkY2xfcG1pY19ieXRlX3dyaXRlX25vbG9jayhNVDYzNTlfQlVDS19WUEFfREJHMSwgMHgzMDAwKTsKKworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZV9ub2xvY2soUE1JQ19FTlVNX1JHX0JVQ0tfVlBBX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisKKyAgICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBCVUNLX1ZQQV9DS19TV19NT0RFIGFmdGVyIERpc2FibGUgVlBBICovCisgICAgICAgICAgICAgICAgICAgIGlmIChwTGRvQnVja0N0cmwtPmVuYWJsZSA9PSAweDApCisgICAgICAgICAgICAgICAgICAgIAlkY2xfcG1pY19ieXRlX3dyaXRlX25vbG9jayhNVDYzNTlfQlVDS19WUEFfREJHMSwgMHgwKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgSU5UX1NUQVRVU19WU0lNMV9PQyBiZWZvcmUgRW5hYmxlIFZTSU0xICovCisgICAgICAgICAgICAgICAgICAgIGlmIChwTGRvQnVja0N0cmwtPmVuYWJsZSA9PSAweDEpCisgICAgICAgICAgICAgICAgICAgIAlkY2xfcG1pY19ieXRlX3dyaXRlX25vbG9jayhNVDYzNTlfTERPX1RPUF9JTlRfU1RBVFVTMSwgMHgxMCk7CisKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogQ2xlYXIgSU5UX1NUQVRVU19WU0lNMl9PQyBiZWZvcmUgRW5hYmxlIFZTSU0yICovCisgICAgICAgICAgICAgICAgICAgIGlmIChwTGRvQnVja0N0cmwtPmVuYWJsZSA9PSAweDEpCisgICAgICAgICAgICAgICAgICAgIAlkY2xfcG1pY19ieXRlX3dyaXRlX25vbG9jayhNVDYzNTlfTERPX1RPUF9JTlRfU1RBVFVTMSwgMHgyMCk7CisKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZGRTI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WRkUyOF9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZV9ub2xvY2soUE1JQ19FTlVNX1JHX0xET19WUkYxOF9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlJGMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZV9ub2xvY2soUE1JQ19FTlVNX1JHX0xET19WUkYxMl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZTMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZTMV9WT1RFUl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZTMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZTMl9WT1RFUl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZHUFUxMToKKwkJeworCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVkdQVTExX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVkdQVTEyOgorCQl7CisJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WR1BVMTJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWUFJPQzE6CisJCXsKKwkJCWRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZQUk9DMV9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZQUk9DMjoKKwkJeworCQkJZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVlBST0MyX0VOLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVlBVOgorCQl7CisJCQlkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUFVfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisJCWJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJY2FzZSBMRE9fQlVDS19TRVRfTFBfTU9ERV9TRVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9MUF9NT0RFX1NFVCAqcExkb0J1Y2tDdHJsID0mIChkYXRhLT5yUE1VTGRvQnVja1NldExwTW9kZVNldCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJY2FzZSBWQ09SRToKKwkJeyAgICAvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WQ09SRV9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZNT0RFTToKKwkJeyAgICAvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WTU9ERU1fTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlNJTTE6CisJCXsgICAgLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU0lNMV9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZTSU0yOgorCQl7ICAgIC8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTJfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWRkUyODoKKwkJeyAgICAvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZGRTI4X0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVlJGMTg6CisJCXsJLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WUkYxOF9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZSRjEyOgorCQl7ICAgIC8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMTJfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkgICAgICAgIGJyZWFrOworCisJCWNhc2UgVkdQVTExOgorCQl7ICAgIC8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZHUFUxMV9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZHUFUxMjoKKwkJeyAgICAvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WR1BVMTJfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWUFJPQzE6CisJCXsgICAgLy8gMSdiMDpOb3JtYWwgbW9kZSwgMSdiMTpMb3cgcG93ZXIgbW9kZQorCQkgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVlBST0MxX0xQLCBwTGRvQnVja0N0cmwtPmVuYWJsZSk7CisJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVlBST0MyOgorCQl7ICAgIC8vIDEnYjA6Tm9ybWFsIG1vZGUsIDEnYjE6TG93IHBvd2VyIG1vZGUKKwkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZQUk9DMl9MUCwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZQVToKKwkJeyAgICAvLyAxJ2IwOk5vcm1hbCBtb2RlLCAxJ2IxOkxvdyBwb3dlciBtb2RlCisJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUFVfTFAsIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJY2FzZSBMRE9fQlVDS19TRVRfT0NGQl9FTjoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09DRkJfRU4gKnBMZG9CdWNrQ3RybD0mKGRhdGEtPnJQTVVMZG9CdWNrU2V0T2NmYkVuKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNJTTFfT0NGQl9FTiwgcExkb0J1Y2tDdHJsLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIFZTSU0yOgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZTSU0yX09DRkJfRU4sIHBMZG9CdWNrQ3RybC0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCWNhc2UgTERPX0JVQ0tfR0VUX1ZPU0VMOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9TRUwgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWb3NlbCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZDT1JFOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WQ09SRV9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU1JBTV9PVEhFUlM6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fT1RIRVJTX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTUkFNX01EOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfTERPX1ZTUkFNX01EX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZHUFUxMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVkdQVTExX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZHUFUxMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVkdQVTEyX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTUkFNX1BST0MxOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfTERPX1ZTUkFNX1BST0MxX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZQUk9DMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVlBST0MxX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZTUkFNX1BST0MyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfTERPX1ZTUkFNX1BST0MyX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZQUk9DMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVlBST0MyX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZQVToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVlBVX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZJTzE4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVklPMThfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwljYXNlIExET19CVUNLX1NFVF9WT1NFTDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPU0VMICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0Vm9zZWwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWQ09SRToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZDT1JFX1ZPU0VMLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVk1PREVNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVk1PREVNX1ZPU0VMLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlNSQU1fT1RIRVJTOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9PVEhFUlNfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU1JBTV9NRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fTURfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWR1BVMTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WR1BVMTFfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWR1BVMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WR1BVMTJfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU1JBTV9QUk9DMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fUFJPQzFfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUFJPQzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUFJPQzFfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWU1JBTV9QUk9DMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fUFJPQzJfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUFJPQzI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUFJPQzJfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUFU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUFVfVk9TRUwsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWSU8xODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WSU8xOF9WT1NFTCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJY2FzZSBMRE9fQlVDS19HRVRfVk9TRUxfU0xFRVA6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1NFTF9TTEVFUCAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja0dldFZvc2VsU2xlZXApOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCWNhc2UgVkNPUkU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZDT1JFX1ZPU0VMX1NMRUVQKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlNSQU1fTUQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fTURfVk9TRUxfU0xFRVApOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZTUkFNX09USEVSUzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9PVEhFUlNfVk9TRUxfU0xFRVApOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZHUFUxMToKKwkJeworCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WR1BVMTFfVk9TRUxfU0xFRVApOworCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZHUFUxMjoKKwkJeworCQkJcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WR1BVMTJfVk9TRUxfU0xFRVApOworCQkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZTUkFNX1BST0MxOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfTERPX1ZTUkFNX1BST0MxX1ZPU0VMX1NMRUVQKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWUFJPQzE6CisJCXsKKwkJCXBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0JVQ0tfVlBST0MxX1ZPU0VMX1NMRUVQKTsKKwkJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWU1JBTV9QUk9DMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9QUk9DMl9WT1NFTF9TTEVFUCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlBST0MyOgorCQl7CisJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZQUk9DMl9WT1NFTF9TTEVFUCk7CisJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVlBVOgorCQl7CisJCQlwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZQVV9WT1NFTF9TTEVFUCk7CisJCQlyZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCWNhc2UgTERPX0JVQ0tfU0VUX1ZPU0VMX1NMRUVQOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9TRUxfU0xFRVAgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWb3NlbFNsZWVwKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZNT0RFTV9WT1NFTF9TTEVFUCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWU1JBTV9NRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fTURfVk9TRUxfU0xFRVAsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlNSQU1fT1RIRVJTOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9PVEhFUlNfVk9TRUxfU0xFRVAsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgVkdQVTExOgorCQl7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZHUFUxMV9WT1NFTF9TTEVFUCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZHUFUxMjoKKwkJeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WR1BVMTJfVk9TRUxfU0xFRVAsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWU1JBTV9QUk9DMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlNSQU1fUFJPQzFfVk9TRUxfU0xFRVAsIHBMZG9CdWNrQ3RybC0+Y29kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlBST0MxOgorCQl7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZQUk9DMV9WT1NFTF9TTEVFUCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZTUkFNX1BST0MyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WU1JBTV9QUk9DMl9WT1NFTF9TTEVFUCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWUFJPQzI6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVlBST0MyX1ZPU0VMX1NMRUVQLCBwTGRvQnVja0N0cmwtPmNvZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVlBVOgorCQl7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZQVV9WT1NFTF9TTEVFUCwgcExkb0J1Y2tDdHJsLT5jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwljYXNlIExET19CVUNLX1NFVF9NT0RFU0VUOgorCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9NT0RFU0VUICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0TW9kZXNldCk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9TVzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlX25vbG9jayhQTUlDX0VOVU1fUkdfVlBBX01PREVTRVQsIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVk1PREVNX0ZDQ00sIHBMZG9CdWNrQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlMyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZTMl9GUFdNLCBwTGRvQnVja0N0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVkdQVTExOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZHUFUxMV9GQ0NNLCBwTGRvQnVja0N0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVkdQVTEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZHUFUxMl9GQ0NNLCBwTGRvQnVja0N0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlBST0MxOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZQUk9DMV9GQ0NNLCBwTGRvQnVja0N0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlBST0MyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZQUk9DMl9GQ0NNLCBwTGRvQnVja0N0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlBVOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZQVV9GQ0NNLCBwTGRvQnVja0N0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJfQorCWJyZWFrOworCisJY2FzZSBMRE9fQlVDS19TRVRfT1BfRU46CisJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09QX0VOICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0T3BFbik7CisKKyAgICAJICAgIGthbF91aW50MTYgbW9kZSA9KChwTGRvQnVja0N0cmwtPnN3X29wX2VuICA8PCBSR19CVUNLX0xET19TV19PUF9FTl9TSElGVCkgfAorCQkJICAgICAgKHBMZG9CdWNrQ3RybC0+aHcwX29wX2VuIDw8IFJHX0JVQ0tfTERPX0hXMF9PUF9FTl9TSElGVCkgfAorCQkJICAgICAgKHBMZG9CdWNrQ3RybC0+aHcxX29wX2VuIDw8IFJHX0JVQ0tfTERPX0hXMV9PUF9FTl9TSElGVCkgfAorCQkJICAgICAgKHBMZG9CdWNrQ3RybC0+aHcyX29wX2VuIDw8IFJHX0JVQ0tfTERPX0hXMl9PUF9FTl9TSElGVCkpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tDdHJsLT5tb2QpCisgICAgICAgICAgICB7CisJCWNhc2UgVkNPUkU6CisJCXsKKwkJcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZDT1JFX09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKwkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZNT0RFTToKKwkJeworCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVlNJTTE6CisJCXsKKwkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0xX09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWU0lNMjoKKwkJeworCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlNJTTJfT1BfRU5fU0VUX0FERFIsIG1vZGUpOworCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVkZFMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjE4X09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWUkYxMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjEyX09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWR1BVMTE6CisJCXsKKwkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WR1BVMTFfT1BfRU5fU0VUX0FERFIsIG1vZGUpOworCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZHUFUxMjoKKwkJeworCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZHUFUxMl9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVlBST0MxOgorCQl7CisJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVlBST0MxX09QX0VOX1NFVF9BRERSLCBtb2RlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWUFJPQzI6CisJCXsKKwkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WUFJPQzJfT1BfRU5fU0VUX0FERFIsIG1vZGUpOworCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZQVToKKwkJeworCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZQVV9PUF9FTl9TRVRfQUREUiwgbW9kZSk7CisJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwl9CisJYnJlYWs7CisKKwljYXNlIExET19CVUNLX0NMUl9PUF9FTjoKKwl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT1BfRU4gKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRPcEVuKTsKKworICAgIAkgICAga2FsX3VpbnQxNiBtb2RlID0oKHBMZG9CdWNrQ3RybC0+c3dfb3BfZW4gIDw8IFJHX0JVQ0tfTERPX1NXX09QX0VOX1NISUZUKSB8CisJCQkgICAgICAocExkb0J1Y2tDdHJsLT5odzBfb3BfZW4gPDwgUkdfQlVDS19MRE9fSFcwX09QX0VOX1NISUZUKSB8CisJCQkgICAgICAocExkb0J1Y2tDdHJsLT5odzFfb3BfZW4gPDwgUkdfQlVDS19MRE9fSFcxX09QX0VOX1NISUZUKSB8CisJCQkgICAgICAocExkb0J1Y2tDdHJsLT5odzJfb3BfZW4gPDwgUkdfQlVDS19MRE9fSFcyX09QX0VOX1NISUZUKSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJY2FzZSBWQ09SRToKKwkJeworCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZDT1JFX09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisJICAgIAorCQljYXNlIFZNT0RFTToKKwkJeworCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZNT0RFTV9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVlNJTTE6CisJCXsKKwkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0xX09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWU0lNMjoKKwkJeworCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlNJTTJfT1BfRU5fQ0xSX0FERFIsIG1vZGUpOworCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVkZFMjg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WRkUyOF9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjE4X09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWUkYxMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjEyX09QX0VOX0NMUl9BRERSLCBtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWR1BVMTE6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZHUFUxMV9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWR1BVMTI6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZHUFUxMl9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWUFJPQzE6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZQUk9DMV9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWUFJPQzI6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZQUk9DMl9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWUFU6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZQVV9PUF9FTl9DTFJfQUREUiwgbW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworCWNhc2UgTERPX0JVQ0tfU0VUX0hXX09QX0NGRzoKKwl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfSFdfT1BfQ0ZHICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0SHdPcCk7CisKKyAgICAJICAgIGthbF91aW50MTYgdmFsdWUgPSgocExkb0J1Y2tDdHJsLT5odzBfb3BfY2ZnIDw8IFJHX0JVQ0tfTERPX0hXMF9PUF9DRkdfU0hJRlQpIHwKKwkJCSAgICAgICAocExkb0J1Y2tDdHJsLT5odzFfb3BfY2ZnIDw8IFJHX0JVQ0tfTERPX0hXMV9PUF9DRkdfU0hJRlQpIHwKKwkJCSAgICAgICAocExkb0J1Y2tDdHJsLT5odzJfb3BfY2ZnIDw8IFJHX0JVQ0tfTERPX0hXMl9PUF9DRkdfU0hJRlQpKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQljYXNlIFZDT1JFOgorCQl7CisJCXBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WQ09SRV9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKwkJcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WTU9ERU1fT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlNJTTE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WU0lNMV9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWU0lNMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZTSU0yX09QX0NGR19TRVRfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZGRTI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVkZFMjhfT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlJGMTg6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxOF9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWUkYxMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZSRjEyX09QX0NGR19TRVRfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZHUFUxMToKKwkJeworCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZHUFUxMV9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWR1BVMTI6CisJCXsKKwkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WR1BVMTJfT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVlBST0MxOgorCQl7CisJCSAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVlBST0MxX09QX0NGR19TRVRfQUREUiwgdmFsdWUpOworCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZQUk9DMjoKKwkJeworCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZQUk9DMl9PUF9DRkdfU0VUX0FERFIsIHZhbHVlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWUFU6CisJCXsKKwkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WUFVfT1BfQ0ZHX1NFVF9BRERSLCB2YWx1ZSk7CisJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwl9CisJYnJlYWs7CisKKwljYXNlIExET19CVUNLX0NMUl9IV19PUF9DRkc6CisJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfQ0xSX0hXX09QX0NGRyAqcExkb0J1Y2tDdHJsID0gJihkYXRhLT5yUE1VTGRvQnVja0Nsckh3T3ApOworCisgICAgCSAgICBrYWxfdWludDE2IHZhbHVlID0oKHBMZG9CdWNrQ3RybC0+aHcwX29wX2NmZyA8PCBSR19CVUNLX0xET19IVzBfT1BfQ0ZHX1NISUZUKSB8CisJCQkgICAgICAgKHBMZG9CdWNrQ3RybC0+aHcxX29wX2NmZyA8PCBSR19CVUNLX0xET19IVzFfT1BfQ0ZHX1NISUZUKSB8CisJCQkgICAgICAgKHBMZG9CdWNrQ3RybC0+aHcyX29wX2NmZyA8PCBSR19CVUNLX0xET19IVzJfT1BfQ0ZHX1NISUZUKSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJY2FzZSBWQ09SRToKKwkJeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVkNPUkVfT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVk1PREVNX09QX0NGR19DTFJfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZTSU0xOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlNJTTFfT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlNJTTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WU0lNMl9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWRkUyODoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfTERPX1ZGRTI4X09QX0NGR19DTFJfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZSRjE4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19MRE9fVlJGMThfT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlJGMTI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0xET19WUkYxMl9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWR1BVMTE6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZHUFUxMV9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZHUFUxMjoKKwkJeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVkdQVTEyX09QX0NGR19DTFJfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVlBST0MxOgorCQl7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WUFJPQzFfT1BfQ0ZHX0NMUl9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWUFJPQzI6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZQUk9DMl9PUF9DRkdfQ0xSX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZQVToKKwkJeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVlBVX09QX0NGR19DTFJfQUREUiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwl9CisJYnJlYWs7CisKKwljYXNlIExET19CVUNLX1NFVF9WT0xUQUdFOgorCXsKKwkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZPTFRBR0UgKnBMZG9CdWNrQ3RybCA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWb2x0YWdlKTsKKwkgICAgcmVnVmFsID0gUE1VX1BhcmFtZXRlcl90b19WYWx1ZShFTkMoY21kLCBwTGRvQnVja0N0cmwtPm1vZCksIHBMZG9CdWNrQ3RybC0+dm9sdGFnZSk7CisKKwkgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorCSAgICB7CisJICAgICAgICBjYXNlIFZTSU0xOgorCSAgICAgICAgeworCSAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WU0lNMV9WT1NFTCwgcmVnVmFsKTsKKwkgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCSAgICAgICAgfQorCSAgICAgICAgYnJlYWs7CisKKwkgICAgICAgIGNhc2UgVlNJTTI6CisJICAgICAgICB7CisJICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZTSU0yX1ZPU0VMLCByZWdWYWwpOworCSAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJICAgICAgICB9CisJICAgICAgICBicmVhazsKKworCSAgICAgICAgY2FzZSBWUEFfU1c6CisJICAgICAgICB7CisJICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGVfbm9sb2NrKFBNSUNfRU5VTV9SR19CVUNLX1ZQQV9WT1NFTCwgcmVnVmFsKTsKKwkgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCSAgICAgICAgfQorCSAgICAgICAgYnJlYWs7CisKKwkgICAgICAgIGNhc2UgVlhPMjI6CisJICAgICAgICB7CisJICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZYTzIyX1ZPU0VMLCByZWdWYWwpOworCSAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJICAgICAgICB9CisJICAgICAgICBicmVhazsKKworCSAgICAgICAgZGVmYXVsdDoKKwkgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworCSAgICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisJYnJlYWs7CisKKwljYXNlIExET19CVUNLX0dFVF9WT0xUQUdFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19HRVRfVk9MVEFHRSAqcExkb0J1Y2tDdHJsPSYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWb2x0KTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ3RybC0+bW9kKQorICAgICAgICAgICAgeworCQljYXNlIFZNT0RFTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0RBX1ZNT0RFTV9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlNSQU1fTUQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9EQV9WU1JBTV9NRF9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlNSQU1fT1RIRVJTOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fREFfVlNSQU1fT1RIRVJTX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWR1BVMTE6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fREFfVkdQVTExX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZHUFUxMjoKKwkJeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9EQV9WR1BVMTJfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVlNSQU1fUFJPQzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9EQV9WU1JBTV9QUk9DMV9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgVlBST0MxOgorCQl7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0RBX1ZQUk9DMV9WT1NFTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWU1JBTV9QUk9DMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrQ3RybC0+Y29kZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0RBX1ZTUkFNX1BST0MyX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWUFJPQzI6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5jb2RlID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fREFfVlBST0MyX1ZPU0VMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZQVToKKwkJeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmNvZGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9EQV9WUFVfVk9TRUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCWNhc2UgVlBBX0dFVF9WT0xUQUdFX0xJU1Q6CisJeworICAgICAgICAgICAgUE1VX0NUUkxfVlBBX0dFVF9WT0xUQUdFX0xJU1QgKnBWcGFDdHJsID0gJihkYXRhLT5yUE1VVnBhR2V0Vm9sdGFnZUxpc3QpOworICAgICAgICAgICAgcFZwYUN0cmwtPnBWb2x0YWdlTGlzdCA9IHZwYV92b3NlbDsKKyAgICAgICAgICAgIHBWcGFDdHJsLT5udW1iZXIgPSBHRVRBUlJOVU0odnBhX3Zvc2VsKTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJfQorCWJyZWFrOworCisgICAgICAgIGNhc2UgQURDX1NFVF9SUVNUOgorICAgICAgICB7CisgICAgICAgICAgICAvL1BNVV9DVFJMX0FEQ19TRVRfUlFTVCAqcEFkY0N0cmwgPSAmKGRhdGEtPnJQTVVBZGNTZXRScXN0KTsKKyAgICAgICAgICAgIGlmKChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0lOSVQpICYmIChBVVhBRENfU3RhdHVzICE9IEFVWEFEQ19SRUFEX0RBVEEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVCgwKTsKKwkJTU9ERU1fV0FSTklOR19NRVNTQUdFKDAsICJBRENfU0VUX1JRU1QgZXJyb3IiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEVuYWJsZSBDTEtTUSBmb3IgTUQgKFNXIG1vZGUpIFJHX0NMS1NRX0VOX0FVWF9NRAorICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19BVVhBRENfUlFTVF9DSDdfQllfTURfQUREUiwgKDB4MSA8PCBQTUlDX0FVWEFEQ19SUVNUX0NIN19CWV9NRF9TSElGVCkpOworICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX1JFUVVFU1Q7CisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgY2FzZSBBRENfR0VUX1JEWV9NRDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfQURDX0dFVF9SRFlfTUQgKnBBZGNDdHJsID0gJihkYXRhLT5yUE1VQWRjR2V0UmR5TWQpOworICAgICAgICAgICAgcEFkY0N0cmwtPnN0YXR1cyA9IChEQ0xfQk9PTClkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9BVVhBRENfQURDX1JEWV9DSDdfQllfTUQpOworICAgICAgICAgICAgaWYoKEFVWEFEQ19TdGF0dXMgIT0gQVVYQURDX1JFQURfUkVRVUVTVCkgJiYgKEFVWEFEQ19TdGF0dXMgIT0gQVVYQURDX1JFQURfQlVTWSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUKDApOworCQlNT0RFTV9XQVJOSU5HX01FU1NBR0UoMCwgIkFEQ19HRVRfUkRZX01EIGVycm9yIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKHBBZGNDdHJsLT5zdGF0dXMgPT0gRENMX1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVVYQURDX1N0YXR1cyA9IEFVWEFEQ19SRUFEX1JFQURZOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFVWEFEQ19TdGF0dXMgPSBBVVhBRENfUkVBRF9CVVNZOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJY2FzZSBBRENfR0VUX09VVF9NRDoKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfQURDX0dFVF9PVVRfTUQgKnBBZGNDdHJsID0gJihkYXRhLT5yUE1VQWRjR2V0T3V0TWQpOworICAgICAgICAgICAgaWYoQVVYQURDX1N0YXR1cyAhPSBBVVhBRENfUkVBRF9SRUFEWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBERUJVR19BU1NFUlQoMCk7CisJCU1PREVNX1dBUk5JTkdfTUVTU0FHRSgwLCAiQURDX0dFVF9PVVRfTUQgZXJyb3IiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZGNDdHJsLT5kYXRhID0gKERDTF9VSU5UMzIpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fQVVYQURDX0FEQ19PVVRfQ0g3X0JZX01EKTsKKyAgICAgICAgICAgIEFVWEFEQ19TdGF0dXMgPSBBVVhBRENfUkVBRF9EQVRBOworICAgICAgICAgICAgLy8gRGlzYWJsZSBDTEtTUSBmb3IgTUQgKFNXIG1vZGUpIFJHX0NMS1NRX0VOX0FVWF9NRAorCisgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisJY2FzZSBUT1BfU0VUX1NSQ0xLRU5fSU5fRU46CisJeworICAgIAkgICAgUE1VX0NUUkxfVE9QX1NFVF9TUkNMS0VOX0lOX0VOICpwVG9wU3JjbGtlbkN0cmwgPSAmKGRhdGEtPnJQTVVUb3BTZXRTcmNsa2VuSW5Fbik7CisKKyAgICAgICAgICAgIHN3aXRjaChwVG9wU3JjbGtlbkN0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBNSUNfU1JDTEtFTl9JTjA6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfU1JDTEtFTl9JTjBfRU4sIHBUb3BTcmNsa2VuQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgUE1JQ19TUkNMS0VOX0lOMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19TUkNMS0VOX0lOMV9FTiwgcFRvcFNyY2xrZW5DdHJsLT5tb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworCWNhc2UgVE9QX1NFVF9TUkNMS0VOX0lOX01PREU6CisJeworICAgIAkgICAgUE1VX0NUUkxfVE9QX1NFVF9TUkNMS0VOX0lOX01PREUgKnBUb3BTcmNsa2VuQ3RybCA9ICYoZGF0YS0+clBNVVRvcFNldFNyY2xrZW5Jbk1vZGUpOworCisgICAgICAgICAgICBzd2l0Y2gocFRvcFNyY2xrZW5DdHJsLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBQTUlDX1NSQ0xLRU5fSU4wOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1NSQ0xLRU5fSU4wX0hXX01PREUsIHBUb3BTcmNsa2VuQ3RybC0+bW9kZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisJCWNhc2UgUE1JQ19TUkNMS0VOX0lOMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19TUkNMS0VOX0lOMV9IV19NT0RFLCBwVG9wU3JjbGtlbkN0cmwtPm1vZGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJfQorCWJyZWFrOworCisJY2FzZSBMRE9fQlVDS19TRVRfRlBXTToKKwl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRlBXTSAqcExkb0J1Y2tTZXRGcHdtID0gJihkYXRhLT5yUE1VTGRvQnVja1NldEZwd20pOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tTZXRGcHdtLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVk1PREVNX0ZDQ00sIHBMZG9CdWNrU2V0RnB3bS0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZHUFUxMToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WR1BVMTFfRkNDTSwgcExkb0J1Y2tTZXRGcHdtLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVkdQVTEyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZHUFUxMl9GQ0NNLCBwTGRvQnVja1NldEZwd20tPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUFJPQzE6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlBST0MxX0ZDQ00sIHBMZG9CdWNrU2V0RnB3bS0+ZW5hYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZQUk9DMjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WUFJPQzJfRkNDTSwgcExkb0J1Y2tTZXRGcHdtLT5lbmFibGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVlBVOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZQVV9GQ0NNLCBwTGRvQnVja1NldEZwd20tPmVuYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwl9CisJYnJlYWs7CisKKwljYXNlIExET19CVUNLX0dFVF9GUFdNOgorCXsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9GUFdNICpwTGRvQnVja0N0cmwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrR2V0RnB3bSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0N0cmwtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0N0cmwtPmVuYWJsZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX1ZNT0RFTV9GQ0NNKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWR1BVMTE6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5lbmFibGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19WR1BVMTFfRkNDTSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWR1BVMTI6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5lbmFibGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19WR1BVMTJfRkNDTSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWUFJPQzE6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5lbmFibGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19WUFJPQzFfRkNDTSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWUFJPQzI6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5lbmFibGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19WUFJPQzJfRkNDTSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWUFU6CisJCXsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tDdHJsLT5lbmFibGUgPSAoRENMX1VJTlQzMilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19WUFVfRkNDTSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworCWNhc2UgRENYT19TRVRfUkVHSVNURVJfVkFMVUU6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0RDWE9fU0VUX1JFR0lTVEVSX1ZBTFVFCSpwQ2hyQ3RybCA9ICYoZGF0YS0+clBNVURjeG9TZXRSZWdpc3RlclZhbHVlKTsKKworICAgICAgICAgICAgcG1pY19FTV9yZWdfd3JpdGUocENockN0cmwtPm9mZnNldCwgcENockN0cmwtPnZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisKKyNpZiAwCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisvKiB1bmRlciBjb25zdHJ1Y3Rpb24gISovCisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERDWE9fR0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9EQ1hPX0dFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmw9JihkYXRhLT5yUE1VRGN4b0dldFJlZ2lzdGVyVmFsdWUpOworICAgICAgICAgICAgcENockN0cmwtPnZhbHVlID0gcG1pY19FTV9yZWdfcmVhZChwQ2hyQ3RybC0+b2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNSVNDX1NFVF9SRUdJU1RFUl9WQUxVRToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTUlTQ19TRVRfUkVHSVNURVJfVkFMVUUJKnBDaHJDdHJsID0gJihkYXRhLT5yUE1VTWlzY1NldFJlZ2lzdGVyVmFsdWUpOworI2lmIGRlZmluZWQoRENMX1BNSUNfUEVSTUlTU0lPTl9DT05UUk9MKQorICAgICAgICAgICAgaWYoZGNsX3BtaWNfY2hlY2tfcGVybWlzc2lvbihwQ2hyQ3RybC0+b2Zmc2V0KT09IERDTF9UUlVFKQorI2VuZGlmCisgICAgICAgICAgICB7CisJCXBtaWNfRU1fcmVnX3dyaXRlKHBDaHJDdHJsLT5vZmZzZXQsIHBDaHJDdHJsLT52YWx1ZSk7CisJCXJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICB9CisjaWYgZGVmaW5lZChEQ0xfUE1JQ19QRVJNSVNTSU9OX0NPTlRST0wpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisJCWlsbGVnYWxfbWlzY19zZXRfcmVnaXN0ZXJfdmFsdWUub2Zmc2V0ID0gcENockN0cmwtPm9mZnNldDsKKwkJaWxsZWdhbF9taXNjX3NldF9yZWdpc3Rlcl92YWx1ZS52YWx1ZSA9IHBDaHJDdHJsLT52YWx1ZTsKKwkJREVCVUdfQVNTRVJUKDApOworCQlNT0RFTV9XQVJOSU5HX01FU1NBR0UoMCwgIk1JU0NfU0VUX1JFR0lTVEVSX1ZBTFVFIGVycm9yIik7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1JU0NfR0VUX1JFR0lTVEVSX1ZBTFVFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9NSVNDX0dFVF9SRUdJU1RFUl9WQUxVRQkqcENockN0cmw9JihkYXRhLT5yUE1VTWlzY0dldFJlZ2lzdGVyVmFsdWUpOworICAgICAgICAgICAgcENockN0cmwtPnZhbHVlID0gcG1pY19FTV9yZWdfcmVhZChwQ2hyQ3RybC0+b2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwljYXNlIExET19CVUNLX1NFVF9WT0NBTDoKKwl7CisgICAgCSAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9DQUwgKnBMZG9CdWNrU2V0Vm9jYWwgPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0Vm9jYWwpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tTZXRWb2NhbC0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfVk9DQUw6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVlJGMThfVk9DQUwsIHBMZG9CdWNrU2V0Vm9jYWwtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjEyX1ZPQ0FMOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZSRjEyX1ZPQ0FMLCBwTGRvQnVja1NldFZvY2FsLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWSU8xOF9WT0NBTDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WSU8xOF9WT0NBTCwgcExkb0J1Y2tTZXRWb2NhbC0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJfQorCWJyZWFrOworCisJY2FzZSBMRE9fQlVDS19HRVRfVk9DQUw6CisJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZPQ0FMICpwTGRvQnVja0dldFZvY2FsID0gJihkYXRhLT5yUE1VTGRvQnVja0dldFZvY2FsKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrR2V0Vm9jYWwtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjE4X1ZPQ0FMOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tHZXRWb2NhbC0+dmFsdWUgPSAoRENMX1VJTlQxNilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19WUkYxOF9WT0NBTCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWUkYxMl9WT0NBTDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrR2V0Vm9jYWwtPnZhbHVlID0gKERDTF9VSU5UMTYpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVlJGMTJfVk9DQUwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgVklPMThfVk9DQUw6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0dldFZvY2FsLT52YWx1ZSA9IChEQ0xfVUlOVDE2KWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX1ZJTzE4X1ZPQ0FMKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworCisJY2FzZSBMRE9fQlVDS19TRVRfVk9UUklNOgorCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1RSSU0gKnBMZG9CdWNrU2V0Vm90cmltID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZvdHJpbSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja1NldFZvdHJpbS0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfVk9UUklNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX1ZSRjE4X1ZPVFJJTSwgcExkb0J1Y2tTZXRWb3RyaW0tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjEyX1ZPVFJJTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19WUkYxMl9WT1RSSU0sIHBMZG9CdWNrU2V0Vm90cmltLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWSU8xOF9WT1RSSU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfVklPMThfVk9UUklNLCBwTGRvQnVja1NldFZvdHJpbS0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJfQorCWJyZWFrOworCisJY2FzZSBMRE9fQlVDS19HRVRfVk9UUklNOgorCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WT1RSSU0gKnBMZG9CdWNrR2V0Vm90cmltID0gJihkYXRhLT5yUE1VTGRvQnVja0dldFZvdHJpbSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0dldFZvdHJpbS0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlJGMThfVk9UUklNOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcExkb0J1Y2tHZXRWb3RyaW0tPnZhbHVlID0gKERDTF9VSU5UMTYpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfVlJGMThfVk9UUklNKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFZSRjEyX1ZPVFJJTToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrR2V0Vm90cmltLT52YWx1ZSA9IChEQ0xfVUlOVDE2KWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX1JHX1ZSRjEyX1ZPVFJJTSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWSU8xOF9WT1RSSU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwTGRvQnVja0dldFZvdHJpbS0+dmFsdWUgPSAoRENMX1VJTlQxNilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19WSU8xOF9WT1RSSU0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJfQorCWJyZWFrOworCisJY2FzZSBMRE9fQlVDS19TRVRfVlBBX09DX1NETl9TVEFUVVM6CisJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX1ZQQV9PQ19TRE5fU1RBVFVTICpwTGRvQnVja1NldFZwYU9jU2RuU3RhdHVzID0gJihkYXRhLT5yUE1VTGRvQnVja1NldFZwYU9jU2RuU3RhdHVzKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrU2V0VnBhT2NTZG5TdGF0dXMtPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9PQ19TRE5fU1RBVFVTOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0JVQ0tfVlBBX09DX1NETl9TVEFUVVMsIHBMZG9CdWNrU2V0VnBhT2NTZG5TdGF0dXMtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworCWNhc2UgTERPX0JVQ0tfR0VUX1ZQQV9PQ19TRE5fU1RBVFVTOgorCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX0dFVF9WUEFfT0NfU0ROX1NUQVRVUyAqcExkb0J1Y2tHZXRWcGFPY1NkblN0YXR1cyA9ICYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWcGFPY1NkblN0YXR1cyk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja0dldFZwYU9jU2RuU3RhdHVzLT5tb2QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBWUEFfT0NfU0ROX1NUQVRVUzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrR2V0VnBhT2NTZG5TdGF0dXMtPnZhbHVlID0gKERDTF9VSU5UMTYpZGNsX3BtaWNfZmllbGRfcmVhZChQTUlDX0VOVU1fUkdfQlVDS19WUEFfT0NfU0ROX1NUQVRVUyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwl9CisJYnJlYWs7CisKKwljYXNlIExET19CVUNLX1NFVF9WUEFfT0NfU0ROX0VOOgorCXsKKyAgICAJICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WUEFfT0NfU0ROX0VOICpwTGRvQnVja1NldFZwYU9jU2RuRW4gPSAmKGRhdGEtPnJQTVVMZG9CdWNrU2V0VnBhT2NTZG5Fbik7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja1NldFZwYU9jU2RuRW4tPm1vZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZQQV9PQ19TRE5fRU46CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfQlVDS19WUEFfT0NfU0ROX0VOLCBwTGRvQnVja1NldFZwYU9jU2RuRW4tPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCX0KKwlicmVhazsKKworCWNhc2UgTERPX0JVQ0tfR0VUX1ZQQV9PQ19TRE5fRU46CisJeworICAgIAkgICAgUE1VX0NUUkxfTERPX0JVQ0tfR0VUX1ZQQV9PQ19TRE5fRU4gKnBMZG9CdWNrR2V0VnBhT2NTZG5FbiA9ICYoZGF0YS0+clBNVUxkb0J1Y2tHZXRWcGFPY1NkbkVuKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrR2V0VnBhT2NTZG5Fbi0+bW9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgVlBBX09DX1NETl9FTjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBMZG9CdWNrR2V0VnBhT2NTZG5Fbi0+dmFsdWUgPSAoRENMX1VJTlQxNilkY2xfcG1pY19maWVsZF9yZWFkKFBNSUNfRU5VTV9SR19CVUNLX1ZQQV9PQ19TRE5fRU4pOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisJfQorCWJyZWFrOworCisJY2FzZSBMRE9fQlVDS19TRVRfT1BfTU9ERToKKyAgICAgICAgeworICAgICAgICAgICAgUE1VX0NUUkxfTERPX0JVQ0tfU0VUX09QX01PREUgKnBMZG9CdWNrU2V0T3BNb2RlID0gJihkYXRhLT5yUE1VTGRvQnVja1NldE9wTW9kZSk7CisKKyAgICAgICAgICAgIHN3aXRjaChwTGRvQnVja1NldE9wTW9kZS0+bW9kKQorICAgICAgICAgICAgeworCQljYXNlIFZSRjE4OgorCQl7CisJCSAgICBkY2xfcG1pY19maWVsZF93cml0ZShQTUlDX0VOVU1fUkdfTERPX1ZSRjE4X09QX01PREUsIHBMZG9CdWNrU2V0T3BNb2RlLT52YWx1ZSk7CisJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgVlJGMTI6CisJCXsKKwkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19MRE9fVlJGMTJfT1BfTU9ERSwgcExkb0J1Y2tTZXRPcE1vZGUtPnZhbHVlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFZGRTI4OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGNsX3BtaWNfZmllbGRfd3JpdGUoUE1JQ19FTlVNX1JHX0xET19WRkUyOF9PUF9NT0RFLCBwTGRvQnVja1NldE9wTW9kZS0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwljYXNlIExET19CVUNLX1NFVF9IV19PUF9NT0RFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19TRVRfSFdfT1BfTU9ERSAqcExkb0J1Y2tTZXRId09wTW9kZSA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRId09wTW9kZSk7CisKKyAgICAJICAgIGthbF91aW50MTYgdmFsdWUgPSgocExkb0J1Y2tTZXRId09wTW9kZS0+aHcwX29wX21vZGUgPDwgUkdfQlVDS19MRE9fSFcwX09QX01PREVfU0hJRlQpIHwKKwkJCSAgICAgICAocExkb0J1Y2tTZXRId09wTW9kZS0+aHcxX29wX21vZGUgPDwgUkdfQlVDS19MRE9fSFcxX09QX01PREVfU0hJRlQpIHwKKwkJCSAgICAgICAocExkb0J1Y2tTZXRId09wTW9kZS0+aHcyX29wX21vZGUgPDwgUkdfQlVDS19MRE9fSFcyX09QX01PREVfU0hJRlQpKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrU2V0SHdPcE1vZGUtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJY2FzZSBWQ09SRToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WQ09SRV9PUF9NT0RFX1NFVF9BRERSLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBWTU9ERU06CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwbWljX0VNX3JlZ193cml0ZShQTUlDX1JHX0JVQ0tfVk1PREVNX09QX01PREVfU0VUX0FERFIsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJY2FzZSBWUFU6CisJCXsKKwkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WUFVfT1BfTU9ERV9TRVRfQUREUiwgdmFsdWUpOworCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKwljYXNlIExET19CVUNLX0NMUl9IV19PUF9NT0RFOgorICAgICAgICB7CisgICAgICAgICAgICBQTVVfQ1RSTF9MRE9fQlVDS19DTFJfSFdfT1BfTU9ERSAqcExkb0J1Y2tDbHJId09wTW9kZSA9ICYoZGF0YS0+clBNVUxkb0J1Y2tDbHJId09wTW9kZSk7CisKKyAgICAJICAgIGthbF91aW50MTYgdmFsdWUgPSgocExkb0J1Y2tDbHJId09wTW9kZS0+aHcwX29wX21vZGUgPDwgUkdfQlVDS19MRE9fSFcwX09QX01PREVfU0hJRlQpIHwKKwkJCSAgICAgICAocExkb0J1Y2tDbHJId09wTW9kZS0+aHcxX29wX21vZGUgPDwgUkdfQlVDS19MRE9fSFcxX09QX01PREVfU0hJRlQpIHwKKwkJCSAgICAgICAocExkb0J1Y2tDbHJId09wTW9kZS0+aHcyX29wX21vZGUgPDwgUkdfQlVDS19MRE9fSFcyX09QX01PREVfU0hJRlQpKTsKKworICAgICAgICAgICAgc3dpdGNoKHBMZG9CdWNrQ2xySHdPcE1vZGUtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJY2FzZSBWQ09SRToKKwkJeworCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZDT1JFX09QX01PREVfQ0xSX0FERFIsIHZhbHVlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWTU9ERU06CisJCXsKKwkJICAgIHBtaWNfRU1fcmVnX3dyaXRlKFBNSUNfUkdfQlVDS19WTU9ERU1fT1BfTU9ERV9DTFJfQUREUiwgdmFsdWUpOworCQkgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19PSzsKKwkJfQorCQlicmVhazsKKworCQljYXNlIFZQVToKKwkJeworCQkgICAgcG1pY19FTV9yZWdfd3JpdGUoUE1JQ19SR19CVUNLX1ZQVV9PUF9NT0RFX0NMUl9BRERSLCB2YWx1ZSk7CisJCSAgICByZXR1cm5fdmFsID0gU1RBVFVTX09LOworCQl9CisJCWJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbCA9IFNUQVRVU19VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworCWNhc2UgTERPX0JVQ0tfU0VUX1ZPVEVSX1ZPTFRBR0U6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX0xET19CVUNLX1NFVF9WT1RFUl9WT0xUQUdFICpwTGRvQnVja1NldFZvdGVyVm9sdGFnZSA9ICYoZGF0YS0+clBNVUxkb0J1Y2tTZXRWb3RlclZvbHRhZ2UpOworCisgICAgICAgICAgICBzd2l0Y2gocExkb0J1Y2tTZXRWb3RlclZvbHRhZ2UtPm1vZCkKKyAgICAgICAgICAgIHsKKwkJY2FzZSBWUzE6CisJCXsKKwkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZTMV9WT1RFUl9WT1NFTCwgcExkb0J1Y2tTZXRWb3RlclZvbHRhZ2UtPnZhbHVlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBWUzI6CisJCXsKKwkJICAgIGRjbF9wbWljX2ZpZWxkX3dyaXRlKFBNSUNfRU5VTV9SR19CVUNLX1ZTMl9WT1RFUl9WT1NFTCwgcExkb0J1Y2tTZXRWb3RlclZvbHRhZ2UtPnZhbHVlKTsKKwkJICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisJCX0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNSVNDX0dFVF9DSUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFBNVV9DVFJMX01JU0NfR0VUX0NJRCAqcE1pc2NHZXRDdHJsID0gJihkYXRhLT5yUE1VTWlzY0dldENpZCk7CisgICAgICAgICAgICBwTWlzY0dldEN0cmwtPmNpZF92YWx1ZSA9IChEQ0xfVUlOVDMyKWRjbF9wbWljX2ZpZWxkX3JlYWQoUE1JQ19FTlVNX0hXQ0lEKTsKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfT0s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybl92YWwgPSBTVEFUVVNfVU5TVVBQT1JURUQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNpZiBkZWZpbmVkKERDTF9QTUlDX01PRFVMRV9DT05UUk9MKQorCWN1cnJlbnRfZGNsX2hhbmRsZSA9IDA7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0dXJuX3ZhbDsKKworfQorCitleHRlcm4gdm9pZCBkY2xfcG1pY19tb2RlbV9vbmx5X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpOworI2lmIGRlZmluZWQoUE1JQ19VTklUX1RFU1QpCitleHRlcm4gdm9pZCBQTUlDX1JlYWRfQWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgUE1JQ19Vbml0X1Rlc3Qodm9pZCk7CisjZW5kaWYKK0RDTF9VSU5UMzIgRFJWX1JlYWRfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyKQoreworICAgIHJldHVybiBkY2xfcG1pY19ieXRlX3JldHVybihwbWljX2FkZHIpOworfQorCit2b2lkIERSVl9Xcml0ZV9QTUlDX0RhdGEoRENMX1VJTlQzMiBwbWljX2FkZHIsIERDTF9VSU5UMzIgdmFsdWUpCit7CisgICAgZGNsX3BtaWNfYnl0ZV93cml0ZShwbWljX2FkZHIsIHZhbHVlKTsKK30KKwordm9pZCBkY2xfcG1pY19pbml0KHZvaWQpeworICAgIGV4dGVybiB2b2lkIHBtaWNfd3JhcF9kdW1wX2luaXQodm9pZCk7CisgICAgcG11X2NvbnRyb2xfaGFuZGxlciA9IFBNSUNfY29udHJvbF9oYW5kbGVyOworICAgIHBtdV9wYXJhbWV0ZXJfc2l6ZSA9IEdFVEFSUk5VTShwbXVfcGFyYW1ldGVyX3RhYmxlKTsKKworICAgIHBtaWNfd3JhcF9kdW1wX2luaXQoKTsKKworICAgIGRjbF9wbWljX2FjY2Vzc19zcGlubG9jayA9IGthbF9jcmVhdGVfc3BpbmxvY2soInBtaWMgYWNjZXNzIik7CisgICAgZGNsX3BtaWNfY29udHJvbF9zcGlubG9jayA9IGthbF9jcmVhdGVfc3BpbmxvY2soInBtaWMgY29udHJvbCIpOworCisjaWYgICFkZWZpbmVkKF9fU01BUlRfUEhPTkVfTU9ERU1fXykKKyAgICBEcnZQV1JBUF9Jbml0KCk7CisjZW5kaWYKKyAgICBwbWljX2h3X3ZlcnNpb24gPSBkY2xfcG1pY19ieXRlX3JldHVybihNVDYzNTlfSFdDSUQpOworCWlmIChwbWljX2h3X3ZlcnNpb24gPT0gMHgwKSB7CisJCURFQlVHX0FTU0VSVCgwKTsKKwkJTU9ERU1fV0FSTklOR19NRVNTQUdFKDAsICJHZXQgSFdDSUQgZXJyb3IiKTsKKwl9CisKKyNpZiBkZWZpbmVkKF9fSUNfU0xUX18pIHx8ICFkZWZpbmVkKF9fSElGX0NDQ0lfU1VQUE9SVF9fKQorCWRjbF9wbWljX2J5dGVfd3JpdGUoUE1JQ19UTUFfS0VZX0FERFIsIDB4OUNBNik7CisjZW5kaWYKKworICAgIFBNSUNfUmVhZF9BbGwoKTsKKworI2lmICFkZWZpbmVkKF9fU01BUlRfUEhPTkVfTU9ERU1fXykKKworLyoKKwlpZihEcnZQV1JBUF9DaGVja0NJUEhFUigpID09IDEpCisgICAgZGNsX3BtaWM2MzU1X21vZGVtX29ubHlfaW5pdCgpOworCWVsc2UKKyovCisJZGNsX3BtaWNfbW9kZW1fb25seV9pbml0KCk7CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChQTUlDX1VOSVRfVEVTVCkKKyAgICBQTUlDX1JlYWRfQWxsKCk7CisgICAgUE1JQ19Vbml0X1Rlc3QoKTsKKyAgICBQTUlDX1JlYWRfQWxsKCk7CisjZW5kaWYKKyAgICBwbWljX2luaXRfZG9uZSA9IERDTF9UUlVFOworCit9CisKK3ZvaWQgUE1JQ19SZWFkX0FsbCh2b2lkKQoreworICAgIHZvbGF0aWxlIGthbF91aW50MzIgaSxqOworICAgIGo9MDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgUE1JQ19NQVhfUkVHX05VTTsgaSArPSAyKXsKKyAgICAgICAgcG1pY19yZWdbaV0gPSBkY2xfcG1pY19ieXRlX3JldHVybihpKTsKKyAgICAJd2hpbGUoaiE9MHgyMDApe2orKzt9CisgICAgCWo9MDsKKyAgICB9Cit9CisjaWYgZGVmaW5lZChQTUlDX1VOSVRfVEVTVCkKK3ZvaWQgUE1JQ19Vbml0X1Rlc3Qodm9pZCkKK3sKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfT05fQ1RSTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kZSA9IEhXX0NPTlRST0w7IC8vIChTV19DT05UUk9MX0JZX1JFRyAvIEhXX0NPTlRST0wpCisJCXZhbC5tb2QgPSBWTUlQSTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfT05fQ1RSTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU4gdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLmVuYWJsZSA9IERDTF9UUlVFOyAvLyAoRENMX1RSVUUgLyBEQ0xfRkFMU0UpOworCQl2YWwubW9kID0gVk1JUEk7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWUEFfU1c7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9WT0xUQUdFIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2Q9VlBBX1NXOworCQl2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworCQkvKiAgICAgUE1VX1ZPTFRfMDBfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDBfNjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDBfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDBfODAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDBfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfMDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfMjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfNDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfNjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDFfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfMDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfMjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfNDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfNjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfNzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDJfODAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDJfOTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDNfMTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMjAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDNfMzAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfNDAwMDAwX1YsCisJCQkJUE1VX1ZPTFRfMDNfNTAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfNjAwMDAwX1YsICAgICAgKi8KKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kID0gVlBBX1NXOworCQl2YWwubW9kZSA9IEZPUkNFX1BXTV9NT0RFOyAvLyAoQVVUT19NT0RFIC8gRk9SQ0VfUFdNX01PREUpCisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX01PREVTRVQsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTl9DVFJMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5tb2RlID0gSFdfQ09OVFJPTDsgLy8gKFNXX0NPTlRST0xfQllfUkVHIC8gSFdfQ09OVFJPTCkKKwkJdmFsLm1vZCA9IFZSRjE7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOX0NUUkwsIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX1NFTCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuc2VsID0gU1JDTEtFTl9JTjFfU0VMOworCQkvKiBTUkNMS0VOX0lOMV9TRUwgLyBTUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX09SX1NSQ0xLRU5fSU4yX1NFTC8KKwkJCVNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwvIFNSQ0xLRU5fSU4xX0FORF9TUkNMS0VOX0lOMl9TRUwgKi8KKwkJdmFsLm1vZCA9IFZSRjE7CisJCURjbFBNVV9Db250cm9sKGhhbmRsZSwgTERPX0JVQ0tfU0VUX0VOX1NFTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kID0gVlJGMTsKKwkJdmFsLm1vZGUgPSBGT1JDRV9QV01fTU9ERTsgLy8gKEFVVE9fTU9ERSAvIEZPUkNFX1BXTV9NT0RFKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9NT0RFU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX1ZSRjFfU0VUX01PREVTRVRfQ0tQRE5fU0VUIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5yZWd2YWwgPSAweDc7IC8vICgweDB+MHhGKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfU0VUX01PREVTRVRfQ0tQRE5fU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX1ZSRjFfU0VUX01PREVTRVRfQ0tQRE5fQ0xSIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5yZWd2YWwgPSAweDc7IC8vICgweDB+MHhGKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfU0VUX01PREVTRVRfQ0tQRE5fQ0xSLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX1ZSRjFfR0VUX01PREVTRVRfQ0tQRE4gdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJLy8gdmFsLnJlZ3ZhbCB3aWxsIGJlIHlvdXIgcmVxdWVzdCB2YWx1ZSAoIG5vIG5lZWQgZG8gYW55IHNoaWZ0KQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIFZSRjFfR0VUX01PREVTRVRfQ0tQRE4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOX0NUUkwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLm1vZGUgPSBIV19DT05UUk9MOyAvLyAoU1dfQ09OVFJPTF9CWV9SRUcgLyBIV19DT05UUk9MKQorCQl2YWwubW9kID0gVlJGMjsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fQ1RSTCwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfRU5fU0VMIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5zZWwgPSBTUkNMS0VOX0lOMV9TRUw7CisJCS8qIFNSQ0xLRU5fSU4xX1NFTCAvIFNSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfT1JfU1JDTEtFTl9JTjJfU0VMLworCQkJU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTC8gU1JDTEtFTl9JTjFfQU5EX1NSQ0xLRU5fSU4yX1NFTCAqLworCQl2YWwubW9kID0gVlJGMjsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU5fU0VMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWUkYyOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfTU9ERVNFVCB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kID0gVlJGMTsKKwkJdmFsLm1vZGUgPSBGT1JDRV9QV01fTU9ERTsgLy8gKEFVVE9fTU9ERSAvIEZPUkNFX1BXTV9NT0RFKQorCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9NT0RFU0VULCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9TUkNMS19FTl9TRUwgdmFsOworCQloYW5kbGUgPSBEY2xQTVVfT3BlbihEQ0xfUE1VLCBGTEFHU19OT05FKTsKKwkJdmFsLnNlbCA9IFNSQ0xLRU5fSU4xX1NFTDsKKwkJLyogU1JDTEtFTl9JTjFfU0VMIC8gU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9PUl9TUkNMS0VOX0lOMl9TRUwvCisJCQlTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMLyBTUkNMS0VOX0lOMV9BTkRfU1JDTEtFTl9JTjJfU0VMICovCisJCXZhbC5tb2QgPSBWTUlQSTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfU1JDTEtfRU5fU0VMLCAoRENMX0NUUkxfREFUQV9UICopJnZhbCk7CisJCURjbFBNVV9DbG9zZShoYW5kbGUpOworCX0KKworCXsKKwkJRENMX0hBTkRMRSBoYW5kbGU7CisJCVBNVV9DVFJMX0xET19CVUNLX1NFVF9FTiB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwuZW5hYmxlID0gRENMX1RSVUU7IC8vIChEQ0xfVFJVRSAvIERDTF9GQUxTRSk7CisJCXZhbC5tb2QgPSBWU0lNMTsKKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfRU4sIChEQ0xfQ1RSTF9EQVRBX1QgKikmdmFsKTsKKwkJRGNsUE1VX0Nsb3NlKGhhbmRsZSk7CisJfQorCisJeworCQlEQ0xfSEFORExFIGhhbmRsZTsKKwkJUE1VX0NUUkxfTERPX0JVQ0tfU0VUX0VOIHZhbDsKKwkJaGFuZGxlID0gRGNsUE1VX09wZW4oRENMX1BNVSwgRkxBR1NfTk9ORSk7CisJCXZhbC5lbmFibGUgPSBEQ0xfVFJVRTsgLy8gKERDTF9UUlVFIC8gRENMX0ZBTFNFKTsKKwkJdmFsLm1vZCA9IFZTSU0yOworCQlEY2xQTVVfQ29udHJvbChoYW5kbGUsIExET19CVUNLX1NFVF9FTiwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kPVZTSU0xOworCQl2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworCQkvKiAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgKi8KKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9CisKKwl7CisJCURDTF9IQU5ETEUgaGFuZGxlOworCQlQTVVfQ1RSTF9MRE9fQlVDS19TRVRfVk9MVEFHRSB2YWw7CisJCWhhbmRsZSA9IERjbFBNVV9PcGVuKERDTF9QTVUsIEZMQUdTX05PTkUpOworCQl2YWwubW9kPVZTSU0yOworCQl2YWwudm9sdGFnZSA9IFBNVV9WT0xUXzAxXzgwMDAwMF9WOworCQkvKiAgUE1VX1ZPTFRfMDFfODAwMDAwX1YsICAgICAgUE1VX1ZPTFRfMDNfMDAwMDAwX1YsICAgKi8KKwkJRGNsUE1VX0NvbnRyb2woaGFuZGxlLCBMRE9fQlVDS19TRVRfVk9MVEFHRSwgKERDTF9DVFJMX0RBVEFfVCAqKSZ2YWwpOworCQlEY2xQTVVfQ2xvc2UoaGFuZGxlKTsKKwl9Cit9CisjZW5kaWYgLy8gRW5kIG9mICNpZiBkZWZpbmVkKFBNSUNfVU5JVF9URVNUKQorCisjZW5kaWYgLy8gRW5kIG9mICNpZiBkZWZpbmVkKFBNSUNfNjM1OVBfUkVHX0FQSSkKKwpkaWZmIC0tZ2l0IGEvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU5cF9pbml0LmMgYi9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG1pYzYzNTlwX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGI3MTFmCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtaWM2MzU5cF9pbml0LmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weXJpZ2h0IFN0YXRlbWVudDoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisqICBUaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBDb3B5cmlnaHQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQKKyogIGhlcmVpbiBpcyBjb25maWRlbnRpYWwuIFRoZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGNvcGllZCBhbmQgdGhlIGluZm9ybWF0aW9uCisqICBjb250YWluZWQgaGVyZWluIG1heSBub3QgYmUgdXNlZCBvciBkaXNjbG9zZWQgZXhjZXB0IHdpdGggdGhlIHdyaXR0ZW4KKyogIHBlcm1pc3Npb24gb2YgTWVkaWFUZWsgSW5jLiAoQykgMjAxOQorKgorKiAgQlkgT1BFTklORyBUSElTIEZJTEUsIEJVWUVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCisqICBUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTUVESUFURUsgU09GVFdBUkUiKQorKiAgUkVDRUlWRUQgRlJPTSBNRURJQVRFSyBBTkQvT1IgSVRTIFJFUFJFU0VOVEFUSVZFUyBBUkUgUFJPVklERUQgVE8gQlVZRVIgT04KKyogIEFOICJBUy1JUyIgQkFTSVMgT05MWS4gTUVESUFURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTCBXQVJSQU5USUVTLAorKiAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyogIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5ULgorKiAgTkVJVEhFUiBET0VTIE1FRElBVEVLIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSCBSRVNQRUNUIFRPIFRIRQorKiAgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLCBJTkNPUlBPUkFURUQgSU4sIE9SCisqICBTVVBQTElFRCBXSVRIIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSwgQU5EIEJVWUVSIEFHUkVFUyBUTyBMT09LIE9OTFkgVE8gU1VDSAorKiAgVEhJUkQgUEFSVFkgRk9SIEFOWSBXQVJSQU5UWSBDTEFJTSBSRUxBVElORyBUSEVSRVRPLiBNRURJQVRFSyBTSEFMTCBBTFNPCisqICBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFUyBNQURFIFRPIEJVWUVSJ1MKKyogIFNQRUNJRklDQVRJT04gT1IgVE8gQ09ORk9STSBUTyBBIFBBUlRJQ1VMQVIgU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4KKyoKKyogIEJVWUVSJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBBTkQgTUVESUFURUsnUyBFTlRJUkUgQU5EIENVTVVMQVRJVkUKKyogIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VEIEhFUkVVTkRFUiBXSUxMIEJFLAorKiAgQVQgTUVESUFURUsnUyBPUFRJT04sIFRPIFJFVklTRSBPUiBSRVBMQUNFIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwKKyogIE9SIFJFRlVORCBBTlkgU09GVFdBUkUgTElDRU5TRSBGRUVTIE9SIFNFUlZJQ0UgQ0hBUkdFIFBBSUQgQlkgQlVZRVIgVE8KKyogIE1FRElBVEVLIEZPUiBTVUNIIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLgorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICAgZGNsX3BtaWM2MzU5cF9pbml0LmMKKyAqCisgKiBQcm9qZWN0OgorICogLS0tLS0tLS0KKyAqICAgICBNT0xZIFNvZnR3YXJlCisgKgorICogRGVzY3JpcHRpb246CisgKiAtLS0tLS0tLS0tLS0KKyAqICAgICBUaGlzIGZpbGUgaXMgZm9yIFBNSUMgNjM1OVAKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBISVNUT1JZCisgKiBCZWxvdyB0aGlzIGxpbmUsIHRoaXMgcGFydCBpcyBjb250cm9sbGVkIGJ5IFBWQ1MgVk0uIERPIE5PVCBNT0RJRlkhIQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKgorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICoKKyAqIHJlbW92ZWQhCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqCisgKiByZW1vdmVkIQorICogcmVtb3ZlZCEKKyAqIHJlbW92ZWQhCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVXBwZXIgdGhpcyBsaW5lLCB0aGlzIHBhcnQgaXMgY29udHJvbGxlZCBieSBQVkNTIFZNLiBETyBOT1QgTU9ESUZZISEKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpbml0LmgiCisjaW5jbHVkZSAiZGNsLmgiCisKK2V4dGVybiBEQ0xfVUlOVDMyIERSVl9SZWFkX1BNSUNfRGF0YShEQ0xfVUlOVDMyIHBtaWNfYWRkcik7CitleHRlcm4gdm9pZCBEUlZfV3JpdGVfUE1JQ19EYXRhKERDTF9VSU5UMzIgcG1pY19hZGRyLCBEQ0xfVUlOVDMyIHZhbHVlKTsKKworI2lmIDAKKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKy8qIHVuZGVyIGNvbnN0cnVjdGlvbiAhKi8KKyNlbmRpZgorCisvLyBNVDYzNTkgRUNPX0UzCit2b2lkIGRjbF9wbWljX21vZGVtX29ubHlfaW5pdCh2b2lkKQoreworCS8qIGNoYW5nZSBQTUlDIGluaXRpYWwgc2V0dGluZyB0byBwcmVsb2FkZXIgZm9yIGFsbCBTVyBsb2FkLgorCSAgIElmIHlvdSB3YW50IHRvIGNoYW5nZSBwbWljIHNldHRpbmcsIHBsZWFzZSBjb250YWN0IFBUIExlYWQgJiBQTUlDIEFQIFNXICovCisKK30KZGlmZiAtLWdpdCBhL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbXUuYyBiL21jdS9kcml2ZXIvZGV2ZHJ2L3BtaWMvc3JjL2RjbF9wbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzExMTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtdS5jCkBAIC0wLDAgKzEsMzg5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCBTdGF0ZW1lbnQ6CisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkCisqICBoZXJlaW4gaXMgY29uZmlkZW50aWFsLiBUaGUgc29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQgYW5kIHRoZSBpbmZvcm1hdGlvbgorKiAgY29udGFpbmVkIGhlcmVpbiBtYXkgbm90IGJlIHVzZWQgb3IgZGlzY2xvc2VkIGV4Y2VwdCB3aXRoIHRoZSB3cml0dGVuCisqICBwZXJtaXNzaW9uIG9mIE1lZGlhVGVrIEluYy4gKEMpIDIwMDUKKyoKKyogIEJZIE9QRU5JTkcgVEhJUyBGSUxFLCBCVVlFUiBIRVJFQlkgVU5FUVVJVk9DQUxMWSBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUworKiAgVEhBVCBUSEUgU09GVFdBUkUvRklSTVdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OUyAoIk1FRElBVEVLIFNPRlRXQVJFIikKKyogIFJFQ0VJVkVEIEZST00gTUVESUFURUsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIEJVWUVSIE9OCisqICBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1FRElBVEVLIEVYUFJFU1NMWSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgV0FSUkFOVElFUywKKyogIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisqICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKyogIE5FSVRIRVIgRE9FUyBNRURJQVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEggUkVTUEVDVCBUTyBUSEUKKyogIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwgSU5DT1JQT1JBVEVEIElOLCBPUgorKiAgU1VQUExJRUQgV0lUSCBUSEUgTUVESUFURUsgU09GVFdBUkUsIEFORCBCVVlFUiBBR1JFRVMgVE8gTE9PSyBPTkxZIFRPIFNVQ0gKKyogIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4gTUVESUFURUsgU0hBTEwgQUxTTworKiAgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRVMgTUFERSBUTyBCVVlFUidTCisqICBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSIFNUQU5EQVJEIE9SIE9QRU4gRk9SVU0uCisqCisqICBCVVlFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1FRElBVEVLJ1MgRU5USVJFIEFORCBDVU1VTEFUSVZFCisqICBMSUFCSUxJVFkgV0lUSCBSRVNQRUNUIFRPIFRIRSBNRURJQVRFSyBTT0ZUV0FSRSBSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwKKyogIEFUIE1FRElBVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUgTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUsCisqICBPUiBSRUZVTkQgQU5ZIFNPRlRXQVJFIExJQ0VOU0UgRkVFUyBPUiBTRVJWSUNFIENIQVJHRSBQQUlEIEJZIEJVWUVSIFRPCisqICBNRURJQVRFSyBGT1IgU1VDSCBNRURJQVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KKyoKKyogIFRIRSBUUkFOU0FDVElPTiBDT05URU1QTEFURUQgSEVSRVVOREVSIFNIQUxMIEJFIENPTlNUUlVFRCBJTiBBQ0NPUkRBTkNFCisqICBXSVRIIFRIRSBMQVdTIE9GIFRIRSBTVEFURSBPRiBDQUxJRk9STklBLCBVU0EsIEVYQ0xVRElORyBJVFMgQ09ORkxJQ1QgT0YKKyogIExBV1MgUFJJTkNJUExFUy4gIEFOWSBESVNQVVRFUywgQ09OVFJPVkVSU0lFUyBPUiBDTEFJTVMgQVJJU0lORyBUSEVSRU9GIEFORAorKiAgUkVMQVRFRCBUSEVSRVRPIFNIQUxMIEJFIFNFVFRMRUQgQlkgQVJCSVRSQVRJT04gSU4gU0FOIEZSQU5DSVNDTywgQ0EsIFVOREVSCisqICBUSEUgUlVMRVMgT0YgVEhFIElOVEVSTkFUSU9OQUwgQ0hBTUJFUiBPRiBDT01NRVJDRSAoSUNDKS4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWxlbmFtZToKKyAqIC0tLS0tLS0tLQorICogICAgZGNsX3BtdS5jCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIE1vZHVsZSBkZWZpbmVzIERDTCAoRHJpdmVyIENvbW1vbiBMYXllcikgb2YgdGhlIFBNSUMgZHJpdmVyLgorICoKKyAqIEF1dGhvcjoKKyAqIC0tLS0tLS0KKyAqIC0tLS0tLS0KKyAqCisgKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImthbF9kZWJ1Zy5oIgorI2luY2x1ZGUgImthbF9wdWJsaWNfYXBpLmgiCisjaW5jbHVkZSAia2FsX2hydF9hcGkuaCIKKyNpbmNsdWRlICJpbnRyQ3RybC5oIgorI2luY2x1ZGUgImRjbC5oIgorI2luY2x1ZGUgImRjbF9wbXVfc3cuaCIKKyNpbmNsdWRlICJkY2xfcG11X2NvbW1vbl9zdy5oIgorI2luY2x1ZGUgInVzX3RpbWVyLmgiCisKKyNpZm5kZWYgRFJWX1BNSUNfT0ZGCisKKyNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKK1BNSUNfQUNDRVNTX0RVUkFUSU9OX0RCRyBwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbUE1JQ19MT0dfVFlQRV9NQVhdW1BNSUNfRFVSQVRJT05fTE9HX01BWF1bTUFYX1BNSUNfRFVSQVRJT05fSU5GT19TSVpFXTsKK0RDTF9VSU5UMzIgcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXggW1BNSUNfTE9HX1RZUEVfTUFYXSA9IHswfTsKK0RDTF9VSU5UMzIgcG1pY19hY2Nlc3NfdGltaW5nX2lzc3VlX2xvZyBbUE1JQ19MT0dfVFlQRV9NQVhdW01BWF9QTUlDX0RVUkFUSU9OX0lORk9fU0laRV07CitEQ0xfVUlOVDMyIHBtaWNfYWNjZXNzX3RpbWluZ19pc3N1ZV9pbmRleCBbUE1JQ19MT0dfVFlQRV9NQVhdPSB7MH07CisjZW5kaWYgLy8gRW5kIG9mICNpZiBkZWZpbmVkKERDTF9QTUlDX0FDQ0VTU19USU1FX0xPRykKKwora2FsX3NwaW5sb2NraWQgZGNsX3BtaWNfY29udHJvbF9zcGlubG9jazsKK2thbF9hdG9taWNfdWludDMyIGRjbF9wbWljX2hydF9mbGFnID0gMDsKKworUE1VX0NPTlRST0xfSEFORExFUiBwbXVfY29udHJvbF9oYW5kbGVyID0gMDsKK3N0YXRpYyBEQ0xfVUlOVDMyIGRjbF9wbXVfaGFuZGxlX2NvdW50ID0gMDsKKworI2lmIGRlZmluZWQoRENMX1BNSUNfTU9EVUxFX0NPTlRST0wpCitEQ0xfRkxBR1MgZGNsX3BtdV9oYW5kbGVfZmxhZ3MgPSBGTEFHU19OT05FOworCitEQ0xfRkxBR1MgRGNsUE1VX0dldEN1cnJlbnRIYW5kbGVyRmxhZyhEQ0xfSEFORExFIGhhbmRsZSkKK3sKKwlpZiggaGFuZGxlID09IGRjbF9wbXVfaGFuZGxlX2NvdW50ICkKKwkJcmV0dXJuIGRjbF9wbXVfaGFuZGxlX2ZsYWdzIDsKKworCXJldHVybiBGTEFHU19OT05FOworfQorI2VuZGlmCisKK2thbF9hdG9taWNfdWludDMyIERjbFBNVV9HZXRIcnRGbGFnKHZvaWQpCit7CisJcmV0dXJuIGthbF9hdG9taWNfcmVhZCgmZGNsX3BtaWNfaHJ0X2ZsYWcpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGVU5DVElPTgorKiAgRGNsUE1VX0luaXRpYWxpemUKKyoKKyogREVTQ1JJUFRJT04KKyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gaW5pdGlhbGl6ZSBQTVUgbW9kdWxlCisqCisqIFBBUkFNRVRFUlMKKyogIE5vbmUKKyoKKyogUkVUVVJOUworKiAgU1RBVFVTX09LCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworRENMX1NUQVRVUyBEY2xQTVVfSW5pdGlhbGl6ZSh2b2lkKQoreworI2lmIGRlZmluZWQoTVQ2MzUzKQorZXh0ZXJuIHZvaWQgZGNsX3BtaWM2MzUzX2luaXQodm9pZCk7CisJZGNsX3BtaWM2MzUzX2luaXQoKTsKKyNlbHNlCitleHRlcm4gdm9pZCBkY2xfcG1pY19pbml0KHZvaWQpOworCWRjbF9wbWljX2luaXQoKTsKKyNlbmRpZgorCisJcmV0dXJuIFNUQVRVU19PSzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFBNVV9PcGVuCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIG9wZW4gdGhlIFBNVSBtb2R1bGUgYW5kIHJldHVybiBhIGhhbmRsZQorKgorKiBQQVJBTUVURVJTCisqICBkZXY6IG9ubHkgdmFsaWQgZm9yIERDTF9QTVUKKyogIGZsYWdzOiBubyBzZXBjaWFsIGZsYWdzIGlzIG5lZWRlZC4gUGxlYXNlIHVzZSBGTEFHU19OT05FCisqCisqIFJFVFVSTlMKKyogIERDTF9IQU5ETEVfSU5WQUxJRDogT3BlbiBmYWlsZWQuCisqICBvdGhlciB2YWx1ZTogYSB2YWxpZCBoYW5kbGUKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitEQ0xfSEFORExFIERjbFBNVV9PcGVuKERDTF9ERVYgZGV2LCBEQ0xfRkxBR1MgZmxhZ3MpCit7CisJa2FsX3VpbnQzMiBoYW5kbGU7CisJa2FsX3VpbnQzMiBzYXZlZE1hc2s9MDsKKworCWlmIChkZXYgIT0gRENMX1BNVSl7CisJCXJldHVybiBEQ0xfSEFORExFX0lOVkFMSUQ7CQkvLyBJbmNvcnJlY3IgZGV2aWNlIElECisJfQorCXNhdmVkTWFzayA9IGthbF9ocnRfU2F2ZUFuZFNldElSUU1hc2soKTsKKwlkY2xfcG11X2hhbmRsZV9jb3VudCsrOworCWhhbmRsZSA9IGRjbF9wbXVfaGFuZGxlX2NvdW50OworI2lmIGRlZmluZWQoRENMX1BNSUNfTU9EVUxFX0NPTlRST0wpCisJZGNsX3BtdV9oYW5kbGVfZmxhZ3MgPSBmbGFnczsKKyNlbmRpZgorCWthbF9ocnRfUmVzdG9yZUlSUU1hc2soc2F2ZWRNYXNrKTsKKworCS8vIFJlZ2lzdGVyIERDTCBkZWZhdWx0IGxpc3IKKwlyZXR1cm4gaGFuZGxlOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFBNVV9SZWFkRGF0YQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgUE1VIG1vZHVsZSBub3cuCisqCisqIFBBUkFNRVRFUlMKKyoJTi9BCisqCisqIFJFVFVSTlMKKyoJU1RBVFVTX1VOU1VQUE9SVEVECisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworRENMX1NUQVRVUyBEY2xQTVVfUmVhZERhdGEoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9CVUZGICpidWZmLCBEQ0xfQlVGRl9MRU4gYnVmX2xlbiwgRENMX09QVElPTlMgb3B0aW9ucykKK3sKKworCXJldHVybiBTVEFUVVNfVU5TVVBQT1JURUQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQTVVfV3JpdGVEYXRhCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBQTVUgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitEQ0xfU1RBVFVTIERjbFBNVV9Xcml0ZURhdGEoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9CVUZGICpidWZmLCBEQ0xfQlVGRl9MRU4gYnVmX2xlbiwgRENMX09QVElPTlMgb3B0aW9ucykKK3sKKworCXJldHVybiBTVEFUVVNfVU5TVVBQT1JURUQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEZVTkNUSU9OCisqICBEY2xQTVVfQ29uZmlndXJlCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSBQTVUgbW9kdWxlIG5vdy4KKyoKKyogUEFSQU1FVEVSUworKglOL0EKKyoKKyogUkVUVVJOUworKglTVEFUVVNfVU5TVVBQT1JURUQKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitEQ0xfU1RBVFVTIERjbFBNVV9Db25maWd1cmUoRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DT05GSUdVUkVfVCAqY29uZmlndXJlKQoreworCisJcmV0dXJuIFNUQVRVU19VTlNVUFBPUlRFRDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFBNVV9SZWdpc3RlckNhbGxiYWNrCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHNldCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIFBNVSBtb2R1bGUuCisqCisqIFBBUkFNRVRFUlMKKyogIGhhbmRsZTogdGhlIHJldHVybmVkIGhhbmRsZSB2YWx1ZSBvZiBEY2xQTVVfT3BlbgorKiAgZXZlbnQ6IFN1cHBvcnRlZCBldmVudHM6CisqICAgICAgICAgRVZFTlRfUE1VX1RJTUVPVVQ6IFdhdGNoIGRvZyB0aW1lIG91dCBpbnRlcnJ1cHQKKyogIGNhbGxiYWNrOiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHJlZ2lzdGVyZWQgZXZlbnRzCisqCisqIFJFVFVSTlMKKyogIFNUQVRVU19PSzogU3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KKyogIFNUQVRVU19JTlZBTElEX0hBTkRMRTogSXQncyBhIGludmFsaWQgaGFuZGxlLgorKiAgU1RBVFVTX05PVF9PUEVORUQ6IFRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIG9wZW5lZC4KKyogIFNUQVRVU19JTlZBTElEX0VWRU5UOiBUaGUgZXZlbnQgcGFyYW1ldGVyIGlzIGludmFsaWQuCisqICBTVEFUVVNfVU5TVVBQT1JURUQ6IFRoZSBmdW5jdGlvbiBpcyBOT1Qgc3VwcG9ydGVkCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworRENMX1NUQVRVUyBEY2xQTVVfUmVnaXN0ZXJDYWxsYmFjayhEQ0xfSEFORExFIGhhbmRsZSwgRENMX0VWRU5UIGV2ZW50LCBQRk5fRENMX0NBTExCQUNLIGNhbGxiYWNrKQoreworCXJldHVybiBTVEFUVVNfVU5TVVBQT1JURUQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFBNVV9Db250cm9sCisqCisqIERFU0NSSVBUSU9OCisqICBUaGlzIGZ1bmN0aW9uIGlzIHRvIHNlbmQgY29tbWFuZCB0byBjb250cm9sIHRoZSBQTVUgbW9kdWxlLgorKgorKiBQQVJBTUVURVJTCisqICBoYW5kbGU6IFRoZSBoYW5kbGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBEY2xQTVVfT3BlbgorKiAgY21kOiBhIGNvbnRyb2wgY29tbWFuZCBmb3IgUE1VIG1vZHVsZQorKiAgICAgICBQTVUzODogUmVmZXIgZGNsX3BtdTM4LmMKKyoKKyoKKyogIGRhdGE6IFRoZSBkYXRhIG9mIHRoZSBjb250cm9sIGNvbW1hbmQKKyogICAgICAgIFBNVTM4OiBSZWZlciBkY2xfcG11MzguYworKgorKgorKiBSRVRVUk5TCisqICBTVEFUVVNfT0s6IGNvbW1hbmQgaXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LgorKiAgU1RBVFVTX0ZBSUw6IGNvbW1hbmQgaXMgZmFpbGVkLgorKiAgU1RBVFVTX0lOVkFMSURfQ01EOiBJdCdzIGEgaW52YWxpZCBjb21tYW5kLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0RDTF9TVEFUVVMgRGNsUE1VX0NvbnRyb2xfV3JhcChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhLCBQTUlDX0xPR19UWVBFX0VOVU0gdHlwZSkKK3sKKworI2lmIGRlZmluZWQoRENMX1BNSUNfQUNDRVNTX1RJTUVfTE9HKQorCURDTF9TVEFUVVMgcG11X2NvbnRyb2xfc3RhdHVzOworCURDTF9VSU5UMzIgZHVyYXRpb25faWR4ID0gcG1pY19hY2Nlc3NfZHVyYXRpb25faW5kZXhbdHlwZV07CisJRENMX1VJTlQzMiBpc3N1ZV9pZHggPSBwbWljX2FjY2Vzc190aW1pbmdfaXNzdWVfaW5kZXhbdHlwZV07CisKKworCWlmKHR5cGUgPT0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOKQorCQlrYWxfdGFrZV9zcGlubG9jayhkY2xfcG1pY19jb250cm9sX3NwaW5sb2NrLCBLQUxfSU5GSU5JVEVfV0FJVCk7CisKKwlwbWljX2FjY2Vzc19kdXJhdGlvbl9sb2dbdHlwZV1bUE1JQ19EQ0xfREJHXVtkdXJhdGlvbl9pZHhdLnN0YXJ0X3RpbWUgPSB1c3RfZ2V0X2N1cnJlbnRfdGltZSgpOworCisgICAgcG11X2NvbnRyb2xfc3RhdHVzID0gcG11X2NvbnRyb2xfaGFuZGxlcihoYW5kbGUsY21kLGRhdGEpOworCisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfRENMX0RCR11bZHVyYXRpb25faWR4XS5lbmRfdGltZSA9IHVzdF9nZXRfY3VycmVudF90aW1lKCk7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfRENMX0RCR11bZHVyYXRpb25faWR4XS5jbWQgPSBjbWQ7CisgICAgcG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfRENMX0RCR11bZHVyYXRpb25faWR4XS5kdXJhdGlvbl90aW1lID0gdXN0X3VzX2R1cmF0aW9uKHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0RDTF9EQkddW2R1cmF0aW9uX2lkeF0uc3RhcnRfdGltZSwgCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgIHBtaWNfYWNjZXNzX2R1cmF0aW9uX2xvZ1t0eXBlXVtQTUlDX0RDTF9EQkddW2R1cmF0aW9uX2lkeF0uZW5kX3RpbWUpOworCisgICAgaWYocG1pY19hY2Nlc3NfZHVyYXRpb25fbG9nW3R5cGVdW1BNSUNfRENMX0RCR11bZHVyYXRpb25faWR4XS5kdXJhdGlvbl90aW1lID4gUE1JQ19BQ0NFU1NfRFVSQVRJT05fVEhSRVNIT0xEKQorICAgIHsKKyAgICAgICAgcG1pY19hY2Nlc3NfdGltaW5nX2lzc3VlX2xvZ1t0eXBlXVtpc3N1ZV9pZHhdID0gZHVyYXRpb25faWR4OworICAgICAgICBpc3N1ZV9pZHgrKzsKKyAgICAgICAgaXNzdWVfaWR4ID0gaXNzdWVfaWR4ICYoTUFYX1BNSUNfRFVSQVRJT05fSU5GT19TSVpFIC0gMSk7CisJCXBtaWNfYWNjZXNzX3RpbWluZ19pc3N1ZV9pbmRleFt0eXBlXSA9IGlzc3VlX2lkeDsKKyAgICB9CisKKyAgICBkdXJhdGlvbl9pZHgrKzsKKyAgICBkdXJhdGlvbl9pZHggPSBkdXJhdGlvbl9pZHggJihNQVhfUE1JQ19EVVJBVElPTl9JTkZPX1NJWkUgLSAxKTsKKwlwbWljX2FjY2Vzc19kdXJhdGlvbl9pbmRleFt0eXBlXSA9IGR1cmF0aW9uX2lkeDsKKworCWlmKHR5cGUgPT0gUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOKQorCQlrYWxfZ2l2ZV9zcGlubG9jayhkY2xfcG1pY19jb250cm9sX3NwaW5sb2NrKTsKKworCXJldHVybiBwbXVfY29udHJvbF9zdGF0dXM7CisKKyNlbHNlCisJcmV0dXJuIHBtdV9jb250cm9sX2hhbmRsZXIoaGFuZGxlLCBjbWQsIGRhdGEpOworI2VuZGlmCit9CisKK0RDTF9TVEFUVVMgRGNsUE1VX0NvbnRyb2woRENMX0hBTkRMRSBoYW5kbGUsIERDTF9DVFJMX0NNRCBjbWQsIERDTF9DVFJMX0RBVEFfVCAqZGF0YSkKK3sKKwlEQ0xfU1RBVFVTIHBtdV9jb250cm9sX3N0YXR1czsKKwkKKwlpZiAoa2FsX2dldF9jdXJyZW50X2RvbWFpbigpID09IEtBTF9ET01BSU5fTk9STUFMKQorCXsKKwkJcG11X2NvbnRyb2xfc3RhdHVzID0gRGNsUE1VX0NvbnRyb2xfV3JhcChoYW5kbGUsIGNtZCwgZGF0YSwgUE1JQ19MT0dfVFlQRV9OT1JNQUxfRE9NQUlOKTsKKwl9IGVsc2UgeyAgLy9IUlQvQ0hSVCBkb21haW4KKwkJa2FsX2F0b21pY19pbmMoJmRjbF9wbWljX2hydF9mbGFnKTsKKwkJcG11X2NvbnRyb2xfc3RhdHVzID0gRGNsUE1VX0NvbnRyb2xfV3JhcChoYW5kbGUsIGNtZCwgZGF0YSwgUE1JQ19MT0dfVFlQRV9IUlRfRE9NQUlOKTsKKwkJa2FsX2F0b21pY19kZWMoJmRjbF9wbWljX2hydF9mbGFnKTsKKwl9CisKKwlyZXR1cm4gcG11X2NvbnRyb2xfc3RhdHVzOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRlVOQ1RJT04KKyogIERjbFBNVV9DbG9zZQorKgorKiBERVNDUklQVElPTgorKiAgVGhpcyBmdW5jdGlvbiBpcyB0byBjbG9zZSB0aGUgUE1VIG1vZHVsZS4KKyoKKyogUEFSQU1FVEVSUworKiAgaGFuZGxlOiB0aGUgcmV0dXJuZWQgaGFuZGxlIHZhbHVlIG9mIERjbFBNVV9PcGVuCisqCisqIFJFVFVSTlMKKyogIFNUQVRVU19PSworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0RDTF9TVEFUVVMgRGNsUE1VX0Nsb3NlKERDTF9IQU5ETEUgaGFuZGxlKQoreworCXJldHVybiBTVEFUVVNfT0s7Cit9CisKKworI2Vsc2UgLy8gRFJWX1BNSUNfT0ZGCitEQ0xfU1RBVFVTIERjbFBNVV9Jbml0aWFsaXplKHZvaWQpCit7CisgICAgcmV0dXJuIFNUQVRVU19VTlNVUFBPUlRFRDsKK30KKworRENMX0hBTkRMRSBEY2xQTVVfT3BlbihEQ0xfREVWIGRldiwgRENMX0ZMQUdTIGZsYWdzKQoreworICAgIHJldHVybiBTVEFUVVNfVU5TVVBQT1JURUQ7Cit9CisKK0RDTF9TVEFUVVMgRGNsUE1VX1JlYWREYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOIGJ1Zl9sZW4sIERDTF9PUFRJT05TIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIFNUQVRVU19VTlNVUFBPUlRFRDsKK30KKworRENMX1NUQVRVUyBEY2xQTVVfV3JpdGVEYXRhKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQlVGRiAqYnVmZiwgRENMX0JVRkZfTEVOIGJ1Zl9sZW4sIERDTF9PUFRJT05TIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIFNUQVRVU19VTlNVUFBPUlRFRDsKK30KKworRENMX1NUQVRVUyBEY2xQTVVfQ29uZmlndXJlKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfQ09ORklHVVJFX1QgKmNvbmZpZ3VyZSkKK3sKKyAgICByZXR1cm4gU1RBVFVTX1VOU1VQUE9SVEVEOworfQorCitEQ0xfU1RBVFVTIERjbFBNVV9SZWdpc3RlckNhbGxiYWNrKERDTF9IQU5ETEUgaGFuZGxlLCBEQ0xfRVZFTlQgZXZlbnQsIFBGTl9EQ0xfQ0FMTEJBQ0sgY2FsbGJhY2spCit7CisgICAgcmV0dXJuIFNUQVRVU19VTlNVUFBPUlRFRDsKK30KKworRENMX1NUQVRVUyBEY2xQTVVfQ29udHJvbChEQ0xfSEFORExFIGhhbmRsZSwgRENMX0NUUkxfQ01EIGNtZCwgRENMX0NUUkxfREFUQV9UICpkYXRhKQoreworICAgIHJldHVybiBTVEFUVVNfVU5TVVBQT1JURUQ7Cit9CisKK0RDTF9TVEFUVVMgRGNsUE1VX0Nsb3NlKERDTF9IQU5ETEUgaGFuZGxlKQoreworICAgIHJldHVybiBTVEFUVVNfVU5TVVBQT1JURUQ7Cit9CisKKyNlbmRpZiAvLyBEUlZfUE1JQ19PRkYKKworCmRpZmYgLS1naXQgYS9tY3UvZHJpdmVyL2RldmRydi9wbWljL3NyYy9kY2xfcG11X2NvbW1vbi5jIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtdV9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzViOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWN1L2RyaXZlci9kZXZkcnYvcG1pYy9zcmMvZGNsX3BtdV9jb21tb24uYwpAQCAtMCwwICsxLDE3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgU3RhdGVtZW50OgorKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogIFRoaXMgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IENvcHlyaWdodCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZAorKiAgaGVyZWluIGlzIGNvbmZpZGVudGlhbC4gVGhlIHNvZnR3YXJlIG1heSBub3QgYmUgY29waWVkIGFuZCB0aGUgaW5mb3JtYXRpb24KKyogIGNvbnRhaW5lZCBoZXJlaW4gbWF5IG5vdCBiZSB1c2VkIG9yIGRpc2Nsb3NlZCBleGNlcHQgd2l0aCB0aGUgd3JpdHRlbgorKiAgcGVybWlzc2lvbiBvZiBNZWRpYVRlayBJbmMuIChDKSAyMDA1CisqCisqICBCWSBPUEVOSU5HIFRISVMgRklMRSwgQlVZRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKKyogIFRIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNRURJQVRFSyBTT0ZUV0FSRSIpCisqICBSRUNFSVZFRCBGUk9NIE1FRElBVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBCVVlFUiBPTgorKiAgQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNRURJQVRFSyBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMsCisqICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorKiAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisqICBORUlUSEVSIERPRVMgTUVESUFURUsgUFJPVklERSBBTlkgV0FSUkFOVFkgV0hBVFNPRVZFUiBXSVRIIFJFU1BFQ1QgVE8gVEhFCisqICBTT0ZUV0FSRSBPRiBBTlkgVEhJUkQgUEFSVFkgV0hJQ0ggTUFZIEJFIFVTRUQgQlksIElOQ09SUE9SQVRFRCBJTiwgT1IKKyogIFNVUFBMSUVEIFdJVEggVEhFIE1FRElBVEVLIFNPRlRXQVJFLCBBTkQgQlVZRVIgQUdSRUVTIFRPIExPT0sgT05MWSBUTyBTVUNICisqICBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uIE1FRElBVEVLIFNIQUxMIEFMU08KKyogIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgQU5ZIE1FRElBVEVLIFNPRlRXQVJFIFJFTEVBU0VTIE1BREUgVE8gQlVZRVInUworKiAgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUiBTVEFOREFSRCBPUiBPUEVOIEZPUlVNLgorKgorKiAgQlVZRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNRURJQVRFSydTIEVOVElSRSBBTkQgQ1VNVUxBVElWRQorKiAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTUVESUFURUsgU09GVFdBUkUgUkVMRUFTRUQgSEVSRVVOREVSIFdJTEwgQkUsCisqICBBVCBNRURJQVRFSydTIE9QVElPTiwgVE8gUkVWSVNFIE9SIFJFUExBQ0UgVEhFIE1FRElBVEVLIFNPRlRXQVJFIEFUIElTU1VFLAorKiAgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRSBDSEFSR0UgUEFJRCBCWSBCVVlFUiBUTworKiAgTUVESUFURUsgRk9SIFNVQ0ggTUVESUFURUsgU09GVFdBUkUgQVQgSVNTVUUuIAorKgorKiAgVEhFIFRSQU5TQUNUSU9OIENPTlRFTVBMQVRFRCBIRVJFVU5ERVIgU0hBTEwgQkUgQ09OU1RSVUVEIElOIEFDQ09SREFOQ0UKKyogIFdJVEggVEhFIExBV1MgT0YgVEhFIFNUQVRFIE9GIENBTElGT1JOSUEsIFVTQSwgRVhDTFVESU5HIElUUyBDT05GTElDVCBPRgorKiAgTEFXUyBQUklOQ0lQTEVTLiAgQU5ZIERJU1BVVEVTLCBDT05UUk9WRVJTSUVTIE9SIENMQUlNUyBBUklTSU5HIFRIRVJFT0YgQU5ECisqICBSRUxBVEVEIFRIRVJFVE8gU0hBTEwgQkUgU0VUVExFRCBCWSBBUkJJVFJBVElPTiBJTiBTQU4gRlJBTkNJU0NPLCBDQSwgVU5ERVIKKyogIFRIRSBSVUxFUyBPRiBUSEUgSU5URVJOQVRJT05BTCBDSEFNQkVSIE9GIENPTU1FUkNFIChJQ0MpLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZpbGVuYW1lOgorICogLS0tLS0tLS0tCisgKiAgICBkY2xfcG11X2NvbW1vbi5jCisgKgorICogUHJvamVjdDoKKyAqIC0tLS0tLS0tCisgKiAgIE1PTFkKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIC0tLS0tLS0tLS0tLQorICogICBUaGlzIE1vZHVsZSBpcyBmb3IgUE1VIGNvbW1vbiBmdW5jdGlvbnMKKyAqCisgKiBBdXRob3I6CisgKiAtLS0tLS0tCisgKiAtLS0tLS0tCisgKgorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImRjbF9wbXVfc3cuaCIKKyNpbmNsdWRlICJrYWxfcHVibGljX2FwaS5oIgorCitleHRlcm4gUE1VX01PRF9CQVNFQUREUl9FTlRSWSBwbXVfbGRvX2JiX3Byb2ZpbGVbXTsKK2V4dGVybiBEQ0xfVUlOVDggcG11TW9kdG9JZHhbXTsKKworZXh0ZXJuIFBNVV9QQVJBTUVURVJfVEFCTEVfRU5UUlkgcG11X3BhcmFtZXRlcl90YWJsZVtdOworZXh0ZXJuIERDTF9VSU5UMTYgcG11X3BhcmFtZXRlcl9zaXplOworCisjaWYgZGVmaW5lZChQTUlDX1BSRVNFTlQpCitEQ0xfVUlOVDE2IFBNVV9nZXRfUGFyYW1ldGVyX0lkeChEQ0xfQ1RSTF9DTUQgY21kKQoreworCVBNVV9QQVJBTUVURVJfVEFCTEVfRU5UUlkgKnB0YWJsZSA9IHBtdV9wYXJhbWV0ZXJfdGFibGU7CisJRENMX1VJTlQzMiBpLHNpemUgPSBwbXVfcGFyYW1ldGVyX3NpemU7CisJCisJZm9yKGkgPSAwO2kgPCBzaXplO2krKykKKwl7CisJCWlmICgocHRhYmxlW2ldLmNtZCAmIE1PRE1BU0spID09IEFMTE1PRCkKKwkJeworCQkJaWYoKHB0YWJsZVtpXS5jbWQgJiBDTURNQVNLKSA9PSAoY21kICYgQ01ETUFTSykpCisJCQkJYnJlYWs7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAocHRhYmxlW2ldLmNtZCA9PSAoRENMX1VJTlQzMiljbWQpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA+PSBzaXplKQorCQlyZXR1cm4gUEFSQU1FVEVSX1VOS05PV047CisKKwlyZXR1cm4gaTsKK30KKworRENMX1VJTlQxNiBQTVVfUGFyYW1ldGVyX3RvX1ZhbHVlKERDTF9DVFJMX0NNRCBjbWQsRENMX1VJTlQzMiB2YWwpCit7CisJUE1VX1BBUkFNRVRFUl9UQUJMRV9FTlRSWSAqcHRhYmxlOworCURDTF9VSU5UMzIgKnBhcmFtZXRlcjsKKwlEQ0xfVUlOVDE2ICpwdmFsOworCURDTF9VSU5UMzIgaWR4LGksc2l6ZSA9IHBtdV9wYXJhbWV0ZXJfc2l6ZTsKKworCWlkeCA9IFBNVV9nZXRfUGFyYW1ldGVyX0lkeChjbWQpOworCisJLy+oU6azs2+y1bNdqXetyAorCWlmIChpZHggPT1QQVJBTUVURVJfVU5LTk9XTikKKwkJcmV0dXJuIFBBUkFNRVRFUl9VTktOT1dOOworCisJcHRhYmxlID0gJnBtdV9wYXJhbWV0ZXJfdGFibGVbaWR4XTsKKworCQorCXBhcmFtZXRlciA9IChEQ0xfVUlOVDMyICopcHRhYmxlLT5wVmFsczsKKwlzaXplID0gcHRhYmxlLT5zaXplOworCisJZm9yKGkgPSAwO2kgPCBzaXplO2krKykKKwl7CisJCWlmICh2YWwgPT0gcGFyYW1ldGVyW2ldKQorCQl7CisJCQlpZiAocHRhYmxlLT5wUmVnVmFscyA9PSBOVUxMKQorCQkJeworCQkJCXJldHVybiBpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXB2YWwgPSAoRENMX1VJTlQxNiAqKXB0YWJsZS0+cFJlZ1ZhbHM7CisJCQkJcmV0dXJuIHB2YWxbaV07CisJCQl9CisJCX0KKwl9CisKKwkvL6azs2+y1bNdqXetyCym/afkpKOo7G1hdGNoIHZhbHVlCisJQVNTRVJUKDApOworCXJldHVybiAwOworfQorCitEQ0xfVUlOVDMyIFBNVV9WYWx1ZV90b19QYXJhbWV0ZXIoRENMX0NUUkxfQ01EIGNtZCxEQ0xfVUlOVDMyIHZhbCkKK3sKKwlQTVVfUEFSQU1FVEVSX1RBQkxFX0VOVFJZICpwdGFibGU7CisJRENMX1VJTlQzMiAqcGFyYW1ldGVyOworCURDTF9VSU5UMTYgKnB2YWw7CisJRENMX1VJTlQzMiBpZHgsIGksIHNpemU7CisKKwlpZHggPSBQTVVfZ2V0X1BhcmFtZXRlcl9JZHgoY21kKTsKKworCS8vqFOms7NvstWzXal3rcgKKwlpZiAoaWR4ID09IFBBUkFNRVRFUl9VTktOT1dOKQorCQlyZXR1cm4gUEFSQU1FVEVSVkFMX1VOS05PV047CisKKwlwdGFibGUgPSAmcG11X3BhcmFtZXRlcl90YWJsZVtpZHhdOworCisJcGFyYW1ldGVyID0gKERDTF9VSU5UMzIgKilwdGFibGUtPnBWYWxzOworCXB2YWwgPSAoRENMX1VJTlQxNiAqKXB0YWJsZS0+cFJlZ1ZhbHM7CisJc2l6ZSA9IHB0YWJsZS0+c2l6ZTsKKworCWlmIChwdmFsID09IE5VTEwpCisJeworCQlyZXR1cm4gcGFyYW1ldGVyW3ZhbF07CisJfQorCWVsc2UKKwl7CisJCWZvcihpID0gMDtpIDwgc2l6ZTtpKyspCisJCXsKKwkJCWlmIChwdmFsW2ldID09IHZhbCkKKwkJCQlyZXR1cm4gcGFyYW1ldGVyW2ldOworCQl9CisJfQorCisJcmV0dXJuIFBBUkFNRVRFUl9VTktOT1dOOworfQorI2VuZGlmIC8vIEVuZCBvZiAjaWYgZGVmaW5lZChQTUlDX1BSRVNFTlQpCisKKworCisKKworCg==