ZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L01ha2VmaWxlCmluZGV4IDgzNmQwY2QuLmRkYmY3ZDAgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvZHYvTWFrZWZpbGUKKysrIGIvdmVyaWxvZy9kdi9NYWtlZmlsZQpAQCAtMTksNyArMTksNyBAQAogLlNVRkZJWEVTOgogLlNJTEVOVDogY2xlYW4gYWxsCiAKLVBBVFRFUk5TID0gd2JfcG9ydCByaXNjX2Jvb3QgdXNlcl9yaXNjX2Jvb3QgdXNlcl91YXJ0IHVzZXJfcXNwaSB1c2VyX2kyY20gcmlzY3ZfcmVncmVzcyB1c2VyX2Jhc2ljIHVzZXJfdWFydF9tYXN0ZXIgdWFydF9tYXN0ZXIKK1BBVFRFUk5TID0gd2JfcG9ydCByaXNjX2Jvb3QgdXNlcl9yaXNjX2Jvb3QgdXNlcl91YXJ0IHVzZXJfcXNwaSB1c2VyX2kyY20gcmlzY3ZfcmVncmVzcyB1c2VyX2Jhc2ljIHVzZXJfdXNiIHVzZXJfdWFydF9tYXN0ZXIgdWFydF9tYXN0ZXIKIAogYWxsOiAgJHtQQVRURVJOU30KIAlmb3IgaSBpbiAke1BBVFRFUk5TfTsgZG8gXApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9hZ2VudHMvdGVzdF9jb250cm9sLnYgYi92ZXJpbG9nL2R2L2FnZW50cy90ZXN0X2NvbnRyb2wudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZWIwNjZhCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9hZ2VudHMvdGVzdF9jb250cm9sLnYKQEAgLTAsMCArMSw4MiBAQAorCittb2R1bGUgdGVzdF9jb250cm9sKCk7CisgIAorICBldmVudCAgICAgICAgZXJyb3JfZGV0ZWN0ZWQ7CisgIGludGVnZXIgICAgICBlcnJvcl9jb3VudDsKKyAgcmVnICAgICAgICAgIHZlcmJvc2VfbXNnOworICAKKyAgLy8gaW5pdGlhbGl6ZSBkZWJ1ZyB2YXJpYWJsZXMgCisgIGluaXRpYWwKKyAgICBiZWdpbgorICAgICAgZXJyb3JfY291bnQgPSAwOworICAgICAgdmVyYm9zZV9tc2cgPSAwOworICAgIGVuZAorCisKKyAgLy8gY291bnQgdGhlIG51bWJlciBlcnJvciAKKyAgYWx3YXlzIEAoZXJyb3JfZGV0ZWN0ZWQpCisgICAgYmVnaW4KKyAgICAgIGVycm9yX2NvdW50ID0gZXJyb3JfY291bnQgKyAxOworICAgIGVuZAorICAKKyAgCisgIC8vIGVuYWJsaW5nL2Rpc2FibGluZyAgbWVzc2FnZQorICB0YXNrIG1zZ19lbmFibGU7CisgICAgaW5wdXQgWzIwKjg6MV0gbXNnX3NyYzsKKyAgICBpbnB1dCBtc2dfZW5hYmxlOworICAgIGJlZ2luCisgICAgICB2ZXJib3NlX21zZyA9IG1zZ19lbmFibGU7CisgICAgICBpZiAobXNnX2VuYWJsZSkKKyAgICAgICAgJGRpc3BsYXkoIiAgICAgICAgIEF0IHRpbWUgJXQgKiogJXM6IGVuYWJsaW5nIG1lc3NhZ2VzIiwkdGltZSwgbXNnX3NyYyk7CisgICAgICBlbHNlCisgICAgICAgICRkaXNwbGF5KCIgICAgICAgICBBdCB0aW1lICV0ICoqICVzOiBkaXNhYmxpbmcgbWVzc2FnZXMiLCR0aW1lLCBtc2dfc3JjKTsKKyAgICBlbmQKKyAgZW5kdGFzayAvLyBtc2cKKworICAvLyBnZW5lcmF0aW5nIG1lc3NhZ2UKKyAgdGFzayBtc2c7CisgICAgaW5wdXQgWzIwKjg6MV0gbXNnX3NyYzsKKyAgICBpbnB1dCBbNDAqODoxXSBtc2dfdGV4dDsKKyAgICBiZWdpbgorICAgICAgaWYgKHZlcmJvc2VfbXNnKQorICAgICAgICAkZGlzcGxheSgiICAgICAgICAgQXQgdGltZSAldCAqKiAlczogTXNnOiAlcyIsJHRpbWUsIG1zZ19zcmMsIG1zZ190ZXh0KTsKKyAgICBlbmQKKyAgZW5kdGFzayAvLyBtc2cKKworICAvLyBnZW5lcmF0aW5nIGxvbmcgbWVzc2FnZQorICB0YXNrIG1zZ2w7CisgICAgaW5wdXQgWzQwKjg6MV0gbXNnX3NyYzsKKyAgICBpbnB1dCBbODAqODoxXSBtc2dfdGV4dDsKKyAgICBiZWdpbgorICAgICAgaWYgKHZlcmJvc2VfbXNnKQorICAgICAgICAkZGlzcGxheSgiICAgICAgICAgQXQgdGltZSAldCAqKiAlczogTXNnOiAlcyIsJHRpbWUsIG1zZ19zcmMsIG1zZ190ZXh0KTsKKyAgICBlbmQKKyAgZW5kdGFzayAvLyBtc2cKKworICAvLyBnZW5lcmF0aW5nIHRoZSBlcnJvciBtZXNzYWdlCisgIHRhc2sgZXJyOworICAgIGlucHV0IFsyMCo4OjFdIGVycl9zcmM7CisgICAgaW5wdXQgWzQwKjg6MV0gZXJyX3RleHQ7CisgICAgYmVnaW4KKyAgICAgIC0+IGVycm9yX2RldGVjdGVkOworICAgICAgJGRpc3BsYXkoIlRpbWUgJTBkLCAlcyBFcnJvcjogJXMiLCR0aW1lLCBlcnJfc3JjLCBlcnJfdGV4dCk7CisgICAgZW5kCisgIGVuZHRhc2sgLy8gZXJyCisKKwordGFzayBmaW5pc2hfdGVzdDsKK2JlZ2luCisKKyAgICRkaXNwbGF5KCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CisgICBpZiAoIGVycm9yX2NvdW50ID09IDAgKQorICAgICAgJGRpc3BsYXkoIiogVEVTVDogUEFTU0VEIik7CisgICBlbHNlCisgICAgICAkZGlzcGxheSgiKiBURVNUOiBGQUlMRURcbipcdEVycm9yKHMpID0gJWQiLCBlcnJvcl9jb3VudCk7CisKKyAgICRkaXNwbGF5KCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIik7CitlbmQKK2VuZHRhc2sKKworCitlbmRtb2R1bGUgLy8gZGVidWdfcHJvYworCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2FnZW50cy91c2JfYWdlbnRzLnYgYi92ZXJpbG9nL2R2L2FnZW50cy91c2JfYWdlbnRzLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI2NjU2NwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYWdlbnRzL3VzYl9hZ2VudHMudgpAQCAtMCwwICsxLDEwMTAgQEAKKworYGRlZmluZSBUT1AgdXNlcl91c2JfdGIKKworbW9kdWxlIHVzYl9hZ2VudDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGVmaW5lczoKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gUmVzcG9uc2UgdmFsdWVzCitgZGVmaW5lIFVTQl9SRVNfT0sgICAgICA4J2gwCitgZGVmaW5lIFVTQl9SRVNfTkFLICAgICA4J2hGRgorYGRlZmluZSBVU0JfUkVTX1NUQUxMICAgOCdoRkUKK2BkZWZpbmUgVVNCX1JFU19USU1FT1VUIDgnaEZECisKKworLy8gVVNCIFBJRCB2YWx1ZXMKK2BkZWZpbmUgUElEX09VVCAgICAgICAgOCdoRTEKK2BkZWZpbmUgUElEX0lOICAgICAgICAgOCdoNjkKK2BkZWZpbmUgUElEX1NPRiAgICAgICAgOCdoQTUKK2BkZWZpbmUgUElEX1NFVFVQICAgICAgOCdoMkQKKworYGRlZmluZSBQSURfREFUQTAgICAgICA4J2hDMworYGRlZmluZSBQSURfREFUQTEgICAgICA4J2g0QgorCitgZGVmaW5lIFBJRF9BQ0sgICAgICAgIDgnaEQyCitgZGVmaW5lIFBJRF9OQUsgICAgICAgIDgnaDVBCitgZGVmaW5lIFBJRF9TVEFMTCAgICAgIDgnaDFFCisKKy8vIFN0YW5kYXJkIHJlcXVlc3RzICh2aWEgU0VUVVAgcGFja2V0cykKK2BkZWZpbmUgUkVRX0dFVF9TVEFUVVMgICAgICAgIDgnaDAwCitgZGVmaW5lIFJFUV9DTEVBUl9GRUFUVVJFICAgICA4J2gwMQorYGRlZmluZSBSRVFfU0VUX0ZFQVRVUkUgICAgICAgOCdoMDMKK2BkZWZpbmUgUkVRX1NFVF9BRERSRVNTICAgICAgIDgnaDA1CitgZGVmaW5lIFJFUV9HRVRfREVTQ1JJUFRPUiAgICA4J2gwNgorYGRlZmluZSBSRVFfU0VUX0RFU0NSSVBUT1IgICAgOCdoMDcKK2BkZWZpbmUgUkVRX0dFVF9DT05GSUdVUkFUSU9OIDgnaDA4CitgZGVmaW5lIFJFUV9TRVRfQ09ORklHVVJBVElPTiA4J2gwOQorYGRlZmluZSBSRVFfR0VUX0lOVEVSRkFDRSAgICAgOCdoMEEKK2BkZWZpbmUgUkVRX1NFVF9JTlRFUkZBQ0UgICAgIDgnaDBCCitgZGVmaW5lIFJFUV9TWU5DX0ZSQU1FICAgICAgICA4J2gwQworCisvLyBEZXNjcmlwdG9yIHR5cGVzCitgZGVmaW5lIERFU0NfREVWSUNFICAgICAgICAgICA4J2gwMQorYGRlZmluZSBERVNDX0NPTkZJR1VSQVRJT04gICAgOCdoMDIKK2BkZWZpbmUgREVTQ19TVFJJTkcgICAgICAgICAgIDgnaDAzCitgZGVmaW5lIERFU0NfSU5URVJGQUNFICAgICAgICA4J2gwNAorYGRlZmluZSBERVNDX0VORFBPSU5UICAgICAgICAgOCdoMDUKK2BkZWZpbmUgREVTQ19ERVZfUVVBTElGSUVSICAgIDgnaDA2CitgZGVmaW5lIERFU0NfT1RIRVJfU1BFRURfQ09ORiA4J2gwNworYGRlZmluZSBERVNDX0lGX1BPV0VSICAgICAgICAgOCdoMDgKKworLy8gRGV2aWNlIGNsYXNzCitgZGVmaW5lIERFVl9DTEFTU19SRVNFUlZFRCAgICAgIDgnaDAwCitgZGVmaW5lIERFVl9DTEFTU19BVURJTyAgICAgICAgIDgnaDAxCitgZGVmaW5lIERFVl9DTEFTU19DT01NUyAgICAgICAgIDgnaDAyCitgZGVmaW5lIERFVl9DTEFTU19ISUQgICAgICAgICAgIDgnaDAzCitgZGVmaW5lIERFVl9DTEFTU19NT05JVE9SICAgICAgIDgnaDA0CitgZGVmaW5lIERFVl9DTEFTU19QSFlfSUYgICAgICAgIDgnaDA1CitgZGVmaW5lIERFVl9DTEFTU19QT1dFUiAgICAgICAgIDgnaDA2CitgZGVmaW5lIERFVl9DTEFTU19QUklOVEVSICAgICAgIDgnaDA3CitgZGVmaW5lIERFVl9DTEFTU19TVE9SQUdFICAgICAgIDgnaDA4CitgZGVmaW5lIERFVl9DTEFTU19IVUIgICAgICAgICAgIDgnaDA5CitgZGVmaW5lIERFVl9DTEFTU19UTUMgICAgICAgICAgIDgnaEZFCitgZGVmaW5lIERFVl9DTEFTU19WRU5ET1JfQ1VTVE9NIDgnaEZGCisKKy8vIERldmljZSBSZXF1ZXN0cyAoYm1SZXF1ZXN0VHlwZSkKK2BkZWZpbmUgUkVRRElSX0hPU1RUT0RFVklDRSAgICAgICAgKDAgPDwgNykKK2BkZWZpbmUgUkVRRElSX0RFVklDRVRPSE9TVCAgICAgICAgKDEgPDwgNykKK2BkZWZpbmUgUkVRVFlQRV9TVEFOREFSRCAgICAgICAgICAgKDAgPDwgNSkKK2BkZWZpbmUgUkVRVFlQRV9DTEFTUyAgICAgICAgICAgICAgKDEgPDwgNSkKK2BkZWZpbmUgUkVRVFlQRV9WRU5ET1IgICAgICAgICAgICAgKDIgPDwgNSkKK2BkZWZpbmUgUkVRUkVDX0RFVklDRSAgICAgICAgICAgICAgKDAgPDwgMCkKK2BkZWZpbmUgUkVRUkVDX0lOVEVSRkFDRSAgICAgICAgICAgKDEgPDwgMCkKK2BkZWZpbmUgUkVRUkVDX0VORFBPSU5UICAgICAgICAgICAgKDIgPDwgMCkKK2BkZWZpbmUgUkVRUkVDX09USEVSICAgICAgICAgICAgICAgKDMgPDwgMCkKKworLy8gRW5kcG9pbnRzCitgZGVmaW5lIEVORFBPSU5UX0RJUl9NQVNLICAgICAgICAgICgxIDw8IDcpCitgZGVmaW5lIEVORFBPSU5UX0RJUl9JTiAgICAgICAgICAgICgxIDw8IDcpCitgZGVmaW5lIEVORFBPSU5UX0RJUl9PVVQgICAgICAgICAgICgwIDw8IDcpCitgZGVmaW5lIEVORFBPSU5UX0FERFJfTUFTSyAgICAgICAgICg4J2g3RikKK2BkZWZpbmUgRU5EUE9JTlRfVFlQRV9NQVNLICAgICAgICAgKDgnaDMpCitgZGVmaW5lIEVORFBPSU5UX1RZUEVfQ09OVFJPTCAgICAgICgwKQorYGRlZmluZSBFTkRQT0lOVF9UWVBFX0lTTyAgICAgICAgICAoMSkKK2BkZWZpbmUgRU5EUE9JTlRfVFlQRV9CVUxLICAgICAgICAgKDIpCitgZGVmaW5lIEVORFBPSU5UX1RZUEVfSU5URVJSVVBUICAgICgzKQorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERlZmluZXM6CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitgZGVmaW5lIFVTQl9DVFJMICAgICAgICAgIDgnaDAKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1RYX0ZMVVNIICAgICAgICAgICAgICAgICAgICA4CisgICAgYGRlZmluZSBVU0JfQ1RSTF9UWF9GTFVTSF9TSElGVCAgICAgICAgICAgICAgOAorICAgIGBkZWZpbmUgVVNCX0NUUkxfVFhfRkxVU0hfTUFTSyAgICAgICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RNUFVMTERPV04gICAgICAgICAgICAgIDcKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9ETVBVTExET1dOX1NISUZUICAgICAgICA3CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRE1QVUxMRE9XTl9NQVNLICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRFBQVUxMRE9XTiAgICAgICAgICAgICAgNgorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RQUFVMTERPV05fU0hJRlQgICAgICAgIDYKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9EUFBVTExET1dOX01BU0sgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9URVJNU0VMRUNUICAgICAgICAgICAgICA1CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfVEVSTVNFTEVDVF9TSElGVCAgICAgICAgNQorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX1RFUk1TRUxFQ1RfTUFTSyAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX1hDVlJTRUxFQ1RfU0hJRlQgICAgICAgIDMKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9YQ1ZSU0VMRUNUX01BU0sgICAgICAgICA4J2gzCisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9PUE1PREVfU0hJRlQgICAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfT1BNT0RFX01BU0sgICAgICAgICAgICAgOCdoMworCisgICAgYGRlZmluZSBVU0JfQ1RSTF9FTkFCTEVfU09GICAgICAgICAgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0NUUkxfRU5BQkxFX1NPRl9TSElGVCAgICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9DVFJMX0VOQUJMRV9TT0ZfTUFTSyAgICAgICAgICAgICA4J2gxCisKK2BkZWZpbmUgVVNCX1NUQVRVUyAgICAgICAgOCdoNAorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19TT0ZfVElNRV9TSElGVCAgICAgICAgICAgIDE2CisgICAgYGRlZmluZSBVU0JfU1RBVFVTX1NPRl9USU1FX01BU0sgICAgICAgICAgICAgMTYnaGZmZmYKKworICAgIGBkZWZpbmUgVVNCX1NUQVRVU19SWF9FUlJPUiAgICAgICAgICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfUlhfRVJST1JfU0hJRlQgICAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX1JYX0VSUk9SX01BU0sgICAgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX0xJTkVTVEFURV9CSVRTX1NISUZUICAgICAgMAorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19MSU5FU1RBVEVfQklUU19NQVNLICAgICAgIDgnaDMKKworYGRlZmluZSBVU0JfSVJRX0FDSyAgICAgICA4J2g4CisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ERVZJQ0VfREVURUNUICAgICAgICAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfREVWSUNFX0RFVEVDVF9TSElGVCAgICAgIDMKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RFVklDRV9ERVRFQ1RfTUFTSyAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUiAgICAgICAgICAgICAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19FUlJfU0hJRlQgICAgICAgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfRVJSX01BU0sgICAgICAgICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfRE9ORSAgICAgICAgICAgICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RPTkVfU0hJRlQgICAgICAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ET05FX01BU0sgICAgICAgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19TT0YgICAgICAgICAgICAgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GX1NISUZUICAgICAgICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX1NPRl9NQVNLICAgICAgICAgICAgICAgICA4J2gxCisKK2BkZWZpbmUgVVNCX0lSUV9TVFMgICAgICAgOCdoYworICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfREVWSUNFX0RFVEVDVCAgICAgICAgICAgIDMKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RFVklDRV9ERVRFQ1RfU0hJRlQgICAgICAzCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ERVZJQ0VfREVURUNUX01BU0sgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19FUlIgICAgICAgICAgICAgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSX1NISUZUICAgICAgICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0VSUl9NQVNLICAgICAgICAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RPTkUgICAgICAgICAgICAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ET05FX1NISUZUICAgICAgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRE9ORV9NQVNLICAgICAgICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfU09GICAgICAgICAgICAgICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX1NPRl9TSElGVCAgICAgICAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0ZfTUFTSyAgICAgICAgICAgICAgICAgOCdoMQorCitgZGVmaW5lIFVTQl9JUlFfTUFTSyAgICAgIDgnaDEwCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfREVWSUNFX0RFVEVDVCAgICAgICAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RFVklDRV9ERVRFQ1RfU0hJRlQgICAgIDMKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ERVZJQ0VfREVURUNUX01BU0sgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19FUlIgICAgICAgICAgICAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRVJSX1NISUZUICAgICAgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0VSUl9NQVNLICAgICAgICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RPTkUgICAgICAgICAgICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ET05FX1NISUZUICAgICAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRE9ORV9NQVNLICAgICAgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfU09GICAgICAgICAgICAgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX1NPRl9TSElGVCAgICAgICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19TT0ZfTUFTSyAgICAgICAgICAgICAgICA4J2gxCisKK2BkZWZpbmUgVVNCX1hGRVJfREFUQSAgICAgOCdoMTQKKyAgICBgZGVmaW5lIFVTQl9YRkVSX0RBVEFfVFhfTEVOX1NISUZUICAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfWEZFUl9EQVRBX1RYX0xFTl9NQVNLICAgICAgICAgICAgMTYnaGZmZmYKKworYGRlZmluZSBVU0JfWEZFUl9UT0tFTiAgICA4J2gxOAorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fU1RBUlQgICAgICAgICAgICAgICAgIDMxCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9TVEFSVF9TSElGVCAgICAgICAgICAgMzEKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1NUQVJUX01BU0sgICAgICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0lOICAgICAgICAgICAgICAgICAgICAzMAorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fSU5fU0hJRlQgICAgICAgICAgICAgIDMwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9JTl9NQVNLICAgICAgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9BQ0sgICAgICAgICAgICAgICAgICAgMjkKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0FDS19TSElGVCAgICAgICAgICAgICAyOQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fQUNLX01BU0sgICAgICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fUElEX0RBVEFYICAgICAgICAgICAgIDI4CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9QSURfREFUQVhfU0hJRlQgICAgICAgMjgKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1BJRF9EQVRBWF9NQVNLICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1BJRF9CSVRTX1NISUZUICAgICAgICAxNgorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fUElEX0JJVFNfTUFTSyAgICAgICAgIDgnaGZmCisKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0RFVl9BRERSX1NISUZUICAgICAgICA5CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9ERVZfQUREUl9NQVNLICAgICAgICAgOCdoN2YKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fRVBfQUREUl9TSElGVCAgICAgICAgIDUKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0VQX0FERFJfTUFTSyAgICAgICAgICA4J2hmCisKK2BkZWZpbmUgVVNCX1JYX1NUQVQgICAgICAgOCdoMWMKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1NUQVJUX1BFTkQgICAgICAgICAgICAgICAzMQorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfU1RBUlRfUEVORF9TSElGVCAgICAgICAgIDMxCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9TVEFSVF9QRU5EX01BU0sgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DUkNfRVJSICAgICAgICAgICAgICAgICAgMzAKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0NSQ19FUlJfU0hJRlQgICAgICAgICAgICAzMAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfQ1JDX0VSUl9NQVNLICAgICAgICAgICAgIDgnaDEKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9USU1FT1VUICAgICAgICAgICAgIDI5CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9SRVNQX1RJTUVPVVRfU0hJRlQgICAgICAgMjkKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1JFU1BfVElNRU9VVF9NQVNLICAgICAgICA4J2gxCisKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0lETEUgICAgICAgICAgICAgICAgICAgICAyOAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfSURMRV9TSElGVCAgICAgICAgICAgICAgIDI4CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9JRExFX01BU0sgICAgICAgICAgICAgICAgOCdoMQorCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9SRVNQX0JJVFNfU0hJRlQgICAgICAgICAgMTYKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1JFU1BfQklUU19NQVNLICAgICAgICAgICA4J2hmZgorCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DT1VOVF9CSVRTX1NISUZUICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfQ09VTlRfQklUU19NQVNLICAgICAgICAgIDE2J2hmZmZmCisKK2BkZWZpbmUgVVNCX1dSX0RBVEEgICAgICAgOCdoMjAKKyAgICBgZGVmaW5lIFVTQl9XUl9EQVRBX0RBVEFfU0hJRlQgICAgICAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfV1JfREFUQV9EQVRBX01BU0sgICAgICAgICAgICAgICAgOCdoZmYKKworYGRlZmluZSBVU0JfUkRfREFUQSAgICAgICA4J2gyMAorICAgIGBkZWZpbmUgVVNCX1JEX0RBVEFfREFUQV9TSElGVCAgICAgICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9SRF9EQVRBX0RBVEFfTUFTSyAgICAgICAgICAgICAgICA4J2hmZgorCisKK3Rhc2sgdXNiaHdfcmVnX3dyaXRlOworaW5wdXQgWzc6MF0gYWRkcjsKK2lucHV0IFszMTowXSB3ZGF0YTsKK2JlZ2luCisgICAgYFRPUC53Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfVVNCK2FkZHIsd2RhdGEpOworZW5kCitlbmR0YXNrCisKK3Rhc2sgdXNiaHdfcmVnX3JlYWQ7CitpbnB1dCBbNzowXSBhZGRyOworb3V0cHV0IFszMTowXSByZGF0YTsKK2JlZ2luCisgICAgYFRPUC53Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9VU0IrYWRkcixyZGF0YSk7CitlbmQKK2VuZHRhc2sKKworcGFyYW1ldGVyICAgWE1JVF9CVUZfU0laRSAgICAgICA9IDY0OyAgICAvLyBYbWl0YnVmZmVyIHNpemUKK3BhcmFtZXRlciAgIFJFQ1ZfQlVGX1NJWkUgICAgICAgPSA2NDsgICAgLy8gUmVjdmJ1ZmZlciBzaXplCisKKworcmVnIFs3OjBdICAgWG1pdEJ1ZmZlciAgICAgICAgWzAgOiBYTUlUX0JVRl9TSVpFXTsgLy8gWG1pdCBidWZmZXIKK3JlZyBbNzowXSAgIFJlY3ZCdWZmZXIgICAgICAgIFswIDogUkVDVl9CVUZfU0laRV07IC8vIFJlY3YgYnVmZmVyCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHVzYl9zZXR1cF9wYWNrZXQ6IENyZWF0ZSAmIHNlbmQgU0VUVVAgcGFja2V0CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YXNrIHVzYl9zZXR1cF9wYWNrZXQ7CitpbnB1dCBbNzowXSAgZGV2aWNlX2FkZHJlc3M7IAoraW5wdXQgWzc6MF0gIHJlcXVlc3RfdHlwZTsKK2lucHV0IFs3OjBdICByZXF1ZXN0OyAKK2lucHV0IFsxNTowXSB2YWx1ZTsgCitpbnB1dCBbMTU6MF0gaW5kZXg7IAoraW5wdXQgWzE1OjBdIGxlbmd0aDsKK291dHB1dCAgICAgICBzdGF0dXM7CityZWcgICBbNzowXSAgc3RhdHVzOworaW50ZWdlciBpZHg7CitiZWdpbgorCisgICAgLy8gYm1SZXF1ZXN0VHlwZToKKyAgICAvLyAgRDcgRGF0YSBQaGFzZSBUcmFuc2ZlciBEaXJlY3Rpb24KKyAgICAvLyAgMCA9IEhvc3QgdG8gRGV2aWNlCisgICAgLy8gIDEgPSBEZXZpY2UgdG8gSG9zdAorICAgIC8vICBENi4uNSBUeXBlCisgICAgLy8gIDAgPSBTdGFuZGFyZAorICAgIC8vICAxID0gQ2xhc3MKKyAgICAvLyAgMiA9IFZlbmRvcgorICAgIC8vICAzID0gUmVzZXJ2ZWQKKyAgICAvLyAgRDQuLjAgUmVjaXBpZW50CisgICAgLy8gIDAgPSBEZXZpY2UKKyAgICAvLyAgMSA9IEludGVyZmFjZQorICAgIC8vICAyID0gRW5kcG9pbnQKKyAgICAvLyAgMyA9IE90aGVyCisgICAgLy8gCisgICAgaWR4ID0gMDsKKyAgICBYbWl0QnVmZmVyW2lkeF0gPSByZXF1ZXN0X3R5cGU7ICAgICAgICAgICBpZHggPSBpZHgrMTsKKyAgICBYbWl0QnVmZmVyW2lkeF0gPSByZXF1ZXN0OyAgICAgICAgICAgICAgICBpZHggPSBpZHgrMTsKKyAgICBYbWl0QnVmZmVyW2lkeF0gPSAodmFsdWUgPj4gMCkgICYgOCdoRkY7ICBpZHggPSBpZHgrMTsKKyAgICBYbWl0QnVmZmVyW2lkeF0gPSAodmFsdWUgPj4gOCkgICYgOCdoRkY7ICBpZHggPSBpZHgrMTsKKyAgICBYbWl0QnVmZmVyW2lkeF0gPSAoaW5kZXggPj4gMCkgICYgOCdoRkY7ICBpZHggPSBpZHgrMTsKKyAgICBYbWl0QnVmZmVyW2lkeF0gPSAoaW5kZXggPj4gOCkgICYgOCdoRkY7ICBpZHggPSBpZHgrMTsKKyAgICBYbWl0QnVmZmVyW2lkeF0gPSAobGVuZ3RoID4+IDApICYgOCdoRkY7ICBpZHggPSBpZHgrMTsKKyAgICBYbWl0QnVmZmVyW2lkeF0gPSAobGVuZ3RoID4+IDgpICYgOCdoRkY7ICBpZHggPSBpZHgrMTsKKworICAgIC8vIFNlbmQgU0VUVVAgdG9rZW4gKyBEQVRBMCAoYWx3YXlzIERBVEEwKQorICAgIHVzYmh3X3RyYW5zZmVyX291dChgUElEX1NFVFVQLCBkZXZpY2VfYWRkcmVzcywgMCwgMSwgYFBJRF9EQVRBMCwgaWR4LHN0YXR1cyk7CisKK2VuZAorZW5kdGFzaworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTZXRBZGRyZXNzOiBTZXQgZGV2aWNlIGFkZHJlc3MKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Rhc2sgc2V0dXA7CitpbnB1dCBbNzowXSBkZXZpY2VfYWRkcmVzczsKK2lucHV0ICBbMzowXSBlbmRwb2ludDsKK291dHB1dCBbNzowXXN0YXR1czsKK2JlZ2luCisgICAgLy8kZGlzcGxheSgiVVNCOiBTZXQgZGV2aWNlIGFkZHJlc3MgJWRcbiIsIGRldmljZV9hZGRyZXNzKTsKKyAgICAvLyBTZW5kIFNFVFVQIHRva2VuICsgREFUQTAgKGFsd2F5cyBEQVRBMCkKKyAgICB1c2Jod190cmFuc2Zlcl9vdXQoYFBJRF9TRVRVUCwgZGV2aWNlX2FkZHJlc3MsIGVuZHBvaW50LCAxLCBgUElEX0RBVEEwLCA4LHN0YXR1cyk7CisgICAgLy8gRGV2aWNlIGhhcyA1MG1TIHRvIGFwcGx5IHRoZSBhZGRyZXNzCisgICAgdXNiaHdfdGltZXJfc2xlZXAoNTApOworZW5kCitlbmR0YXNrCisKK3Rhc2sgcHJpbnRzdGF0dXM7CisgICBpbnB1dCBbMzowXSBSZWN2ZFN0YXR1czsKKyAgIGlucHV0IFszOjBdIEV4cFN0YXR1czsKK2JlZ2luCisgICRkaXNwbGF5KCIiKTsKKyAgJGRpc3BsYXkoIiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgIGlmKFJlY3ZkU3RhdHVzICE9PSBFeHBTdGF0dXMgKSBiZWdpbgorICAgICAtPiBgVE9QLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKKyAgICAgJGRpc3BsYXkoIiAgICBFUlJPUjogRXhwZWN0ZWQgU3RhdHVzIGFuZCBPYnNlcnZlZCBTdGF0dXMgZGlkbid0IG1hdGNoIGF0ICUwZCIsICR0aW1lKTsKKyAgICAgaWYoRXhwU3RhdHVzPT00J2IwMDAwKQorICAgICAgICAkZGlzcGxheSgiICAgIEV4cGVjdGVkIFN0YXR1cyBpcyBBQ0sgYXQgJTBkIiwgJHRpbWUpOworICAgICBlbHNlIGlmKEV4cFN0YXR1cz09NCdiMDAwMSkKKyAgICAgICAgJGRpc3BsYXkoIiAgICBFeHBlY3RlZCBTdGF0dXMgaXMgTkFDSyBhdCAlMGQiLCAkdGltZSk7CisgICAgIGVsc2UgaWYoRXhwU3RhdHVzPT00J2IwMDEwKQorICAgICAgICAkZGlzcGxheSgiICAgIEV4cGVjdGVkIFN0YXR1cyBpcyBTVEFMTCBhdCAlMGQiLCAkdGltZSk7CisgICAgIGVsc2UgaWYoRXhwU3RhdHVzPT00J2IwMDExKQorICAgICAgICAkZGlzcGxheSgiICAgIEV4cGVjdGVkIFN0YXR1cyBpcyBUSU1FT1VUIGF0ICUwZCIsICR0aW1lKTsKKyAgICAgZWxzZSBpZihFeHBTdGF0dXM9PTQnYjAxMDApCisgICAgICAgICRkaXNwbGF5KCIgICAgRXhwZWN0ZWQgU3RhdHVzIGlzIElOVkFMSUQgUkVTUE9OU0UgYXQgJTBkIiwgJHRpbWUpOworICAgICBlbHNlIGlmKEV4cFN0YXR1cz09NCdiMDEwMSkKKyAgICAgICAgJGRpc3BsYXkoIiAgICBFeHBlY3RlZCBTdGF0dXMgaXMgQ1JDIEVSUk9SIGF0ICUwZCIsICR0aW1lKTsKKyAgZW5kCisKKyAgaWYoUmVjdmRTdGF0dXM9PTQnYjAwMDApCisgICAgICRkaXNwbGF5KCIgICAgUmVjZWl2ZWQgU3RhdHVzIGlzIEFDSyBhdCAlMGQiLCAkdGltZSk7CisgIGVsc2UgaWYoUmVjdmRTdGF0dXM9PTQnYjAwMDEpCisgICAgICRkaXNwbGF5KCIgICAgUmVjZWl2ZWQgU3RhdHVzIGlzIE5BQ0sgYXQgJTBkIiwgJHRpbWUpOworICBlbHNlIGlmKFJlY3ZkU3RhdHVzPT00J2IwMDEwKQorICAgICAkZGlzcGxheSgiICAgIFJlY2VpdmVkIFN0YXR1cyBpcyBTVEFMTCBhdCAlMGQiLCAkdGltZSk7CisgIGVsc2UgaWYoUmVjdmRTdGF0dXM9PTQnYjAxMSkKKyAgICAgJGRpc3BsYXkoIiAgICBSZWNlaXZlZCBTdGF0dXMgaXMgVElNRU9VVCBhdCAlMGQiLCAkdGltZSk7CisgIGVsc2UgaWYoUmVjdmRTdGF0dXM9PTQnYjAxMDApCisgICAgICRkaXNwbGF5KCIgICAgUmVjZWl2ZWQgU3RhdHVzIGlzIElOVkFMSUQgUkVTUE9OU0UgYXQgJTBkIiwgJHRpbWUpOworICBlbHNlIGlmKFJlY3ZkU3RhdHVzPT00J2IwMTAxKQorICAgICAkZGlzcGxheSgiICAgIFJlY2VpdmVkIFN0YXR1cyBpcyBDUkMgRVJST1IgYXQgJTBkIiwgJHRpbWUpOworICAkZGlzcGxheSgiICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgJGRpc3BsYXkoIiIpOworZW5kCitlbmR0YXNrCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB1c2Jod19yZXNldDogUGVyZm9ybSBVU0IgcmVzZXQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Rhc2sgdXNiaHdfcmVzZXQ7CityZWcgIGJmbGFnOworYmVnaW4KKyAgICAkZGlzcGxheSgiSFc6IEFwcGx5aW5nIFVTQiBSZXNldCBcbiIpOworICAgIC8vIEFzc2VydCBTRTAgLyByZXNldAorICAgIHVzYmh3X2h1Yl9yZXNldDsKKworICAgICRkaXNwbGF5KCJIVzogUmVzZXQgV2FpdCB0aW1lIFN0YXJ0ZWQgXG4iKTsKKyAgICAvLyBXYWl0IGZvciBzb21lIHRpbWUKKyAgICB1c2Jod190aW1lcl9zbGVlcCgxMSk7CisKKyAgICAkZGlzcGxheSgiSFc6IFJlc2V0IFdhaXQgdGltZSBPdmVyIFxuIik7CisKKyAgICAvLyBTdG9wIGFzc2VydGluZyBTRTAsIHNldCBkYXRhIGxpbmVzIHRvIEhpLVoKKyAgICB1c2Jod19odWJfZW5hYmxlKDApOworICAgIHVzYmh3X3RpbWVyX3NsZWVwKDMpOworCisgICAgJGRpc3BsYXkoIkhXOiBXYWl0aW5nIGZvciBkZXZpY2UgaW5zZXJ0aW9uXG4iKTsKKworICAgIC8vIFdhaXQgZm9yIGRldmljZSBkZXRlY3QKKyAgICB1c2Jod19odWJfZGV2aWNlX2RldGVjdGVkKGJmbGFnKTsKKyAgICB3aGlsZSAoIWJmbGFnKWJlZ2luCisgICAgICAgdXNiaHdfaHViX2RldmljZV9kZXRlY3RlZChiZmxhZyk7CisgICAgZW5kCisKKyAgICAkZGlzcGxheSgiSFc6IERldmljZSBkZXRlY3RlZFxuIik7CisKKyAgICAvLyBFbmFibGUgU09GCisgICAgdXNiaHdfaHViX2VuYWJsZSgxKTsKK2VuZAorZW5kdGFzaworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gdXNiaHdfaHViX3Jlc2V0OiBQdXQgYnVzIGludG8gU0UwIHN0YXRlIChyZXNldCkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyAgU2VuZFJlc2V0IDogYXNzZXJ0cyBhIFNFMCBvbiB0aGUgVVNCIGZvciB0aGUgbnVtYmVyIG9mIGJpdCB0aW1lcyBzcGVjaWZpZWQKKy8vICAgICAgICAgICAgICBieSBSZXNldFRpbWUuCisvLyAgSW5wdXQgICAgIDogUmVzZXRUaW1lLCBudW1iZXIgb2YgYml0IHRpbWVzIGZvciB3aGljaCB0byBkcml2ZSBhIHJlc2V0IG9uCisvLyAgICAgICAgICAgICAgdGhlIFVTQgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3Rhc2sgdXNiaHdfaHViX3Jlc2V0OworcmVnIFs3OjBdIHZhbDsKK2JlZ2luCisgICAgJGRpc3BsYXkoIkhXOiBFbnRlciBVU0IgYnVzIHJlc2V0XG4iKTsKKworICAgIC8vIFBvd2VyLXVwIC8gU0UwCisgICAgdmFsID0gMDsKKyAgICB2YWwgPSB2YWwgfCAoMCA8PCBgVVNCX0NUUkxfUEhZX1hDVlJTRUxFQ1RfU0hJRlQpOworICAgIHZhbCA9IHZhbCB8ICgwIDw8IGBVU0JfQ1RSTF9QSFlfVEVSTVNFTEVDVF9TSElGVCk7CisgICAgdmFsID0gdmFsIHwgKDIgPDwgYFVTQl9DVFJMX1BIWV9PUE1PREVfU0hJRlQpOworICAgIHZhbCA9IHZhbCB8ICgxIDw8IGBVU0JfQ1RSTF9QSFlfRFBQVUxMRE9XTl9TSElGVCk7CisgICAgdmFsID0gdmFsIHwgKDEgPDwgYFVTQl9DVFJMX1BIWV9ETVBVTExET1dOX1NISUZUKTsKKyAgICB1c2Jod19yZWdfd3JpdGUoYFVTQl9DVFJMLCB2YWwpOworCitlbmQKK2VuZHRhc2sKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB1c2Jod190aW1lcl9zbGVlcDogUGVyZm9ybSBTbGVlcAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0YXNrIHVzYmh3X3RpbWVyX3NsZWVwOworaW5wdXQgWzc6MF0gUmVzZXRUaW1lOworcmVnIFs3OjBdIHRza1Jlc2V0VGltZTsKK3JlZyBbNzowXSB0c2tSZXNldFRpbWVDb3VudGVyOworYmVnaW4KKyAgIHRza1Jlc2V0VGltZUNvdW50ZXIgPSAwOworICAgdHNrUmVzZXRUaW1lID0gUmVzZXRUaW1lOworICAgZm9yZXZlciBAKHBvc2VkZ2UgYFRPUC51c2JfNDhtaHpfY2xrKSBiZWdpbgorICAgICAgdHNrUmVzZXRUaW1lQ291bnRlciA9IHRza1Jlc2V0VGltZUNvdW50ZXIgKyAxJ2IxOworICAgICAgaWYgKHRza1Jlc2V0VGltZUNvdW50ZXIgPiB0c2tSZXNldFRpbWUpIGJlZ2luCisgICAgICAgICAgICBAKHBvc2VkZ2UgYFRPUC51c2JfNDhtaHpfY2xrKTsKKyAgICAgICAgICAgIEAocG9zZWRnZSBgVE9QLnVzYl80OG1oel9jbGspOworICAgICAgICAgICAgZGlzYWJsZSB1c2Jod190aW1lcl9zbGVlcDsKKyAgICAgIGVuZAorICAgZW5kCitlbmQKK2VuZHRhc2sgCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gdXNiaHdfaHViX2VuYWJsZTogRW5hYmxlIHJvb3QgaHViIChkcml2ZSBkYXRhIGxpbmVzIHRvIEhpWikKKy8vICAgICAgICAgICAgICAgICAgIGFuZCBvcHRpb25hbGx5IHN0YXJ0IFNPRiBwZXJpb2RzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YXNrIHVzYmh3X2h1Yl9lbmFibGU7CitpbnB1dCBlbmFibGVfc29mOworcmVnIFs3OjBdIHZhbDsKK2JlZ2luCisgICAgJGRpc3BsYXkoIkhXOiBFbmFibGUgcm9vdCBodWJcbiIpOworCisgICAgLy8gSG9zdCBGdWxsIFNwZWVkCisgICAgdmFsID0gMDsKKyAgICB2YWwgPSB2YWwgfCAoMSA8PCBgVVNCX0NUUkxfUEhZX1hDVlJTRUxFQ1RfU0hJRlQpOworICAgIHZhbCA9IHZhbCB8ICgxIDw8IGBVU0JfQ1RSTF9QSFlfVEVSTVNFTEVDVF9TSElGVCk7CisgICAgdmFsID0gdmFsIHwgKDAgPDwgYFVTQl9DVFJMX1BIWV9PUE1PREVfU0hJRlQpOworICAgIHZhbCA9IHZhbCB8ICgxIDw8IGBVU0JfQ1RSTF9QSFlfRFBQVUxMRE9XTl9TSElGVCk7CisgICAgdmFsID0gdmFsIHwgKDEgPDwgYFVTQl9DVFJMX1BIWV9ETVBVTExET1dOX1NISUZUKTsKKyAgICB2YWwgPSB2YWwgfCAoMSA8PCBgVVNCX0NUUkxfVFhfRkxVU0hfU0hJRlQpOworCisgICAgLy8gRW5hYmxlIFNPRgorICAgIGlmIChlbmFibGVfc29mKQorICAgICAgICB2YWwgPSB2YWwgfCAoMSA8PCBgVVNCX0NUUkxfRU5BQkxFX1NPRl9TSElGVCk7CisKKyAgICB1c2Jod19yZWdfd3JpdGUoYFVTQl9DVFJMLCB2YWwpOworZW5kCitlbmR0YXNrCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gdXNiaHdfaHViX2RldmljZV9kZXRlY3RlZDogRGV0ZWN0IGRldmljZSBpbnNlcnRlZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFzayB1c2Jod19odWJfZGV2aWNlX2RldGVjdGVkOworb3V0cHV0IGJmbGFnOworcmVnIF91c2JfZnNfZGV2aWNlOworcmVnIFszMTowXSBzdGF0dXM7CityZWcgICAgYmZsYWc7CitiZWdpbgorICAgIC8vIEdldCBsaW5lIHN0YXRlCisgICAgdXNiaHdfcmVnX3JlYWQoYFVTQl9TVEFUVVMsc3RhdHVzKTsKKyAgICBzdGF0dXMgPSBzdGF0dXMgPj4gYFVTQl9TVEFUVVNfTElORVNUQVRFX0JJVFNfU0hJRlQ7CisgICAgc3RhdHVzID0gc3RhdHVzICYgYFVTQl9TVEFUVVNfTElORVNUQVRFX0JJVFNfTUFTSzsKKworICAgIC8vIEZTOiBEKyBwdWxsZWQgaGlnaAorICAgIC8vIExTOiBELSBwdWxsZWQgaGlnaAorICAgIF91c2JfZnNfZGV2aWNlID0gKHN0YXR1cyAmIDEpOworICAgIGlmKHN0YXR1cyAhPSAxKSBiZWdpbgorICAgICAgICRkaXNwbGF5KCJFUlJPUjogVVNCIFB1bGwgVXAgU3RhdHVzIGlzIG5vdCAxLCBPbmx5IEZ1bGwgU2VlZCBTdXBwb3J0ZWQiKTsKKyAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICRkaXNwbGF5KCJTVEFUVVM6IFVTQiBGdWxsIFNwZWVkIERldGVjdGVkIik7CisgICAgZW5kCisKKyAgICBiZmxhZyA9IChzdGF0dXMgIT0gMCk7CitlbmQKK2VuZHRhc2sKKwordGFzayBzdGF0dXNfSU47CitpbnB1dCBbNzowXSBkZXZpY2VfYWRkcjsKK2lucHV0IFszOjBdIGVuZHBvaW50Oworb3V0cHV0IFs3OjBdIGV4aXRfY29kZTsKK3JlZyAgICBbNzowXSBleGl0X2NvZGU7CityZWcgICBbNzowXSBzdGF0dXM7CityZWcgICAgWzc6MF0gcnhfY291bnQ7CitiZWdpbgorICB1c2Jod190cmFuc2Zlcl9pbihgUElEX0lOLCBkZXZpY2VfYWRkciwgZW5kcG9pbnQsIHN0YXR1cyxleGl0X2NvZGUscnhfY291bnQpOworZW5kCitlbmR0YXNrCisKK3Rhc2sgc3RhdHVzX09VVDsKK2lucHV0IFs3OjBdIGRldmljZV9hZGRyOworaW5wdXQgWzM6MF0gZW5kcG9pbnQ7CitvdXRwdXQgWzc6MF0gc3RhdHVzOworYmVnaW4KKyAgdXNiaHdfdHJhbnNmZXJfb3V0KGBQSURfT1VULCBkZXZpY2VfYWRkciwgZW5kcG9pbnQsIDEsIGBQSURfT1VULCAwLHN0YXR1cyk7CitlbmQKK2VuZHRhc2sKKwordGFzayBjb250cm9sX09VVDsKK2lucHV0IFs3OjBdIGRldmljZV9hZGRyOworaW5wdXQgWzM6MF0gZW5kcG9pbnQ7CitpbnB1dCBbNzowXSBCeXRlQ291bnQ7CitvdXRwdXQgWzc6MF0gc3RhdHVzOworYmVnaW4KKyAgdXNiaHdfdHJhbnNmZXJfb3V0KGBQSURfT1VULCBkZXZpY2VfYWRkciwgZW5kcG9pbnQsIDEsIGBQSURfREFUQTEsIEJ5dGVDb3VudCxzdGF0dXMpOworZW5kCitlbmR0YXNrCisKK3Rhc2sgY29udHJvbF9JTjsKK2lucHV0IFs3OjBdIGRldmljZV9hZGRyOworaW5wdXQgWzM6MF0gZW5kcG9pbnQ7CitpbnB1dCBbNzowXSBCeXRlQ291bnQ7CitvdXRwdXQgWzc6MF0gZXhpdF9jb2RlOworcmVnICAgIFs3OjBdIGV4aXRfY29kZTsKK3JlZyAgICBbNzowXSBzdGF0dXM7CityZWcgICAgWzc6MF0gcnhfY291bnQ7CitiZWdpbgorICB1c2Jod190cmFuc2Zlcl9pbihgUElEX0lOLCBkZXZpY2VfYWRkciwgZW5kcG9pbnQsIHN0YXR1cyxleGl0X2NvZGUscnhfY291bnQpOworZW5kCitlbmR0YXNrCisKK3Rhc2sgU2V0QWRkcmVzczsKKyAgaW5wdXQgWzY6MF0gYWRkcmVzczsKK2JlZ2luCisgICAgWG1pdEJ1ZmZlclswXSA9IDgnYjAwMDBfMDAwMDsKKyAgICBYbWl0QnVmZmVyWzFdID0gOCdiMDAwMF8wMTAxOyAvLyBTZXRBZGRyZXNzCisgICAgWG1pdEJ1ZmZlclsyXSA9IHsxJ2IwLCBhZGRyZXNzfTsKKyAgICBYbWl0QnVmZmVyWzNdID0gOCdiMDAwMF8wMDAwOworICAgIFhtaXRCdWZmZXJbNF0gPSA4J2IwMDAwXzAwMDA7CisgICAgWG1pdEJ1ZmZlcls1XSA9IDgnYjAwMDBfMDAwMDsKKyAgICBYbWl0QnVmZmVyWzZdID0gOCdiMDAwMF8wMDAwOworICAgIFhtaXRCdWZmZXJbN10gPSA4J2IwMDAwXzAwMDA7CitlbmQKK2VuZHRhc2sKKworCit0YXNrIFNldENvbmZpZ3VyYXRpb247CisgIGlucHV0IFsxOjBdIGNmZ192YWw7CitiZWdpbgorICAgIFhtaXRCdWZmZXJbMF0gPSA4J2IwMDAwXzAwMDA7CisgICAgWG1pdEJ1ZmZlclsxXSA9IDgnYjAwMDBfMTAwMTsgLy8gU2V0IENvbmZpZ3VyYXRpb24KKyAgICBYbWl0QnVmZmVyWzJdID0gezYnYjAwMF8wMDAsIGNmZ192YWx9OworICAgIFhtaXRCdWZmZXJbM10gPSA4J2IwMDAwXzAwMDA7CisgICAgWG1pdEJ1ZmZlcls0XSA9IDgnYjAwMDBfMDAwMDsKKyAgICBYbWl0QnVmZmVyWzVdID0gOCdiMDAwMF8wMDAwOworICAgIFhtaXRCdWZmZXJbNl0gPSA4J2IwMDAwXzAwMDA7CisgICAgWG1pdEJ1ZmZlcls3XSA9IDgnYjAwMDBfMDAwMDsKK2VuZAorZW5kdGFzaworCit0YXNrIFZlblJlZ1dvcmRXcjsKKyAgaW5wdXQgWzY6MF0gYWRkcmVzczsKKyAgaW5wdXQgWzMxOjBdIHJlZ19hZGRyZXNzOworICBpbnB1dCBbMzE6MF0gZGF0YXdvcmQ7CisgIHJlZyAgIFs3OjBdICBTdGF0dXM7CitiZWdpbgorICAgWG1pdEJ1ZmZlclswXSA9IDgnYjAxMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbMV0gPSA4J2IwMDAxXzAwMDA7CisgICBYbWl0QnVmZmVyWzJdID0gcmVnX2FkZHJlc3NbMzE6MjRdOworICAgWG1pdEJ1ZmZlclszXSA9IHJlZ19hZGRyZXNzWzIzOjE2XTsKKyAgIFhtaXRCdWZmZXJbNF0gPSByZWdfYWRkcmVzc1sxNTo4XTsKKyAgIFhtaXRCdWZmZXJbNV0gPSByZWdfYWRkcmVzc1s3OjBdOworICAgWG1pdEJ1ZmZlcls2XSA9IDgnYjAwMDBfMDEwMDsKKyAgIFhtaXRCdWZmZXJbN10gPSA4J2IwMDAwXzAwMDA7CisKKyAgIHNldHVwIChhZGRyZXNzLCA0J2gwLCBTdGF0dXMpOworCisgICBYbWl0QnVmZmVyWzBdID0gZGF0YXdvcmRbMzE6MjRdOworICAgWG1pdEJ1ZmZlclsxXSA9IGRhdGF3b3JkWzIzOjE2XTsKKyAgIFhtaXRCdWZmZXJbMl0gPSBkYXRhd29yZFsxNTo4XTsKKyAgIFhtaXRCdWZmZXJbM10gPSBkYXRhd29yZFs3OjBdOworCisgIGNvbnRyb2xfT1VUKGFkZHJlc3MsIDQnaDAsIDQsIFN0YXR1cyk7CisgIHN0YXR1c19JTiAoYWRkcmVzcywgNCdoMCwgU3RhdHVzKTsKK2VuZAorZW5kdGFzaworCit0YXNrIFZlblJlZ1dvcmRSZDsKKyAgaW5wdXQgWzY6MF0gYWRkcmVzczsKKyAgaW5wdXQgWzMxOjBdIHJlZ19hZGRyZXNzOworICBvdXRwdXQgWzMxOjBdIGRhdGF3b3JkOworICByZWcgIFszMTowXSBCeXRlQ291bnQ7CisgIHJlZyAgWzc6MF0gIFN0YXR1czsKK2JlZ2luCisgICBYbWl0QnVmZmVyWzBdID0gOCdiMTEwMF8wMDAwOworICAgWG1pdEJ1ZmZlclsxXSA9IDgnYjAwMDFfMDAwMTsKKyAgIFhtaXRCdWZmZXJbMl0gPSByZWdfYWRkcmVzc1szMToyNF07CisgICBYbWl0QnVmZmVyWzNdID0gcmVnX2FkZHJlc3NbMjM6MTZdOworICAgWG1pdEJ1ZmZlcls0XSA9IHJlZ19hZGRyZXNzWzE1OjhdOworICAgWG1pdEJ1ZmZlcls1XSA9IHJlZ19hZGRyZXNzWzc6MF07CisgICBYbWl0QnVmZmVyWzZdID0gOCdiMDAwMF8wMTAwOworICAgWG1pdEJ1ZmZlcls3XSA9IDgnYjAwMDBfMDAwMDsKKworICAgc2V0dXAgKGFkZHJlc3MsIDQnaDAsIFN0YXR1cyk7CisgICBjb250cm9sX0lOKGFkZHJlc3MsIDQnaDAsIEJ5dGVDb3VudCwgU3RhdHVzKTsKKyAgIGlmIChTdGF0dXMgIT0gYFBJRF9BQ0spCisgICAgICAgICBjb250cm9sX0lOKGFkZHJlc3MsIDQnaDAsIEJ5dGVDb3VudCwgU3RhdHVzKTsKKyAgIGlmIChTdGF0dXMgIT0gYFBJRF9BQ0spCisgICAgICAgICBjb250cm9sX0lOKGFkZHJlc3MsIDQnaDAsIEJ5dGVDb3VudCwgU3RhdHVzKTsKKyAgICBkYXRhd29yZFs3OjBdICAgICAgPSBSZWN2QnVmZmVyWzNdOworICAgIGRhdGF3b3JkWzE1OjhdICAgICA9IFJlY3ZCdWZmZXJbMl07CisgICAgZGF0YXdvcmRbMjM6MTZdICAgID0gUmVjdkJ1ZmZlclsxXTsKKyAgICBkYXRhd29yZFszMToyNF0gICAgPSBSZWN2QnVmZmVyWzBdOworICAgIGR1bXBfcmVjdl9idWZmZXIoQnl0ZUNvdW50KTsKKworICAgc3RhdHVzX09VVCAoYWRkcmVzcywgNCdoMCwgU3RhdHVzKTsKK2VuZAorZW5kdGFzaworCit0YXNrIFZlblJlZ1dvcmRSZENtcDsKKyAgaW5wdXQgWzY6MF0gYWRkcmVzczsKKyAgaW5wdXQgWzMxOjBdIHJlZ19hZGRyZXNzOworICBpbnB1dCBbMzE6MF0gZGF0YXdvcmQ7CisgIHJlZyAgIFszMTowXSBCeXRlQ291bnQ7CisgIHJlZyAgIFszMTowXSBSZWFkRGF0YTsKKyAgcmVnICAgIFs3OjBdIFN0YXR1czsKK2JlZ2luCisgICBYbWl0QnVmZmVyWzBdID0gOCdiMTEwMF8wMDAwOworICAgWG1pdEJ1ZmZlclsxXSA9IDgnYjAwMDFfMDAwMTsKKyAgIFhtaXRCdWZmZXJbMl0gPSByZWdfYWRkcmVzc1szMToyNF07CisgICBYbWl0QnVmZmVyWzNdID0gcmVnX2FkZHJlc3NbMjM6MTZdOworICAgWG1pdEJ1ZmZlcls0XSA9IHJlZ19hZGRyZXNzWzE1OjhdOworICAgWG1pdEJ1ZmZlcls1XSA9IHJlZ19hZGRyZXNzWzc6MF07CisgICBYbWl0QnVmZmVyWzZdID0gOCdiMDAwMF8wMTAwOworICAgWG1pdEJ1ZmZlcls3XSA9IDgnYjAwMDBfMDAwMDsKKworICAgc2V0dXAgKGFkZHJlc3MsIDQnaDAsIFN0YXR1cyk7CisgICBjb250cm9sX0lOKGFkZHJlc3MsIDQnaDAsIEJ5dGVDb3VudCwgU3RhdHVzKTsKKyAgIGlmIChTdGF0dXMgIT0gYFBJRF9BQ0spCisgICAgICAgICBjb250cm9sX0lOKGFkZHJlc3MsIDQnaDAsIEJ5dGVDb3VudCwgU3RhdHVzKTsKKyAgIGlmIChTdGF0dXMgIT0gYFBJRF9BQ0spCisgICAgICAgICBjb250cm9sX0lOKGFkZHJlc3MsIDQnaDAsIEJ5dGVDb3VudCwgU3RhdHVzKTsKKyAgIGlmICgoUmVjdkJ1ZmZlclszXSAhPT0gZGF0YXdvcmRbNzowXSkgfHwgKFJlY3ZCdWZmZXJbMl0gIT09IGRhdGF3b3JkWzE1OjhdKSAKKyAgICAgICAgIHx8IChSZWN2QnVmZmVyWzFdICE9PSBkYXRhd29yZFsyMzoxNl0pIHx8IChSZWN2QnVmZmVyWzBdICE9PSBkYXRhd29yZFszMToyNF0pKQorICAgIGJlZ2luCisgICAgICAtPiBgVE9QLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAkZGlzcGxheSggInVzYl9hZ2VudCBjaGVjazogRVJST1I6IFJlZ2lzdGVyIFJlYWQgQnl0ZSBNaXNtYXRjaCAhISEgQWRkcmVzczogJXggRXhwOiAleCA7IFJ4ZDogJXgiLHJlZ19hZGRyZXNzLGRhdGF3b3JkWzMxOjBdLCB7UmVjdkJ1ZmZlclswXSxSZWN2QnVmZmVyWzFdLCBSZWN2QnVmZmVyWzJdLFJlY3ZCdWZmZXJbM119ICk7CisgICAgICAgZHVtcF9yZWN2X2J1ZmZlcihCeXRlQ291bnQpOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgJGRpc3BsYXkoICJ1c2JfYWdlbnQgY2hlY2s6IFNUQVRVUzogUmVnaXN0ZXIgUmVhZCBCeXRlIE1hdGNoICEhISBBZGRyZXNzOiAleCA7IFJ4ZDogJXgiLHJlZ19hZGRyZXNzLHtSZWN2QnVmZmVyWzBdLFJlY3ZCdWZmZXJbMV0sIFJlY3ZCdWZmZXJbMl0sUmVjdkJ1ZmZlclszXX0gKTsKKworICAgIGVuZAorCisgICBzdGF0dXNfT1VUIChhZGRyZXNzLCA0J2gwLCBTdGF0dXMpOworZW5kCitlbmR0YXNrCit0YXNrIFZlblJlZ0hhbGZXb3JkUmQ7CisgIGlucHV0IFs2OjBdIGFkZHJlc3M7CisgIGlucHV0IFsyMTowXSByZWdfYWRkcmVzczsKKyAgaW5wdXQgWzE1OjBdIGRhdGF3b3JkOworICBvdXRwdXQgWzMxOjBdIEJ5dGVDb3VudDsKKyAgcmVnICAgIFs3OjBdICBTdGF0dXM7CitiZWdpbgorICAgWG1pdEJ1ZmZlclswXSA9IDgnYjExMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbMV0gPSB7MidiMDAscmVnX2FkZHJlc3NbMjE6MTZdfTsKKyAgIFhtaXRCdWZmZXJbMl0gPSByZWdfYWRkcmVzc1s3OjBdOworICAgWG1pdEJ1ZmZlclszXSA9IHJlZ19hZGRyZXNzWzE1OjhdOworICAgWG1pdEJ1ZmZlcls0XSA9IDgnYjAwMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbNV0gPSA4J2IwMDAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzZdID0gOCdiMDAwMF8wMDEwOworICAgWG1pdEJ1ZmZlcls3XSA9IDgnYjAwMDBfMDAwMDsKKworICAgc2V0dXAgKGFkZHJlc3MsIDQnaDAsIFN0YXR1cyk7CisgICBjb250cm9sX0lOKGFkZHJlc3MsIDQnaDAsIEJ5dGVDb3VudCwgU3RhdHVzKTsKKyAgIGlmIChTdGF0dXMgIT0gYFBJRF9BQ0spCisgICAgICAgICBjb250cm9sX0lOKGFkZHJlc3MsIDQnaDAsIEJ5dGVDb3VudCwgU3RhdHVzKTsKKyAgIGlmIChTdGF0dXMgIT0gYFBJRF9BQ0spCisgICAgICAgICBjb250cm9sX0lOKGFkZHJlc3MsIDQnaDAsIEJ5dGVDb3VudCwgU3RhdHVzKTsKKyAgIGlmICgoUmVjdkJ1ZmZlclswXSAhPT0gZGF0YXdvcmRbNzowXSkgfHwgKFJlY3ZCdWZmZXJbMV0gIT09IGRhdGF3b3JkWzE1OjhdKSkgCisgICAgYmVnaW4KKyAgICAgICAtPiBgVE9QLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAkZGlzcGxheSggInVzYl9hZ2VudCBjaGVjazogUmVnaXN0ZXIgUmVhZCBCeXRlIE1pc21hdGNoICEhISIpOworICAgICAgIGR1bXBfcmVjdl9idWZmZXIoQnl0ZUNvdW50KTsKKyAgICBlbmQKKyAgIHN0YXR1c19PVVQgKGFkZHJlc3MsIDQnaDAsIFN0YXR1cyk7CitlbmQKK2VuZHRhc2sKKwordGFzayBWZW5SZWdCeXRlUmQ7CisgIGlucHV0IFs2OjBdIGFkZHJlc3M7CisgIGlucHV0IFsyMTowXSByZWdfYWRkcmVzczsKKyAgaW5wdXQgWzc6MF0gZGF0YXdvcmQ7CisgIG91dHB1dCBbMzE6MF0gQnl0ZUNvdW50OworICByZWcgICAgIFs3OjBdIFN0YXR1czsKK2JlZ2luCisgICBYbWl0QnVmZmVyWzBdID0gOCdiMTEwMF8wMDAwOworICAgWG1pdEJ1ZmZlclsxXSA9IHsyJ2IwMCxyZWdfYWRkcmVzc1syMToxNl19OworICAgWG1pdEJ1ZmZlclsyXSA9IHJlZ19hZGRyZXNzWzc6MF07CisgICBYbWl0QnVmZmVyWzNdID0gcmVnX2FkZHJlc3NbMTU6OF07CisgICBYbWl0QnVmZmVyWzRdID0gOCdiMDAwMF8wMDAwOworICAgWG1pdEJ1ZmZlcls1XSA9IDgnYjAwMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbNl0gPSA4J2IwMDAwXzAwMDE7CisgICBYbWl0QnVmZmVyWzddID0gOCdiMDAwMF8wMDAwOworCisgICBzZXR1cCAoYWRkcmVzcywgNCdoMCwgU3RhdHVzKTsKKyAgIGNvbnRyb2xfSU4oYWRkcmVzcywgNCdoMCwgQnl0ZUNvdW50LCBTdGF0dXMpOworICAgaWYgKFN0YXR1cyAhPSBgUElEX0FDSykKKyAgICAgICAgIGNvbnRyb2xfSU4oYWRkcmVzcywgNCdoMCwgQnl0ZUNvdW50LCBTdGF0dXMpOworICAgaWYgKFN0YXR1cyAhPSBgUElEX0FDSykKKyAgICAgICAgIGNvbnRyb2xfSU4oYWRkcmVzcywgNCdoMCwgQnl0ZUNvdW50LCBTdGF0dXMpOworICAgaWYgKChSZWN2QnVmZmVyWzBdICE9PSBkYXRhd29yZFs3OjBdKSkKKyAgICBiZWdpbgorICAgICAgIC0+IGBUT1AudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOworICAgICAgICRkaXNwbGF5KCAidXNiX2FnZW50IGNoZWNrOiBSZWdpc3RlciBSZWFkIEJ5dGUgTWlzbWF0Y2ggISEhIik7CisgICAgICAgZHVtcF9yZWN2X2J1ZmZlcihCeXRlQ291bnQpOworICAgIGVuZAorICAgc3RhdHVzX09VVCAoYWRkcmVzcywgNCdoMCwgU3RhdHVzKTsKK2VuZAorZW5kdGFzaworCit0YXNrIFZlblJlZ1dyOworICBpbnB1dCBbMjE6MF0gcmVnX2FkZHJlc3M7CisgIGlucHV0IFsyOjBdICBsZW5ndGg7CitiZWdpbgorICAgWG1pdEJ1ZmZlclswXSA9IDgnYjAxMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbMV0gPSB7MidiMDAscmVnX2FkZHJlc3NbMjE6MTZdfTsKKyAgIFhtaXRCdWZmZXJbMl0gPSByZWdfYWRkcmVzc1s3OjBdOworICAgWG1pdEJ1ZmZlclszXSA9IHJlZ19hZGRyZXNzWzE1OjhdOworICAgWG1pdEJ1ZmZlcls0XSA9IDgnYjAwMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbNV0gPSA4J2IwMDAwXzAwMDA7CisgICBYbWl0QnVmZmVyWzZdID0gezUnYjAwMDBfMCxsZW5ndGh9OworICAgWG1pdEJ1ZmZlcls3XSA9IDgnYjAwMDBfMDAwMDsgICAKKworZW5kCitlbmR0YXNrCisKK3Rhc2sgVmVuUmVnUmQ7CisgIGlucHV0IFsyMTowXSByZWdfYWRkcmVzczsKKyAgaW5wdXQgWzI6MF0gIGxlbmd0aDsKK2JlZ2luCisgICBYbWl0QnVmZmVyWzBdID0gOCdiMTEwMF8wMDAwOworICAgWG1pdEJ1ZmZlclsxXSA9IHsyJ2IwMCxyZWdfYWRkcmVzc1syMToxNl19OworICAgWG1pdEJ1ZmZlclsyXSA9IHJlZ19hZGRyZXNzWzc6MF07CisgICBYbWl0QnVmZmVyWzNdID0gcmVnX2FkZHJlc3NbMTU6OF07CisgICBYbWl0QnVmZmVyWzRdID0gOCdiMDAwMF8wMDAwOworICAgWG1pdEJ1ZmZlcls1XSA9IDgnYjAwMDBfMDAwMDsKKyAgIFhtaXRCdWZmZXJbNl0gPSB7NSdiMDAwMF8wLGxlbmd0aH07CisgICBYbWl0QnVmZmVyWzddID0gOCdiMDAwMF8wMDAwOyAgIAorZW5kCitlbmR0YXNrCisKK3Rhc2sgVmVuUmVnV3JXb3JkRGF0YTsKKyAgaW5wdXQgWzc6MF0gQnl0ZTA7CisgIGlucHV0IFs3OjBdIEJ5dGUxOworICBpbnB1dCBbNzowXSBCeXRlMjsKKyAgaW5wdXQgWzc6MF0gQnl0ZTM7CitiZWdpbgorICAgWG1pdEJ1ZmZlclswXSA9IEJ5dGUwOyAgICAgICAgCisgICBYbWl0QnVmZmVyWzFdID0gQnl0ZTE7CisgICBYbWl0QnVmZmVyWzJdID0gQnl0ZTI7CisgICBYbWl0QnVmZmVyWzNdID0gQnl0ZTM7CitlbmQKK2VuZHRhc2sKKwordGFzayBWZW5SZWdXckhXb3JkRGF0YTsKKyAgaW5wdXQgWzc6MF0gQnl0ZTA7CisgIGlucHV0IFs3OjBdIEJ5dGUxOworYmVnaW4KKyAgIFhtaXRCdWZmZXJbMF0gPSBCeXRlMDsgICAgICAgIAorICAgWG1pdEJ1ZmZlclsxXSA9IEJ5dGUxOworZW5kCitlbmR0YXNrCisKK3Rhc2sgVmVuUmVnV3JCeXRlRGF0YTsKKyAgaW5wdXQgWzc6MF0gQnl0ZTA7CitiZWdpbgorICAgWG1pdEJ1ZmZlclswXSA9IEJ5dGUwOyAgICAgICAgCitlbmQKK2VuZHRhc2sKKwordGFzayBkdW1wX3JlY3ZfYnVmZmVyOworICBpbnB1dCBbMzE6MF0gTnVtQnl0ZXM7CisgIGludGVnZXIgaTsKK2JlZ2luCisgIGZvcihpPTA7IGkgPCBOdW1CeXRlczsgaT1pKzEpCisgICAgJGRpc3BsYXkoIlJlY3ZCdWZmZXJbJTBkXSAgPSAlYiAgOiAlMGQiLCBpLCBSZWN2QnVmZmVyW2ldLCBSZWN2QnVmZmVyW2ldKTsKK2VuZAorZW5kdGFzaworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHVzYmh3X3RyYW5zZmVyX291dDogU2VuZCB0b2tlbiB0aGVuIHNvbWUgREFUQSB0byB0aGUgZGV2aWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YXNrIHVzYmh3X3RyYW5zZmVyX291dDsKK2lucHV0IFs3OjBdICAgcGlkOworaW5wdXQgWzc6MF0gICBkZXZpY2VfYWRkcjsKK2lucHV0IFszOjBdICAgZW5kcG9pbnQ7IAoraW5wdXQgICAgICAgICBoYW5kc2hha2U7IAoraW5wdXQgWzc6MF0gICByZXF1ZXN0OyAKK2lucHV0ICBbNzowXSAgdHhfbGVuZ3RoOworb3V0cHV0IFs3OjBdICBleGl0X2NvZGU7CisKK3JlZyAgICBbNzowXSAgZXhpdF9jb2RlOworCityZWcgIFszMTowXSB0ZGF0YTsKK2ludGVnZXIgICAgIGw7CityZWcgWzMxOjBdICB0b2tlbjsKK3JlZyBbMzE6MF0gIGN0cmw7CityZWcgWzMxOjBdICByZXNwOworcmVnIFszMTowXSAgc3RhdHVzOworcmVnIFszMTowXSAgc3RhdHVzX2NoazsKK2JlZ2luCisgICAgLy8kZGlzcGxheSgiVVNCIFRPS0VOOiAlcyIsIChwaWQgPT0gYFBJRF9TRVRVUCkgPyAiU0VUVVAiIDogKHBpZCA9PSBgUElEX0RBVEEwKSA/ICJEQVRBMCI6IChwaWQgPT0gYFBJRF9EQVRBMSkgPyAiREFUQTEiIDogKHBpZCA9PSBgUElEX0lOKSA/ICJJTiIgOiAiT1VUIik7CisgICAgLy8kZGlzcGxheSgiVVNCIERFViAlZCBFUCAlZFxuIiwgZGV2aWNlX2FkZHIsIGVuZHBvaW50KTsKKworICAgIC8vIExvYWQgREFUQXggdHJhbnNmZXIgaW50byBhZGRyZXNzIDArCisgICAgLy8kZGlzcGxheSgiIFVTQiBUeDogJTAyeCIsIHJlcXVlc3QpOworICAgIGZvciAobD0wO2w8dHhfbGVuZ3RoO2wgPSBsICsgMSkgYmVnaW4KKyAgICAgICAgdGRhdGEgPSBYbWl0QnVmZmVyW2xdOworICAgICAgICAvLyRkaXNwbGF5KCJVU0IgVFggREFUQSAlMDJ4IiwgdGRhdGEpOworICAgICAgICB1c2Jod19yZWdfd3JpdGUoYFVTQl9XUl9EQVRBLCB0ZGF0YSk7CisgICAgZW5kCisKKyAgICAvLyBUcmFuc2ZlciBkYXRhIGxlbmd0aAorICAgIHVzYmh3X3JlZ193cml0ZShgVVNCX1hGRVJfREFUQSwgdHhfbGVuZ3RoKTsKKworICAgIC8vIENvbmZpZ3VyZSB0cmFuc2ZlciBmb3IgREFUQXggcG9ydGlvbgorICAgIGN0cmwgPSAoMSA8PCBgVVNCX1hGRVJfVE9LRU5fU1RBUlRfU0hJRlQpOworCisgICAgLy8gV2FpdCBmb3IgcmVzcG9uc2Ugb3IgdGltZW91dAorICAgIGN0cmw9IGN0cmwgfCAoaGFuZHNoYWtlID8gKDEgPDwgYFVTQl9YRkVSX1RPS0VOX0FDS19TSElGVCkgOiAwKTsKKworICAgIGN0cmw9IGN0cmwgfCAoKHJlcXVlc3QgPT0gYFBJRF9EQVRBMSkgPyAoMSA8PCBgVVNCX1hGRVJfVE9LRU5fUElEX0RBVEFYX1NISUZUKSA6ICgwIDw8IGBVU0JfWEZFUl9UT0tFTl9QSURfREFUQVhfU0hJRlQpKTsKKworICAgIC8vIFNldHVwIHRva2VuIGRldGFpbHMgKGRvbid0IHN0YXJ0IHRyYW5zZmVyIHlldCkKKyAgICB0b2tlbiA9IChwaWQ8PGBVU0JfWEZFUl9UT0tFTl9QSURfQklUU19TSElGVCkgfCAoZGV2aWNlX2FkZHIgPDwgYFVTQl9YRkVSX1RPS0VOX0RFVl9BRERSX1NISUZUKSB8IChlbmRwb2ludCA8PCBgVVNCX1hGRVJfVE9LRU5fRVBfQUREUl9TSElGVCk7CisgICAgdXNiaHdfcmVnX3dyaXRlKGBVU0JfWEZFUl9UT0tFTiwgdG9rZW4gfCBjdHJsKTsKKworICAgIC8vIFdhaXQgZm9yIFR4IHRvIHN0YXJ0CisgICAgdXNiaHdfcmVnX3JlYWQoYFVTQl9SWF9TVEFULHN0YXR1cykgOworICAgIHN0YXR1c19jaGsgPSBzdGF0dXMgJiAoMSA8PCBgVVNCX1JYX1NUQVRfU1RBUlRfUEVORF9TSElGVCk7CisgICAgd2hpbGUgKHN0YXR1c19jaGspIGJlZ2luCisgICAgICAgIHVzYmh3X3JlZ19yZWFkKGBVU0JfUlhfU1RBVCxzdGF0dXMpIDsKKyAgICAgICAgc3RhdHVzX2NoayA9IHN0YXR1cyAmICgxIDw8IGBVU0JfUlhfU1RBVF9TVEFSVF9QRU5EX1NISUZUKTsKKyAgICBlbmQKKworICAgIC8vIE5vIGhhbmRzaGFraW5nPyBXZSBhcmUgZG9uZQorICAgIGlmICghaGFuZHNoYWtlKSBiZWdpbgorCWV4aXRfY29kZSA9IGBVU0JfUkVTX09LOworICAgIGVuZAorCisgICAgLy8gV2FpdCBmb3IgaWRsZQorICAgIHVzYmh3X3JlZ19yZWFkKGBVU0JfUlhfU1RBVCxzdGF0dXMpIDsKKyAgICBzdGF0dXNfY2hrID0gc3RhdHVzICYgKDEgPDwgYFVTQl9SWF9TVEFUX0lETEVfU0hJRlQpIDsKKyAgICB3aGlsZSAoIShzdGF0dXNfY2hrKSkgYmVnaW4KKyAgICAgICB1c2Jod19yZWdfcmVhZChgVVNCX1JYX1NUQVQsc3RhdHVzKSA7CisgICAgICAgc3RhdHVzX2NoayA9IHN0YXR1cyAmICgxIDw8IGBVU0JfUlhfU1RBVF9JRExFX1NISUZUKSA7CisgICAgZW5kCisKKyAgICAkZGlzcGxheSgiVVNCIFJFU1BPTlNFOiAleCIsc3RhdHVzKTsKKworICAgIGlmIChzdGF0dXMgJiAoMSA8PCBgVVNCX1JYX1NUQVRfUkVTUF9USU1FT1VUX1NISUZUKSkgYmVnaW4KKyAgICAgICAkZGlzcGxheSgiICBVU0IgVElNRU9VVFxuIik7CisgICAgICAgJGRpc3BsYXkoIlVTQiBFUlJPUjogT1VUIHRpbWVvdXRcbiIpOworICAgICAgIGV4aXRfY29kZSA9IGBVU0JfUkVTX1RJTUVPVVQ7CisgICAgZW5kCisKKyAgICAvLyBDaGVjayBmb3IgTkFLIC8gU1RBTEwKKyAgICByZXNwID0gKChzdGF0dXMgPj4gYFVTQl9SWF9TVEFUX1JFU1BfQklUU19TSElGVCkgJiBgVVNCX1JYX1NUQVRfUkVTUF9CSVRTX01BU0spOworICAgIGlmIChyZXNwID09IGBQSURfQUNLKSBiZWdpbgorICAgICAgICRkaXNwbGF5KCJVU0IgU1RBVFVTOiBBQ0tcbiIpOworICAgICAgIGV4aXRfY29kZSA9IGBVU0JfUkVTX09LOworICAgIGVuZCBlbHNlIGlmIChyZXNwID09IGBQSURfTkFLKSBiZWdpbgorICAgICAgICRkaXNwbGF5KCJVU0IgU1RBVFVTOiBOQUtcbiIpOworICAgICAgIGV4aXRfY29kZSA9IGBVU0JfUkVTX05BSzsKKyAgICBlbmQgZWxzZSBpZiAocmVzcCA9PSBgUElEX1NUQUxMKSBiZWdpbgorICAgICAgICRkaXNwbGF5KCJVU0IgU1RBVFVTOiAgU1RBTExcbiIpOworICAgICAgICRkaXNwbGF5KCJVU0IgRVJST1I6ICBPVVQgU1RBTExcbiIpOworICAgICAgIGV4aXRfY29kZSA9IGBVU0JfUkVTX1NUQUxMOworICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgJGRpc3BsYXkoIlVTQiBFUlJPUjogVW5rbm93biBPVVQgcmVzcG9uc2UgKCUwMngpXG4iLCByZXNwKTsKKworICAgICAgIC8vIFVua25vd24KKyAgICAgICBleGl0X2NvZGUgPSBgVVNCX1JFU19TVEFMTDsKKyAgICBlbmQKK2VuZAorZW5kdGFzaworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB1c2Jod190cmFuc2Zlcl9pbjogUGVyZm9ybSBJTiByZXF1ZXN0IGFuZCBleHBlY3QgREFUQSBmcm9tIGRldmljZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFzayB1c2Jod190cmFuc2Zlcl9pbjsKK2lucHV0IFs3OjBdICAgIHBpZDsgCitpbnB1dCBbNzowXSAgICBkZXZpY2VfYWRkcjsgCitpbnB1dCBbNzowXSAgICBlbmRwb2ludDsgCitvdXRwdXQgWzc6MF0gICByZXNwb25zZTsgCitvdXRwdXQgWzc6MF0gICBleGl0X2NvZGU7CitvdXRwdXQgWzc6MF0gICByeF9jb3VudDsKKworcmVnICBbNzowXSAgICAgZXhpdF9jb2RlOworcmVnICBbNzowXSAgICAgcmVzcG9uc2U7IAorcmVnICBbNzowXSAgICAgcnhfbGVuZ3RoOworaW50ZWdlciBsOworcmVnICBbNzowXSAgICAgcnhfY291bnQ7CityZWcgWzMxOjBdICAgICB0b2tlbjsKK3JlZyBbMzE6MF0gICAgIGRhdGE7CityZWcgWzMxOjBdICAgICBzdGF0dXM7CityZWcgWzMxOjBdICAgICBzdGF0dXNfY2hrOworYmVnaW4KKyAgICAvLyRkaXNwbGF5KCJVU0IgVE9LRU46ICVzIiwgKHBpZCA9PSBgUElEX1NFVFVQKSA/ICJTRVRVUCIgOiAocGlkID09IGBQSURfREFUQTApID8gIkRBVEEwIjogKHBpZCA9PSBgUElEX0RBVEExKSA/ICJEQVRBMSIgOiAocGlkID09IGBQSURfSU4pID8gIklOIiA6ICJPVVQiKTsKKyAgICAvLyRkaXNwbGF5KCJVU0IgIERFViAlZCBFUCAlZFxuIiwgZGV2aWNlX2FkZHIsIGVuZHBvaW50KTsgICAgCisKKyAgICAvLyBObyBkYXRhIHRvIHNlbmQKKyAgICB1c2Jod19yZWdfd3JpdGUoYFVTQl9YRkVSX0RBVEEsIDApOworCisgICAgLy8gQ29uZmlndXJlIHRyYW5zZmVyCisgICAgdG9rZW4gPSAocGlkPDxgVVNCX1hGRVJfVE9LRU5fUElEX0JJVFNfU0hJRlQpIHwgKGRldmljZV9hZGRyIDw8IGBVU0JfWEZFUl9UT0tFTl9ERVZfQUREUl9TSElGVCkgfCAoZW5kcG9pbnQgPDwgYFVTQl9YRkVSX1RPS0VOX0VQX0FERFJfU0hJRlQpOworICAgIHRva2VuPSB0b2tlbiB8KDEgPDwgYFVTQl9YRkVSX1RPS0VOX1NUQVJUX1NISUZUKTsKKyAgICB0b2tlbj0gdG9rZW4gfCAoMSA8PCBgVVNCX1hGRVJfVE9LRU5fSU5fU0hJRlQpOworICAgIHRva2VuPSB0b2tlbiB8ICgxIDw8IGBVU0JfWEZFUl9UT0tFTl9BQ0tfU0hJRlQpOworICAgIC8vJGRpc3BsYXkoIlVTQiBUT0tFTiBDT05GSUcgOiAleCIsdG9rZW4pOworICAgIHVzYmh3X3JlZ193cml0ZShgVVNCX1hGRVJfVE9LRU4sIHRva2VuKTsKKworICAgIHN0YXR1c19jaGsgPSBzdGF0dXMgJiAoMSA8PCBgVVNCX1JYX1NUQVRfU1RBUlRfUEVORCk7CisgICAgd2hpbGUgKHN0YXR1c19jaGspIGJlZ2luCisgICAgICAgdXNiaHdfcmVnX3JlYWQoYFVTQl9SWF9TVEFULHN0YXR1cyk7CisgICAgICAgc3RhdHVzX2NoayA9IHN0YXR1cyAmICgxIDw8IGBVU0JfUlhfU1RBVF9TVEFSVF9QRU5EKTsKKyAgICBlbmQKKworICAgIC8vIFdhaXQgZm9yIHJ4IGlkbGUKKyAgICB1c2Jod19yZWdfcmVhZChgVVNCX1JYX1NUQVQsc3RhdHVzKTsgCisgICAgc3RhdHVzX2NoayA9IHN0YXR1cyAmICgxIDw8IGBVU0JfUlhfU1RBVF9JRExFX1NISUZUKTsKKyAgICB3aGlsZSAoIShzdGF0dXNfY2hrKSkgYmVnaW4KKyAgICAgICB1c2Jod19yZWdfcmVhZChgVVNCX1JYX1NUQVQsc3RhdHVzKTsgCisgICAgICAgc3RhdHVzX2NoayA9IHN0YXR1cyAmICgxIDw8IGBVU0JfUlhfU1RBVF9JRExFX1NISUZUKTsKKyAgICBlbmQKKworICAgIGlmIChzdGF0dXMgJiAoMSA8PCBgVVNCX1JYX1NUQVRfQ1JDX0VSUl9TSElGVCkpIGJlZ2luCisgICAgICAgJGRpc3BsYXkoIlVTQjogQ1JDIEVSUk9SXG4iKTsKKyAgICAgICBleGl0X2NvZGUgPSBgVVNCX1JFU19USU1FT1VUOworICAgIGVuZCBlbHNlIGlmIChzdGF0dXMgJiAoMSA8PCBgVVNCX1JYX1NUQVRfUkVTUF9USU1FT1VUX1NISUZUKSkgYmVnaW4KKyAgICAgICAkZGlzcGxheSgiVVNCOiBJTiB0aW1lb3V0XG4iKTsKKyAgICAgICBleGl0X2NvZGUgPSBgVVNCX1JFU19USU1FT1VUOworICAgIGVuZCBlbHNlIGJlZ2luCisKKyAgICAgICAgLy8gQ2hlY2sgZm9yIE5BSyAvIFNUQUxMCisgICAgICAgIHJlc3BvbnNlID0gKChzdGF0dXMgPj4gYFVTQl9SWF9TVEFUX1JFU1BfQklUU19TSElGVCkgJiBgVVNCX1JYX1NUQVRfUkVTUF9CSVRTX01BU0spOworCisgICAgICAgIGlmIChyZXNwb25zZSA9PSBgUElEX05BSykgYmVnaW4KKyAgICAgICAgICAgJGRpc3BsYXkoIlVTQiBOQUsgUkVDRUlWRUQgXG4iKTsKKyAgICAgICAgICAgZXhpdF9jb2RlID0gYFVTQl9SRVNfTkFLOworICAgICAgICBlbmQgZWxzZSBpZiAocmVzcG9uc2UgPT0gYFBJRF9TVEFMTCkgYmVnaW4KKyAgICAgICAgICAgJGRpc3BsYXkoIlVTQjogSU4gU1RBTExcbiIpOworICAgICAgICAgICBleGl0X2NvZGUgPSBgVVNCX1JFU19TVEFMTDsKKyAgICAgICAgZW5kIGVsc2UgYmVnaW4KKworICAgICAgICAgLy8gQ2hlY2sgQ1JDIGlzIG9rCisgICAgICAgICAgIGlmIChzdGF0dXMgJiAoMSA8PCBgVVNCX1JYX1NUQVRfQ1JDX0VSUl9TSElGVCkpIGJlZ2luCisgICAgICAgICAgICAgICAgJGRpc3BsYXkoIlVTQjogQ1JDIEVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICBleGl0X2NvZGUgPSBgVVNCX1JFU19TVEFMTDsKKyAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKworICAgICAgICAgICAgICAgIC8vIEhvdyBtdWNoIGRhdGEgd2FzIGFjdHVhbGx5IHJlY2VpdmVkPworICAgICAgICAgICAgICAgIHJ4X2NvdW50ID0gKChzdGF0dXMgPj4gYFVTQl9SWF9TVEFUX0NPVU5UX0JJVFNfU0hJRlQpICYgYFVTQl9SWF9TVEFUX0NPVU5UX0JJVFNfTUFTSyk7CisKKyAgICAgICAgICAgICAgICAvLyRkaXNwbGF5KCIgUnggJWQgKFBJRD0leCk6XG4iLCByeF9jb3VudCwgcmVzcG9uc2UpOworCisgICAgICAgICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdXNlciBidWZmZXIgaXMgYmlnIGVub3VnaCBmb3IgdGhlIHJlc3BvbnNlLgorICAgICAgICAgICAgICAgIC8vIE5PVEU6IEl0J3Mgbm90IGNyaXRpY2FsIHRvIGRvIHRoaXMsIGJ1dCB3ZSBjYW4ndCBlYXNpbHkgY2hlY2sgQ1JDcyB3aXRob3V0CisgICAgICAgICAgICAgICAgLy8gcmVhZGluZyB0aGUgd2hvbGUgcmVzcG9uc2UgaW50byBhIGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAvLyBIaXR0aW5nIHRoaXMgY29uZGl0aW9uIG1heSBwb2ludCB0b3dhcmRzIGlzc3VlcyB3aXRoIGhpZ2hlciBsZXZlbCBwcm90b2NvbAorICAgICAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uLi4uCisgICAgICAgICAgICAgICAgaWYocnhfbGVuZ3RoID49IHJ4X2NvdW50KQorICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiVVNCIEVSUk9SIERpZmZlcmVuY2UgaW4gcnggbGVuOiVkIGFuZCBSeCBEYXRhIENvdW50OiAlZCIscnhfbGVuZ3RoLHJ4X2NvdW50KTsKKyAgIAorICAgICAgICAgICAgICAgIGZvciAobD0wO2w8cnhfY291bnQ7bD1sKzEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHVzYmh3X3JlZ19yZWFkKGBVU0JfUkRfREFUQSxkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgLy8kZGlzcGxheSgiIFVTQiBSWCBDbnQ6ICVkIERhdGE6ICUwMngiLCBsLCBkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgUmVjdkJ1ZmZlcltsXSA9IGRhdGE7CisgICAgICAgICAgICAgICAgZW5kCisJCWV4aXRfY29kZSA9IGBVU0JfUkVTX09LOworCSAgIGVuZAorCWVuZAorICAgIGVuZAorZW5kCitlbmR0YXNrCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiMWRfZGVmaW5lcy52IGIvdmVyaWxvZy9kdi9iZm0vdXNiMWRfZGVmaW5lcy52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRjNjBmNGMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2IxZF9kZWZpbmVzLnYKQEAgLTAsMCArMSwxNDMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBVU0IgMS4xIGZ1bmN0aW9uIGRlZmluZXMgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYjFfZnVuY3QvLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYjFkX2RlZmluZXMudix2IDEuMyAyMDAyLTA5LTI1IDA2OjA2OjQ5IHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDItMDktMjUgMDY6MDY6NDkgJAorLy8gICRSZXZpc2lvbjogMS4zICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4yICAyMDAyLzA5LzIwIDExOjQ2OjU0ICBydWRpCisvLyAgICAgICAgICAgICAgIGZpeGVkIGEgdHlwZSAnZGVmaW5lJyB3YXMgbWlzc2luZyAuLi4KKy8vCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMS4xLjEgIDIwMDIvMDkvMTkgMTI6MDc6NDAgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgSW5pdGlhbCBDaGVja2luCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKworCisvL2BkZWZpbmUgVVNCRl9ERUJVRworLy9gZGVmaW5lIFVTQkZfVkVSQk9TRV9ERUJVRworCisvLyBFbmFibGUgb3IgZGlzYWJsZSBCbG9jayBGcmFtZXMKKy8vYGRlZmluZSBVU0IxX0JGX0VOQUJMRQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBJdGVtcyBiZWxvdyB0aGlzIHBvaW50IHNob3VsZCBOT1QgYmUgbW9kaWZpZWQgYnkgdGhlIGVuZCB1c2VyCisvLyBVTkxFU1MgeW91IGtub3cgZXhhY3RseSB3aGF0IHlvdSBhcmUgZG9pbmcgIQorLy8gTW9kaWZ5IGF0IHlvdSBvd24gcmlzayAhISEKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmluZQlST01fU0laRTAJNydkMDE4CS8vIERldmljZSBEZXNjcmlwdG9yIExlbmd0aAorYGRlZmluZQlST01fU0laRTEJNydkMDUzCS8vIENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvciBMZW5ndGgKK2BkZWZpbmUJUk9NX1NJWkUyQQk3J2QwMDQJLy8gTGFuZ3VhZ2UgSUQgRGVzY3JpcHRvciBTdGFydCBMZW5ndGgKK2BkZWZpbmUJUk9NX1NJWkUyQgk3J2QwMTAJLy8gU3RyaW5nIERlc2NyaXB0b3IgTGVuZ3RoCitgZGVmaW5lCVJPTV9TSVpFMkMJNydkMDEwCS8vIGZvciBmdXR1cmUgdXNlCitgZGVmaW5lCVJPTV9TSVpFMkQJNydkMDEwCS8vIGZvciBmdXR1cmUgdXNlCisKK2BkZWZpbmUJUk9NX1NUQVJUMAk3J2gwMAkvLyBEZXZpY2UgRGVzY3JpcHRvciBTdGFydCBBZGRyZXNzCitgZGVmaW5lCVJPTV9TVEFSVDEJNydoMTIJLy8gQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yIFN0YXJ0IEFkZHJlc3MKK2BkZWZpbmUJUk9NX1NUQVJUMkEJNydoNDcJLy8gTGFuZ3VhZ2UgSUQgRGVzY3JpcHRvciBTdGFydCBBZGRyZXNzCitgZGVmaW5lCVJPTV9TVEFSVDJCCTcnaDUwCS8vIFN0cmluZyBEZXNjcmlwdG9yIFN0YXJ0IEFkZHJlc3MKK2BkZWZpbmUJUk9NX1NUQVJUMkMJNydoNjAJLy8gZm9yIGZ1dHVyZSB1c2UKK2BkZWZpbmUJUk9NX1NUQVJUMkQJNydoNzAJLy8gZm9yIGZ1dHVyZSB1c2UKKworLy8gRW5kcG9pbnQgQ29uZmlndXJhdGlvbiBDb25zdGFudHMKK2BkZWZpbmUgSU4JMTQnYjAwXzAwMV8wMDAwMDAwMDAKK2BkZWZpbmUgT1VUCTE0J2IwMF8wMTBfMDAwMDAwMDAwCitgZGVmaW5lIENUUkwJMTQnYjEwXzEwMF8wMDAwMDAwMDAKK2BkZWZpbmUgSVNPCTE0J2IwMV8wMDBfMDAwMDAwMDAwCitgZGVmaW5lIEJVTEsJMTQnYjEwXzAwMF8wMDAwMDAwMDAKK2BkZWZpbmUgSU5UCTE0J2IwMF8wMDBfMDAwMDAwMDAwCisKKy8vIFBJRCBFbmNvZGluZ3MKK2BkZWZpbmUgVVNCRl9UX1BJRF9PVVQJCTQnYjAwMDEKK2BkZWZpbmUgVVNCRl9UX1BJRF9JTgkJNCdiMTAwMQorYGRlZmluZSBVU0JGX1RfUElEX1NPRgkJNCdiMDEwMQorYGRlZmluZSBVU0JGX1RfUElEX1NFVFVQCTQnYjExMDEKK2BkZWZpbmUgVVNCRl9UX1BJRF9EQVRBMAk0J2IwMDExCitgZGVmaW5lIFVTQkZfVF9QSURfREFUQTEJNCdiMTAxMQorYGRlZmluZSBVU0JGX1RfUElEX0RBVEEyCTQnYjAxMTEKK2BkZWZpbmUgVVNCRl9UX1BJRF9NREFUQQk0J2IxMTExCitgZGVmaW5lIFVTQkZfVF9QSURfQUNLCQk0J2IwMDEwCitgZGVmaW5lIFVTQkZfVF9QSURfTkFDSwkJNCdiMTAxMAorYGRlZmluZSBVU0JGX1RfUElEX1NUQUxMCTQnYjExMTAKK2BkZWZpbmUgVVNCRl9UX1BJRF9OWUVUCQk0J2IwMTEwCitgZGVmaW5lIFVTQkZfVF9QSURfUFJFCQk0J2IxMTAwCitgZGVmaW5lIFVTQkZfVF9QSURfRVJSCQk0J2IxMTAwCitgZGVmaW5lIFVTQkZfVF9QSURfU1BMSVQJNCdiMTAwMAorYGRlZmluZSBVU0JGX1RfUElEX1BJTkcJCTQnYjAxMDAKK2BkZWZpbmUgVVNCRl9UX1BJRF9SRVMJCTQnYjAwMDAKKworLy8gVGhlIEhNU19ERUwgaXMgYSBjb25zdGFudCBmb3IgdGhlICJIYWxmIE1pY3JvIFNlY29uZCIKKy8vIENsb2NrIHB1bHNlIGdlbmVyYXRvci4gVGhpcyBjb25zdGFudCBzcGVjaWZpZXMgaG93IG1hbnkKKy8vIFBoeSBjbG9ja3MgdGhlcmUgYXJlIGJldHdlZW4gdHdvIGhtc19jbG9jayBwdWxzZXMuIFRoaXMKKy8vIGNvbnN0YW50IHBsdXMgMiByZXByZXNlbnRzIHRoZSBhY3R1YWwgZGVsYXkuCisvLyBFeGFtcGxlOiBGb3IgYSA2MCBNaHogKDE2LjY2NyBuUyBwZXJpb2QpIFBoeSBDbG9jaywgdGhlCisvLyBkZWxheSBtdXN0IGJlIDMwIHBoeSBjbG9jazogNTAwbnMgLyAxNi42NjduUyA9IDMwIGNsb2NrcworYGRlZmluZSBVU0JGX0hNU19ERUwJCTUnaDE2CisKKy8vIEFmdGVyIHNlbmRpbmcgRGF0YSBpbiByZXNwb25zZSB0byBhbiBJTiB0b2tlbiBmcm9tIGhvc3QsIHRoZQorLy8gaG9zdCBtdXN0IHJlcGx5IHdpdGggYW4gYWNrLiBUaGUgaG9zdCBoYXMgNjIyblMgaW4gRnVsbCBTcGVlZAorLy8gbW9kZSBhbmQgNDAwblMgaW4gSGlnaCBTcGVlZCBtb2RlIHRvIHJlcGx5LiBSWF9BQ0tfVE9fVkFMX0ZTCisvLyBhbmQgUlhfQUNLX1RPX1ZBTF9IUyBhcmUgdGhlIG51bWJlcnMgb2YgVVRNSSBjbG9jayBjeWNsZXMKKy8vIG1pbnVzIDIgZm9yIEZ1bGwgYW5kIEhpZ2ggU3BlZWQgbW9kZXMuCisvL2BkZWZpbmUgVVNCRl9SWF9BQ0tfVE9fVkFMX0ZTCTgnZDM2CitgZGVmaW5lIFVTQkZfUlhfQUNLX1RPX1ZBTF9GUwk4J2QyMDAKKworLy8gQWZ0ZXIgc2VuZGluZyBhIE9VVCB0b2tlbiB0aGUgaG9zdCBtdXN0IHNlbmQgYSBkYXRhIHBhY2tldC4KKy8vIFRoZSBob3N0IGhhcyA2MjJuUyBpbiBGdWxsIFNwZWVkIG1vZGUgYW5kIDQwMG5TIGluIEhpZ2ggU3BlZWQKKy8vIG1vZGUgdG8gc2VuZCB0aGUgZGF0YSBwYWNrZXQuCisvLyBUWF9EQVRBX1RPX1ZBTF9GUyBhbmQgVFhfREFUQV9UT19WQUxfSFMgYXJlIGlzIHRoZSBudW1iZXJzIG9mCisvLyBVVE1JIGNsb2NrIGN5Y2xlcyBtaW51cyAyLgorLy9gZGVmaW5lIFVTQkZfVFhfREFUQV9UT19WQUxfRlMJOCdkMzYKK2BkZWZpbmUgVVNCRl9UWF9EQVRBX1RPX1ZBTF9GUwk4J2QyMDAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9jb3JlLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfY29yZS52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczZjllYTEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfY29yZS52CkBAIC0wLDAgKzEsNzExIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgUG9ydGVkIHRvIFVTQjJVQVJUIFByb2plY3QKKyogIEF1dGhvcjogIERpbmVzaCBBbm5heXlhCisqICAgICAgICAgICBFbWFpbDotIGRpbmVzaGFAb3BlbmNvcmVzLm9yZworKgorKiAgICAgRGF0ZTogNHRoIEZlYiAyMDEzCisqICAgICBDaGFuZ2VzOgorKiAgICAgQS4gV2FybmluZyBDbGVhbiBVcAorKiAgICAgQi4gVVNCMS1waHkgaXMgbW92ZSB0byBjb3JlIGxldmVsCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVTQiAxLjEgZnVuY3Rpb24gSVAgY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiMV9mdW5jdC8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiMV9jb3JlLnYsdiAxLjIgMjAwMi0xMC0xMSAwNTo0ODoyMCBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAyLTEwLTExIDA1OjQ4OjIwICQKKy8vICAkUmV2aXNpb246IDEuMiAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMSAgMjAwMi8wOS8yNSAwNjowNjo0OSAgcnVkaQorLy8gICAgICAgICAgICAgICAtIEFkZGVkIE5ldyBUb3AgTGV2ZWwKKy8vICAgICAgICAgICAgICAgLSBSZW1vdmUgb2xkIHRvcCBsZXZlbCBhbmQgYXNzb2NpYXRlZCBmaWxlcworLy8gICAgICAgICAgICAgICAtIE1vdmVkIEZJRk9zIHRvICJHZW5lcmljIEZJRk9zIiBwcm9qZWN0CisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworCitgaW5jbHVkZSAidXNiMWRfZGVmaW5lcy52IgorCisvKgorCisJCS8vIFVTQiBQSFkgSW50ZXJmYWNlCisJCXR4X2RwLCB0eF9kbiwgdHhfb2UsCisJCXJ4X2QsIHJ4X2RwLCByeF9kbiwKK1RoZXNlIHBpbnMgYXJlIGEgc2VtaS1zdGFuZGFyZCBpbnRlcmZhY2UgdG8gVVNCIDEuMSB0cmFuc2NlaXZlcnMuCitKdXN0IG1hdGNoIHVwIHRoZSBzaWduYWwgbmFtZXMgd2l0aCB0aGUgSU9zIG9mIHRoZSB0cmFuc2NlaXZlci4KKworCQkvLyBVU0IgTWlzYworCQlwaHlfdHhfbW9kZSwgdXNiX3JzdCwgCitUaGUgUEhZIHN1cHBvcnRzIHNpbmdsZSBlbmRlZCBhbmQgZGlmZmVyZW50aWFsIG91dHB1dCB0byB0aGUKK3RyYW5zY2VpdmVyIERlcGVuZGluZyBvbiB3aGljaCBkZXZpY2UgeW91IGFyZSB1c2luZywgeW91IGhhdmUKK3RvIHRpZSB0aGUgcGh5X3R4X21vZGUgaGlnaCBvciBsb3cuCit1c2JfcnN0IGlzIGFzc2VydGVkIHdoZW5ldmVyIHRoZSBob3N0IHNpZ25hbHMgcmVzZXQgb24gdGhlIFVTQgorYnVzLiBUaGUgVVNCIGNvcmUgd2lsbCBpbnRlcm5hbGx5IHJlc2V0IGl0c2VsZiBhdXRvbWF0aWNhbGx5LgorVGhpcyBvdXRwdXQgaXMgcHJvdmlkZWQgZm9yIGV4dGVybmFsIGxvZ2ljIHRoYXQgbmVlZHMgdG8gYmUKK3Jlc2V0IHdoZW4gdGhlIFVTQiBidXMgaXMgcmVzZXQuCisKKwkJLy8gSW50ZXJydXB0cworCQlkcm9wcGVkX2ZyYW1lLCBtaXNhbGlnbmVkX2ZyYW1lLAorCQljcmMxNl9lcnIsCitkcm9wcGVkX2ZyYW1lLCBtaXNhbGlnbmVkX2ZyYW1lIGFyZSBpbnRlcnJ1cHQgdG8gaW5kaWNhdGUgZXJyb3IKK2NvbmRpdGlvbnMgaW4gQmxvY2sgRnJhbWUgbW9kZS4KK2NyYzE2X2VyciwgaW5kaWNhdGVzIHdoZW4gYSBjcmMgMTYgZXJyb3Igd2FzIGRldGVjdGVkIG9uIHRoZQorcGF5bG9hZCBvZiBhIFVTQiBwYWNrZXQuCisKKwkJLy8gVmVuZG9yIEZlYXR1cmVzCisJCXZfc2V0X2ludCwgdl9zZXRfZmVhdHVyZSwgd1ZhbHVlLAorCQl3SW5kZXgsIHZlbmRvcl9kYXRhLAorVGhpcyBzaWduYWxzIGFsbG93IHRvIGNvbnRyb2wgdmVuZG9yIHNwZWNpZmljIHJlZ2lzdGVycyBhbmQgbG9naWMKK3RoYXQgY2FuIGJlIG1hbmlwdWxhdGVkIGFuZCBtb25pdG9yZWQgdmlhIHRoZSBjb250cm9sIGVuZHBvaW50Cit0aHJvdWdoIHZlbmRvciBkZWZpbmVkIGNvbW1hbmRzLgorCisJCS8vIFVTQiBTdGF0dXMKKwkJdXNiX2J1c3ksIGVwX3NlbCwKK3VzYl9idXN5IGlzIGFzc2VydGVkIHdoZW4gdGhlIFVTQiBjb3JlIGlzIGJ1c3kgdHJhbnNmZXJyaW5nCitkYXRhIGVwX3NlbCBpbmRpY2F0ZWQgdGhlIGVuZHBvaW50IHRoYXQgaXMgY3VycmVudGx5IGJ1c3kuCitUaGlzIGluZm9ybWF0aW9uIG1pZ2h0IGJlIHVzZWZ1bCBpZiBvbmUgZGVzaXJlcyB0byByZXNldC9jbGVhcgordGhlIGF0dGFjaGVkIEZJRk9zIGFuZCB3YW50IHRvIGRvIHRoaXMgd2hlbiB0aGUgZW5kcG9pbnQgaXMgaWRsZS4KKworCQkvLyBFbmRwb2ludCBJbnRlcmZhY2UKK1RoaXMgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgOCBlbmRwb2ludHMuIEVuZHBvaW50IDAgaXMgdGhlCitjb250cm9sIGVuZHBvaW50IGFuZCB1c2VkIGludGVybmFsbHkuIEVuZHBvaW50cyAxLTcgYXJlIGF2YWlsYWJsZQordG8gdGhlIHVzZXIuIHJlcGxhY2UgJ04nIHdpdGggdGhlIGVuZHBvaW50IG51bWJlci4KKworCQllcE5fY2ZnLAorVGhpcyBpcyBhIGNvbnN0YW50IGlucHV0IHVzZWQgdG8gY29uZmlndXJlIHRoZSBlbmRwb2ludCBieSBPUmluZwordGhlc2UgZGVmaW5lcyB0b2dldGhlciBhbmQgYWRkaW5nIHRoZSBtYXggcGFja2V0IHNpemUgZm9yIHRoaXMKK2VuZHBvaW50OgorYElOIGFuZCBgT1VUIHNlbGVjdCB0aGUgdHJhbnNmZXIgZGlyZWN0aW9uIGZvciB0aGlzIGVuZHBvaW50CitgSVNPLCBgQlVMSyBhbmQgYElOVCBkZXRlcm1pbmUgdGhlIGVuZHBvaW50IHR5cGUKKworRXhhbXBsZTogImBCVUxLIHwgYElOICB8IDE0J2QwNjQiIGRlZmluZXMgYSBCVUxLIElOIGVuZHBvaW50IHdpdGgKK21heCBwYWNrZXQgc2l6ZSBvZiA2NCBieXRlcworCisJCWVwTl9kaW4sICBlcE5fd2UsIGVwTl9mdWxsLAorVGhpcyBpcyB0aGUgT1VUIEZJRk8gaW50ZXJmYWNlLiBJZiB0aGlzIGlzIGEgSU4gZW5kcG9pbnQsIGdyb3VuZAorYWxsIHVudXNlZCBpbnB1dHMgYW5kIGxlYXZlIG91dHB1dHMgdW5jb25uZWN0ZWQuCisKKwkJZXBOX2RvdXQsIGVwTl9yZSwgZXBOX2VtcHR5LAordGhpcyBpcyB0aGUgSU4gRklGTyBpbnRlcmZhY2UuIElmIHRoaXMgaXMgYSBPVVQgZW5kcG9pbnQgZ3JvdW5kCithbGwgdW51c2VkIGlucHV0cyBhbmQgbGVhdmUgb3V0cHV0cyB1bmNvbm5lY3RlZC4KKworCQllcE5fYmZfZW4sIGVwTl9iZl9zaXplLAorVGhlc2UgdHdvIGNvbnN0YW50IGNvbmZpZ3VyZSB0aGUgQmxvY2sgRnJhbWUgZmVhdHVyZS4KKworKi8KKworCittb2R1bGUgdXNiMWRfY29yZShjbGtfaSwgcnN0X2ksCisKKwkJLy8gVVRNSSBJbnRlcmZhY2UKKwkJRGF0YU91dCwgVHhWYWxpZCwgVHhSZWFkeSwgUnhWYWxpZCwKKwkJUnhBY3RpdmUsIFJ4RXJyb3IsIERhdGFJbiwgTGluZVN0YXRlLAorCQkvLyBVU0IgTWlzYworCQlwaHlfdHhfbW9kZSwgdXNiX3JzdCwgCisKKwkJLy8gSW50ZXJydXB0cworCQlkcm9wcGVkX2ZyYW1lLCBtaXNhbGlnbmVkX2ZyYW1lLAorCQljcmMxNl9lcnIsCisKKwkJLy8gVmVuZG9yIEZlYXR1cmVzCisJCXZfc2V0X2ludCwgdl9zZXRfZmVhdHVyZSwgd1ZhbHVlLAorCQl3SW5kZXgsIHZlbmRvcl9kYXRhLAorCisJCS8vIFVTQiBTdGF0dXMKKwkJdXNiX2J1c3ksIGVwX3NlbCwKKworCQkvLyBFbmRwb2ludCBJbnRlcmZhY2UKKwkJZXAxX2NmZywKKwkJZXAxX2RpbiwgIGVwMV93ZSwgZXAxX2Z1bGwsCisJCWVwMV9kb3V0LCBlcDFfcmUsIGVwMV9lbXB0eSwKKwkJZXAxX2JmX2VuLCBlcDFfYmZfc2l6ZSwKKworCQllcDJfY2ZnLAorCQllcDJfZGluLCAgZXAyX3dlLCBlcDJfZnVsbCwKKwkJZXAyX2RvdXQsIGVwMl9yZSwgZXAyX2VtcHR5LAorCQllcDJfYmZfZW4sIGVwMl9iZl9zaXplLAorCisJCWVwM19jZmcsCisJCWVwM19kaW4sICBlcDNfd2UsIGVwM19mdWxsLAorCQllcDNfZG91dCwgZXAzX3JlLCBlcDNfZW1wdHksCisJCWVwM19iZl9lbiwgZXAzX2JmX3NpemUsCisKKwkJZXA0X2NmZywKKwkJZXA0X2RpbiwgIGVwNF93ZSwgZXA0X2Z1bGwsCisJCWVwNF9kb3V0LCBlcDRfcmUsIGVwNF9lbXB0eSwKKwkJZXA0X2JmX2VuLCBlcDRfYmZfc2l6ZSwKKworCQllcDVfY2ZnLAorCQllcDVfZGluLCAgZXA1X3dlLCBlcDVfZnVsbCwKKwkJZXA1X2RvdXQsIGVwNV9yZSwgZXA1X2VtcHR5LAorCQllcDVfYmZfZW4sIGVwNV9iZl9zaXplLAorCisJCWVwNl9jZmcsCisJCWVwNl9kaW4sICBlcDZfd2UsIGVwNl9mdWxsLAorCQllcDZfZG91dCwgZXA2X3JlLCBlcDZfZW1wdHksCisJCWVwNl9iZl9lbiwgZXA2X2JmX3NpemUsCisKKwkJZXA3X2NmZywKKwkJZXA3X2RpbiwgIGVwN193ZSwgZXA3X2Z1bGwsCisJCWVwN19kb3V0LCBlcDdfcmUsIGVwN19lbXB0eSwKKwkJZXA3X2JmX2VuLCBlcDdfYmZfc2l6ZSwKKworCQkvLyBSZWdpc3RlciBJbnRlcmZhY2UKKwkJcmVnX2FkZHIsCisJCXJlZ19yZHdybiwKKwkJcmVnX3JlcSwKKwkJcmVnX3dkYXRhLAorCQlyZWdfcmRhdGEsCisJCXJlZ19hY2sKKworCQkpOyAJCQorCitpbnB1dAkJY2xrX2k7CitpbnB1dAkJcnN0X2k7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVVRNSSBJbnRlcmZhY2UKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXRwdXQJWzc6MF0JRGF0YU91dDsKK291dHB1dAkJVHhWYWxpZDsKK2lucHV0CQlUeFJlYWR5OworaW5wdXQJWzc6MF0JRGF0YUluOworaW5wdXQJCVJ4VmFsaWQ7CitpbnB1dAkJUnhBY3RpdmU7CitpbnB1dAkJUnhFcnJvcjsKK2lucHV0CVsxOjBdCUxpbmVTdGF0ZTsKKworaW5wdXQJCXBoeV90eF9tb2RlOworaW5wdXQJCXVzYl9yc3Q7CitvdXRwdXQJCWRyb3BwZWRfZnJhbWUsIG1pc2FsaWduZWRfZnJhbWU7CitvdXRwdXQJCWNyYzE2X2VycjsKKworb3V0cHV0CQl2X3NldF9pbnQ7CitvdXRwdXQJCXZfc2V0X2ZlYXR1cmU7CitvdXRwdXQJWzE1OjBdCXdWYWx1ZTsKK291dHB1dAlbMTU6MF0Jd0luZGV4OworaW5wdXQJWzE1OjBdCXZlbmRvcl9kYXRhOworCitvdXRwdXQJCXVzYl9idXN5Oworb3V0cHV0CVszOjBdCWVwX3NlbDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgSW50ZXJmYWNlCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXRwdXQgWzMxOjBdICAgcmVnX2FkZHI7ICAgLy8gUmVnaXN0ZXIgQWRkcmVzcworb3V0cHV0CQlyZWdfcmR3cm47ICAvLyAwIC0+IHdyaXRlLCAxLT4gcmVhZAorb3V0cHV0CQlyZWdfcmVxOyAgICAvLyAgUmVnaXN0ZXIgUmVxCitvdXRwdXQgWzMxOjBdICAgcmVnX3dkYXRhOyAgLy8gUmVnaXN0ZXIgd3JpdGUgZGF0YQoraW5wdXQgIFszMTowXSAgIHJlZ19yZGF0YTsgIC8vIFJlZ2lzdGVyIFJlYWQgRGF0YQoraW5wdXQJCXJlZ19hY2s7ICAgIC8vIFJlZ2lzdGVyIEFjaworCisvLyBFbmRwb2ludCBJbnRlcmZhY2VzCitpbnB1dAlbMTM6MF0JZXAxX2NmZzsKK2lucHV0CVs3OjBdCWVwMV9kaW47CitvdXRwdXQJWzc6MF0JZXAxX2RvdXQ7CitvdXRwdXQJCWVwMV93ZSwgZXAxX3JlOworaW5wdXQJCWVwMV9lbXB0eSwgZXAxX2Z1bGw7CitpbnB1dAkJZXAxX2JmX2VuOworaW5wdXQJWzY6MF0JZXAxX2JmX3NpemU7CisKK2lucHV0CVsxMzowXQllcDJfY2ZnOworaW5wdXQJWzc6MF0JZXAyX2RpbjsKK291dHB1dAlbNzowXQllcDJfZG91dDsKK291dHB1dAkJZXAyX3dlLCBlcDJfcmU7CitpbnB1dAkJZXAyX2VtcHR5LCBlcDJfZnVsbDsKK2lucHV0CQllcDJfYmZfZW47CitpbnB1dAlbNjowXQllcDJfYmZfc2l6ZTsKKworaW5wdXQJWzEzOjBdCWVwM19jZmc7CitpbnB1dAlbNzowXQllcDNfZGluOworb3V0cHV0CVs3OjBdCWVwM19kb3V0Oworb3V0cHV0CQllcDNfd2UsIGVwM19yZTsKK2lucHV0CQllcDNfZW1wdHksIGVwM19mdWxsOworaW5wdXQJCWVwM19iZl9lbjsKK2lucHV0CVs2OjBdCWVwM19iZl9zaXplOworCitpbnB1dAlbMTM6MF0JZXA0X2NmZzsKK2lucHV0CVs3OjBdCWVwNF9kaW47CitvdXRwdXQJWzc6MF0JZXA0X2RvdXQ7CitvdXRwdXQJCWVwNF93ZSwgZXA0X3JlOworaW5wdXQJCWVwNF9lbXB0eSwgZXA0X2Z1bGw7CitpbnB1dAkJZXA0X2JmX2VuOworaW5wdXQJWzY6MF0JZXA0X2JmX3NpemU7CisKK2lucHV0CVsxMzowXQllcDVfY2ZnOworaW5wdXQJWzc6MF0JZXA1X2RpbjsKK291dHB1dAlbNzowXQllcDVfZG91dDsKK291dHB1dAkJZXA1X3dlLCBlcDVfcmU7CitpbnB1dAkJZXA1X2VtcHR5LCBlcDVfZnVsbDsKK2lucHV0CQllcDVfYmZfZW47CitpbnB1dAlbNjowXQllcDVfYmZfc2l6ZTsKKworaW5wdXQJWzEzOjBdCWVwNl9jZmc7CitpbnB1dAlbNzowXQllcDZfZGluOworb3V0cHV0CVs3OjBdCWVwNl9kb3V0Oworb3V0cHV0CQllcDZfd2UsIGVwNl9yZTsKK2lucHV0CQllcDZfZW1wdHksIGVwNl9mdWxsOworaW5wdXQJCWVwNl9iZl9lbjsKK2lucHV0CVs2OjBdCWVwNl9iZl9zaXplOworCitpbnB1dAlbMTM6MF0JZXA3X2NmZzsKK2lucHV0CVs3OjBdCWVwN19kaW47CitvdXRwdXQJWzc6MF0JZXA3X2RvdXQ7CitvdXRwdXQJCWVwN193ZSwgZXA3X3JlOworaW5wdXQJCWVwN19lbXB0eSwgZXA3X2Z1bGw7CitpbnB1dAkJZXA3X2JmX2VuOworaW5wdXQJWzY6MF0JZXA3X2JmX3NpemU7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBMb2NhbCBXaXJlcyBhbmQgUmVnaXN0ZXJzCisvLworCit3aXJlCVs3OjBdCXJ4X2RhdGE7Cit3aXJlCQlyeF92YWxpZCwgcnhfYWN0aXZlLCByeF9lcnI7Cit3aXJlCVs3OjBdCXR4X2RhdGE7Cit3aXJlCQl0eF92YWxpZDsKK3dpcmUJCXR4X3JlYWR5Oword2lyZQkJdHhfZmlyc3Q7Cit3aXJlCQl0eF92YWxpZF9sYXN0OworCisvLyBJbnRlcm5hbCBSZWdpc3RlciBGaWxlIEludGVyZmFjZQord2lyZQlbNjowXQlmdW5jdF9hZHI7CS8vIFRoaXMgZnVuY3Rpb25zIGFkZHJlc3MgKHNldCBieSBjb250cm9sbGVyKQord2lyZQlbMzowXQllcF9zZWw7CQkvLyBFbmRwb2ludCBOdW1iZXIgSW5wdXQKK3dpcmUJCWNyYzE2X2VycjsJLy8gU2V0IENSQzE2IGVycm9yIGludGVycnVwdAord2lyZQkJaW50X3RvX3NldDsJLy8gU2V0IHRpbWUgb3V0IGludGVycnVwdAord2lyZQkJaW50X3NlcWVycl9zZXQ7CS8vIFNldCBQSUQgc2VxdWVuY2UgZXJyb3IgaW50ZXJydXB0Cit3aXJlCVszMTowXQlmcm1fbmF0OwkvLyBGcmFtZSBOdW1iZXIgYW5kIFRpbWUgUmVnaXN0ZXIKK3dpcmUJCW5zZV9lcnI7CS8vIE5vIFN1Y2ggRW5kcG9pbnQgRXJyb3IKK3dpcmUJCXBpZF9jc19lcnI7CS8vIFBJRCBDUyBlcnJvcgord2lyZQkJY3JjNV9lcnI7CS8vIENSQzUgRXJyb3IKKworcmVnCVs3OjBdCXR4X2RhdGFfc3Q7Cit3aXJlCVs3OjBdCXJ4X2N0cmxfZGF0YTsKK3dpcmUJWzc6MF0JcnhfY3RybF9kYXRhX2Q7CityZWcJWzEzOjBdCWNmZzsKK3dpcmUgICAgICAgICAgICByeF9jdHJsX2R2YWxpZDsKK3dpcmUgICAgICAgICAgICByeF9jdHJsX2Rkb25lOword2lyZSAgICAgICAgICAgIGlkbWFfcmU7Cit3aXJlICAgICAgICAgICAgaWRtYV93ZTsKK3JlZwkJZXBfZW1wdHk7CityZWcJCWVwX2Z1bGw7Cit3aXJlCVs3OjBdCXJ4X3NpemU7Cit3aXJlCQlyeF9kb25lOworCit3aXJlCVs3OjBdCWVwMF9kaW47Cit3aXJlCVs3OjBdCWVwMF9kb3V0Oword2lyZQkJZXAwX3JlLCBlcDBfd2U7Cit3aXJlCVsxMzowXQllcDBfY2ZnOword2lyZQlbNzowXQllcDBfc2l6ZTsKK3dpcmUJWzc6MF0JZXAwX2N0cmxfZG91dCwgZXAwX2N0cmxfZGluOword2lyZQkJZXAwX2N0cmxfcmUsIGVwMF9jdHJsX3dlOword2lyZQlbMzowXQllcDBfY3RybF9zdGF0OworCit3aXJlCQljdHJsX3NldHVwLCBjdHJsX2luLCBjdHJsX291dDsKK3dpcmUJCXNlbmRfc3RhbGw7Cit3aXJlCQl0b2tlbl92YWxpZDsKK3JlZwkJcnN0X2xvY2FsOwkJLy8gaW50ZXJuYWwgcmVzZXQKK3dpcmUJCWRyb3BwZWRfZnJhbWU7Cit3aXJlCQltaXNhbGlnbmVkX2ZyYW1lOword2lyZQkJdl9zZXRfaW50Oword2lyZQkJdl9zZXRfZmVhdHVyZTsKK3dpcmUJWzE1OjBdCXdWYWx1ZTsKK3dpcmUJWzE1OjBdCXdJbmRleDsKKworcmVnCQllcF9iZl9lbjsKK3JlZwlbNjowXQllcF9iZl9zaXplOword2lyZQlbNjowXQlyb21fYWRyOword2lyZQlbNzowXQlyb21fZGF0YTsKKword2lyZSAgICAgICAgICAgIGVwMF9mdWxsOword2lyZSAgICAgICAgICAgIGVwMF9lbXB0eTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1pc2MgTG9naWMKKy8vCisKKy8vIEVuZHBvaW50IHR5cGUgYW5kIE1heCB0cmFuc2ZlciBzaXplCithc3NpZ24gZXAwX2NmZyA9IGBDVFJMIHwgZXAwX3NpemU7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrX2kpCisJcnN0X2xvY2FsIDw9ICMxIHJzdF9pICYgfnVzYl9yc3Q7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNb2R1bGUgSW5zdGFudGlhdGlvbnMKKy8vCisvKioqKioqKiBNb3ZlIHRvIHBoeSBsb2dpYyBpcyBtb3ZlIHRvIGNvcmUgbGV2ZWwKK3VzYl9waHkgcGh5KAorCQkuY2xrKAkJCWNsa19pCQkJKSwKKwkJLnJzdCgJCQlyc3RfaQkJCSksCS8vIE9OTFkgZXh0ZXJuYWwgcmVzZXQKKwkJLnBoeV90eF9tb2RlKAkJcGh5X3R4X21vZGUJCSksCisJCS51c2JfcnN0KAkJdXNiX3JzdAkJCSksCisKKwkJLy8gVHJhbnNjZWl2ZXIgSW50ZXJmYWNlCisJCS5yeGQoCQkJcnhfZAkJCSksCisJCS5yeGRwKAkJCXJ4X2RwCQkJKSwKKwkJLnJ4ZG4oCQkJcnhfZG4JCQkpLAorCQkudHhkcCgJCQl0eF9kcAkJCSksCisJCS50eGRuKAkJCXR4X2RuCQkJKSwKKwkJLnR4b2UoCQkJdHhfb2UJCQkpLAorCisJCS8vIFVUTUkgSW50ZXJmYWNlCisJCS5EYXRhSW5fbygJCURhdGFJbgkJCSksCisJCS5SeFZhbGlkX28oCQlSeFZhbGlkCQkJKSwKKwkJLlJ4QWN0aXZlX28oCQlSeEFjdGl2ZQkJKSwKKwkJLlJ4RXJyb3JfbygJCVJ4RXJyb3IJCQkpLAorCQkuRGF0YU91dF9pKAkJRGF0YU91dAkJCSksCisJCS5UeFZhbGlkX2koCQlUeFZhbGlkCQkJKSwKKwkJLlR4UmVhZHlfbygJCVR4UmVhZHkJCQkpLAorCQkuTGluZVN0YXRlX28oCQlMaW5lU3RhdGUJCSkKKwkJKTsKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBVVE1JIEludGVyZmFjZQordXNiMWRfdXRtaV9pZgl1MCgKKwkJLnBoeV9jbGsoCQljbGtfaQkJCSksCisJCS5yc3QoCQkJcnN0X2xvY2FsCQkpLAorCQkvLyBJbnRlcmZhY2UgdG93YXJkcyBQaHktVHgKKwkJLkRhdGFPdXQoCQlEYXRhT3V0CQkJKSwKKwkJLlR4VmFsaWQoCQlUeFZhbGlkCQkJKSwKKwkJLlR4UmVhZHkoCQlUeFJlYWR5CQkJKSwKKworCQkvLyBJbnRlcmZhY2UgdG93YXJkcyBQaHktcngKKwkJLlJ4VmFsaWQoCQlSeFZhbGlkCQkJKSwKKwkJLlJ4QWN0aXZlKAkJUnhBY3RpdmUJCSksCisJCS5SeEVycm9yKAkJUnhFcnJvcgkJCSksCisJCS5EYXRhSW4oCQlEYXRhSW4JCQkpLAorCisJCS8vIEludGVyZmNhZSB0b3dhcmRzIHByb3RvY29sIGxheWVyLXJ4CisJCS5yeF9kYXRhKAkJcnhfZGF0YQkJCSksCisJCS5yeF92YWxpZCgJCXJ4X3ZhbGlkCQkpLAorCQkucnhfYWN0aXZlKAkJcnhfYWN0aXZlCQkpLAorCQkucnhfZXJyKAkJcnhfZXJyCQkJKSwKKworCQkvLyBJbnRlcmZjYWUgdG93YXJkcyBwcm90b2NvbCBsYXllci10eAorCQkudHhfZGF0YSgJCXR4X2RhdGEJCQkpLAorCQkudHhfdmFsaWQoCQl0eF92YWxpZAkJKSwKKwkJLnR4X3ZhbGlkX2xhc3QoCQl0eF92YWxpZF9sYXN0CQkpLAorCQkudHhfcmVhZHkoCQl0eF9yZWFkeQkJKSwKKwkJLnR4X2ZpcnN0KAkJdHhfZmlyc3QJCSkKKwkJKTsKKworLy8gUHJvdG9jb2wgTGF5ZXIKK3VzYjFkX3BsICB1MSgJLmNsaygJCQljbGtfaQkJCSksCisJCS5yc3QoCQkJcnN0X2xvY2FsCQkpLAorCQkvLyBJbnRlcmZhY2UgdG93YXJkcyB1dG1pLXJ4CisJCS5yeF9kYXRhKAkJcnhfZGF0YQkJCSksCisJCS5yeF92YWxpZCgJCXJ4X3ZhbGlkCQkpLAorCQkucnhfYWN0aXZlKAkJcnhfYWN0aXZlCQkpLAorCQkucnhfZXJyKAkJcnhfZXJyCQkJKSwKKworCQkvLyBJbnRlcmZhY2UgdG93YXJkcyB1dG1pLXR4CisJCS50eF9kYXRhKAkJdHhfZGF0YQkJCSksCisJCS50eF92YWxpZCgJCXR4X3ZhbGlkCQkpLAorCQkudHhfdmFsaWRfbGFzdCgJCXR4X3ZhbGlkX2xhc3QJCSksCisJCS50eF9yZWFkeSgJCXR4X3JlYWR5CQkpLAorCQkudHhfZmlyc3QoCQl0eF9maXJzdAkJKSwKKyAgICAgICAgICAgICAgICAgCisJCS8vIEludGVyZmFjZSB0b3dhcmRzIHVzYi1waHktdHgKKwkJLnR4X3ZhbGlkX291dCgJCVR4VmFsaWQJCQkpLAorCisJCS8vIHVudXNlZCBvdXRwdXRzCisJCS50b2tlbl92YWxpZCgJCXRva2VuX3ZhbGlkCQkpLAorCQkuaW50X3RvX3NldCgJCWludF90b19zZXQJCSksCisJCS5pbnRfc2VxZXJyX3NldCgJaW50X3NlcWVycl9zZXQJCSksCisJCS5waWRfY3NfZXJyKAkJcGlkX2NzX2VycgkJKSwKKwkJLm5zZV9lcnIoCQluc2VfZXJyCQkJKSwKKwkJLmNyYzVfZXJyKAkJY3JjNV9lcnIJCSksCisJCS5yeF9zaXplKAkJcnhfc2l6ZQkJCSksCisJCS5yeF9kb25lKAkJcnhfZG9uZQkJCSksCisKKwkJLy8gSW50ZXJmYWNlIHRvd2FyZHMgdXNiLWN0cmwKKwkJLmZhKAkJCWZ1bmN0X2FkcgkJKSwKKwkJLmZybV9uYXQoCQlmcm1fbmF0CQkJKSwKKwkJLmN0cmxfc2V0dXAoCQljdHJsX3NldHVwCQkpLAorCQkuY3RybF9pbigJCWN0cmxfaW4JCQkpLAorCQkuY3RybF9vdXQoCQljdHJsX291dAkJKSwKKwkJLnNlbmRfc3RhbGwoCQlzZW5kX3N0YWxsCQkpLAorCisJCS8vIHVzYi1zdGF0dXMgCisJCS5lcF9zZWwoCQllcF9zZWwJCQkpLAorCQkueF9idXN5KAkJdXNiX2J1c3kJCSksCisJCS5pbnRfY3JjMTZfc2V0KAkJY3JjMTZfZXJyCQkpLAorCQkuZHJvcHBlZF9mcmFtZSgJCWRyb3BwZWRfZnJhbWUJCSksCisJCS5taXNhbGlnbmVkX2ZyYW1lKAltaXNhbGlnbmVkX2ZyYW1lCSksCisKKwkJLmVwX2JmX2VuKAkJZXBfYmZfZW4JCSksCisJCS5lcF9iZl9zaXplKAkJZXBfYmZfc2l6ZQkJKSwKKwkJLmNzcigJCQljZmcJCQkpLAorCQkudHhfZGF0YV9zdCgJCXR4X2RhdGFfc3QJCSksCisKKwkJLnJ4X2N0cmxfZGF0YSAgICAgICAgICAocnhfY3RybF9kYXRhCQkpLAorCQkucnhfY3RybF9kYXRhX2QgICAgICAgIChyeF9jdHJsX2RhdGFfZAkJKSwKKwkJLnJ4X2N0cmxfZHZhbGlkICAgICAgICAocnhfY3RybF9kdmFsaWQgICAgICAgICAgKSwKKwkJLnJ4X2N0cmxfZGRvbmUgICAgICAgICAocnhfY3RybF9kZG9uZSAgICAgICAgICAgKSwKKworCQkuaWRtYV9yZSgJCWlkbWFfcmUJCQkpLAorCQkuaWRtYV93ZSgJCWlkbWFfd2UJCQkpLAorCQkuZXBfZW1wdHkoCQllcF9lbXB0eQkJKSwKKwkJLmVwX2Z1bGwoCQllcF9mdWxsCQkJKQorCQkpOworCit1c2IxZF9jdHJsICB1NCgJLmNsaygJCQljbGtfaQkJCSksCisJCS5yc3QoCQkJcnN0X2xvY2FsCQkpLAorCisJCS5yb21fYWRyKAkJcm9tX2FkcgkJCSksCisJCS5yb21fZGF0YSgJCXJvbV9kYXRhCQkpLAorCisJCS5jdHJsX3NldHVwKAkJY3RybF9zZXR1cAkJKSwKKwkJLmN0cmxfaW4oCQljdHJsX2luCQkJKSwKKwkJLmN0cmxfb3V0KAkJY3RybF9vdXQJCSksCisKKwkJLnJ4X2N0cmxfZGF0YSAgICAgICAgICAocnhfY3RybF9kYXRhICAgICAgICAgICAgKSwKKwkJLnJ4X2N0cmxfZHZhbGlkICAgICAgICAocnhfY3RybF9kdmFsaWQgICAgICAgICAgKSwKKwkJLnJ4X2N0cmxfZGRvbmUgICAgICAgICAocnhfY3RybF9kZG9uZSAgICAgICAgICAgKSwKKworCisJCS5lcDBfZGluKAkJZXAwX2N0cmxfZG91dAkJKSwKKwkJLmVwMF9kb3V0KAkJZXAwX2N0cmxfZGluCQkpLAorCQkuZXAwX3JlKAkJZXAwX2N0cmxfcmUJCSksCisJCS5lcDBfd2UoCQllcDBfY3RybF93ZQkJKSwKKwkJLmVwMF9zdGF0KAkJZXAwX2N0cmxfc3RhdAkJKSwKKwkJLmVwMF9zaXplKAkJZXAwX3NpemUJCSksCisKKwkJLnNlbmRfc3RhbGwoCQlzZW5kX3N0YWxsCQkpLAorCQkuZnJhbWVfbm8oCQlmcm1fbmF0WzI2OjE2XQkJKSwKKwkJLmZ1bmN0X2FkcigJCWZ1bmN0X2FkciAJCSksCisJCS5jb25maWd1cmVkKAkJCQkJKSwKKwkJLmhhbHQoCQkJCQkJKSwKKworCQkudl9zZXRfaW50KAkJdl9zZXRfaW50CQkpLAorCQkudl9zZXRfZmVhdHVyZSgJCXZfc2V0X2ZlYXR1cmUJCSksCisJCS53VmFsdWUoCQl3VmFsdWUJCQkpLAorCQkud0luZGV4KAkJd0luZGV4CQkJKSwKKwkJLnZlbmRvcl9kYXRhKAkJdmVuZG9yX2RhdGEJCSksCisKKyAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciBJbnRlcmZhY2UKKwkgICAgICAgIC5yZWdfYWRkciAgICAocmVnX2FkZHIpLAorCSAgICAgICAgLnJlZ19yZHdybiAgIChyZWdfcmR3cm4pLAorCSAgICAgICAgLnJlZ19yZXEgICAgIChyZWdfcmVxKSwKKwkgICAgICAgIC5yZWdfd2RhdGEgICAocmVnX3dkYXRhKSwKKwkgICAgICAgIC5yZWdfcmRhdGEgICAocmVnX3JkYXRhKSwKKwkgICAgICAgIC5yZWdfYWNrICAgICAocmVnX2FjaykKKworCQkpOworCisKK3VzYjFkX3JvbTEgcm9tMSgJLmNsaygJCWNsa19pCQkpLAorCQkuYWRyKAkJcm9tX2FkcgkJKSwKKwkJLmRvdXQoCQlyb21fZGF0YQkpCisJCSk7CisKKy8vIENUUkwgRW5kcG9pbnQgRklGTworLyoqKioqKioqKioqKioKK3VzYjFkX2dlbmVyaWNfZmlmbyAjKDgsNiwwKSB1MTAoCisJCS5jbGsoCQkJY2xrX2kJCQkpLAorCQkucnN0KAkJCXJzdF9pCQkJKSwKKwkJLmNscigJCQl1c2JfcnN0CQkJKSwKKwkJLmRpbigJCQlyeF9jdHJsX2RhdGFfZAkJKSwKKwkJLndlKAkJCWVwMF93ZQkJCSksCisJCS5kb3V0KAkJCWVwMF9jdHJsX2RvdXQJCSksCisJCS5yZSgJCQllcDBfY3RybF9yZQkJKSwKKwkJLmZ1bGxfcigJCQkJCSksCisJCS5lbXB0eV9yKAkJCQkJKSwKKwkJLmZ1bGwoCQkJZXAwX2Z1bGwJCSksCisJCS5lbXB0eSgJCQllcDBfY3RybF9zdGF0WzFdCSksCisJCS5mdWxsX24oCQkJCQkpLAorCQkuZW1wdHlfbigJCQkJCSksCisJCS5mdWxsX25fcigJCQkJCSksCisJCS5lbXB0eV9uX3IoCQkJCQkpLAorCQkubGV2ZWwoCQkJCQkJKQorCQkpOworCisqKioqKioqKioqKioqLworLy8gQ1RSTCBFbmRwb2ludCBGSUZPCit1c2IxZF9zeW5jX2ZpZm8gICMoOCw4KSB1MTAoCisJICAgICAgICAgIC5jbGsgICAgICAgICAgKGNsa19pKSwKKwkgICAgICAgICAgLnJlc2V0X24gICAgICAocnN0X2kpLAorCQkgIC5jbHIgICAgICAgICAgKHVzYl9yc3QpLAorCQkgIC53cl9lbiAgICAgICAgKGVwMF93ZSksCisJCSAgLndyX2RhdGEgICAgICAocnhfY3RybF9kYXRhX2QpLAorCQkgIC5mdWxsICAgICAgICAgKGVwMF9mdWxsKSwKKwkJICAuZW1wdHkgICAgICAgIChlcDBfY3RybF9zdGF0WzFdKSwKKwkJICAucmRfZW4gICAgICAgIChlcDBfY3RybF9yZSksCisJCSAgLnJkX2RhdGEgICAgICAoZXAwX2N0cmxfZG91dCkKKwkgICk7Cit1c2IxZF9nZW5lcmljX2ZpZm8gIyg4LDYsMCkgdTExKAorCQkuY2xrKAkJCWNsa19pCQkJKSwKKwkJLnJzdCgJCQlyc3RfaQkJCSksCisJCS5jbHIoCQkJdXNiX3JzdAkJCSksCisJCS5kaW4oCQkJZXAwX2N0cmxfZGluCQkpLAorCQkud2UoCQkJZXAwX2N0cmxfd2UJCSksCisJCS5kb3V0KAkJCWVwMF9kb3V0CQkpLAorCQkucmUoCQkJZXAwX3JlCQkJKSwKKwkJLmZ1bGxfcigJCQkJCSksCisJCS5lbXB0eV9yKAkJCQkJKSwKKwkJLmZ1bGwoCQkJZXAwX2N0cmxfc3RhdFsyXQkpLAorCQkuZW1wdHkoCQkJZXAwX2VtcHR5CQkpLAorCQkuZnVsbF9uKAkJCQkJKSwKKwkJLmVtcHR5X24oCQkJCQkpLAorCQkuZnVsbF9uX3IoCQkJCQkpLAorCQkuZW1wdHlfbl9yKAkJCQkJKSwKKwkJLmxldmVsKAkJCQkJCSkKKwkJKTsKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRW5kcG9pbnQgRklGTyBJbnRlcmZhY2VzCisvLworCithbHdheXMgQChlcF9zZWwgb3IgZXAwX2NmZyBvciBlcDFfY2ZnIG9yIGVwMl9jZmcgb3IgZXAzX2NmZyBvcgorCQllcDRfY2ZnIG9yIGVwNV9jZmcgb3IgZXA2X2NmZyBvciBlcDdfY2ZnKQorCWNhc2UoZXBfc2VsKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDQnaDA6CWNmZyA9IGVwMF9jZmc7CisJICAgNCdoMToJY2ZnID0gZXAxX2NmZzsKKwkgICA0J2gyOgljZmcgPSBlcDJfY2ZnOworCSAgIDQnaDM6CWNmZyA9IGVwM19jZmc7CisJICAgNCdoNDoJY2ZnID0gZXA0X2NmZzsKKwkgICA0J2g1OgljZmcgPSBlcDVfY2ZnOworCSAgIDQnaDY6CWNmZyA9IGVwNl9jZmc7CisJICAgNCdoNzoJY2ZnID0gZXA3X2NmZzsKKwllbmRjYXNlCisKKy8vIEluIGVuZHBvaW50cyBvbmx5CithbHdheXMgQChwb3NlZGdlIGNsa19pKQorCWNhc2UoZXBfc2VsKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDQnaDA6CXR4X2RhdGFfc3QgPD0gIzEgZXAwX2RvdXQ7CisJICAgNCdoMToJdHhfZGF0YV9zdCA8PSAjMSBlcDFfZGluOworCSAgIDQnaDI6CXR4X2RhdGFfc3QgPD0gIzEgZXAyX2RpbjsKKwkgICA0J2gzOgl0eF9kYXRhX3N0IDw9ICMxIGVwM19kaW47CisJICAgNCdoNDoJdHhfZGF0YV9zdCA8PSAjMSBlcDRfZGluOworCSAgIDQnaDU6CXR4X2RhdGFfc3QgPD0gIzEgZXA1X2RpbjsKKwkgICA0J2g2Ogl0eF9kYXRhX3N0IDw9ICMxIGVwNl9kaW47CisJICAgNCdoNzoJdHhfZGF0YV9zdCA8PSAjMSBlcDdfZGluOworCWVuZGNhc2UKKworLy8gSW4gZW5kcG9pbnRzIG9ubHkKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrX2kpCisJY2FzZShlcF9zZWwpCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgNCdoMDoJZXBfZW1wdHkgPD0gIzEgZXAwX2VtcHR5OworCSAgIDQnaDE6CWVwX2VtcHR5IDw9ICMxIGVwMV9lbXB0eTsKKwkgICA0J2gyOgllcF9lbXB0eSA8PSAjMSBlcDJfZW1wdHk7CisJICAgNCdoMzoJZXBfZW1wdHkgPD0gIzEgZXAzX2VtcHR5OworCSAgIDQnaDQ6CWVwX2VtcHR5IDw9ICMxIGVwNF9lbXB0eTsKKwkgICA0J2g1OgllcF9lbXB0eSA8PSAjMSBlcDVfZW1wdHk7CisJICAgNCdoNjoJZXBfZW1wdHkgPD0gIzEgZXA2X2VtcHR5OworCSAgIDQnaDc6CWVwX2VtcHR5IDw9ICMxIGVwN19lbXB0eTsKKwllbmRjYXNlCisKKy8vIE9VVCBlbmRwb2ludHMgb25seQorYWx3YXlzIEAoZXBfc2VsIG9yIGVwMF9mdWxsIG9yIGVwMV9mdWxsIG9yIGVwMl9mdWxsIG9yIGVwM19mdWxsIG9yCisJCWVwNF9mdWxsIG9yIGVwNV9mdWxsIG9yIGVwNl9mdWxsIG9yIGVwN19mdWxsKQorCWNhc2UoZXBfc2VsKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDQnaDA6CWVwX2Z1bGwgPSBlcDBfZnVsbDsKKwkgICA0J2gxOgllcF9mdWxsID0gZXAxX2Z1bGw7CisJICAgNCdoMjoJZXBfZnVsbCA9IGVwMl9mdWxsOworCSAgIDQnaDM6CWVwX2Z1bGwgPSBlcDNfZnVsbDsKKwkgICA0J2g0OgllcF9mdWxsID0gZXA0X2Z1bGw7CisJICAgNCdoNToJZXBfZnVsbCA9IGVwNV9mdWxsOworCSAgIDQnaDY6CWVwX2Z1bGwgPSBlcDZfZnVsbDsKKwkgICA0J2g3OgllcF9mdWxsID0gZXA3X2Z1bGw7CisJZW5kY2FzZQorCithbHdheXMgQChwb3NlZGdlIGNsa19pKQorCWNhc2UoZXBfc2VsKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDQnaDA6CWVwX2JmX2VuID0gMSdiMDsKKwkgICA0J2gxOgllcF9iZl9lbiA9IGVwMV9iZl9lbjsKKwkgICA0J2gyOgllcF9iZl9lbiA9IGVwMl9iZl9lbjsKKwkgICA0J2gzOgllcF9iZl9lbiA9IGVwM19iZl9lbjsKKwkgICA0J2g0OgllcF9iZl9lbiA9IGVwNF9iZl9lbjsKKwkgICA0J2g1OgllcF9iZl9lbiA9IGVwNV9iZl9lbjsKKwkgICA0J2g2OgllcF9iZl9lbiA9IGVwNl9iZl9lbjsKKwkgICA0J2g3OgllcF9iZl9lbiA9IGVwN19iZl9lbjsKKwllbmRjYXNlCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrX2kpCisJY2FzZShlcF9zZWwpCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgNCdoMToJZXBfYmZfc2l6ZSA9IGVwMV9iZl9zaXplOworCSAgIDQnaDI6CWVwX2JmX3NpemUgPSBlcDJfYmZfc2l6ZTsKKwkgICA0J2gzOgllcF9iZl9zaXplID0gZXAzX2JmX3NpemU7CisJICAgNCdoNDoJZXBfYmZfc2l6ZSA9IGVwNF9iZl9zaXplOworCSAgIDQnaDU6CWVwX2JmX3NpemUgPSBlcDVfYmZfc2l6ZTsKKwkgICA0J2g2OgllcF9iZl9zaXplID0gZXA2X2JmX3NpemU7CisJICAgNCdoNzoJZXBfYmZfc2l6ZSA9IGVwN19iZl9zaXplOworCWVuZGNhc2UKKworYXNzaWduIGVwMV9kb3V0ID0gcnhfY3RybF9kYXRhX2Q7Cithc3NpZ24gZXAyX2RvdXQgPSByeF9jdHJsX2RhdGFfZDsKK2Fzc2lnbiBlcDNfZG91dCA9IHJ4X2N0cmxfZGF0YV9kOworYXNzaWduIGVwNF9kb3V0ID0gcnhfY3RybF9kYXRhX2Q7Cithc3NpZ24gZXA1X2RvdXQgPSByeF9jdHJsX2RhdGFfZDsKK2Fzc2lnbiBlcDZfZG91dCA9IHJ4X2N0cmxfZGF0YV9kOworYXNzaWduIGVwN19kb3V0ID0gcnhfY3RybF9kYXRhX2Q7CisKK2Fzc2lnbiBlcDBfcmUgPSBpZG1hX3JlICYgKGVwX3NlbCA9PSA0J2gwKTsKK2Fzc2lnbiBlcDFfcmUgPSBpZG1hX3JlICYgKGVwX3NlbCA9PSA0J2gxKSAmICFlcDFfZW1wdHk7Cithc3NpZ24gZXAyX3JlID0gaWRtYV9yZSAmIChlcF9zZWwgPT0gNCdoMikgJiAhZXAyX2VtcHR5OworYXNzaWduIGVwM19yZSA9IGlkbWFfcmUgJiAoZXBfc2VsID09IDQnaDMpICYgIWVwM19lbXB0eTsKK2Fzc2lnbiBlcDRfcmUgPSBpZG1hX3JlICYgKGVwX3NlbCA9PSA0J2g0KSAmICFlcDRfZW1wdHk7Cithc3NpZ24gZXA1X3JlID0gaWRtYV9yZSAmIChlcF9zZWwgPT0gNCdoNSkgJiAhZXA1X2VtcHR5OworYXNzaWduIGVwNl9yZSA9IGlkbWFfcmUgJiAoZXBfc2VsID09IDQnaDYpICYgIWVwNl9lbXB0eTsKK2Fzc2lnbiBlcDdfcmUgPSBpZG1hX3JlICYgKGVwX3NlbCA9PSA0J2g3KSAmICFlcDdfZW1wdHk7CisKK2Fzc2lnbiBlcDBfd2UgPSBpZG1hX3dlICYgKGVwX3NlbCA9PSA0J2gwKTsKK2Fzc2lnbiBlcDFfd2UgPSBpZG1hX3dlICYgKGVwX3NlbCA9PSA0J2gxKSAmICFlcDFfZnVsbDsKK2Fzc2lnbiBlcDJfd2UgPSBpZG1hX3dlICYgKGVwX3NlbCA9PSA0J2gyKSAmICFlcDJfZnVsbDsKK2Fzc2lnbiBlcDNfd2UgPSBpZG1hX3dlICYgKGVwX3NlbCA9PSA0J2gzKSAmICFlcDNfZnVsbDsKK2Fzc2lnbiBlcDRfd2UgPSBpZG1hX3dlICYgKGVwX3NlbCA9PSA0J2g0KSAmICFlcDRfZnVsbDsKK2Fzc2lnbiBlcDVfd2UgPSBpZG1hX3dlICYgKGVwX3NlbCA9PSA0J2g1KSAmICFlcDVfZnVsbDsKK2Fzc2lnbiBlcDZfd2UgPSBpZG1hX3dlICYgKGVwX3NlbCA9PSA0J2g2KSAmICFlcDZfZnVsbDsKK2Fzc2lnbiBlcDdfd2UgPSBpZG1hX3dlICYgKGVwX3NlbCA9PSA0J2g3KSAmICFlcDdfZnVsbDsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfY3JjMTYudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9jcmMxNi52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFjZWU0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfY3JjMTYudgpAQCAtMCwwICsxLDk4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVVNCIENSQzE2IE1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2IxX2Z1bmN0Ly8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2IxX2NyYzE2LnYsdiAxLjEuMS4xIDIwMDItMDktMTkgMTI6MDc6MzkgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMi0wOS0xOSAxMjowNzozOSAkCisvLyAgJFJldmlzaW9uOiAxLjEuMS4xICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCitgaW5jbHVkZSAidXNiMWRfZGVmaW5lcy52IgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gQ1JDMTYKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK21vZHVsZSB1c2IxZF9jcmMxNihjcmNfaW4sIGRpbiwgY3JjX291dCk7CitpbnB1dAlbMTU6MF0JY3JjX2luOworaW5wdXQJWzc6MF0JZGluOworb3V0cHV0CVsxNTowXQljcmNfb3V0OworCithc3NpZ24gY3JjX291dFswXSA9CWRpbls3XSBeIGRpbls2XSBeIGRpbls1XSBeIGRpbls0XSBeIGRpblszXSBeCisJCQlkaW5bMl0gXiBkaW5bMV0gXiBkaW5bMF0gXiBjcmNfaW5bOF0gXiBjcmNfaW5bOV0gXgorCQkJY3JjX2luWzEwXSBeIGNyY19pblsxMV0gXiBjcmNfaW5bMTJdIF4gY3JjX2luWzEzXSBeCisJCQljcmNfaW5bMTRdIF4gY3JjX2luWzE1XTsKK2Fzc2lnbiBjcmNfb3V0WzFdID0JZGluWzddIF4gZGluWzZdIF4gZGluWzVdIF4gZGluWzRdIF4gZGluWzNdIF4gZGluWzJdIF4KKwkJCWRpblsxXSBeIGNyY19pbls5XSBeIGNyY19pblsxMF0gXiBjcmNfaW5bMTFdIF4KKwkJCWNyY19pblsxMl0gXiBjcmNfaW5bMTNdIF4gY3JjX2luWzE0XSBeIGNyY19pblsxNV07Cithc3NpZ24gY3JjX291dFsyXSA9CWRpblsxXSBeIGRpblswXSBeIGNyY19pbls4XSBeIGNyY19pbls5XTsKK2Fzc2lnbiBjcmNfb3V0WzNdID0JZGluWzJdIF4gZGluWzFdIF4gY3JjX2luWzldIF4gY3JjX2luWzEwXTsKK2Fzc2lnbiBjcmNfb3V0WzRdID0JZGluWzNdIF4gZGluWzJdIF4gY3JjX2luWzEwXSBeIGNyY19pblsxMV07Cithc3NpZ24gY3JjX291dFs1XSA9CWRpbls0XSBeIGRpblszXSBeIGNyY19pblsxMV0gXiBjcmNfaW5bMTJdOworYXNzaWduIGNyY19vdXRbNl0gPQlkaW5bNV0gXiBkaW5bNF0gXiBjcmNfaW5bMTJdIF4gY3JjX2luWzEzXTsKK2Fzc2lnbiBjcmNfb3V0WzddID0JZGluWzZdIF4gZGluWzVdIF4gY3JjX2luWzEzXSBeIGNyY19pblsxNF07Cithc3NpZ24gY3JjX291dFs4XSA9CWRpbls3XSBeIGRpbls2XSBeIGNyY19pblswXSBeIGNyY19pblsxNF0gXiBjcmNfaW5bMTVdOworYXNzaWduIGNyY19vdXRbOV0gPQlkaW5bN10gXiBjcmNfaW5bMV0gXiBjcmNfaW5bMTVdOworYXNzaWduIGNyY19vdXRbMTBdID0JY3JjX2luWzJdOworYXNzaWduIGNyY19vdXRbMTFdID0JY3JjX2luWzNdOworYXNzaWduIGNyY19vdXRbMTJdID0JY3JjX2luWzRdOworYXNzaWduIGNyY19vdXRbMTNdID0JY3JjX2luWzVdOworYXNzaWduIGNyY19vdXRbMTRdID0JY3JjX2luWzZdOworYXNzaWduIGNyY19vdXRbMTVdID0JZGluWzddIF4gZGluWzZdIF4gZGluWzVdIF4gZGluWzRdIF4gZGluWzNdIF4gZGluWzJdIF4KKwkJCWRpblsxXSBeIGRpblswXSBeIGNyY19pbls3XSBeIGNyY19pbls4XSBeIGNyY19pbls5XSBeCisJCQljcmNfaW5bMTBdIF4gY3JjX2luWzExXSBeIGNyY19pblsxMl0gXiBjcmNfaW5bMTNdIF4KKwkJCWNyY19pblsxNF0gXiBjcmNfaW5bMTVdOworCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2NyYzUudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9jcmM1LnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGFlYzBkMgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9jcmM1LnYKQEAgLTAsMCArMSw4OSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVTQiBDUkM1IE1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiMV9mdW5jdC8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiMV9jcmM1LnYsdiAxLjEuMS4xIDIwMDItMDktMTkgMTI6MDc6MDUgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMi0wOS0xOSAxMjowNzowNSAkCisvLyAgJFJldmlzaW9uOiAxLjEuMS4xICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCitgaW5jbHVkZSAidXNiMWRfZGVmaW5lcy52IgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gQ1JDNQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVzYjFkX2NyYzUoY3JjX2luLCBkaW4sIGNyY19vdXQpOworaW5wdXQJWzQ6MF0JY3JjX2luOworaW5wdXQJWzEwOjBdCWRpbjsKK291dHB1dAlbNDowXQljcmNfb3V0OworCithc3NpZ24gY3JjX291dFswXSA9CWRpblsxMF0gXiBkaW5bOV0gXiBkaW5bNl0gXiBkaW5bNV0gXiBkaW5bM10gXgorCQkJZGluWzBdIF4gY3JjX2luWzBdIF4gY3JjX2luWzNdIF4gY3JjX2luWzRdOworCithc3NpZ24gY3JjX291dFsxXSA9CWRpblsxMF0gXiBkaW5bN10gXiBkaW5bNl0gXiBkaW5bNF0gXiBkaW5bMV0gXgorCQkJY3JjX2luWzBdIF4gY3JjX2luWzFdIF4gY3JjX2luWzRdOworCithc3NpZ24gY3JjX291dFsyXSA9CWRpblsxMF0gXiBkaW5bOV0gXiBkaW5bOF0gXiBkaW5bN10gXiBkaW5bNl0gXgorCQkJZGluWzNdIF4gZGluWzJdIF4gZGluWzBdIF4gY3JjX2luWzBdIF4gY3JjX2luWzFdIF4KKwkJCWNyY19pblsyXSBeIGNyY19pblszXSBeIGNyY19pbls0XTsKKworYXNzaWduIGNyY19vdXRbM10gPQlkaW5bMTBdIF4gZGluWzldIF4gZGluWzhdIF4gZGluWzddIF4gZGluWzRdIF4gZGluWzNdIF4KKwkJCWRpblsxXSBeIGNyY19pblsxXSBeIGNyY19pblsyXSBeIGNyY19pblszXSBeIGNyY19pbls0XTsKKworYXNzaWduIGNyY19vdXRbNF0gPQlkaW5bMTBdIF4gZGluWzldIF4gZGluWzhdIF4gZGluWzVdIF4gZGluWzRdIF4gZGluWzJdIF4KKwkJCWNyY19pblsyXSBeIGNyY19pblszXSBeIGNyY19pbls0XTsKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9jdHJsLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfY3RybC52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmMWE2NmMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfY3RybC52CkBAIC0wLDAgKzEsODQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgUG9ydGVkIHRvIFVTQjJVQVJUIHByb2plY3QKKyogIEF1dGhvcjogIERpbmVzaCBBbm5heXlhCisqICAgICAgICAgICBFbWFpbDotIGRpbmVzaGFAb3BlbmNvcmVzLm9yZworKgorKiAgICAgRGF0ZTogNHRoIEZlYiAyMDEzCisqICAgICBDaGFuZ2VzOgorKiAgICAgQS4gV2FybmluZyBDbGVhbiBVcAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBJbnRlcm5hbCBTZXR1cCBFbmdpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYjFfZnVuY3QvLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYjFfY3RybC52LHYgMS4yIDIwMDItMDktMjUgMDY6MDY6NDkgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMi0wOS0yNSAwNjowNjo0OSAkCisvLyAgJFJldmlzaW9uOiAxLjIgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjEuMS4xICAyMDAyLzA5LzE5IDEyOjA3OjA5ICBydWRpCisvLyAgICAgICAgICAgICAgIEluaXRpYWwgQ2hlY2tpbgorLy8KKy8vCisvLworLy8KKy8vCisvLworCitgaW5jbHVkZSAidXNiMWRfZGVmaW5lcy52IgorCittb2R1bGUgdXNiMWRfY3RybCgJY2xrLCByc3QsCisKKwkJCXJvbV9hZHIsIHJvbV9kYXRhLAorCisJCQljdHJsX3NldHVwLCBjdHJsX2luLCBjdHJsX291dCwKKworCQkJcnhfY3RybF9kYXRhLCByeF9jdHJsX2R2YWxpZCxyeF9jdHJsX2Rkb25lLAorCisJCQllcDBfZGluLCBlcDBfZG91dCwgZXAwX3JlLCBlcDBfd2UsIGVwMF9zdGF0LAorCQkJZXAwX3NpemUsCisKKwkJCXNlbmRfc3RhbGwsIGZyYW1lX25vLAorCQkJZnVuY3RfYWRyLCBjb25maWd1cmVkLCBoYWx0LAorCisJCQl2X3NldF9pbnQsIHZfc2V0X2ZlYXR1cmUsIHdWYWx1ZSwgd0luZGV4LCB2ZW5kb3JfZGF0YSwKKworCSAgICAgICAvLyBSZWdpc3RlciBJbnRlcmZhY2UKKwkJcmVnX2FkZHIsCisJCXJlZ19yZHdybiwKKwkJcmVnX3JlcSwKKwkJcmVnX3dkYXRhLAorCQlyZWdfcmRhdGEsCisJCXJlZ19hY2sKKworCisJCSk7CisKK2lucHV0CQljbGssIHJzdDsKKworb3V0cHV0CVs2OjBdCXJvbV9hZHI7CitpbnB1dAlbNzowXQlyb21fZGF0YTsKKworaW5wdXQJCWN0cmxfc2V0dXA7CitpbnB1dAkJY3RybF9pbjsKK2lucHV0CQljdHJsX291dDsKKworCitpbnB1dCBbNzowXSAgICAgcnhfY3RybF9kYXRhOyAKK2lucHV0ICAgICAgICAgICByeF9jdHJsX2R2YWxpZDsKK2lucHV0ICAgICAgICAgICByeF9jdHJsX2Rkb25lOworCitpbnB1dAlbNzowXQllcDBfZGluOworb3V0cHV0CVs3OjBdCWVwMF9kb3V0Oworb3V0cHV0CQllcDBfcmUsIGVwMF93ZTsKK2lucHV0CVszOjBdCWVwMF9zdGF0Oworb3V0cHV0CVs3OjBdCWVwMF9zaXplOworCitvdXRwdXQJCXNlbmRfc3RhbGw7CitpbnB1dAlbMTA6MF0JZnJhbWVfbm87CitvdXRwdXQJWzY6MF0JZnVuY3RfYWRyOworb3V0cHV0CQljb25maWd1cmVkLCBoYWx0OworCitvdXRwdXQJCXZfc2V0X2ludDsKK291dHB1dAkJdl9zZXRfZmVhdHVyZTsKK291dHB1dAlbMTU6MF0Jd1ZhbHVlOworb3V0cHV0CVsxNTowXQl3SW5kZXg7CitpbnB1dAlbMTU6MF0JdmVuZG9yX2RhdGE7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlZ2lzdGVyIEludGVyZmFjZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3V0cHV0IFszMTowXSAgIHJlZ19hZGRyOyAgIC8vIFJlZ2lzdGVyIEFkZHJlc3MKK291dHB1dAkJcmVnX3Jkd3JuOyAgLy8gMCAtPiB3cml0ZSwgMS0+IHJlYWQKK291dHB1dAkJcmVnX3JlcTsgICAgLy8gIFJlZ2lzdGVyIFJlcQorb3V0cHV0IFszMTowXQlyZWdfd2RhdGE7ICAvLyBSZWdpc3RlciB3cml0ZSBkYXRhCitpbnB1dCAgWzMxOjBdCXJlZ19yZGF0YTsgIC8vIFJlZ2lzdGVyIFJlYWQgRGF0YQoraW5wdXQJCXJlZ19hY2s7ICAgIC8vIFJlZ2lzdGVyIEFjaworCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIExvY2FsIFdpcmVzIGFuZCBSZWdpc3RlcnMKKy8vCisKK3BhcmFtZXRlcglJRExFCQkJPQkyMCdiMDAwMF8wMDAwXzAwMDBfMDAwMF8wMDAxLAorCQlHRVRfSERSCQkJPQkyMCdiMDAwMF8wMDAwXzAwMDBfMDAwMF8wMDEwLAorCQlHRVRfU1RBVFVTX1MJCT0JMjAnYjAwMDBfMDAwMF8wMDAwXzAwMDBfMDEwMCwKKwkJQ0xFQVJfRkVBVFVSRV9TCQk9CTIwJ2IwMDAwXzAwMDBfMDAwMF8wMDAwXzEwMDAsCisJCVNFVF9GRUFUVVJFX1MJCT0JMjAnYjAwMDBfMDAwMF8wMDAwXzAwMDFfMDAwMCwKKwkJU0VUX0FERFJFU1NfUwkJPQkyMCdiMDAwMF8wMDAwXzAwMDBfMDAxMF8wMDAwLAorCQlHRVRfREVTQ1JJUFRPUl9TCT0JMjAnYjAwMDBfMDAwMF8wMDAwXzAxMDBfMDAwMCwKKwkJU0VUX0RFU0NSSVBUT1JfUwk9CTIwJ2IwMDAwXzAwMDBfMDAwMF8xMDAwXzAwMDAsCisJCUdFVF9DT05GSUdfUwkJPQkyMCdiMDAwMF8wMDAwXzAwMDFfMDAwMF8wMDAwLAorCQlTRVRfQ09ORklHX1MJCT0JMjAnYjAwMDBfMDAwMF8wMDEwXzAwMDBfMDAwMCwKKwkJR0VUX0lOVEVSRkFDRV9TCQk9CTIwJ2IwMDAwXzAwMDBfMDEwMF8wMDAwXzAwMDAsCisJCVNFVF9JTlRFUkZBQ0VfUwkJPQkyMCdiMDAwMF8wMDAwXzEwMDBfMDAwMF8wMDAwLAorCQlTWU5DSF9GUkFNRV9TCQk9CTIwJ2IwMDAwXzAwMDFfMDAwMF8wMDAwXzAwMDAsCisJCVdBSVRfSU5fREFUQQkJPQkyMCdiMDAwMF8wMDEwXzAwMDBfMDAwMF8wMDAwLAorCQlTVEFUVVNfSU4JCT0JMjAnYjAwMDBfMDEwMF8wMDAwXzAwMDBfMDAwMCwKKwkJU1RBVFVTX09VVAkJPQkyMCdiMDAwMF8xMDAwXzAwMDBfMDAwMF8wMDAwLAorCQlWX1NFVF9JTlRfUwkJPQkyMCdiMDAwMV8wMDAwXzAwMDBfMDAwMF8wMDAwLAorCQlWX0dFVF9TVEFUVVNfUwkJPQkyMCdiMDAxMF8wMDAwXzAwMDBfMDAwMF8wMDAwLAorCQlWX0dFVF9SRUdfUkRBVEFfUwk9CTIwJ2IwMTAwXzAwMDBfMDAwMF8wMDAwXzAwMDAsCisJCVZfV0FJVF9SREFUQV9ET05FX1MgICAgID0JMjAnYjEwMDBfMDAwMF8wMDAwXzAwMDBfMDAwMDsKKworCit3aXJlCVs3OjBdCWJtUmVxVHlwZSwgYlJlcXVlc3Q7Cit3aXJlCVsxNTowXQl3VmFsdWUsIHdJbmRleCwgd0xlbmd0aDsKK3dpcmUJCWJtX3JlcV9kaXI7Cit3aXJlCVsxOjBdCWJtX3JlcV90eXBlOword2lyZQlbNDowXQlibV9yZXFfcmVjcDsKKworcmVnCQlnZXRfc3RhdHVzLCBjbGVhcl9mZWF0dXJlLCBzZXRfZmVhdHVyZSwgc2V0X2FkZHJlc3M7CityZWcJCWdldF9kZXNjcmlwdG9yLCBzZXRfZGVzY3JpcHRvciwgZ2V0X2NvbmZpZywgc2V0X2NvbmZpZzsKK3JlZwkJZ2V0X2ludGVyZmFjZSwgc2V0X2ludGVyZmFjZSwgc3luY2hfZnJhbWU7CityZWcJCWhkcl9kb25lX3IsIGNvbmZpZ19lcnI7CityZWcJCXZfc2V0X2ludCwgdl9zZXRfZmVhdHVyZSwgdl9nZXRfc3RhdHVzOworCityZWcgICAgICAgICAgICAgdl9zZXRfcmVnX3dhZGRyOyAvLyBTZXQgdGhlIFJlZyBCdXMgQWRkcmVzcworcmVnICAgICAgICAgICAgIHZfc2V0X3JlZ19yYWRkcjsgLy8gU2V0IHRoZSBSZWcgQnVzIEFkZHJlc3MKKword2lyZQkJZmlmb19yZTEsIGZpZm9fZnVsbCwgZmlmb19lbXB0eTsKK3JlZwkJZmlmb193ZV9kOworcmVnCVs1OjBdCWRhdGFfc2VsOworcmVnCQllcDBfd2U7CityZWcJWzc6MF0JZXAwX2RvdXQ7CityZWcJWzc6MF0JZXAwX3NpemU7CityZWcJCXNlbmRfc3RhbGw7CityZWcJWzE5OjBdCXN0YXRlLCBuZXh0X3N0YXRlOworcmVnCQlnZXRfaGRyOworcmVnCVs3OjBdCWxlOword2lyZQkJaGRyX2RvbmU7CityZWcJCWFkdjsKK3JlZwlbNzowXQloZHIwLCBoZHIxLCBoZHIyLCBoZHIzLCBoZHI0LCBoZHI1LCBoZHI2LCBoZHI3OworcmVnCVs2OjBdCWZ1bmN0X2FkcjsKK3JlZwkJc2V0X2Fkcl9wZW5kaW5nOworcmVnCVs2OjBdCWZ1bmN0X2Fkcl90bXA7CisKK3JlZwkJaW5fc2l6ZV8wOworcmVnCQlpbl9zaXplXzE7CityZWcJCWluX3NpemVfMjsKK3JlZwkJaW5fc2l6ZV80Oword2lyZQkJaGlnaF9zZWw7CityZWcJCXdyaXRlX2RvbmU7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgSW50ZXJmYWNlCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgICBbMzE6MF0gICAgcmVnX2FkZHI7CityZWcgICBbMzE6MF0gICAgcmVnX3dkYXRhOworcmVnICAgWzMxOjBdICAgIHJlZ19yZGF0YV9yOworcmVnICAgICAgICAgICAgIHJlZ19yZXE7CityZWcgICAgICAgICAgICAgcmVnX3Jkd3JuOyAvLyAwIC0gd3JpdGUsIDEgLT4gcmVhZAorcmVnICAgICAgICAgICAgIHJlZ193cGhhc2U7IC8vIHJlZ2lzdGVyIHdyaXRlIHBoYXNlCityZWcgICAgICAgICAgICAgcmVnX3JwaGFzZTsgLy8gcmVnaXN0ZXIgcmVhZCBwaGFzZQorcmVnIFszOjBdICAgICAgIHR4X2JjbnQ7IC8vIHRyYW5zbWl0IGJ5dGUgY291bnQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBGSUZPIGludGVyZmFjZQorLy8KKworYXNzaWduIGVwMF9yZSA9IGZpZm9fcmUxOworYXNzaWduIGZpZm9fZW1wdHkgPSBlcDBfc3RhdFsxXTsKK2Fzc2lnbiBmaWZvX2Z1bGwgPSBlcDBfc3RhdFsyXTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEN1cnJlbnQgU3RhdGVzCisvLworcmVnCWFkZHJlc3NlZDsKK3JlZwljb25maWd1cmVkOworcmVnCWhhbHQ7Cit3aXJlCWNscl9oYWx0Oword2lyZQlzZXRfaGFsdD0wOwkvLyBGSVhfTUUKKworLy8gRm9yIHRoaXMgaW1wbGVtZW50YXRpb24gd2UgZG8gbm90IGltcGxlbWVudCBIQUxUIGZvciB0aGUKKy8vIGRldmljZSBub3IgZm9yIGFueSBvZiB0aGUgZW5kcG9pbnRzLiBUaGlzIGlzIHVzZWxlc3MgZm9yCisvLyB0aGlzIGRldmljZSwgYnV0IGNhbiBiZSBhZGRlZCBoZXJlIGxhdGVyIC4uLgorLy8gRllJLCB3ZSByZXBvcnQgZGV2aWNlL2VuZHBvaW50IGVycm9ycyB2aWEgaW50ZXJydXB0cywKKy8vIGluc3RlYWQgb2YgaGFsdGluZyB0aGUgZW50aXJlIG9yIHBhcnQgb2YgdGhlIGRldmljZSwgbXVjaAorLy8gbmljZXIgZm9yIG5vbi1jcml0aWNhbCBlcnJvcnMuCisKK2Fzc2lnbiBjbHJfaGFsdCA9IGN0cmxfc2V0dXA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCWFkZHJlc3NlZCA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihzZXRfYWRkcmVzcykJYWRkcmVzc2VkIDw9ICMxIDEnYjE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCWNvbmZpZ3VyZWQgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYoc2V0X2NvbmZpZykJY29uZmlndXJlZCA8PSAjMSAxJ2IxOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQloYWx0IDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKGNscl9oYWx0KQloYWx0IDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKHNldF9oYWx0KQloYWx0IDw9ICMxIDEnYjE7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBEZXNjcmlwdG9yIFJPTQorLy8KK3JlZwlbNjowXQlyb21fYWRyOworcmVnCQlyb21fc2VsLCByb21fc2VsX3I7Cit3aXJlCQlyb21fZG9uZTsKK3JlZwlbNjowXQlyb21fc2l6ZTsKK3JlZwkJZmlmb193ZV9yb21fcjsKK3JlZwkJZmlmb193ZV9yb21fcjI7Cit3aXJlCQlmaWZvX3dlX3JvbTsKK3JlZwlbNzowXQlyb21fc3RhcnRfZDsKK3JlZwlbNjowXQlyb21fc2l6ZV9kZDsKK3dpcmUJWzY6MF0Jcm9tX3NpemVfZDsKKworYWx3YXlzIEAod1ZhbHVlKQorCWNhc2Uod1ZhbHVlWzExOjhdKQkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICA0J2gxOglyb21fc3RhcnRfZCA9IGBST01fU1RBUlQwOworCSAgIDQnaDI6CXJvbV9zdGFydF9kID0gYFJPTV9TVEFSVDE7CisJICAgNCdoMzoKKwkJY2FzZSh3VmFsdWVbMzowXSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkJICAgNCdoMDoJcm9tX3N0YXJ0X2QgPSBgUk9NX1NUQVJUMkE7CisJCSAgIDQnaDE6CXJvbV9zdGFydF9kID0gYFJPTV9TVEFSVDJCOworCQkgICA0J2gyOglyb21fc3RhcnRfZCA9IGBST01fU1RBUlQyQzsKKwkJICAgNCdoMzoJcm9tX3N0YXJ0X2QgPSBgUk9NX1NUQVJUMkQ7CisJCSAgIGRlZmF1bHQ6CXJvbV9zdGFydF9kID0gYFJPTV9TVEFSVDJBOworCQllbmRjYXNlCisJICAgZGVmYXVsdDoJcm9tX3N0YXJ0X2QgPSA3J2gwMDsKKwllbmRjYXNlCisKK2Fsd2F5cyBAKHdWYWx1ZSkKKwljYXNlKHdWYWx1ZVsxMTo4XSkJCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgNCdoMToJcm9tX3NpemVfZGQgPSBgUk9NX1NJWkUwOworCSAgIDQnaDI6CXJvbV9zaXplX2RkID0gYFJPTV9TSVpFMTsKKwkgICA0J2gzOgorCQljYXNlKHdWYWx1ZVszOjBdKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCQkgICA0J2gwOglyb21fc2l6ZV9kZCA9IGBST01fU0laRTJBOworCQkgICA0J2gxOglyb21fc2l6ZV9kZCA9IGBST01fU0laRTJCOworCQkgICA0J2gyOglyb21fc2l6ZV9kZCA9IGBST01fU0laRTJDOworCQkgICA0J2gzOglyb21fc2l6ZV9kZCA9IGBST01fU0laRTJEOworCQkgICBkZWZhdWx0Oglyb21fc2l6ZV9kZCA9IGBST01fU0laRTJBOworCQllbmRjYXNlCisJICAgZGVmYXVsdDoJcm9tX3NpemVfZGQgPSA3J2gwMTsKKwllbmRjYXNlCisKK2Fzc2lnbiByb21fc2l6ZV9kID0gKHJvbV9zaXplX2RkID4gd0xlbmd0aFs2OjBdKSA/IHdMZW5ndGhbNjowXSA6IHJvbV9zaXplX2RkOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlyb21fc2VsX3IgPD0gIzEgcm9tX3NlbDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJCQlyb21fYWRyIDw9ICMxIDcnaDA7CisJZWxzZQorCWlmKHJvbV9zZWwgJiAhcm9tX3NlbF9yKQlyb21fYWRyIDw9ICMxIHJvbV9zdGFydF9kOworCWVsc2UKKwlpZihyb21fc2VsICYgIWZpZm9fZnVsbCkJcm9tX2FkciA8PSAjMSByb21fYWRyICsgNydoMTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJCQlyb21fc2l6ZSA8PSAjMSA3J2gwOworCWVsc2UKKwlpZihyb21fc2VsICYgIXJvbV9zZWxfcikJcm9tX3NpemUgPD0gIzEgcm9tX3NpemVfZDsKKwllbHNlCisJaWYocm9tX3NlbCAmICFmaWZvX2Z1bGwpCXJvbV9zaXplIDw9ICMxIHJvbV9zaXplIC0gNydoMDE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWZpZm9fd2Vfcm9tX3IgPD0gIzEgcm9tX3NlbDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJZmlmb193ZV9yb21fcjIgPD0gIzEgZmlmb193ZV9yb21fcjsKKworYXNzaWduIGZpZm9fd2Vfcm9tID0gcm9tX3NlbCAmIGZpZm9fd2Vfcm9tX3IyOworCithc3NpZ24gcm9tX2RvbmUgPSAocm9tX3NpemUgPT0gNydoMCkgJiAhKHJvbV9zZWwgJiAhcm9tX3NlbF9yKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEdldCBIZWFkZXIKKy8vCisKK2Fzc2lnbiBmaWZvX3JlMSA9IChnZXRfaGRyIHwgcmVnX3dwaGFzZSkgJiAhZmlmb19lbXB0eTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJYWR2IDw9ICMxIGdldF9oZHIgJiAhZmlmb19lbXB0eSAmICFhZHY7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCWxlIDw9ICMxIDgnaDA7CisJZWxzZQorCWlmKCFnZXRfaGRyKQlsZSA8PSAjMSA4J2gwOworCWVsc2UKKwlpZighKHxsZSkpCWxlIDw9ICMxIDgnaDE7CisJZWxzZQorCWlmKGZpZm9fcmUxICYmIGdldF9oZHIpCWxlIDw9ICMxIHtsZVs2OjBdLCAxJ2IwfTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYobGVbMF0pCWhkcjAgPD0gIzEgZXAwX2RpbjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYobGVbMV0pCWhkcjEgPD0gIzEgZXAwX2RpbjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYobGVbMl0pCWhkcjIgPD0gIzEgZXAwX2RpbjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYobGVbM10pCWhkcjMgPD0gIzEgZXAwX2RpbjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYobGVbNF0pCWhkcjQgPD0gIzEgZXAwX2RpbjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYobGVbNV0pCWhkcjUgPD0gIzEgZXAwX2RpbjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYobGVbNl0pCWhkcjYgPD0gIzEgZXAwX2RpbjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYobGVbN10pCWhkcjcgPD0gIzEgZXAwX2RpbjsKKworYXNzaWduIGhkcl9kb25lID0gbGVbN10gJiBmaWZvX3JlMSAmIGdldF9oZHI7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBTZW5kIERhdGEgdG8gSG9zdAorLy8KK3BhcmFtZXRlcglaRVJPX0RBVEEJPQk2J2IwMDAwMDEsCisJCVpFUk9fT05FX0RBVEEJPQk2J2IwMDAwMTAsCisJCUNPTkZJR19EQVRBCT0JNidiMDAwMTAwLAorCQlTWU5DX0ZSQU1FX0RBVEEJPQk2J2IwMDEwMDAsCisJCVZFTkRfREFUQQk9CTYnYjAxMDAwMCwKKwkJUkVHX1JEQVRBCT0JNidiMTAwMDAwOworCithc3NpZ24gaGlnaF9zZWwgPSB3cml0ZV9kb25lOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwljYXNlKGRhdGFfc2VsKQkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICBaRVJPX0RBVEE6CQllcDBfZG91dCA8PSAjMSByb21fc2VsID8gcm9tX2RhdGEgOiA4J2gwOworCSAgIFpFUk9fT05FX0RBVEE6CWVwMF9kb3V0IDw9ICMxIGhpZ2hfc2VsID8gOCdoMSA6IDgnaDA7CisJICAgQ09ORklHX0RBVEE6CQllcDBfZG91dCA8PSAjMSB7NydoMCwgY29uZmlndXJlZH07CS8vIHJldHVybiBjb25maWd1cmF0aW9uCisJICAgU1lOQ19GUkFNRV9EQVRBOgllcDBfZG91dCA8PSAjMSBoaWdoX3NlbCA/IHs1J2gwLCBmcmFtZV9ub1sxMDo4XX0gOiBmcmFtZV9ub1s3OjBdOworCSAgIFZFTkRfREFUQToJCWVwMF9kb3V0IDw9ICMxIGhpZ2hfc2VsID8gdmVuZG9yX2RhdGFbMTU6OF0gOiB2ZW5kb3JfZGF0YVs3OjBdOworCSAgIFJFR19SREFUQToJCWVwMF9kb3V0IDw9ICMxICh0eF9iY250PT0wKSA/IHJlZ19yZGF0YV9yWzMxOjI0XSA6IAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR4X2JjbnQ9PTEpID8gcmVnX3JkYXRhX3JbMjM6MTZdIDoKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eF9iY250PT0yKSA/IHJlZ19yZGF0YV9yWzE1OjhdIDogcmVnX3JkYXRhX3JbNzowXTsKKwllbmRjYXNlCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWVwMF93ZSA8PSAjMSAoZmlmb193ZV9kICYgIXdyaXRlX2RvbmUpIHwgZmlmb193ZV9yb207CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGluX3NpemVfMCkJICAgICAgICBlcDBfc2l6ZSA8PSAjMSA4J2gwOworCWVsc2UgaWYoaW5fc2l6ZV8xKQllcDBfc2l6ZSA8PSAjMSA4J2gxOworCWVsc2UgaWYoaW5fc2l6ZV8yKQllcDBfc2l6ZSA8PSAjMSA4J2gyOworCWVsc2UgaWYoaW5fc2l6ZV80KQllcDBfc2l6ZSA8PSAjMSA4J2g0OworCWVsc2UKKwlpZihyb21fc2VsKQllcDBfc2l6ZSA8PSAjMSB7MSdiMCwgcm9tX3NpemVfZH07CisKKworYWx3YXlzIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICBpZighcnN0KSBiZWdpbgorICAgICAgIHR4X2JjbnQgICAgPD0gMDsKKyAgICAgICB3cml0ZV9kb25lIDw9IDA7CisgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICBpZihzdGF0ZSA9PSBJRExFKSAgYmVnaW4KKwkgIHR4X2JjbnQgPD0gMDsKKwkgIHdyaXRlX2RvbmUgPD0gMDsgCisgICAgICBlbmQgZWxzZSBpZigoZXAwX3NpemUgPT0gKHR4X2JjbnQrMSkpICAmJiAoIWZpZm9fZnVsbCAmJiBmaWZvX3dlX2QpKQorCSAgd3JpdGVfZG9uZSA8PSAxOworICAgICAgZWxzZSBpZighZmlmb19mdWxsICYmIGZpZm9fd2VfZCApIAorCSAgdHhfYmNudCA8PSB0eF9iY250KzE7CisgICAgICBlbHNlIAorCSAgd3JpdGVfZG9uZSA8PSAwOworICAgZW5kCitlbmQKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIERlY29kZSBIZWFkZXIKKy8vCisKKy8vIFZhbGlkIGJSZXF1ZXN0IENvZGVzCitwYXJhbWV0ZXIJR0VUX1NUQVRVUwk9CTgnaDAwLAorCQlDTEVBUl9GRUFUVVJFCT0JOCdoMDEsCisJCVNFVF9GRUFUVVJFCT0JOCdoMDMsCisJCVNFVF9BRERSRVNTCT0JOCdoMDUsCisJCUdFVF9ERVNDUklQVE9SCT0JOCdoMDYsCisJCVNFVF9ERVNDUklQVE9SCT0JOCdoMDcsCisJCUdFVF9DT05GSUcJPQk4J2gwOCwKKwkJU0VUX0NPTkZJRwk9CTgnaDA5LAorCQlHRVRfSU5URVJGQUNFCT0JOCdoMGEsCisJCVNFVF9JTlRFUkZBQ0UJPQk4J2gwYiwKKwkJU1lOQ0hfRlJBTUUJPQk4J2gwYywKKwkJQ1VTVE9NX1JFR19XQUREUj0JOCdoMTAsIC8vIEFkZGVkIGJ5IERpbmVzaC1BLCAxOXRoIEZlYiAyMDEzCisJCUNVU1RPTV9SRUdfUkFERFI9CTgnaDExOyAvLyBBZGRlZCBieSBEaW5lc2gtQSwgMTl0aCBGZWIgMjAxMworCitwYXJhbWV0ZXIJVl9TRVRfSU5UCT0JOCdoMGY7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBBdXRob3I6IERpbmVzaC1BOiAxOHRoIEZlYiAyMDEzICAKKyogIFNldHVwIEJ5dGUgRGV0YWlscworQnl0ZQlGaWVsZAlEZXNjcmlwdGlvbgorMAlibVJlcXVlc3QgVHlwZQkgCisgICAgICAgICAgIEJpdCA3OiBSZXF1ZXN0IGRpcmVjdGlvbiAoMD1Ib3N0IHRvIGRldmljZSCWIE91dCwgMT1EZXZpY2UgdG8gaG9zdCCWIEluKS4KKyAgICAgICAgICAgQml0cyA1LTY6IFJlcXVlc3QgdHlwZSAoMD1zdGFuZGFyZCwgMT1jbGFzcywgMj12ZW5kb3IsIDM9cmVzZXJ2ZWQpLgorICAgICAgICAgICBCaXRzIDAtNDogUmVjaXBpZW50ICgwPWRldmljZSwgMT1pbnRlcmZhY2UsIDI9ZW5kcG9pbnQsMz1vdGhlcikuCisxCWJSZXF1ZXN0CSBUaGUgYWN0dWFsIHJlcXVlc3QgKHNlZSB0aGUgU3RhbmRhcmQgRGV2aWNlIFJlcXVlc3QgQ29kZXMgdGFibGUgWzkuMi4xLjVdLgorMgl3VmFsdWVMCSBBIHdvcmQtc2l6ZSB2YWx1ZSB0aGF0IHZhcmllcyBhY2NvcmRpbmcgdG8gdGhlIHJlcXVlc3QuIEZvciBleGFtcGxlLCAKKyAgICAgICAgaW4gdGhlIENMRUFSX0ZFQVRVUkUgcmVxdWVzdCB0aGUgdmFsdWUgaXMgdXNlZCB0byBzZWxlY3QgdGhlIGZlYXR1cmUsIAorCWluIHRoZSBHRVRfREVTQ1JJUFRPUiByZXF1ZXN0IHRoZSB2YWx1ZSBpbmRpY2F0ZXMgdGhlIGRlc2NyaXB0b3IgdHlwZSBhbmQgaW4gdGhlIAorCVNFVF9BRERSRVNTIHJlcXVlc3QgdGhlIHZhbHVlIGNvbnRhaW5zIHRoZSBkZXZpY2UgYWRkcmVzcy4KKzMJd1ZhbHVlSAlUaGUgdXBwZXIgYnl0ZSBvZiB0aGUgVmFsdWUgd29yZC4KKzQJd0luZGV4TAkgQSB3b3JkLXNpemUgdmFsdWUgdGhhdCB2YXJpZXMgYWNjb3JkaW5nIHRvIHRoZSByZXF1ZXN0LiAKKyAgICAgICAgVGhlIGluZGV4IGlzIGdlbmVyYWxseSB1c2VkIHRvIHNwZWNpZnkgYW4gZW5kcG9pbnQgb3IgYW4gaW50ZXJmYWNlLgorNQl3SW5kZXhICVRoZSB1cHBlciBieXRlIG9mIHRoZSBJbmRleCB3b3JkLgorNgl3TGVuZ3RoTCAgQSB3b3JkLXNpemUgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZCBpZiB0aGVyZSBpcyBhIGRhdGEgc3RhZ2UuCis3CXdMZW5ndGhIICBUaGUgdXBwZXIgYnl0ZSBvZiB0aGUgTGVuZ3RoIHdvcmQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqCitiUmVxdWVzdAkgICAgICAgICAgICAgICBWYWx1ZQorR0VUX1NUQVRVUwkgICAgICAgICAgICAgICAwCitDTEVBUl9GRUFUVVJFCSAgICAgICAgICAgICAgIDEKK1Jlc2VydmVkIGZvciBmdXR1cmUgdXNlCSAgICAgICAyCitTRVRfRkVBVFVSRQkgICAgICAgICAgICAgICAzCitSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQkgICAgICAgNAorU0VUX0FERFJFU1MJICAgICAgICAgICAgICAgNQorR0VUX0RFU0NSSVBUT1IJICAgICAgICAgICAgICAgNgorU0VUX0RFU0NSSVBUT1IJICAgICAgICAgICAgICAgNworR0VUX0NPTkZJR1VSQVRJT04JICAgICAgIDgKK1NFVF9DT05GSUdVUkFUSU9OCSAgICAgICA5CitHRVRfSU5URVJGQUNFCSAgICAgICAgICAgICAgIDEwCitTRVRfSU5URVJGQUNFCSAgICAgICAgICAgICAgIDExCitTWU5DSF9GUkFNRQkgICAgICAgICAgICAgICAxMgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithc3NpZ24gYm1SZXFUeXBlID0gaGRyMDsKK2Fzc2lnbiBibV9yZXFfZGlyID0gYm1SZXFUeXBlWzddOwkvLyAwLUhvc3QgdG8gZGV2aWNlOyAxLWRldmljZSB0byBob3N0IAorYXNzaWduIGJtX3JlcV90eXBlID0gYm1SZXFUeXBlWzY6NV07CS8vIDAtc3RhbmRhcmQ7IDEtY2xhc3M7IDItdmVuZG9yOyAzLVJFU0VSVkVECithc3NpZ24gYm1fcmVxX3JlY3AgPSBibVJlcVR5cGVbNDowXTsJLy8gMC1kZXZpY2U7IDEtaW50ZXJmYWNlOyAyLWVuZHBvaW50OyAzLW90aGVyCisJCQkJCS8vIDQuLjMxLXJlc2VydmVkCithc3NpZ24gYlJlcXVlc3QgPSAgaGRyMTsKK2Fzc2lnbiB3VmFsdWUgICA9IHtoZHIzLCBoZHIyfTsKK2Fzc2lnbiB3SW5kZXggICA9IHtoZHI1LCBoZHI0fTsKK2Fzc2lnbiB3TGVuZ3RoICA9IHtoZHI3LCBoZHI2fTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaGRyX2RvbmVfciA8PSAjMSBoZHJfZG9uZTsKKworLy8gU3RhbmRhcmQgY29tbWFuZHMgdGhhdCBNVVNUIHN1cHBvcnQKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWdldF9zdGF0dXMgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gR0VUX1NUQVRVUykgJiAoYm1fcmVxX3R5cGU9PTInaDApOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwljbGVhcl9mZWF0dXJlIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IENMRUFSX0ZFQVRVUkUpICYgKGJtX3JlcV90eXBlPT0yJ2gwKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJc2V0X2ZlYXR1cmUgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gU0VUX0ZFQVRVUkUpICYgKGJtX3JlcV90eXBlPT0yJ2gwKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJc2V0X2FkZHJlc3MgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gU0VUX0FERFJFU1MpICYgKGJtX3JlcV90eXBlPT0yJ2gwKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJZ2V0X2Rlc2NyaXB0b3IgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gR0VUX0RFU0NSSVBUT1IpICYgKGJtX3JlcV90eXBlPT0yJ2gwKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJc2V0X2Rlc2NyaXB0b3IgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gU0VUX0RFU0NSSVBUT1IpICYgKGJtX3JlcV90eXBlPT0yJ2gwKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJZ2V0X2NvbmZpZyA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBHRVRfQ09ORklHKSAmIChibV9yZXFfdHlwZT09MidoMCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXNldF9jb25maWcgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gU0VUX0NPTkZJRykgJiAoYm1fcmVxX3R5cGU9PTInaDApOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlnZXRfaW50ZXJmYWNlIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IEdFVF9JTlRFUkZBQ0UpICYgKGJtX3JlcV90eXBlPT0yJ2gwKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJc2V0X2ludGVyZmFjZSA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBTRVRfSU5URVJGQUNFKSAmIChibV9yZXFfdHlwZT09MidoMCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXN5bmNoX2ZyYW1lIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IFNZTkNIX0ZSQU1FKSAmIChibV9yZXFfdHlwZT09MidoMCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXZfc2V0X2ludCA8PSAjMQkJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gVl9TRVRfSU5UKSAmIChibV9yZXFfdHlwZT09MidoMik7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXZfc2V0X2ZlYXR1cmUgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gU0VUX0ZFQVRVUkUpICYgKGJtX3JlcV90eXBlPT0yJ2gyKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdl9nZXRfc3RhdHVzIDw9ICMxCWhkcl9kb25lICYgKGJSZXF1ZXN0ID09IEdFVF9TVEFUVVMpICYgKGJtX3JlcV90eXBlPT0yJ2gyKTsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXZfc2V0X3JlZ193YWRkciA8PSAjMQloZHJfZG9uZSAmIChiUmVxdWVzdCA9PSBDVVNUT01fUkVHX1dBRERSKSAmIChibV9yZXFfdHlwZT09MidoMik7CithbHdheXMgQChwb3NlZGdlIGNsaykKKwl2X3NldF9yZWdfcmFkZHIgPD0gIzEJaGRyX2RvbmUgJiAoYlJlcXVlc3QgPT0gQ1VTVE9NX1JFR19SQUREUikgJiAoYm1fcmVxX3R5cGU9PTInaDIpOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZih2X3NldF9yZWdfd2FkZHIgfHwgdl9zZXRfcmVnX3JhZGRyKSByZWdfYWRkciAgPD0ge2hkcjIsaGRyMyxoZHI0LGhkcjV9OyAKKworcmVnIFsxOjBdIHJlZ19ieXRlX2NudDsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgaWYoIXJzdCkgYmVnaW4KKyAgICAgICByZWdfYnl0ZV9jbnQgPD0gMidiMDsKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICBpZih2X3NldF9yZWdfd2FkZHIpIGJlZ2luIAorCSAgcmVnX3dwaGFzZSAgICAgIDw9IDE7IAorCSAgcmVnX2J5dGVfY250ICAgIDw9IDA7CisgICAgICBlbmQgZWxzZSBpZihyZWdfYnl0ZV9jbnQgPT0gMidiMTEgJiYgZmlmb19yZTEpIGJlZ2luCisJICByZWdfd3BoYXNlICA8PSAwOyAKKwkgIHJlZ19ieXRlX2NudCAgICA8PSAwOworICAgICAgZW5kIGVsc2UgaWYocmVnX3dwaGFzZSAmJiBmaWZvX3JlMSkgYmVnaW4KKwkgcmVnX2J5dGVfY250IDw9IHJlZ19ieXRlX2NudCsxOworICAgICAgZW5kCisgICBlbmQKK2VuZAorCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorICAgICAgaWYocmVnX3dwaGFzZSAmJiBmaWZvX3JlMSkgcmVnX3dkYXRhICA8PSB7cmVnX3dkYXRhWzIzOjBdLGVwMF9kaW5bNzowXX07IAorCithbHdheXMgQChwb3NlZGdlIGNsaykKKyAgICAgIGlmKHJlZ19yZHdybiAmJiByZWdfYWNrKSByZWdfcmRhdGFfciAgPD0ge3JlZ19yZGF0YX07IAorCithbHdheXMgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgIGlmKCFyc3QpIGJlZ2luCisgICAgICByZWdfcmVxICA8PSAwOyAKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICBpZihmaWZvX3JlMSAmJiByZWdfd3BoYXNlICYmIHJlZ19ieXRlX2NudD09IDInYjExKSByZWdfcmVxICA8PSAxOyAKKyAgICAgIGVsc2UgaWYodl9zZXRfcmVnX3JhZGRyKSAgICAgICAgIHJlZ19yZXEgIDw9IDE7IAorICAgICAgZWxzZSByZWdfcmVxIDw9IDA7CisgICBlbmQKK2VuZAorCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZih2X3NldF9yZWdfcmFkZHIpICAgICAgcmVnX3Jkd3JuIDw9IDEnYjEgOworCWVsc2UgaWYodl9zZXRfcmVnX3dhZGRyKSByZWdfcmR3cm4gPD0gMSdiMCA7CisKKy8vIEEgY29uZmlnIGVyciBtdXN0IGNhdXNlIHRoZSBkZXZpY2UgdG8gc2VuZCBhIFNUQUxMIGZvciBhbiBBQ0sKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWNvbmZpZ19lcnIgPD0gIzEgaGRyX2RvbmVfciAmICEoZ2V0X3N0YXR1cyB8IGNsZWFyX2ZlYXR1cmUgfAorCQkJc2V0X2ZlYXR1cmUgfCBzZXRfYWRkcmVzcyB8IGdldF9kZXNjcmlwdG9yIHwKKwkJCXNldF9kZXNjcmlwdG9yIHwgZ2V0X2NvbmZpZyB8IHNldF9jb25maWcgfAorCQkJZ2V0X2ludGVyZmFjZSB8IHNldF9pbnRlcmZhY2UgfCBzeW5jaF9mcmFtZSB8CisJCQl2X3NldF9pbnQgfCB2X3NldF9mZWF0dXJlIHwgdl9nZXRfc3RhdHVzIHwgdl9zZXRfcmVnX3dhZGRyIHwgdl9zZXRfcmVnX3JhZGRyKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJc2VuZF9zdGFsbCA8PSAjMSBjb25maWdfZXJyOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gU2V0IGFkZHJlc3MKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCQkJCXNldF9hZHJfcGVuZGluZyA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihjdHJsX2luIHwgY3RybF9vdXQgfCBjdHJsX3NldHVwKQlzZXRfYWRyX3BlbmRpbmcgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYoc2V0X2FkZHJlc3MpCQkJCXNldF9hZHJfcGVuZGluZyA8PSAjMSAxJ2IxOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQkJCWZ1bmN0X2Fkcl90bXAgPD0gIzEgNydoMDsKKwllbHNlCisJaWYoc2V0X2FkZHJlc3MpCQkJZnVuY3RfYWRyX3RtcCA8PSAjMSB3VmFsdWVbNjowXTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJCQlmdW5jdF9hZHIgPD0gIzEgNydoMDsKKwllbHNlCisJaWYoc2V0X2Fkcl9wZW5kaW5nICYgY3RybF9pbikJZnVuY3RfYWRyIDw9ICMxIGZ1bmN0X2Fkcl90bXA7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNYWluIEZTTQorLy8KKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJc3RhdGUgPD0gIzEgSURMRTsKKwllbHNlCQlzdGF0ZSA8PSBuZXh0X3N0YXRlOworCithbHdheXMgQChzdGF0ZSBvciBjdHJsX3NldHVwIG9yIGN0cmxfaW4gb3IgY3RybF9vdXQgb3IgaGRyX2RvbmUgb3IKKwlmaWZvX2Z1bGwgb3Igcm9tX2RvbmUgb3Igd3JpdGVfZG9uZSBvciB3VmFsdWUgb3IgYm1fcmVxX3JlY3Agb3IKKwlnZXRfc3RhdHVzIG9yIGNsZWFyX2ZlYXR1cmUgb3Igc2V0X2ZlYXR1cmUgb3Igc2V0X2FkZHJlc3Mgb3IKKwlnZXRfZGVzY3JpcHRvciBvciBzZXRfZGVzY3JpcHRvciBvciBnZXRfY29uZmlnIG9yIHNldF9jb25maWcgb3IKKwlnZXRfaW50ZXJmYWNlIG9yIHNldF9pbnRlcmZhY2Ugb3Igc3luY2hfZnJhbWUgb3Igdl9zZXRfaW50IG9yCisJdl9zZXRfZmVhdHVyZSBvciB2X2dldF9zdGF0dXMgb3Igdl9zZXRfcmVnX3dhZGRyIG9yIHZfc2V0X3JlZ19yYWRkciwgcmVnX2FjaworCSkKKyAgIGJlZ2luCisJbmV4dF9zdGF0ZSA9IHN0YXRlOworCWdldF9oZHIgID0gMSdiMDsKKwlkYXRhX3NlbCA9IFpFUk9fREFUQTsKKwlmaWZvX3dlX2QgPSAxJ2IwOworCWluX3NpemVfMCA9IDEnYjA7CisJaW5fc2l6ZV8xID0gMSdiMDsKKwlpbl9zaXplXzIgPSAxJ2IwOworCWluX3NpemVfNCA9IDEnYjA7CisJcm9tX3NlbCA9IDEnYjA7CisKKwljYXNlKHN0YXRlKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCisJCS8vIFdhaXQgZm9yIFNldHVwIHRva2VuCisJICAgSURMRToKKwkJICAgYmVnaW4KKwkJCWlmKGN0cmxfc2V0dXApCQluZXh0X3N0YXRlID0gR0VUX0hEUjsKKwkJCWlmKGdldF9zdGF0dXMpCQluZXh0X3N0YXRlID0gR0VUX1NUQVRVU19TOworCQkJaWYoY2xlYXJfZmVhdHVyZSkJbmV4dF9zdGF0ZSA9IENMRUFSX0ZFQVRVUkVfUzsKKwkJCWlmKHNldF9mZWF0dXJlKQkJbmV4dF9zdGF0ZSA9IFNFVF9GRUFUVVJFX1M7CisJCQlpZihzZXRfYWRkcmVzcykJCW5leHRfc3RhdGUgPSBTRVRfQUREUkVTU19TOworCQkJaWYoZ2V0X2Rlc2NyaXB0b3IpCW5leHRfc3RhdGUgPSBHRVRfREVTQ1JJUFRPUl9TOworCQkJaWYoc2V0X2Rlc2NyaXB0b3IpCW5leHRfc3RhdGUgPSBTRVRfREVTQ1JJUFRPUl9TOworCQkJaWYoZ2V0X2NvbmZpZykJCW5leHRfc3RhdGUgPSBHRVRfQ09ORklHX1M7CisJCQlpZihzZXRfY29uZmlnKQkJbmV4dF9zdGF0ZSA9IFNFVF9DT05GSUdfUzsKKwkJCWlmKGdldF9pbnRlcmZhY2UpCW5leHRfc3RhdGUgPSBHRVRfSU5URVJGQUNFX1M7CisJCQlpZihzZXRfaW50ZXJmYWNlKQluZXh0X3N0YXRlID0gU0VUX0lOVEVSRkFDRV9TOworCQkJaWYoc3luY2hfZnJhbWUpCQluZXh0X3N0YXRlID0gU1lOQ0hfRlJBTUVfUzsKKwkJCWlmKHZfc2V0X2ludCkJCW5leHRfc3RhdGUgPSBWX1NFVF9JTlRfUzsKKwkJCWlmKHZfc2V0X2ZlYXR1cmUpCW5leHRfc3RhdGUgPSBWX1NFVF9JTlRfUzsKKwkJCWlmKHZfZ2V0X3N0YXR1cykJbmV4dF9zdGF0ZSA9IFZfR0VUX1NUQVRVU19TOworCQkJaWYodl9zZXRfcmVnX3dhZGRyKQluZXh0X3N0YXRlID0gU1RBVFVTX0lOOworCQkJaWYodl9zZXRfcmVnX3JhZGRyKQluZXh0X3N0YXRlID0gVl9XQUlUX1JEQVRBX0RPTkVfUzsKKwkJICAgZW5kCisKKwkJLy8gUmV0cmlldmUgU2V0dXAgSGVhZGVyCisJICAgR0VUX0hEUjoKKwkJICAgYmVnaW4KKwkJCWdldF9oZHIgPSAxJ2IxOworCQkJaWYoaGRyX2RvbmUpCW5leHRfc3RhdGUgPSBJRExFOworCQkgICBlbmQKKworCisJCS8vIEFjdGlvbnMgZm9yIHN1cHBvcnRlZCBjb21tYW5kcworCSAgIEdFVF9TVEFUVVNfUzoKKwkJICAgYmVnaW4KKwkJCS8vIFJldHVybnMgdG8gaG9zdAorCQkJLy8gMTYnaDAwMDEgZm9yIGRldmljZQorCQkJLy8gMTYnaDAwMDAgZm9yIGludGVyZmFjZQorCQkJLy8gMTYnaDAwMDAgZm9yIGVuZHBvaW50CisJCQlpZihibV9yZXFfcmVjcCA9PSA1J2gwMCkJZGF0YV9zZWwgPSBaRVJPX09ORV9EQVRBOworCQkJZWxzZQkJCQlkYXRhX3NlbCA9IFpFUk9fREFUQTsKKworCQkJaW5fc2l6ZV8yID0gMSdiMTsKKwkJCWlmKCFmaWZvX2Z1bGwpCisJCQkgICBiZWdpbgorCQkJCWZpZm9fd2VfZCA9IDEnYjE7CisJCQkJaWYod3JpdGVfZG9uZSkJbmV4dF9zdGF0ZSA9IFdBSVRfSU5fREFUQTsKKwkJCSAgIGVuZAorCisJCSAgIGVuZAorCSAgIFZfR0VUX1NUQVRVU19TOgorCQkgICBiZWdpbgorCQkJZGF0YV9zZWwgPSBWRU5EX0RBVEE7CisJCQlpbl9zaXplXzIgPSAxJ2IxOworCQkJaWYoIWZpZm9fZnVsbCkKKwkJCSAgIGJlZ2luCisJCQkJZmlmb193ZV9kID0gMSdiMTsKKwkJCQlpZih3cml0ZV9kb25lKQluZXh0X3N0YXRlID0gV0FJVF9JTl9EQVRBOworCQkJICAgZW5kCisJCSAgIGVuZAorCisJVl9XQUlUX1JEQVRBX0RPTkVfUzogYmVnaW4gLy8gV2FpdCBmb3IgUmVnaXN0ZXIgUmVhZCBBY2Nlc3MgQ29tcGxldGlvbgorCQkgICAgIGlmKHJlZ19hY2spCisJCQluZXh0X3N0YXRlID0gVl9HRVRfUkVHX1JEQVRBX1M7CisJCSAgIGVuZAorCisJICAgVl9HRVRfUkVHX1JEQVRBX1M6IC8vIFJlZ2lzdGVyIEFjY2VzcyBSZWFkIERhdGEKKwkJICAgYmVnaW4KKwkJCWRhdGFfc2VsID0gUkVHX1JEQVRBOworCQkJaW5fc2l6ZV80ID0gMSdiMTsKKwkJCWlmKCFmaWZvX2Z1bGwpCisJCQkgICBiZWdpbgorCQkJCWZpZm9fd2VfZCA9IDEnYjE7CisJCQkJaWYod3JpdGVfZG9uZSkJbmV4dF9zdGF0ZSA9IFdBSVRfSU5fREFUQTsKKwkJCSAgIGVuZAorCQkgICBlbmQJCSAgIAorCSAgIENMRUFSX0ZFQVRVUkVfUzoKKwkJICAgYmVnaW4KKwkJCS8vIGp1c3QgaWdub3JlIHRoaXMgZm9yIG5vdworCQkJbmV4dF9zdGF0ZSA9IFNUQVRVU19JTjsKKwkJICAgZW5kCisKKwkgICBTRVRfRkVBVFVSRV9TOgorCQkgICBiZWdpbgorCQkJLy8ganVzdCBpZ25vcmUgdGhpcyBmb3Igbm93CisJCQluZXh0X3N0YXRlID0gU1RBVFVTX0lOOworCQkgICBlbmQKKworCSAgIFNFVF9BRERSRVNTX1M6CisJCSAgIGJlZ2luCisJCQkvLyBkb25lIGVsc2V3aGVyZSAuLi4uCisJCQluZXh0X3N0YXRlID0gU1RBVFVTX0lOOworCQkgICBlbmQKKworCSAgIEdFVF9ERVNDUklQVE9SX1M6CisJCSAgIGJlZ2luCisJCQlpZigJd1ZhbHVlWzE1OjhdID09IDgnaDAxIHwKKwkJCQl3VmFsdWVbMTU6OF0gPT0gOCdoMDIgfCAKKwkJCQl3VmFsdWVbMTU6OF0gPT0gOCdoMDMJKQorCQkJCXJvbV9zZWwgPSAxJ2IxOworCQkJZWxzZQorCQkJCW5leHRfc3RhdGUgPSBJRExFOworCisJCQlpZihyb21fZG9uZSkKKwkJCQluZXh0X3N0YXRlID0gSURMRTsKKwkJICAgZW5kCisKKwkgICBTRVRfREVTQ1JJUFRPUl9TOgorCQkgICBiZWdpbgorCQkJLy8gVGhpcyBkb2Vzbid0IGRvIGFueXRoaW5nIHNpbmNlIHdlIGRvIG5vdCBzdXBwb3J0CisJCQkvLyBzZXR0aW5nIHRoZSBkZXNjcmlwdG9yCisJCQluZXh0X3N0YXRlID0gSURMRTsKKwkJICAgZW5kCisKKwkgICBHRVRfQ09ORklHX1M6CisJCSAgIGJlZ2luCisJCQkvLyBTZW5kIG9uZSBieXRlIGJhY2sgdGhhdCBpbmRpY2F0ZXMgY3VycmVudCBzdGF0dXMKKwkJCWluX3NpemVfMSA9IDEnYjE7CisJCQlkYXRhX3NlbCA9IENPTkZJR19EQVRBOworCQkJaWYoIWZpZm9fZnVsbCkKKwkJCSAgIGJlZ2luCisJCQkJZmlmb193ZV9kID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gV0FJVF9JTl9EQVRBOworCQkJICAgZW5kCisJCSAgIGVuZAorCisJICAgU0VUX0NPTkZJR19TOgorCQkgICBiZWdpbgorCQkJLy8gZG9uZSBlbHNld2hlcmUgLi4uLgorCQkJbmV4dF9zdGF0ZSA9IFNUQVRVU19JTjsKKwkJICAgZW5kCisKKwkgICBHRVRfSU5URVJGQUNFX1M6CisJCSAgIGJlZ2luCisJCQkvLyBSZXR1cm4gaW50ZXJmYWNlICcwJworCQkJaW5fc2l6ZV8xID0gMSdiMTsKKwkJCWlmKCFmaWZvX2Z1bGwpCisJCQkgICBiZWdpbgorCQkJCWZpZm9fd2VfZCA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IFdBSVRfSU5fREFUQTsKKwkJCSAgIGVuZAorCQkgICBlbmQKKworCSAgIFNFVF9JTlRFUkZBQ0VfUzoKKwkJICAgYmVnaW4KKwkJCS8vIGp1c3QgaWdub3JlIHRoaXMgZm9yIG5vdworCQkJbmV4dF9zdGF0ZSA9IFNUQVRVU19JTjsKKwkJICAgZW5kCisKKwkgICBTWU5DSF9GUkFNRV9TOgorCQkgICBiZWdpbgorCQkJLy8gUmV0dXJuIEZyYW1lIGN1cnJlbnQgZnJhbWUgbnVtYmVyCisJCQlkYXRhX3NlbCA9IFNZTkNfRlJBTUVfREFUQTsKKwkJCWluX3NpemVfMiA9IDEnYjE7CisJCQlpZighZmlmb19mdWxsKQorCQkJICAgYmVnaW4KKwkJCQlmaWZvX3dlX2QgPSAxJ2IxOworCQkJCWlmKHdyaXRlX2RvbmUpCW5leHRfc3RhdGUgPSBXQUlUX0lOX0RBVEE7CisJCQkgICBlbmQKKwkJICAgZW5kCisKKwkgICBWX1NFVF9JTlRfUzoKKwkJICAgYmVnaW4KKwkJCS8vIGRvbmUgZWxzZXdoZXJlIC4uLi4KKwkJCW5leHRfc3RhdGUgPSBTVEFUVVNfSU47CisJCSAgIGVuZAorCisJICAgV0FJVF9JTl9EQVRBOgorCQkgICBiZWdpbgorCQkJaWYoY3RybF9pbikJbmV4dF9zdGF0ZSA9IFNUQVRVU19PVVQ7CisJCSAgIGVuZAorCisJICAgU1RBVFVTX0lOOgorCQkgICBiZWdpbgorCQkJaW5fc2l6ZV8wID0gMSdiMTsKKwkJCWlmKGN0cmxfaW4pCW5leHRfc3RhdGUgPSBJRExFOworCQkgICBlbmQKKworCSAgIFNUQVRVU19PVVQ6CisJCSAgIGJlZ2luCisJCQlpZihjdHJsX291dCkJbmV4dF9zdGF0ZSA9IElETEU7CisJCSAgIGVuZAorCWVuZGNhc2UKKyAgIGVuZAorCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2ZpZm8yLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfZmlmbzIudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MzFhY2I0Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2ZpZm8yLnYKQEAgLTAsMCArMSwxMDQgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBGYXN0IEZJRk8gMiBlbnRyaWVzIGRlZXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYjFfZnVuY3QvLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYjFfZmlmbzIudix2IDEuMS4xLjEgMjAwMi0wOS0xOSAxMjowNzozMSBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAyLTA5LTE5IDEyOjA3OjMxICQKKy8vICAkUmV2aXNpb246IDEuMS4xLjEgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8KKy8vCisvLworLy8KKy8vCisKKworbW9kdWxlIHVzYjFkX2ZpZm8yKGNsaywgcnN0LCBjbHIsICBkaW4sIHdlLCBkb3V0LCByZSk7CisKK2lucHV0CQljbGssIHJzdDsKK2lucHV0CQljbHI7CitpbnB1dCAgIFs3OjBdCWRpbjsKK2lucHV0CQl3ZTsKK291dHB1dCAgWzc6MF0JZG91dDsKK2lucHV0CQlyZTsKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIExvY2FsIFdpcmVzCisvLworCityZWcgICAgIFs3OjBdCW1lbVswOjFdOworcmVnCQl3cDsKK3JlZwkJcnA7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTWlzYyBMb2dpYworLy8KKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisgICAgICAgIGlmKCFyc3QpCXdwIDw9ICMxIDEnaDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgaWYoY2xyKQkJd3AgPD0gIzEgMSdoMDsKKyAgICAgICAgZWxzZQorICAgICAgICBpZih3ZSkJCXdwIDw9ICMxIH53cDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisgICAgICAgIGlmKCFyc3QpCXJwIDw9ICMxIDEnaDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgaWYoY2xyKQkJcnAgPD0gIzEgMSdoMDsKKyAgICAgICAgZWxzZQorICAgICAgICBpZihyZSkJCXJwIDw9ICMxIH5ycDsKKworLy8gRmlmbyBPdXRwdXQKK2Fzc2lnbiAgZG91dCA9IG1lbVsgcnAgXTsKKworLy8gRmlmbyBJbnB1dCAKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorICAgICAgICBpZih3ZSkgICAgIG1lbVsgd3AgXSA8PSAjMSBkaW47CisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfZ2VuZXJpY19kcHJhbS52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2dlbmVyaWNfZHByYW0udgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MzFhNDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2dlbmVyaWNfZHByYW0udgpAQCAtMCwwICsxLDUwMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBHZW5lcmljIER1YWwtUG9ydCBTeW5jaHJvbm91cyBSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIG1lbW9yeSBsaWJyYXJ5IGF2YWlsYWJsZSBmcm9tICAgICAgICAgIC8vLy8NCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY3Zzd2ViLnNodG1sL2dlbmVyaWNfbWVtb3JpZXMvICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBUaGlzIGJsb2NrIGlzIGEgd3JhcHBlciB3aXRoIGNvbW1vbiBkdWFsLXBvcnQgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgc3luY2hyb25vdXMgbWVtb3J5IGludGVyZmFjZSBmb3IgZGlmZmVyZW50ICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIHR5cGVzIG9mIEFTSUMgYW5kIEZQR0EgUkFNcy4gQmVzaWRlIHVuaXZlcnNhbCBtZW1vcnkgICAgICAgIC8vLy8NCisvLy8vICBpbnRlcmZhY2UgaXQgYWxzbyBwcm92aWRlcyBiZWhhdmlvcmFsIG1vZGVsIG9mIGdlbmVyaWMgICAgICAvLy8vDQorLy8vLyAgZHVhbC1wb3J0IHN5bmNocm9ub3VzIFJBTS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIEl0IGFsc28gY29udGFpbnMgYSBmdWxseSBzeW50aGVzaXplYWJsZSBtb2RlbCBmb3IgRlBHQXMuICAgIC8vLy8NCisvLy8vICBJdCBzaG91bGQgYmUgdXNlZCBpbiBhbGwgT1BFTkNPUkVTIGRlc2lnbnMgdGhhdCB3YW50IHRvIGJlICAvLy8vDQorLy8vLyAgcG9ydGFibGUgYWNjcm9zcyBkaWZmZXJlbnQgdGFyZ2V0IHRlY2hub2xvZ2llcyBhbmQgICAgICAgICAgLy8vLw0KKy8vLy8gIGluZGVwZW5kZW50IG9mIHRhcmdldCBtZW1vcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgU3VwcG9ydGVkIEFTSUMgUkFNcyBhcmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIC0gQXJ0aXNhbiBEdWFsLVBvcnQgU3luYyBSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAtIEF2YW50ISBUd28tUG9ydCBTeW5jIFJBTSAoKikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgLSBWaXJhZ2UgMi1wb3J0IFN5bmMgUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBTdXBwb3J0ZWQgRlBHQSBSQU1zIGFyZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgLSBHZW5lcmljIEZQR0EgKFZFTkRPUl9GUEdBKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgVGVzdGVkIFJBTXM6IEFsdGVyYSwgWGlsaW54ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgIFN5bnRoZXNpcyB0b29sczogTGVvbmFyZG9TcGVjdHJ1bSwgU3lucGxpY2l0eSAgICAgICAgICAgICAvLy8vDQorLy8vLyAgLSBYaWxpbnggKFZFTkRPUl9YSUxJTlgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIC0gQWx0ZXJhIChWRU5ET1JfQUxURVJBKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAtIGZpeCBBdmFudCEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgLSBhZGQgYWRkaXRpb25hbCBSQU1zIChWUyBldGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgLSBSaWNoYXJkIEhlcnZlaWxsZSwgcmljaGFyZEBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgIC0gRGFtamFuIExhbXByZXQsIGxhbXByZXRAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLw0KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8NCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vDQorLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vDQorLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLw0KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8NCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vDQorLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vDQorLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLw0KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8NCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vDQorLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vDQorLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLw0KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vDQorLy8gQ1ZTIFJldmlzaW9uIEhpc3RvcnkNCisvLw0KKy8vICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkDQorLy8gUmV2aXNpb24gMS4yICAyMDAxLzExLzA4IDE5OjExOjMxICBzYW1nDQorLy8gYWRkZWQgdmFsaWQgY2hlY2tzIHRvIGJlaHZpb3JhbCBtb2RlbA0KKy8vDQorLy8gUmV2aXNpb24gMS4xLjEuMSAgMjAwMS8wOS8xNCAwOTo1NzoxMCAgcmhlcnZlaWxsZQ0KKy8vIE1ham9yIGNsZWFudXAuDQorLy8gRmlsZXMgYXJlIG5vdyBjb21wbGlhbnQgdG8gQWx0ZXJhICYgWGlsaW54IG1lbW9yaWVzLg0KKy8vIE1lbW9yaWVzIGFyZSBub3cgY29tcGF0aWJsZSwgaS5lLiBkcm9wLWluIHJlcGxhY2VtZW50cy4NCisvLyBBZGRlZCBzeW50aGVzaXplYWJsZSBnZW5lcmljIEZQR0EgZGVzY3JpcHRpb24uDQorLy8gQ3JlYXRlZCAiZ2VuZXJpY19tZW1vcmllcyIgY3ZzIGVudHJ5Lg0KKy8vDQorLy8gUmV2aXNpb24gMS4xLjEuMiAgMjAwMS8wOC8yMSAxMzowOToyNyAgZGFtamFuDQorLy8gKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKg0KKy8vDQorLy8gUmV2aXNpb24gMS4xICAyMDAxLzA4LzIwIDE4OjIzOjIwICBkYW1qYW4NCisvLyBJbml0aWFsIHJldmlzaW9uDQorLy8NCisvLyBSZXZpc2lvbiAxLjEgIDIwMDEvMDgvMDkgMTM6Mzk6MzMgIGxhbXByZXQNCisvLyBNYWpvciBjbGVhbi11cC4NCisvLw0KKy8vIFJldmlzaW9uIDEuMiAgMjAwMS8wNy8zMCAwNTozODowMiAgbGFtcHJldA0KKy8vIEFkZGluZyBlbXB0eSBkaXJlY3RvcmllcyByZXF1aXJlZCBieSBIREwgY29kaW5nIGd1aWRlbGluZXMNCisvLw0KKy8vDQorIA0KKyANCisvL2BkZWZpbmUgVkVORE9SX0ZQR0ENCisvL2BkZWZpbmUgVkVORE9SX1hJTElOWA0KKy8vYGRlZmluZSBWRU5ET1JfQUxURVJBDQorIA0KK21vZHVsZSB1c2IxZF9nZW5lcmljX2RwcmFtKA0KKwkvLyBHZW5lcmljIHN5bmNocm9ub3VzIGR1YWwtcG9ydCBSQU0gaW50ZXJmYWNlDQorCXJjbGssIHJyc3QsIHJjZSwgb2UsIHJhZGRyLCBkb3V0LA0KKwl3Y2xrLCB3cnN0LCB3Y2UsIHdlLCB3YWRkciwgZGkNCispOw0KKyANCisJLy8NCisJLy8gRGVmYXVsdCBhZGRyZXNzIGFuZCBkYXRhIGJ1c2VzIHdpZHRoDQorCS8vDQorCXBhcmFtZXRlciBhdyA9IDU7ICAvLyBudW1iZXIgb2YgYml0cyBpbiBhZGRyZXNzLWJ1cw0KKwlwYXJhbWV0ZXIgZHcgPSAxNjsgLy8gbnVtYmVyIG9mIGJpdHMgaW4gZGF0YS1idXMNCisgDQorCS8vDQorCS8vIEdlbmVyaWMgc3luY2hyb25vdXMgZG91YmxlLXBvcnQgUkFNIGludGVyZmFjZQ0KKwkvLw0KKwkvLyByZWFkIHBvcnQNCisJaW5wdXQgICAgICAgICAgIHJjbGs7ICAvLyByZWFkIGNsb2NrLCByaXNpbmcgZWRnZSB0cmlnZ2VyDQorCWlucHV0ICAgICAgICAgICBycnN0OyAgLy8gcmVhZCBwb3J0IHJlc2V0LCBhY3RpdmUgaGlnaA0KKwlpbnB1dCAgICAgICAgICAgcmNlOyAgIC8vIHJlYWQgcG9ydCBjaGlwIGVuYWJsZSwgYWN0aXZlIGhpZ2gNCisJaW5wdXQgICAgICAgICAgIG9lOwkgICAvLyBvdXRwdXQgZW5hYmxlLCBhY3RpdmUgaGlnaA0KKwlpbnB1dCAgW2F3LTE6MF0gcmFkZHI7IC8vIHJlYWQgYWRkcmVzcw0KKwlvdXRwdXQgW2R3LTE6MF0gZG91dDsgICAgLy8gZGF0YSBvdXRwdXQNCisgDQorCS8vIHdyaXRlIHBvcnQNCisJaW5wdXQgICAgICAgICAgd2NsazsgIC8vIHdyaXRlIGNsb2NrLCByaXNpbmcgZWRnZSB0cmlnZ2VyDQorCWlucHV0ICAgICAgICAgIHdyc3Q7ICAvLyB3cml0ZSBwb3J0IHJlc2V0LCBhY3RpdmUgaGlnaA0KKwlpbnB1dCAgICAgICAgICB3Y2U7ICAgLy8gd3JpdGUgcG9ydCBjaGlwIGVuYWJsZSwgYWN0aXZlIGhpZ2gNCisJaW5wdXQgICAgICAgICAgd2U7ICAgIC8vIHdyaXRlIGVuYWJsZSwgYWN0aXZlIGhpZ2gNCisJaW5wdXQgW2F3LTE6MF0gd2FkZHI7IC8vIHdyaXRlIGFkZHJlc3MNCisJaW5wdXQgW2R3LTE6MF0gZGk7ICAgIC8vIGRhdGEgaW5wdXQNCisgDQorCS8vDQorCS8vIE1vZHVsZSBib2R5DQorCS8vDQorIA0KK2BpZmRlZiBWRU5ET1JfRlBHQQ0KKwkvLw0KKwkvLyBJbnN0YW50aWF0aW9uIHN5bnRoZXNpemVhYmxlIEZQR0EgbWVtb3J5DQorCS8vDQorCS8vIFRoaXMgY29kZSBoYXMgYmVlbiB0ZXN0ZWQgdXNpbmcgTGVvbmFyZG9TcGVjdHJ1bSBhbmQgU3lucGxpY2l0eS4NCisJLy8gVGhlIGNvZGUgY29ycmVjdGx5IGluc3RhbnRpYXRlcyBBbHRlcmEgRUFCcyBhbmQgWGlsaW54IEJsb2NrUkFNcy4NCisJLy8NCisgDQorCXJlZyBbZHctMSA6MF0gbWVtIFsoMTw8YXcpIC0xOjBdOyAvLyBpbnN0YW50aWF0ZSBtZW1vcnkNCisJcmVnIFtkdy0xOjBdIGRvdXQ7ICAgICAgICAgICAgICAgICAgLy8gZGF0YSBvdXRwdXQgcmVnaXN0ZXJzDQorIA0KKwkvLyByZWFkIG9wZXJhdGlvbg0KKyANCisJLyoNCisJYWx3YXlzQChwb3NlZGdlIHJjbGspDQorCQlpZiAocmNlKSAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9jayBlbmFibGUgaW5zdHJ1Y3RzIFhpbGlueCB0b29scyB0byB1c2UgU2VsZWN0UkFNIChMVVRTKSBpbnN0ZWFkIG9mIEJsb2NrUkFNDQorCQkJZG8gPD0gIzEgbWVtW3JhZGRyXTsNCisJKi8NCisgDQorCWFsd2F5c0AocG9zZWRnZSByY2xrKQ0KKwkJZG91dCA8PSAjMSBtZW1bcmFkZHJdOw0KKyANCisJLy8gd3JpdGUgb3BlcmF0aW9uDQorCWFsd2F5c0AocG9zZWRnZSB3Y2xrKQ0KKwkJaWYgKHdlICYmIHdjZSkNCisJCQltZW1bd2FkZHJdIDw9ICMxIGRpOw0KKyANCitgZWxzZQ0KKyANCitgaWZkZWYgVkVORE9SX1hJTElOWA0KKwkvLw0KKwkvLyBJbnN0YW50aWF0aW9uIG9mIEZQR0EgbWVtb3J5Og0KKwkvLw0KKwkvLyBWaXJ0ZXgvU3BhcnRhbjIgQmxvY2tSQU1zDQorCS8vDQorCXhpbGlueF9yYW1fZHAgeGlsaW54X3JhbSgNCisJCS8vIHJlYWQgcG9ydA0KKwkJLkNMS0EocmNsayksDQorCQkuUlNUQShycnN0KSwNCisJCS5FTkEocmNlKSwNCisJCS5BRERSQShyYWRkciksDQorCQkuRElBKCB7ZHd7MSdiMH19ICksDQorCQkuV0VBKDEnYjApLA0KKwkJLkRPQShkb3V0KSwNCisgDQorCQkvLyB3cml0ZSBwb3J0DQorCQkuQ0xLQih3Y2xrKSwNCisJCS5SU1RCKHdyc3QpLA0KKwkJLkVOQih3Y2UpLA0KKwkJLkFERFJCKHdhZGRyKSwNCisJCS5ESUIoZGkpLA0KKwkJLldFQih3ZSksDQorCQkuRE9CKCkNCisJKTsNCisgDQorCWRlZnBhcmFtDQorCQl4aWxpbnhfcmFtLmR3aWR0aCA9IGR3LA0KKwkJeGlsaW54X3JhbS5hd2lkdGggPSBhdzsNCisgDQorYGVsc2UNCisgDQorYGlmZGVmIFZFTkRPUl9BTFRFUkENCisJLy8NCisJLy8gSW5zdGFudGlhdGlvbiBvZiBGUEdBIG1lbW9yeToNCisJLy8NCisJLy8gQWx0ZXJhIEZMRVgvQVBFWCBFQUJzDQorCS8vDQorCWFsdGVyYV9yYW1fZHAgYWx0ZXJhX3JhbSgNCisJCS8vIHJlYWQgcG9ydA0KKwkJLnJkY2xvY2socmNsayksDQorCQkucmRjbG9ja2VuKHJjZSksDQorCQkucmRhZGRyZXNzKHJhZGRyKSwNCisJCS5xKGRvdXQpLA0KKyANCisJCS8vIHdyaXRlIHBvcnQNCisJCS53cmNsb2NrKHdjbGspLA0KKwkJLndyY2xvY2tlbih3Y2UpLA0KKwkJLndyZW4od2UpLA0KKwkJLndyYWRkcmVzcyh3YWRkciksDQorCQkuZGF0YShkaSkNCisJKTsNCisgDQorCWRlZnBhcmFtDQorCQlhbHRlcmFfcmFtLmR3aWR0aCA9IGR3LA0KKwkJYWx0ZXJhX3JhbS5hd2lkdGggPSBhdzsNCisgDQorYGVsc2UNCisgDQorYGlmZGVmIFZFTkRPUl9BUlRJU0FODQorIA0KKwkvLw0KKwkvLyBJbnN0YW50aWF0aW9uIG9mIEFTSUMgbWVtb3J5Og0KKwkvLw0KKwkvLyBBcnRpc2FuIFN5bmNocm9ub3VzIERvdWJsZS1Qb3J0IFJBTSAocmEyc2gpDQorCS8vDQorCWFydF9oc2RwICMoZHcsIDE8PGF3LCBhdykgYXJ0aXNhbl9zZHAoDQorCQkvLyByZWFkIHBvcnQNCisJCS5xYShkb3V0KSwNCisJCS5jbGthKHJjbGspLA0KKwkJLmNlbmEofnJjZSksDQorCQkud2VuYSgxJ2IxKSwNCisJCS5hYShyYWRkciksDQorCQkuZGEoIHtkd3sxJ2IwfX0gKSwNCisJCS5vZW5hKH5vZSksDQorIA0KKwkJLy8gd3JpdGUgcG9ydA0KKwkJLnFiKCksDQorCQkuY2xrYih3Y2xrKSwNCisJCS5jZW5iKH53Y2UpLA0KKwkJLndlbmIofndlKSwNCisJCS5hYih3YWRkciksDQorCQkuZGIoZGkpLA0KKwkJLm9lbmIoMSdiMSkNCisJKTsNCisgDQorYGVsc2UNCisgDQorYGlmZGVmIFZFTkRPUl9BVkFOVA0KKyANCisJLy8NCisJLy8gSW5zdGFudGlhdGlvbiBvZiBBU0lDIG1lbW9yeToNCisJLy8NCisJLy8gQXZhbnQhIEFzeW5jaHJvbm91cyBUd28tUG9ydCBSQU0NCisJLy8NCisJYXZhbnRfYXRwIGF2YW50X2F0cCgNCisJCS53ZWIofndlKSwNCisJCS5yZWIoKSwNCisJCS5vZWIofm9lKSwNCisJCS5yY3NiKCksDQorCQkud2NzYigpLA0KKwkJLnJhKHJhZGRyKSwNCisJCS53YSh3YWRkciksDQorCQkuZGkoZGkpLA0KKwkJLmRvKGRvdXQpDQorCSk7DQorIA0KK2BlbHNlDQorIA0KK2BpZmRlZiBWRU5ET1JfVklSQUdFDQorIA0KKwkvLw0KKwkvLyBJbnN0YW50aWF0aW9uIG9mIEFTSUMgbWVtb3J5Og0KKwkvLw0KKwkvLyBWaXJhZ2UgU3luY2hyb25vdXMgMi1wb3J0IFIvVyBSQU0NCisJLy8NCisJdmlyYWdlX3N0cCB2aXJhZ2Vfc3RwKA0KKwkJLy8gcmVhZCBwb3J0DQorCQkuQ0xLQShyY2xrKSwNCisJCS5NRUEocmNlX2EpLA0KKwkJLkFEUkEocmFkZHIpLA0KKwkJLkRBKCB7ZHd7MSdiMH19ICksDQorCQkuV0VBKDEnYjApLA0KKwkJLk9FQShvZSksDQorCQkuUUEoZG91dCksDQorIA0KKwkJLy8gd3JpdGUgcG9ydA0KKwkJLkNMS0Iod2NsayksDQorCQkuTUVCKHdjZSksDQorCQkuQURSQih3YWRkciksDQorCQkuREIoZGkpLA0KKwkJLldFQih3ZSksDQorCQkuT0VCKDEnYjEpLA0KKwkJLlFCKCkNCisJKTsNCisgDQorYGVsc2UNCisgDQorCS8vDQorCS8vIEdlbmVyaWMgZHVhbC1wb3J0IHN5bmNocm9ub3VzIFJBTSBtb2RlbA0KKwkvLw0KKyANCisJLy8NCisJLy8gR2VuZXJpYyBSQU0ncyByZWdpc3RlcnMgYW5kIHdpcmVzDQorCS8vDQorCXJlZwlbZHctMTowXQltZW0gWygxPDxhdyktMTowXTsJLy8gUkFNIGNvbnRlbnQNCisJcmVnCVtkdy0xOjBdCWRvX3JlZzsgICAgICAgICAgICAvLyBSQU0gZGF0YSBvdXRwdXQgcmVnaXN0ZXINCisgDQorCS8vDQorCS8vIERhdGEgb3V0cHV0IGRyaXZlcnMNCisJLy8NCisJYXNzaWduIGRvdXQgPSAob2UgJiByY2UpID8gZG9fcmVnIDoge2R3ezEnYnp9fTsNCisgDQorCS8vIHJlYWQgb3BlcmF0aW9uDQorCWFsd2F5cyBAKHBvc2VkZ2UgcmNsaykNCisJCWlmIChyY2UpDQorICAgICAgICAgIAkJZG9fcmVnIDw9ICMxICh3ZSAmJiAod2FkZHI9PXJhZGRyKSkgPyB7ZHd7MSdiIHh9fSA6IG1lbVtyYWRkcl07DQorIA0KKwkvLyB3cml0ZSBvcGVyYXRpb24NCisJYWx3YXlzIEAocG9zZWRnZSB3Y2xrKQ0KKwkJaWYgKHdjZSAmJiB3ZSkNCisJCQltZW1bd2FkZHJdIDw9ICMxIGRpOw0KKyANCisgDQorCS8vIFRhc2sgcHJpbnRzIHJhbmdlIG9mIG1lbW9yeQ0KKwkvLyAqKiogUmVtZW1iZXIgdGhhdCB0YXNrcyBhcmUgbm9uIHJlZW50cmFudCwgZG9uJ3QgY2FsbCB0aGlzIHRhc2sgaW4gcGFyYWxsZWwgZm9yIG11bHRpcGxlIGluc3RhbnRpYXRpb25zLiANCisJdGFzayBwcmludF9yYW07DQorCWlucHV0IFthdy0xOjBdIHN0YXJ0Ow0KKwlpbnB1dCBbYXctMTowXSBmaW5pc2g7DQorCWludGVnZXIgcm51bTsNCisgIAliZWdpbg0KKyAgICAJCWZvciAocm51bT1zdGFydDtybnVtPD1maW5pc2g7cm51bT1ybnVtKzEpDQorICAgICAgCQkJJGRpc3BsYXkoIkFkZHIgJWggPSAlaCIscm51bSxtZW1bcm51bV0pOw0KKyAgCWVuZA0KKwllbmR0YXNrDQorIA0KK2BlbmRpZiAvLyAhVkVORE9SX1ZJUkFHRQ0KK2BlbmRpZiAvLyAhVkVORE9SX0FWQU5UDQorYGVuZGlmIC8vICFWRU5ET1JfQVJUSVNBTg0KK2BlbmRpZiAvLyAhVkVORE9SX0FMVEVSQQ0KK2BlbmRpZiAvLyAhVkVORE9SX1hJTElOWA0KK2BlbmRpZiAvLyAhVkVORE9SX0ZQR0ENCisgDQorZW5kbW9kdWxlDQorIA0KKy8vDQorLy8gQmxhY2stYm94IG1vZHVsZXMNCisvLw0KKyANCitgaWZkZWYgVkVORE9SX0FMVEVSQQ0KKwltb2R1bGUgYWx0ZXJhX3JhbV9kcCgNCisJCWRhdGEsDQorCQl3cmFkZHJlc3MsDQorCQlyZGFkZHJlc3MsDQorCQl3cmVuLA0KKwkJd3JjbG9jaywNCisJCXdyY2xvY2tlbiwNCisJCXJkY2xvY2ssDQorCQlyZGNsb2NrZW4sDQorCQlxKSAvKiBzeW50aGVzaXMgYmxhY2tfYm94ICovOw0KKyANCisJCXBhcmFtZXRlciBhd2lkdGggPSA3Ow0KKwkJcGFyYW1ldGVyIGR3aWR0aCA9IDg7DQorIA0KKwkJaW5wdXQgW2R3aWR0aCAtMTowXSBkYXRhOw0KKwkJaW5wdXQgW2F3aWR0aCAtMTowXSB3cmFkZHJlc3M7DQorCQlpbnB1dCBbYXdpZHRoIC0xOjBdIHJkYWRkcmVzczsNCisJCWlucHV0ICAgICAgICAgICAgICAgd3JlbjsNCisJCWlucHV0ICAgICAgICAgICAgICAgd3JjbG9jazsNCisJCWlucHV0ICAgICAgICAgICAgICAgd3JjbG9ja2VuOw0KKwkJaW5wdXQgICAgICAgICAgICAgICByZGNsb2NrOw0KKwkJaW5wdXQgICAgICAgICAgICAgICByZGNsb2NrZW47DQorCQlvdXRwdXQgW2R3aWR0aCAtMTowXSBxOw0KKyANCisJCS8vIHN5bm9wc2lzIHRyYW5zbGF0ZV9vZmYNCisJCS8vIGV4ZW1wbGFyIHRyYW5zbGF0ZV9vZmYNCisgDQorCQlzeW5fZHByYW1fcm93ciAjKA0KKwkJCSJVTlVTRUQiLA0KKwkJCWR3aWR0aCwNCisJCQlhd2lkdGgsDQorCQkJMSA8PCBhd2lkdGgNCisJCSkNCisJCWFsdGVyYV9kcHJhbV9tb2RlbCAoDQorCQkJLy8gcmVhZCBwb3J0DQorCQkJLlJkQ2xvY2socmRjbG9jayksDQorCQkJLlJkQ2xrZW4ocmRjbG9ja2VuKSwNCisJCQkuUmRBZGRyZXNzKHJkYWRkcmVzcyksDQorCQkJLlJkRW4oMSdiMSksDQorCQkJLlEocSksDQorIA0KKwkJCS8vIHdyaXRlIHBvcnQNCisJCQkuV3JDbG9jayh3cmNsb2NrKSwNCisJCQkuV3JDbGtlbih3cmNsb2NrZW4pLA0KKwkJCS5XckFkZHJlc3Mod3JhZGRyZXNzKSwNCisJCQkuV3JFbih3cmVuKSwNCisJCQkuRGF0YShkYXRhKQ0KKwkJKTsNCisgDQorCQkvLyBleGVtcGxhciB0cmFuc2xhdGVfb24NCisJCS8vIHN5bm9wc2lzIHRyYW5zbGF0ZV9vbg0KKyANCisJZW5kbW9kdWxlDQorYGVuZGlmIC8vIFZFTkRPUl9BTFRFUkENCisgDQorYGlmZGVmIFZFTkRPUl9YSUxJTlgNCisJbW9kdWxlIHhpbGlueF9yYW1fZHAgKA0KKwkJQUREUkEsDQorCQlDTEtBLA0KKwkJQUREUkIsDQorCQlDTEtCLA0KKwkJRElBLA0KKwkJV0VBLA0KKwkJRElCLA0KKwkJV0VCLA0KKwkJRU5BLA0KKwkJRU5CLA0KKwkJUlNUQSwNCisJCVJTVEIsDQorCQlET0EsDQorCQlET0IpIC8qIHN5bnRoZXNpcyBibGFja19ib3ggKi8gOw0KKyANCisJcGFyYW1ldGVyIGF3aWR0aCA9IDc7DQorCXBhcmFtZXRlciBkd2lkdGggPSA4Ow0KKyANCisJLy8gcG9ydF9hDQorCWlucHV0ICAgICAgICAgICAgICAgQ0xLQTsNCisJaW5wdXQgICAgICAgICAgICAgICBSU1RBOw0KKwlpbnB1dCAgICAgICAgICAgICAgIEVOQTsNCisJaW5wdXQgW2F3aWR0aC0xOjBdICBBRERSQTsNCisJaW5wdXQgW2R3aWR0aC0xOjBdICBESUE7DQorCWlucHV0ICAgICAgICAgICAgICAgV0VBOw0KKwlvdXRwdXQgW2R3aWR0aC0xOjBdIERPQTsNCisgDQorCS8vIHBvcnRfYg0KKwlpbnB1dCAgICAgICAgICAgICAgIENMS0I7DQorCWlucHV0ICAgICAgICAgICAgICAgUlNUQjsNCisJaW5wdXQgICAgICAgICAgICAgICBFTkI7DQorCWlucHV0IFthd2lkdGgtMTowXSAgQUREUkI7DQorCWlucHV0IFtkd2lkdGgtMTowXSAgRElCOw0KKwlpbnB1dCAgICAgICAgICAgICAgIFdFQjsNCisJb3V0cHV0IFtkd2lkdGgtMTowXSBET0I7DQorIA0KKwkvLyBpbnNlcnQgc2ltdWxhdGlvbiBtb2RlbA0KKyANCisgDQorCS8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYNCisJLy8gZXhlbXBsYXIgdHJhbnNsYXRlX29mZg0KKyANCisJQ19NRU1fRFBfQkxPQ0tfVjFfMCAjKA0KKwkJYXdpZHRoLA0KKwkJYXdpZHRoLA0KKwkJMSwNCisJCTEsDQorCQkiMCIsDQorCQkxIDw8IGF3aWR0aCwNCisJCTEgPDwgYXdpZHRoLA0KKwkJMSwNCisJCTEsDQorCQkxLA0KKwkJMSwNCisJCTEsDQorCQkxLA0KKwkJMSwNCisJCTEsDQorCQkxLA0KKwkJMSwNCisJCTEsDQorCQkxLA0KKwkJMSwNCisJCSIiLA0KKwkJMTYsDQorCQkwLA0KKwkJMCwNCisJCTEsDQorCQkxLA0KKwkJMSwNCisJCTEsDQorCQlkd2lkdGgsDQorCQlkd2lkdGgpDQorCXhpbGlueF9kcHJhbV9tb2RlbCAoDQorCQkuQUREUkEoQUREUkEpLA0KKwkJLkNMS0EoQ0xLQSksDQorCQkuQUREUkIoQUREUkIpLA0KKwkJLkNMS0IoQ0xLQiksDQorCQkuRElBKERJQSksDQorCQkuV0VBKFdFQSksDQorCQkuRElCKERJQiksDQorCQkuV0VCKFdFQiksDQorCQkuRU5BKEVOQSksDQorCQkuRU5CKEVOQiksDQorCQkuUlNUQShSU1RBKSwNCisJCS5SU1RCKFJTVEIpLA0KKwkJLkRPQShET0EpLA0KKwkJLkRPQihET0IpKTsNCisgDQorCQkvLyBleGVtcGxhciB0cmFuc2xhdGVfb24NCisJCS8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbg0KKyANCisJZW5kbW9kdWxlDQorYGVuZGlmIC8vIFZFTkRPUl9YSUxJTlgNCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfZ2VuZXJpY19maWZvLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfZ2VuZXJpY19maWZvLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODljNjdlNgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9nZW5lcmljX2ZpZm8udgpAQCAtMCwwICsxLDMzNCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgVW5pdmVyc2FsIEZJRk8gU2luZ2xlIENsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgRC9MIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9nZW5lcmljX2ZpZm9zLyAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vDQorLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vDQorLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vDQorLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vDQorLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vDQorLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vDQorLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vDQorLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vDQorLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vDQorLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vDQorLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vDQorLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vDQorLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vDQorLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vDQorLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vDQorLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorIA0KKy8vICBDVlMgTG9nDQorLy8NCisvLyAgJElkOiBnZW5lcmljX2ZpZm9fc2NfYS52LHYgMS4xLjEuMSAyMDAyLTA5LTI1IDA1OjQyOjA2IHJ1ZGkgRXhwICQNCisvLw0KKy8vICAkRGF0ZTogMjAwMi0wOS0yNSAwNTo0MjowNiAkDQorLy8gICRSZXZpc2lvbjogMS4xLjEuMSAkDQorLy8gICRBdXRob3I6IHJ1ZGkgJA0KKy8vICAkTG9ja2VyOiAgJA0KKy8vICAkU3RhdGU6IEV4cCAkDQorLy8NCisvLyBDaGFuZ2UgSGlzdG9yeToNCisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkDQorLy8NCisvLw0KKy8vDQorLy8NCisvLw0KKy8vDQorLy8NCisvLw0KKy8vDQorLy8NCisgDQorIA0KKy8qDQorIA0KK0Rlc2NyaXB0aW9uDQorPT09PT09PT09PT0NCisgDQorSS9Pcw0KKy0tLS0NCityc3QJbG93IGFjdGl2ZSwgZWl0aGVyIHN5bmMuIG9yIGFzeW5jLiBtYXN0ZXIgcmVzZXQgKHNlZSBiZWxvdyBob3cgdG8gc2VsZWN0KQ0KK2NscglzeW5jaHJvbm91cyBjbGVhciAoanVzdCBsaWtlIHJlc2V0IGJ1dCBhbHdheXMgc3luY2hyb25vdXMpLCBoaWdoIGFjdGl2ZQ0KK3JlCXJlYWQgZW5hYmxlLCBzeW5jaHJvbm91cywgaGlnaCBhY3RpdmUNCit3ZQlyZWFkIGVuYWJsZSwgc3luY2hyb25vdXMsIGhpZ2ggYWN0aXZlDQorZGluCURhdGEgSW5wdXQNCitkb3V0CURhdGEgT3V0cHV0DQorIA0KK2Z1bGwJSW5kaWNhdGVzIHRoZSBGSUZPIGlzIGZ1bGwgKGNvbWJpbmF0b3JpYWwgb3V0cHV0KQ0KK2Z1bGxfcglzYW1lIGFzIGFib3ZlLCBidXQgcmVnaXN0ZXJlZCBvdXRwdXQgKHNlZSBub3RlIGJlbG93KQ0KK2VtcHR5CUluZGljYXRlcyB0aGUgRklGTyBpcyBlbXB0eQ0KK2VtcHR5X3IJc2FtZSBhcyBhYm92ZSwgYnV0IHJlZ2lzdGVyZWQgb3V0cHV0IChzZWUgbm90ZSBiZWxvdykNCisgDQorZnVsbF9uCQlJbmRpY2F0ZXMgaWYgdGhlIEZJRk8gaGFzIHNwYWNlIGZvciBOIGVudHJpZXMgKGNvbWJpbmF0b3JpYWwgb3V0cHV0KQ0KK2Z1bGxfbl9yCXNhbWUgYXMgYWJvdmUsIGJ1dCByZWdpc3RlcmVkIG91dHB1dCAoc2VlIG5vdGUgYmVsb3cpDQorZW1wdHlfbgkJSW5kaWNhdGVzIHRoZSBGSUZPIGhhcyBhdCBsZWFzdCBOIGVudHJpZXMgKGNvbWJpbmF0b3JpYWwgb3V0cHV0KQ0KK2VtcHR5X25fcglzYW1lIGFzIGFib3ZlLCBidXQgcmVnaXN0ZXJlZCBvdXRwdXQgKHNlZSBub3RlIGJlbG93KQ0KKyANCitsZXZlbAkJaW5kaWNhdGVzIHRoZSBGSUZPIGxldmVsOg0KKwkJMidiMDAJMC0yNSUJIGZ1bGwNCisJCTInYjAxCTI1LTUwJQkgZnVsbA0KKwkJMidiMTAJNTAtNzUlCSBmdWxsDQorCQkyJ2IxMQklNzUtMTAwJSBmdWxsDQorIA0KK2NvbWJpbmF0b3JpYWwgdnMuIHJlZ2lzdGVyZWQgc3RhdHVzIG91dHB1dHMNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorQm90aCB0aGUgY29tYmluYXRvcmlhbCBhbmQgcmVnaXN0ZXJlZCBzdGF0dXMgb3V0cHV0cyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUNCitzeW5jaHJvbm91cyB0aW1pbmcuIE1lYW5pbmcgdGhleSBhcmUgYmVpbmcgYXNzZXJ0ZWQgaW1tZWRpYXRlbHkgYXQgdGhlIGNsb2NrDQorZWRnZSBhZnRlciB0aGUgbGFzdCByZWFkIG9yIHdyaXRlLiBUaGUgY29tYmluYXRvcmlhbCBvdXRwdXRzIGhvd2V2ZXIsIHBhc3MNCit0aHJvdWdoIHNldmVyYWwgbGV2ZWxzIG9mIGxvZ2ljIGJlZm9yZSB0aGV5IGFyZSBvdXRwdXQuIFRoZSByZWdpc3RlcmVkIHN0YXR1cw0KK291dHB1dHMgYXJlIGRpcmVjdCBvdXRwdXRzIG9mIGEgZmxpcC1mbG9wLiBUaGUgcmVhc29uIGJvdGggYXJlIHByb3ZpZGVkLCBpcw0KK3RoYXQgdGhlIHJlZ2lzdGVyZWQgb3V0cHV0cyByZXF1aXJlIHF1aXRlIGEgYml0IG9mIGFkZGl0aW9uYWwgbG9naWMgaW5zaWRlDQordGhlIEZJRk8uIElmIHlvdSBjYW4gbWVldCB0aW1pbmcgb2YgeW91ciBkZXZpY2Ugd2l0aCB0aGUgY29tYmluYXRvcmlhbA0KK291dHB1dHMsIHVzZSB0aGVtICEgVGhlIEZJRk8gd2lsbCBiZSBzbWFsbGVyLiBJZiB0aGUgc3RhdHVzIHNpZ25hbHMgYXJlDQoraW4gdGhlIGNyaXRpY2FsIHBhc3MsIHVzZSB0aGUgcmVnaXN0ZXJlZCBvdXRwdXRzLCB0aGV5IGhhdmUgYSBtdWNoIHNtYWxsZXINCitvdXRwdXQgZGVsYXkgKGFjdHVhbGx5IG9ubHkgVGNxKS4NCisgDQorUGFyYW1ldGVycw0KKy0tLS0tLS0tLS0NCitUaGUgRklGTyB0YWtlcyAzIHBhcmFtZXRlcnM6DQorZHcJRGF0YSBidXMgd2lkdGgNCithdwlBZGRyZXNzIGJ1cyB3aWR0aCAoRGV0ZXJtaW5lcyB0aGUgRklGTyBzaXplIGJ5IGV2YWx1YXRpbmcgMl5hdykNCituCU4gaXMgYSBzZWNvbmQgc3RhdHVzIHRocmVzaG9sZCBjb25zdGFudCBmb3IgZnVsbF9uIGFuZCBlbXB0eV9uDQorCUlmIHlvdSBoYXZlIG5vIG5lZWQgZm9yIHRoZSBzZWNvbmQgc3RhdHVzIHRocmVzaG9sZCwgZG8gbm90DQorCWNvbm5lY3QgdGhlIG91dHB1dHMgYW5kIHRoZSBsb2dpYyBzaG91bGQgYmUgcmVtb3ZlZCBieSB5b3VyDQorCXN5bnRoZXNpcyB0b29sLg0KKyANCitTeW50aGVzaXMgUmVzdWx0cw0KKy0tLS0tLS0tLS0tLS0tLS0tDQorSW4gYSBTcGFydGFuIDJlIGEgOCBiaXQgd2lkZSwgOCBlbnRyaWVzIGRlZXAgRklGTywgdGFrZXMgODUgTFVUcyBhbmQgcnVucw0KK2F0IGFib3V0IDExNiBNSHogKElPIGluc2VydGlvbiBkaXNhYmxlZCkuIFRoZSByZWdpc3RlcmVkIHN0YXR1cyBvdXRwdXRzDQorYXJlIHZhbGlkIGFmdGVyIDIuMU5TLCB0aGUgY29tYmluYXRvcmlhbCBvbmNlIHRha2Ugb3V0IHRvIDYuNSBOUyB0byBiZQ0KK2F2YWlsYWJsZS4NCisgDQorIA0KK01pc2MNCistLS0tDQorVGhpcyBkZXNpZ24gYXNzdW1lcyB5b3Ugd2lsbCBkbyBhcHByb3ByaWF0ZSBzdGF0dXMgY2hlY2tpbmcgZXh0ZXJuYWxseS4NCisgDQorSU1QT1JUQU5UICEgd3JpdGluZyB3aGlsZSB0aGUgRklGTyBpcyBmdWxsIG9yIHJlYWRpbmcgd2hpbGUgdGhlIEZJRk8gaXMNCitlbXB0eSB3aWxsIHBsYWNlIHRoZSBGSUZPIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4NCisgDQorKi8NCisgDQorIA0KKy8vIFNlbGVjdGluZyBTeW5jLiBvciBBc3luYyBSZXNldA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vIFVuY29tbWVudCBvbmUgb2YgdGhlIHR3byBsaW5lcyBiZWxvdy4gVGhlIGZpcnN0IGxpbmUgZm9yDQorLy8gc3luY2hyb25vdXMgcmVzZXQsIHRoZSBzZWNvbmQgZm9yIGFzeW5jaHJvbm91cyByZXNldA0KKyANCitgZGVmaW5lIFNDX0ZJRk9fQVNZTkNfUkVTRVQJCQkJLy8gVW5jb21tZW50IGZvciBTeW5jci4gcmVzZXQNCisvL2BkZWZpbmUgU0NfRklGT19BU1lOQ19SRVNFVAlvciBuZWdlZGdlIHJzdAkJLy8gVW5jb21tZW50IGZvciBBc3luYy4gcmVzZXQNCisgDQorIA0KK21vZHVsZSB1c2IxZF9nZW5lcmljX2ZpZm8oY2xrLCByc3QsIGNsciwgZGluLCB3ZSwgZG91dCwgcmUsDQorCQkJZnVsbCwgZW1wdHksIGZ1bGxfciwgZW1wdHlfciwNCisJCQlmdWxsX24sIGVtcHR5X24sIGZ1bGxfbl9yLCBlbXB0eV9uX3IsDQorCQkJbGV2ZWwpOw0KKyANCitwYXJhbWV0ZXIgZHc9ODsNCitwYXJhbWV0ZXIgYXc9ODsNCitwYXJhbWV0ZXIgbj0zMjsNCitwYXJhbWV0ZXIgbWF4X3NpemUgPSAxPDxhdzsNCisgDQoraW5wdXQJCQljbGssIHJzdCwgY2xyOw0KK2lucHV0CVtkdy0xOjBdCWRpbjsNCitpbnB1dAkJCXdlOw0KK291dHB1dAlbZHctMTowXQlkb3V0Ow0KK2lucHV0CQkJcmU7DQorb3V0cHV0CQkJZnVsbCwgZnVsbF9yOw0KK291dHB1dAkJCWVtcHR5LCBlbXB0eV9yOw0KK291dHB1dAkJCWZ1bGxfbiwgZnVsbF9uX3I7DQorb3V0cHV0CQkJZW1wdHlfbiwgZW1wdHlfbl9yOw0KK291dHB1dAlbMTowXQkJbGV2ZWw7DQorIA0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8NCisvLyBMb2NhbCBXaXJlcw0KKy8vDQorIA0KK3JlZwlbYXctMTowXQl3cDsNCit3aXJlCVthdy0xOjBdCXdwX3BsMTsNCit3aXJlCVthdy0xOjBdCXdwX3BsMjsNCityZWcJW2F3LTE6MF0JcnA7DQord2lyZQlbYXctMTowXQlycF9wbDE7DQorcmVnCQkJZnVsbF9yOw0KK3JlZwkJCWVtcHR5X3I7DQorcmVnCQkJZ2I7DQorcmVnCQkJZ2IyOw0KK3JlZwlbYXc6MF0JCWNudDsNCit3aXJlCQkJZnVsbF9uLCBlbXB0eV9uOw0KK3JlZwkJCWZ1bGxfbl9yLCBlbXB0eV9uX3I7DQorIA0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8NCisvLyBNZW1vcnkgQmxvY2sNCisvLw0KKyANCit1c2IxZF9nZW5lcmljX2RwcmFtICAjKGF3LGR3KSB1MCgNCisJLnJjbGsoCQljbGsJCSksDQorCS5ycnN0KAkJIXJzdAkJKSwNCisJLnJjZSgJCTEnYjEJCSksDQorCS5vZSgJCTEnYjEJCSksDQorCS5yYWRkcigJCXJwCQkpLA0KKwkuZG91dCgJCWRvdXQJCSksDQorCS53Y2xrKAkJY2xrCQkpLA0KKwkud3JzdCgJCSFyc3QJCSksDQorCS53Y2UoCQkxJ2IxCQkpLA0KKwkud2UoCQl3ZQkJKSwNCisJLndhZGRyKAkJd3AJCSksDQorCS5kaSgJCWRpbgkJKQ0KKwkpOw0KKyANCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vDQorLy8gTWlzYyBMb2dpYw0KKy8vDQorIA0KK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIGBTQ19GSUZPX0FTWU5DX1JFU0VUKQ0KKwlpZighcnN0KQl3cCA8PSAjMSB7YXd7MSdiMH19Ow0KKwllbHNlDQorCWlmKGNscikJCXdwIDw9ICMxIHthd3sxJ2IwfX07DQorCWVsc2UNCisJaWYod2UpCQl3cCA8PSAjMSB3cF9wbDE7DQorIA0KK2Fzc2lnbiB3cF9wbDEgPSB3cCArIHsge2F3LTF7MSdiMH19LCAxJ2IxfTsNCithc3NpZ24gd3BfcGwyID0gd3AgKyB7IHthdy0yezEnYjB9fSwgMidiMTB9Ow0KKyANCithbHdheXMgQChwb3NlZGdlIGNsayBgU0NfRklGT19BU1lOQ19SRVNFVCkNCisJaWYoIXJzdCkJcnAgPD0gIzEge2F3ezEnYjB9fTsNCisJZWxzZQ0KKwlpZihjbHIpCQlycCA8PSAjMSB7YXd7MSdiMH19Ow0KKwllbHNlDQorCWlmKHJlKQkJcnAgPD0gIzEgcnBfcGwxOw0KKyANCithc3NpZ24gcnBfcGwxID0gcnAgKyB7IHthdy0xezEnYjB9fSwgMSdiMX07DQorIA0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8NCisvLyBDb21iaW5hdG9yaWFsIEZ1bGwgJiBFbXB0eSBGbGFncw0KKy8vDQorIA0KK2Fzc2lnbiBlbXB0eSA9ICgod3AgPT0gcnApICYgIWdiKTsNCithc3NpZ24gZnVsbCAgPSAoKHdwID09IHJwKSAmICBnYik7DQorIA0KKy8vIEd1YXJkIEJpdCAuLi4NCithbHdheXMgQChwb3NlZGdlIGNsayBgU0NfRklGT19BU1lOQ19SRVNFVCkNCisJaWYoIXJzdCkJCQlnYiA8PSAjMSAxJ2IwOw0KKwllbHNlDQorCWlmKGNscikJCQkJZ2IgPD0gIzEgMSdiMDsNCisJZWxzZQ0KKwlpZigod3BfcGwxID09IHJwKSAmIHdlKQkJZ2IgPD0gIzEgMSdiMTsNCisJZWxzZQ0KKwlpZihyZSkJCQkJZ2IgPD0gIzEgMSdiMDsNCisgDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLw0KKy8vIFJlZ2lzdGVyZWQgRnVsbCAmIEVtcHR5IEZsYWdzDQorLy8NCisgDQorLy8gR3VhcmQgQml0IC4uLg0KK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIGBTQ19GSUZPX0FTWU5DX1JFU0VUKQ0KKwlpZighcnN0KQkJCWdiMiA8PSAjMSAxJ2IwOw0KKwllbHNlDQorCWlmKGNscikJCQkJZ2IyIDw9ICMxIDEnYjA7DQorCWVsc2UNCisJaWYoKHdwX3BsMiA9PSBycCkgJiB3ZSkJCWdiMiA8PSAjMSAxJ2IxOw0KKwllbHNlDQorCWlmKCh3cCAhPSBycCkgJiByZSkJCWdiMiA8PSAjMSAxJ2IwOw0KKyANCithbHdheXMgQChwb3NlZGdlIGNsayBgU0NfRklGT19BU1lOQ19SRVNFVCkNCisJaWYoIXJzdCkJCQkJZnVsbF9yIDw9ICMxIDEnYjA7DQorCWVsc2UNCisJaWYoY2xyKQkJCQkJZnVsbF9yIDw9ICMxIDEnYjA7DQorCWVsc2UNCisJaWYod2UgJiAoKHdwX3BsMSA9PSBycCkgJiBnYjIpICYgIXJlKQlmdWxsX3IgPD0gIzEgMSdiMTsNCisJZWxzZQ0KKwlpZihyZSAmICgod3BfcGwxICE9IHJwKSB8ICFnYjIpICYgIXdlKQlmdWxsX3IgPD0gIzEgMSdiMDsNCisgDQorYWx3YXlzIEAocG9zZWRnZSBjbGsgYFNDX0ZJRk9fQVNZTkNfUkVTRVQpDQorCWlmKCFyc3QpCQkJCWVtcHR5X3IgPD0gIzEgMSdiMTsNCisJZWxzZQ0KKwlpZihjbHIpCQkJCQllbXB0eV9yIDw9ICMxIDEnYjE7DQorCWVsc2UNCisJaWYod2UgJiAoKHdwICE9IHJwX3BsMSkgfCBnYjIpICYgIXJlKQllbXB0eV9yIDw9ICMxIDEnYjA7DQorCWVsc2UNCisJaWYocmUgJiAoKHdwID09IHJwX3BsMSkgJiAhZ2IyKSAmICF3ZSkJZW1wdHlfciA8PSAjMSAxJ2IxOw0KKyANCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vDQorLy8gQ29tYmluYXRvcmlhbCBGdWxsX24gJiBFbXB0eV9uIEZsYWdzDQorLy8NCisgDQorYXNzaWduIGVtcHR5X24gPSBjbnQgPCBuOw0KK2Fzc2lnbiBmdWxsX24gID0gIShjbnQgPCAobWF4X3NpemUtbisxKSk7DQorYXNzaWduIGxldmVsID0gezJ7Y250W2F3XX19IHwgY250W2F3LTE6YXctMl07DQorIA0KKy8vIE4gZW50cmllcyBzdGF0dXMNCithbHdheXMgQChwb3NlZGdlIGNsayBgU0NfRklGT19BU1lOQ19SRVNFVCkNCisJaWYoIXJzdCkJY250IDw9ICMxIHthdysxezEnYjB9fTsNCisJZWxzZQ0KKwlpZihjbHIpCQljbnQgPD0gIzEge2F3KzF7MSdiMH19Ow0KKwllbHNlDQorCWlmKCByZSAmICF3ZSkJY250IDw9ICMxIGNudCArIHsge2F3ezEnYjF9fSwgMSdiMX07DQorCWVsc2UNCisJaWYoIXJlICYgIHdlKQljbnQgPD0gIzEgY250ICsgeyB7YXd7MSdiMH19LCAxJ2IxfTsNCisgDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLw0KKy8vIFJlZ2lzdGVyZWQgRnVsbF9uICYgRW1wdHlfbiBGbGFncw0KKy8vDQorIA0KK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIGBTQ19GSUZPX0FTWU5DX1JFU0VUKQ0KKwlpZighcnN0KQkJCQllbXB0eV9uX3IgPD0gIzEgMSdiMTsNCisJZWxzZQ0KKwlpZihjbHIpCQkJCQllbXB0eV9uX3IgPD0gIzEgMSdiMTsNCisJZWxzZQ0KKwlpZih3ZSAmIChjbnQgPj0gKG4tMSkgKSAmICFyZSkJCWVtcHR5X25fciA8PSAjMSAxJ2IwOw0KKwllbHNlDQorCWlmKHJlICYgKGNudCA8PSBuICkgJiAhd2UpCQllbXB0eV9uX3IgPD0gIzEgMSdiMTsNCisgDQorYWx3YXlzIEAocG9zZWRnZSBjbGsgYFNDX0ZJRk9fQVNZTkNfUkVTRVQpDQorCWlmKCFyc3QpCQkJCWZ1bGxfbl9yIDw9ICMxIDEnYjA7DQorCWVsc2UNCisJaWYoY2xyKQkJCQkJZnVsbF9uX3IgPD0gIzEgMSdiMDsNCisJZWxzZQ0KKwlpZih3ZSAmIChjbnQgPj0gKG1heF9zaXplLW4pICkgJiAhcmUpCWZ1bGxfbl9yIDw9ICMxIDEnYjE7DQorCWVsc2UNCisJaWYocmUgJiAoY250IDw9IChtYXhfc2l6ZS1uKzEpKSAmICF3ZSkJZnVsbF9uX3IgPD0gIzEgMSdiMDsNCisgDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLw0KKy8vIFNhbml0eSBDaGVjaw0KKy8vDQorIA0KKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYNCithbHdheXMgQChwb3NlZGdlIGNsaykNCisJaWYod2UgJiBmdWxsKQ0KKwkJJGRpc3BsYXkoIiVtIFdBUk5JTkc6IFdyaXRpbmcgd2hpbGUgZmlmbyBpcyBGVUxMICgldCkiLCR0aW1lKTsNCisgDQorYWx3YXlzIEAocG9zZWRnZSBjbGspDQorCWlmKHJlICYgZW1wdHkpDQorCQkkZGlzcGxheSgiJW0gV0FSTklORzogUmVhZGluZyB3aGlsZSBmaWZvIGlzIEVNUFRZICgldCkiLCR0aW1lKTsNCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24NCisgDQorZW5kbW9kdWxlDQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX2lkbWEudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9pZG1hLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmE2MjA3YwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9pZG1hLnYKQEAgLTAsMCArMSwzODcgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBJbnRlcm5hbCBETUEgRW5naW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYjFfZnVuY3QvLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYjFfaWRtYS52LHYgMS4yIDIwMDItMDktMjUgMDY6MDY6NDkgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMi0wOS0yNSAwNjowNjo0OSAkCisvLyAgJFJldmlzaW9uOiAxLjIgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjEuMS4xICAyMDAyLzA5LzE5IDEyOjA3OjM4ICBydWRpCisvLyAgICAgICAgICAgICAgIEluaXRpYWwgQ2hlY2tpbgorLy8KKy8vCisvLworLy8KKy8vCisvLworCitgaW5jbHVkZSAidXNiMWRfZGVmaW5lcy52IgorCittb2R1bGUgdXNiMWRfaWRtYSgJY2xrLCByc3QsCisKKwkJLy8gUGFja2V0IERpc2Fzc2VtYmxlci9Bc3NlbWJsZXIgaW50ZXJmYWNlCisJCXJ4X2RhdGFfdmFsaWQsCisJCXJ4X2RhdGFfZG9uZSwgCisJCXNlbmRfZGF0YSwKKwkJcmRfbmV4dCwKKworCQl0eF92YWxpZCwKKwkJdHhfZGF0YV9zdF9pLAorCQl0eF9kYXRhX3N0X28sCisKKwkJLy8gUHJvdG9jb2wgRW5naW5lCisJCXR4X2RtYV9lbiwgcnhfZG1hX2VuLCBpZG1hX2RvbmUsCisJCWVwX3NlbCwKKworCQkvLyBSZWdpc3RlciBGaWxlIE1hbmFnZXIgSW50ZXJmYWNlCisJCXNpemUsCisJCXJ4X2NudCwgcnhfZG9uZSwKKwkJdHhfYnVzeSwKKworCQkvLyBCbG9jayBGcmFtZXMKKwkJZXBfYmZfZW4sIGVwX2JmX3NpemUsCisJCWRyb3BwZWRfZnJhbWUsIG1pc2FsaWduZWRfZnJhbWUsCisKKwkJLy8gTWVtb3J5IEFyYiBpbnRlcmZhY2UKKwkJbXdlLCBtcmUsIGVwX2VtcHR5LCBlcF9lbXB0eV9pbnQsIGVwX2Z1bGwKKwkJKTsKKworCisvLyBQYWNrZXQgRGlzYXNzZW1ibGVyL0Fzc2VtYmxlciBpbnRlcmZhY2UKK2lucHV0CQljbGssIHJzdDsKK2lucHV0CQlyeF9kYXRhX3ZhbGlkOworaW5wdXQJCXJ4X2RhdGFfZG9uZTsKK291dHB1dAkJc2VuZF9kYXRhOworaW5wdXQJCXJkX25leHQ7CisKK2lucHV0CQl0eF92YWxpZDsKK2lucHV0CVs3OjBdCXR4X2RhdGFfc3RfaTsKK291dHB1dAlbNzowXQl0eF9kYXRhX3N0X287CisKKy8vIFByb3RvY29sIEVuZ2luZQoraW5wdXQJCXR4X2RtYV9lbjsKK2lucHV0CQlyeF9kbWFfZW47CitvdXRwdXQJCWlkbWFfZG9uZTsJLy8gRE1BIGlzIGRvbmUKK2lucHV0CVszOjBdCWVwX3NlbDsKKworLy8gUmVnaXN0ZXIgRmlsZSBNYW5hZ2VyIEludGVyZmFjZQoraW5wdXQJWzg6MF0Jc2l6ZTsJCS8vIE1BWCBQTCBTaXplIGluIGJ5dGVzCitvdXRwdXQJWzc6MF0JcnhfY250Oworb3V0cHV0CQlyeF9kb25lOworb3V0cHV0CQl0eF9idXN5OworCitpbnB1dAkJZXBfYmZfZW47CitpbnB1dAlbNjowXQllcF9iZl9zaXplOworb3V0cHV0CQlkcm9wcGVkX2ZyYW1lOworb3V0cHV0CQltaXNhbGlnbmVkX2ZyYW1lOworCisvLyBNZW1vcnkgQXJiIGludGVyZmFjZQorb3V0cHV0CQltd2U7CitvdXRwdXQJCW1yZTsKK2lucHV0CQllcF9lbXB0eTsKK291dHB1dAkJZXBfZW1wdHlfaW50OworaW5wdXQJCWVwX2Z1bGw7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBMb2NhbCBXaXJlcyBhbmQgUmVnaXN0ZXJzCisvLworCityZWcJCXR4X2RtYV9lbl9yOworcmVnCVs4OjBdCXNpemRfYzsJCQkvLyBJbnRlcm5hbCBzaXplIGNvdW50ZXIKK3dpcmUJCWFkcl9pbmN3Oword2lyZQkJYWRyX2luY2I7Cit3aXJlCQlzaXpfZGVjOword2lyZQkJbXdlOwkJCS8vIE1lbW9yeSBXcml0ZSBlbmFibGUKK3dpcmUJCW1yZTsJCQkvLyBNZW1vcnkgUmVhZCBlbmFibGUKK3JlZwkJbXdlX3I7CityZWcJCXNpemRfaXNfemVybzsJCS8vIEluZGljYXRlcyB3aGVuIGFsbCBieXRlcyBoYXZlIGJlZW4KKwkJCQkJLy8gdHJhbnNmZXJyZWQKK3dpcmUJCXNpemRfaXNfemVyb19kOworcmVnCQlpZG1hX2RvbmU7CQkvLyBETUEgdHJhbnNmZXIgaXMgZG9uZQord2lyZQkJc2VuZF9kYXRhOwkJLy8gRW5hYmxlIFVUTUkgVHJhbnNtaXR0ZXIKK3JlZwkJcnhfZGF0YV9kb25lX3I7CityZWcJCXJ4X2RhdGFfdmFsaWRfcjsKK3dpcmUJCWZmX3JlLCBmZl9mdWxsLCBmZl9lbXB0eTsKK3JlZwkJZmZfd2UsIGZmX3dlMTsKK3JlZwkJdHhfZG1hX2VuX3IxOworcmVnCQl0eF9kbWFfZW5fcjI7CityZWcJCXR4X2RtYV9lbl9yMzsKK3JlZwkJc2VuZF9kYXRhX3I7Cit3aXJlCQlmZl9jbHI7CityZWcJWzc6MF0JcnhfY250OworcmVnCVs3OjBdCXJ4X2NudF9yOworcmVnCQllcF9lbXB0eV9yOworcmVnCQllcF9lbXB0eV9sYXRjaGVkOword2lyZQkJZXBfZW1wdHlfaW50OworcmVnCVs2OjBdCWVjOword2lyZQkJZWNfY2xyOworcmVnCQlkcm9wcGVkX2ZyYW1lOworcmVnCVs2OjBdCXJjX2NudDsKK3dpcmUJCXJjX2NscjsKK3JlZwkJZXBfZnVsbF9sYXRjaGVkOword2lyZQkJZXBfZnVsbF9pbnQ7CityZWcJCW1pc2FsaWduZWRfZnJhbWU7CityZWcJCXR4X3ZhbGlkX3I7Cit3aXJlCQl0eF92YWxpZF9lOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRm9yIElOIEJsb2NrIEZyYW1lcyB0cmFuc21pdCBmcmFtZXMgaW4gW2VwX2JmX3NpemVdIGJ5dGUgcXVhbnRpdGllcworLy8KKworYGlmZGVmIFVTQjFfQkZfRU5BQkxFCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCQllYyA8PSAjMSA3J2gwOworCWVsc2UKKwlpZighZXBfYmZfZW4gfCBlY19jbHIpCWVjIDw9ICMxIDcnaDA7CisJZWxzZQorCWlmKG1yZSkJCQllYyA8PSAjMSBlYyArIDcnaDE7CisKK2Fzc2lnbiBlY19jbHIgPSAoZWMgPT0gZXBfYmZfc2l6ZSkgfCB0eF9kbWFfZW47IAorCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighcnN0KQllcF9lbXB0eV9sYXRjaGVkIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKGVjX2NscikJZXBfZW1wdHlfbGF0Y2hlZCA8PSAjMSBlcF9lbXB0eTsKKworYXNzaWduIGVwX2VtcHR5X2ludCA9IGVwX2JmX2VuID8gZXBfZW1wdHlfbGF0Y2hlZCA6IGVwX2VtcHR5OworYGVsc2UKK2Fzc2lnbiBlcF9lbXB0eV9pbnQgPSBlcF9lbXB0eTsKK2BlbmRpZgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEZvciBPVVQgQmxvY2sgRnJhbWVzIGFsd2F5cyBzdG9yZSBpbiBbZXBfYmZfc2l6ZV0gYnl0ZSBjaHVua3MKKy8vIGlmIGZpZm8gY2FuJ3QgYWNjZXB0IFtlcF9iZl9zaXplXSBieXRlcyBqdW5rIHRoZSBlbnRpcmUgW2VwX2JmX3NpemVdCisvLyBieXRlIGZyYW1lCisvLworCitgaWZkZWYgVVNCMV9CRl9FTkFCTEUKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKCFyc3QpCQlyY19jbnQgPD0gIzEgNydoMDsKKwllbHNlCisJaWYoIWVwX2JmX2VuIHwgcmNfY2xyKQlyY19jbnQgPD0gIzEgNydoMDsKKwllbHNlCisJaWYobXdlX3IpCQlyY19jbnQgPD0gIzEgcmNfY250ICsgNydoMTsKKworYXNzaWduIHJjX2NsciA9ICgocmNfY250ID09IGVwX2JmX3NpemUpICYgbXdlX3IpIHwgcnhfZG1hX2VuOyAKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoIXJzdCkJZXBfZnVsbF9sYXRjaGVkIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKHJjX2NscikJZXBfZnVsbF9sYXRjaGVkIDw9ICMxIGVwX2Z1bGw7CisKK2Fzc2lnbiBlcF9mdWxsX2ludCA9IGVwX2JmX2VuID8gZXBfZnVsbF9sYXRjaGVkIDogZXBfZnVsbDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJZHJvcHBlZF9mcmFtZSA8PSAjMSByY19jbHIgJiBlcF9mdWxsICYgZXBfYmZfZW47CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCW1pc2FsaWduZWRfZnJhbWUgPD0gIzEgcnhfZGF0YV9kb25lX3IgJiBlcF9iZl9lbiAmIChyY19jbnQhPTcnZDAwKTsKK2BlbHNlCithc3NpZ24gZXBfZnVsbF9pbnQgPSBlcF9mdWxsOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlkcm9wcGVkX2ZyYW1lIDw9ICMxIDEnYjA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCW1pc2FsaWduZWRfZnJhbWUgPD0gIzEgMSdiMDsKKworYGVuZGlmCisKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2BpZmRlZiBVU0JGX1ZFUkJPU0VfREVCVUcKK2Fsd2F5cyBAKHBvc2VkZ2UgZHJvcHBlZF9mcmFtZSkKKwkkZGlzcGxheSgiV0FSTklORzogQkY6IERyb3BlZCBvbmUgT1VUIGZyYW1lIChubyBzcGFjZSBpbiBGSUZPKSAoJXQpIiwkdGltZSk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgbWlzYWxpZ25lZF9mcmFtZSkKKwkkZGlzcGxheSgiV0FSTklORzogQkY6IFJlY2VpdmVkIG1pc2FsaWduZWQgZnJhbWUgKCV0KSIsJHRpbWUpOworYGVuZGlmCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEZJRk8gaW50ZXJmYWNlCisvLworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwltd2VfciA8PSAjMSByeF9kYXRhX3ZhbGlkOworCithc3NpZ24gbXdlID0gbXdlX3IgJiAhZXBfZnVsbF9pbnQ7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNaXNjIExvZ2ljCisvLworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlyeF9kYXRhX3ZhbGlkX3IgPD0gIzEgcnhfZGF0YV92YWxpZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJcnhfZGF0YV9kb25lX3IgPD0gIzEgcnhfZGF0YV9kb25lOworCisvLyBHZW5lcmF0ZSBvbmUgY3ljbGUgcHVsc2VzIGZvciB0eCBhbmQgcnggZG1hIGVuYWJsZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdHhfZG1hX2VuX3IgPD0gIzEgdHhfZG1hX2VuOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl0eF9kbWFfZW5fcjEgPD0gdHhfZG1hX2VuX3I7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXR4X2RtYV9lbl9yMiA8PSB0eF9kbWFfZW5fcjE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXR4X2RtYV9lbl9yMyA8PSB0eF9kbWFfZW5fcjI7CisKKy8vIERNQSBEb25lIEluZGljYXRvcgorYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWRtYV9kb25lIDw9ICMxIChyeF9kYXRhX2RvbmVfciB8IHNpemRfaXNfemVyb19kIHwgZXBfZW1wdHlfaW50KTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFJYIFNpemUgQ291bnRlcgorLy8KKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQlyeF9jbnRfciA8PSAjMSA4J2gwMDsKKwllbHNlCisJaWYocnhfZGF0YV9kb25lX3IpCQlyeF9jbnRfciA8PSAjMSA4J2gwMDsKKwllbHNlCisJaWYocnhfZGF0YV92YWxpZCkJCXJ4X2NudF9yIDw9ICMxIHJ4X2NudF9yICsgOCdoMDE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQlyeF9jbnQgPD0gIzEgOCdoMDA7CisJZWxzZQorCWlmKHJ4X2RhdGFfZG9uZV9yKQlyeF9jbnQgPD0gIzEgcnhfY250X3I7CisKK2Fzc2lnbiByeF9kb25lID0gcnhfZGF0YV9kb25lX3I7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBUcmFuc21pdCBTaXplIENvdW50ZXIgKGNvdW50aW5nIGJhY2t3YXJkIGZyb20gaW5wdXQgc2l6ZSkKKy8vIEZvciBNQVggcGFja2V0IHNpemUKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJc2l6ZF9jIDw9ICMxIDknaDFmZjsKKwllbHNlCisJaWYodHhfZG1hX2VuKQkJCXNpemRfYyA8PSAjMSBzaXplOworCWVsc2UKKwlpZihzaXpfZGVjKQkJCXNpemRfYyA8PSAjMSBzaXpkX2MgLSA5J2gxOworCithc3NpZ24gc2l6X2RlYyA9ICh0eF9kbWFfZW5fciB8IHR4X2RtYV9lbl9yMSB8IHJkX25leHQpICYgIXNpemRfaXNfemVyb19kOworCithc3NpZ24gc2l6ZF9pc196ZXJvX2QgPSBzaXpkX2MgPT0gOSdoMDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJc2l6ZF9pc196ZXJvIDw9ICMxIHNpemRfaXNfemVyb19kOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVFggTG9naWMKKy8vCisKK2Fzc2lnbiB0eF9idXN5ID0gc2VuZF9kYXRhIHwgdHhfZG1hX2VuX3IgfCB0eF9kbWFfZW47CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXR4X3ZhbGlkX3IgPD0gIzEgdHhfdmFsaWQ7CisKK2Fzc2lnbiB0eF92YWxpZF9lID0gdHhfdmFsaWRfciAmICF0eF92YWxpZDsKKworLy8gU2luY2Ugd2UgYXJlIHByZWZldGNoaW5nIHR3byBlbnRyaWVzIGluIHRvIG91ciBmYXN0IGZpZm8sIHdlCisvLyBuZWVkIHRvIGtub3cgd2hlbiBleGFjdGx5IGVwX2VtcHR5IHdhcyBhc3NlcnRlZCwgYXMgd2UgbWlnaHQKKy8vIG9ubHkgbmVlZCAxIG9yIDIgYnl0ZXMuIFRoaXMgaXMgZm9yIGVwX2VtcHR5X3IKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQkJZXBfZW1wdHlfciA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZighdHhfdmFsaWQpCQkJCWVwX2VtcHR5X3IgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYodHhfZG1hX2VuX3IyKQkJCWVwX2VtcHR5X3IgPD0gIzEgZXBfZW1wdHlfaW50OworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCQlzZW5kX2RhdGFfciA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZigodHhfZG1hX2VuX3IgJiAhZXBfZW1wdHlfaW50KSkJCXNlbmRfZGF0YV9yIDw9ICMxIDEnYjE7CisJZWxzZQorCWlmKHJkX25leHQgJiAoc2l6ZF9pc196ZXJvX2QgfCAoZXBfZW1wdHlfaW50ICYgIXNpemRfaXNfemVyb19kKSkgKQorCQkJCQkJc2VuZF9kYXRhX3IgPD0gIzEgMSdiMDsKKworYXNzaWduIHNlbmRfZGF0YSA9IChzZW5kX2RhdGFfciAmICFlcF9lbXB0eV9yICYgCisJCSEoc2l6ZF9pc196ZXJvICYgc2l6ZT09OSdoMDEpKSB8IHR4X2RtYV9lbl9yMTsKKworYXNzaWduIG1yZSA9ICh0eF9kbWFfZW5fcjEgfCB0eF9kbWFfZW5fciB8IHJkX25leHQpICYKKwkJIXNpemRfaXNfemVyb19kICYgIWVwX2VtcHR5X2ludCAmIChzZW5kX2RhdGEgfCB0eF9kbWFfZW5fcjEgfCB0eF9kbWFfZW5fcik7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWZmX3dlMSA8PSBtcmU7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWZmX3dlIDw9IGZmX3dlMTsKKworYXNzaWduIGZmX3JlID0gcmRfbmV4dDsKKworYXNzaWduIGZmX2NsciA9ICF0eF92YWxpZDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIElETUEgZmFzdCBwcmVmZXRjaCBmaWZvCisvLworCisvLyB0eCBmaWZvCit1c2IxZF9maWZvMiBmZigKKwkuY2xrKAkJY2xrCQkpLAorCS5yc3QoCQlyc3QJCSksCisJLmNscigJCWZmX2NscgkJKSwKKwkuZGluKAkJdHhfZGF0YV9zdF9pCSksCisJLndlKAkJZmZfd2UJCSksCisJLmRvdXQoCQl0eF9kYXRhX3N0X28JKSwKKwkucmUoCQlmZl9yZQkJKQorCSk7CisKK2VuZG1vZHVsZQorCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9wYS52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3BhLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2JiNzBkZQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9wYS52CkBAIC0wLDAgKzEsMzMyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUGFja2V0IEFzc2VtYmxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBc3NlbWJsZXMgVG9rZW4gYW5kIERhdGEgVVNCIHBhY2tldHMgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2IxX2Z1bmN0Ly8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2IxX3BhLnYsdiAxLjEuMS4xIDIwMDItMDktMTkgMTI6MDc6MTMgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMi0wOS0xOSAxMjowNzoxMyAkCisvLyAgJFJldmlzaW9uOiAxLjEuMS4xICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vCisvLworLy8KKy8vCisvLworLy8KKworYGluY2x1ZGUgInVzYjFkX2RlZmluZXMudiIKKworbW9kdWxlIHVzYjFkX3BhKAljbGssIHJzdCwKKworCQkvLyBVVE1JIFRYIEkvRgorCQl0eF9kYXRhLCB0eF92YWxpZCwgdHhfdmFsaWRfbGFzdCwgdHhfcmVhZHksCisJCXR4X2ZpcnN0LAorCisJCS8vIFByb3RvY29sIEVuZ2luZSBJbnRlcmZhY2UKKwkJc2VuZF90b2tlbiwgdG9rZW5fcGlkX3NlbCwKKwkJc2VuZF9kYXRhLCBkYXRhX3BpZF9zZWwsCisKKwkJLy8gSURNQSBJbnRlcmZhY2UKKwkJdHhfZGF0YV9zdCwgcmRfbmV4dCwKKworCQllcF9lbXB0eQorCQkpOworCitpbnB1dAkJY2xrLCByc3Q7CisKKy8vIFVUTUkgVFggSW50ZXJmYWNlCitvdXRwdXQJWzc6MF0JdHhfZGF0YTsKK291dHB1dAkJdHhfdmFsaWQ7CitvdXRwdXQJCXR4X3ZhbGlkX2xhc3Q7CitpbnB1dAkJdHhfcmVhZHk7CitvdXRwdXQJCXR4X2ZpcnN0OworCisvLyBQcm90b2NvbCBFbmdpbmUgSW50ZXJmYWNlCitpbnB1dAkJc2VuZF90b2tlbjsKK2lucHV0CVsxOjBdCXRva2VuX3BpZF9zZWw7CitpbnB1dAkJc2VuZF9kYXRhOworaW5wdXQJWzE6MF0JZGF0YV9waWRfc2VsOworCisvLyBJRE1BIEludGVyZmFjZQoraW5wdXQJWzc6MF0JdHhfZGF0YV9zdDsKK291dHB1dAkJcmRfbmV4dDsKKworaW5wdXQJCWVwX2VtcHR5OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTG9jYWwgV2lyZXMgYW5kIFJlZ2lzdGVycworLy8KKworcGFyYW1ldGVyCVszOjBdCS8vIHN5bm9wc3lzIGVudW0gc3RhdGUKKwkJSURMRSAgID0gNCdiMDAwMSwKKwkJREFUQSAgID0gNCdiMDAxMCwKKwkJQ1JDMSAgID0gNCdiMDEwMCwKKwkJQ1JDMiAgID0gNCdiMTAwMDsKKworcmVnCVszOjBdCS8qIHN5bm9wc3lzIGVudW0gc3RhdGUgKi8gc3RhdGUsIG5leHRfc3RhdGU7CisvLyBzeW5vcHN5cyBzdGF0ZV92ZWN0b3Igc3RhdGUKKworcmVnCQlsYXN0OworcmVnCQlyZF9uZXh0OworCityZWcJWzc6MF0JdG9rZW5fcGlkLCBkYXRhX3BpZDsJLy8gUElEcyBmcm9tIHNlbGVjdG9ycworcmVnCVs3OjBdCXR4X2RhdGFfZDsKK3JlZwlbNzowXQl0eF9kYXRhX2RhdGE7CityZWcJCWRzZWw7CityZWcJCXR4X3ZhbGlkX2Q7CityZWcJCXNlbmRfdG9rZW5fcjsKK3JlZwlbNzowXQl0eF9zcGVjX2RhdGE7CityZWcJCWNyY19zZWwxLCBjcmNfc2VsMjsKK3JlZwkJdHhfZmlyc3RfcjsKK3JlZwkJc2VuZF9kYXRhX3I7Cit3aXJlCQljcmMxNl9jbHI7CityZWcJWzE1OjBdCWNyYzE2Oword2lyZQlbMTU6MF0JY3JjMTZfbmV4dDsKK3dpcmUJWzE1OjBdCWNyYzE2X3JldjsKK3JlZwkJY3JjMTZfYWRkOworcmVnCQlzZW5kX2RhdGFfcjI7CityZWcJCXR4X3ZhbGlkX3I7CityZWcJCXR4X3ZhbGlkX3IxOworCit3aXJlCQl6ZXJvX2xlbmd0aDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1pc2MgTG9naWMKKy8vCityZWcJCXplcm9fbGVuZ3RoX3I7Cithc3NpZ24JCXplcm9fbGVuZ3RoID0gZXBfZW1wdHk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCXplcm9fbGVuZ3RoX3IgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYobGFzdCkJemVyb19sZW5ndGhfciA8PSAjMSAxJ2IwOworCWVsc2UKKwlpZihjcmMxNl9jbHIpCXplcm9fbGVuZ3RoX3IgPD0gIzEgemVyb19sZW5ndGg7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXR4X3ZhbGlkX3IxIDw9ICMxIHR4X3ZhbGlkOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwl0eF92YWxpZF9yIDw9ICMxIHR4X3ZhbGlkX3IxOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQlzZW5kX3Rva2VuX3IgPD0gIzEgMSdiMDsKKwllbHNlCisJaWYoc2VuZF90b2tlbikJc2VuZF90b2tlbl9yIDw9ICMxIDEnYjE7CisJZWxzZQorCWlmKHR4X3JlYWR5KQlzZW5kX3Rva2VuX3IgPD0gIzEgMSdiMDsKKworLy8gUElEIFNlbGVjdAorYWx3YXlzIEAodG9rZW5fcGlkX3NlbCkKKwljYXNlKHRva2VuX3BpZF9zZWwpCQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIDInZDA6IHRva2VuX3BpZCA9IHsgIH5gVVNCRl9UX1BJRF9BQ0ssICAgYFVTQkZfVF9QSURfQUNLfTsKKwkgICAyJ2QxOiB0b2tlbl9waWQgPSB7IH5gVVNCRl9UX1BJRF9OQUNLLCAgYFVTQkZfVF9QSURfTkFDS307CisJICAgMidkMjogdG9rZW5fcGlkID0ge35gVVNCRl9UX1BJRF9TVEFMTCwgYFVTQkZfVF9QSURfU1RBTEx9OworCSAgIDInZDM6IHRva2VuX3BpZCA9IHsgfmBVU0JGX1RfUElEX05ZRVQsICBgVVNCRl9UX1BJRF9OWUVUfTsKKwllbmRjYXNlCisKK2Fsd2F5cyBAKGRhdGFfcGlkX3NlbCkKKwljYXNlKGRhdGFfcGlkX3NlbCkJCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgMidkMDogZGF0YV9waWQgPSB7IH5gVVNCRl9UX1BJRF9EQVRBMCwgYFVTQkZfVF9QSURfREFUQTB9OworCSAgIDInZDE6IGRhdGFfcGlkID0geyB+YFVTQkZfVF9QSURfREFUQTEsIGBVU0JGX1RfUElEX0RBVEExfTsKKwkgICAyJ2QyOiBkYXRhX3BpZCA9IHsgfmBVU0JGX1RfUElEX0RBVEEyLCBgVVNCRl9UX1BJRF9EQVRBMn07CisJICAgMidkMzogZGF0YV9waWQgPSB7IH5gVVNCRl9UX1BJRF9NREFUQSwgYFVTQkZfVF9QSURfTURBVEF9OworCWVuZGNhc2UKKworLy8gRGF0YSBwYXRoIE11eGVzCisKK2Fsd2F5cyBAKHNlbmRfdG9rZW4gb3Igc2VuZF90b2tlbl9yIG9yIHRva2VuX3BpZCBvciB0eF9kYXRhX2RhdGEpCisJaWYoc2VuZF90b2tlbiB8IHNlbmRfdG9rZW5fcikJdHhfZGF0YV9kID0gdG9rZW5fcGlkOworCWVsc2UJCQkJdHhfZGF0YV9kID0gdHhfZGF0YV9kYXRhOworCithbHdheXMgQChkc2VsIG9yIHR4X2RhdGFfc3Qgb3IgdHhfc3BlY19kYXRhKQorCWlmKGRzZWwpCXR4X2RhdGFfZGF0YSA9IHR4X3NwZWNfZGF0YTsKKwllbHNlCQl0eF9kYXRhX2RhdGEgPSB0eF9kYXRhX3N0OworCithbHdheXMgQChjcmNfc2VsMSBvciBjcmNfc2VsMiBvciBkYXRhX3BpZCBvciBjcmMxNl9yZXYpCisJaWYoIWNyY19zZWwxICYgIWNyY19zZWwyKQl0eF9zcGVjX2RhdGEgPSBkYXRhX3BpZDsKKwllbHNlCisJaWYoY3JjX3NlbDEpCQkJdHhfc3BlY19kYXRhID0gY3JjMTZfcmV2WzE1OjhdOwkvLyBDUkMgMQorCWVsc2UJCQkJdHhfc3BlY19kYXRhID0gY3JjMTZfcmV2Wzc6MF07CS8vIENSQyAyCisKK2Fzc2lnbiB0eF9kYXRhID0gdHhfZGF0YV9kOworCisvLyBUWCBWYWxpZCBhc3NpZ25tZW50Cithc3NpZ24gdHhfdmFsaWRfbGFzdCA9IHNlbmRfdG9rZW4gfCBsYXN0OworYXNzaWduIHR4X3ZhbGlkID0gdHhfdmFsaWRfZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdHhfZmlyc3RfciA8PSAjMSBzZW5kX3Rva2VuIHwgc2VuZF9kYXRhOworCithc3NpZ24gdHhfZmlyc3QgPSAoc2VuZF90b2tlbiB8IHNlbmRfZGF0YSkgJiAhIHR4X2ZpcnN0X3I7CisKKy8vIENSQyBMb2dpYworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJc2VuZF9kYXRhX3IgPD0gIzEgc2VuZF9kYXRhOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlzZW5kX2RhdGFfcjIgPD0gIzEgc2VuZF9kYXRhX3I7CisKK2Fzc2lnbiBjcmMxNl9jbHIgPSBzZW5kX2RhdGEgJiAhc2VuZF9kYXRhX3I7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWNyYzE2X2FkZCA8PSAjMSAhemVyb19sZW5ndGhfciAmCisJCQkoKHNlbmRfZGF0YV9yICYgIXNlbmRfZGF0YV9yMikgfCAocmRfbmV4dCAmICFjcmNfc2VsMSkpOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihjcmMxNl9jbHIpCQljcmMxNiA8PSAjMSAxNidoZmZmZjsKKwllbHNlCisJaWYoY3JjMTZfYWRkKQkJY3JjMTYgPD0gIzEgY3JjMTZfbmV4dDsKKwordXNiMWRfY3JjMTYgdTEoCisJLmNyY19pbigJY3JjMTYJCSksCisJLmRpbigJe3R4X2RhdGFfc3RbMF0sIHR4X2RhdGFfc3RbMV0sCisJCXR4X2RhdGFfc3RbMl0sIHR4X2RhdGFfc3RbM10sCisJCXR4X2RhdGFfc3RbNF0sIHR4X2RhdGFfc3RbNV0sCisJCXR4X2RhdGFfc3RbNl0sIHR4X2RhdGFfc3RbN119CSksCisJLmNyY19vdXQoCWNyYzE2X25leHQJCSkgKTsKKworYXNzaWduIGNyYzE2X3JldlsxNV0gPSB+Y3JjMTZbOF07Cithc3NpZ24gY3JjMTZfcmV2WzE0XSA9IH5jcmMxNls5XTsKK2Fzc2lnbiBjcmMxNl9yZXZbMTNdID0gfmNyYzE2WzEwXTsKK2Fzc2lnbiBjcmMxNl9yZXZbMTJdID0gfmNyYzE2WzExXTsKK2Fzc2lnbiBjcmMxNl9yZXZbMTFdID0gfmNyYzE2WzEyXTsKK2Fzc2lnbiBjcmMxNl9yZXZbMTBdID0gfmNyYzE2WzEzXTsKK2Fzc2lnbiBjcmMxNl9yZXZbOV0gID0gfmNyYzE2WzE0XTsKK2Fzc2lnbiBjcmMxNl9yZXZbOF0gID0gfmNyYzE2WzE1XTsKK2Fzc2lnbiBjcmMxNl9yZXZbN10gID0gfmNyYzE2WzBdOworYXNzaWduIGNyYzE2X3Jldls2XSAgPSB+Y3JjMTZbMV07Cithc3NpZ24gY3JjMTZfcmV2WzVdICA9IH5jcmMxNlsyXTsKK2Fzc2lnbiBjcmMxNl9yZXZbNF0gID0gfmNyYzE2WzNdOworYXNzaWduIGNyYzE2X3JldlszXSAgPSB+Y3JjMTZbNF07Cithc3NpZ24gY3JjMTZfcmV2WzJdICA9IH5jcmMxNls1XTsKK2Fzc2lnbiBjcmMxNl9yZXZbMV0gID0gfmNyYzE2WzZdOworYXNzaWduIGNyYzE2X3JldlswXSAgPSB+Y3JjMTZbN107CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBUcmFuc21pdC9FbmNvZGUgc3RhdGUgbWFjaGluZQorLy8KKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJc3RhdGUgPD0gIzEgSURMRTsKKwllbHNlCQlzdGF0ZSA8PSAjMSBuZXh0X3N0YXRlOworCithbHdheXMgQChzdGF0ZSBvciBzZW5kX2RhdGEgb3IgdHhfcmVhZHkgb3IgdHhfdmFsaWRfciBvciB6ZXJvX2xlbmd0aCkKKyAgIGJlZ2luCisJbmV4dF9zdGF0ZSA9IHN0YXRlOwkvLyBEZWZhdWx0IGRvbid0IGNoYW5nZSBjdXJyZW50IHN0YXRlCisJdHhfdmFsaWRfZCA9IDEnYjA7CisJZHNlbCA9IDEnYjA7CisJcmRfbmV4dCA9IDEnYjA7CisJbGFzdCA9IDEnYjA7CisJY3JjX3NlbDEgPSAxJ2IwOworCWNyY19zZWwyID0gMSdiMDsKKwljYXNlKHN0YXRlKQkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICBJRExFOgorCQkgICBiZWdpbgorCQkJaWYoemVyb19sZW5ndGggJiBzZW5kX2RhdGEpCisJCQkgICBiZWdpbgorCQkJCXR4X3ZhbGlkX2QgPSAxJ2IxOworCQkJCWRzZWwgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBDUkMxOworCQkJICAgZW5kCisJCQllbHNlCisJCQlpZihzZW5kX2RhdGEpCQkvLyBTZW5kIERBVEEgcGFja2V0CisJCQkgICBiZWdpbgorCQkJCXR4X3ZhbGlkX2QgPSAxJ2IxOworCQkJCWRzZWwgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBEQVRBOworCQkJICAgZW5kCisJCSAgIGVuZAorCSAgIERBVEE6CisJCSAgIGJlZ2luCisJCQlpZih0eF9yZWFkeSAmIHR4X3ZhbGlkX3IpCisJCQkJcmRfbmV4dCA9IDEnYjE7CisKKwkJCXR4X3ZhbGlkX2QgPSAxJ2IxOworCQkJaWYoIXNlbmRfZGF0YSAmIHR4X3JlYWR5ICYgdHhfdmFsaWRfcikKKwkJCSAgIGJlZ2luCisJCQkJZHNlbCA9IDEnYjE7CisJCQkJY3JjX3NlbDEgPSAxJ2IxOworCQkJCW5leHRfc3RhdGUgPSBDUkMxOworCQkJICAgZW5kCisJCSAgIGVuZAorCSAgIENSQzE6CisJCSAgIGJlZ2luCisJCQlkc2VsID0gMSdiMTsKKwkJCXR4X3ZhbGlkX2QgPSAxJ2IxOworCQkJaWYodHhfcmVhZHkpCisJCQkgICBiZWdpbgorCQkJCWxhc3QgPSAxJ2IxOworCQkJCWNyY19zZWwyID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gQ1JDMjsKKwkJCSAgIGVuZAorCQkJZWxzZQorCQkJICAgYmVnaW4KKwkJCQl0eF92YWxpZF9kID0gMSdiMTsKKwkJCQljcmNfc2VsMSA9IDEnYjE7CisJCQkgICBlbmQKKworCQkgICBlbmQKKwkgICBDUkMyOgorCQkgICBiZWdpbgorCQkJZHNlbCA9IDEnYjE7CisJCQljcmNfc2VsMiA9IDEnYjE7CisJCQlpZih0eF9yZWFkeSkKKwkJCSAgIGJlZ2luCisJCQkJbmV4dF9zdGF0ZSA9IElETEU7CisJCQkgICBlbmQKKwkJCWVsc2UKKwkJCSAgIGJlZ2luCisJCQkJbGFzdCA9IDEnYjE7CisJCQkgICBlbmQKKworCQkgICBlbmQKKwllbmRjYXNlCisgICBlbmQKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9wZC52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3BkLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2IyNTcyYgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9wZC52CkBAIC0wLDAgKzEsMzk4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUGFja2V0IERpc2Fzc2VtYmxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEaXNhc3NlbWJsZXMgVG9rZW4gYW5kIERhdGEgVVNCIHBhY2tldHMgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2IxX2Z1bmN0Ly8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2IxX3BkLnYsdiAxLjIgMjAwMi0wOS0yNSAwNjowNjo0OSBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAyLTA5LTI1IDA2OjA2OjQ5ICQKKy8vICAkUmV2aXNpb246IDEuMiAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMS4xLjEgIDIwMDIvMDkvMTkgMTI6MDc6MTcgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgSW5pdGlhbCBDaGVja2luCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKworYGluY2x1ZGUgInVzYjFkX2RlZmluZXMudiIKKworbW9kdWxlIHVzYjFkX3BkKAljbGssIHJzdCwKKworCQkvLyBVVE1JIFJYIEkvRgorCQlyeF9kYXRhLCByeF92YWxpZCwgcnhfYWN0aXZlLCByeF9lcnIsCisKKwkJLy8gUElEIEluZm9ybWF0aW9uCisJCXBpZF9PVVQsIHBpZF9JTiwgcGlkX1NPRiwgcGlkX1NFVFVQLAorCQlwaWRfREFUQTAsIHBpZF9EQVRBMSwgcGlkX0RBVEEyLCBwaWRfTURBVEEsCisJCXBpZF9BQ0ssIHBpZF9OQUNLLCBwaWRfU1RBTEwsIHBpZF9OWUVULAorCQlwaWRfUFJFLCBwaWRfRVJSLCBwaWRfU1BMSVQsIHBpZF9QSU5HLAorCQlwaWRfY2tzX2VyciwKKworCQkvLyBUb2tlbiBJbmZvcm1hdGlvbgorCQl0b2tlbl9mYWRyLCB0b2tlbl9lbmRwLCB0b2tlbl92YWxpZCwgY3JjNV9lcnIsCisJCWZyYW1lX25vLAorCisJCS8vIFJlY2VpdmUgRGF0YSBPdXRwdXQKKwkJcnhfZGF0YV9zdCwgcnhfZGF0YV92YWxpZCwgcnhfZGF0YV9kb25lLCBjcmMxNl9lcnIsCisKKwkJLy8gTWlzYy4KKwkJc2VxX2VyciwgcnhfYnVzeQorCQkpOworCitpbnB1dAkJY2xrLCByc3Q7CisKKwkJLy9VVE1JIFJYIEludGVyZmFjZQoraW5wdXQJWzc6MF0JcnhfZGF0YTsKK2lucHV0CQlyeF92YWxpZCwgcnhfYWN0aXZlLCByeF9lcnI7CisKKwkJLy8gRGVjb2RlZCBQSURzICh1c2VkIHdoZW4gdG9rZW5fdmFsaWQgaXMgYXNzZXJ0ZWQpCitvdXRwdXQJCXBpZF9PVVQsIHBpZF9JTiwgcGlkX1NPRiwgcGlkX1NFVFVQOworb3V0cHV0CQlwaWRfREFUQTAsIHBpZF9EQVRBMSwgcGlkX0RBVEEyLCBwaWRfTURBVEE7CitvdXRwdXQJCXBpZF9BQ0ssIHBpZF9OQUNLLCBwaWRfU1RBTEwsIHBpZF9OWUVUOworb3V0cHV0CQlwaWRfUFJFLCBwaWRfRVJSLCBwaWRfU1BMSVQsIHBpZF9QSU5HOworb3V0cHV0CQlwaWRfY2tzX2VycjsJCS8vIEluZGljYXRlcyBhIFBJRCBjaGVja3N1bSBlcnJvcgorCisKK291dHB1dAlbNjowXQl0b2tlbl9mYWRyOwkJLy8gRnVuY3Rpb24gYWRkcmVzcyBmcm9tIHRva2VuCitvdXRwdXQJWzM6MF0JdG9rZW5fZW5kcDsJCS8vIEVuZHBvaW50IG51bWJlciBmcm9tIHRva2VuCitvdXRwdXQJCXRva2VuX3ZhbGlkOwkJLy8gVG9rZW4gaXMgdmFsaWQKK291dHB1dAkJY3JjNV9lcnI7CQkvLyBUb2tlbiBjcmM1IGVycm9yCitvdXRwdXQJWzEwOjBdCWZyYW1lX25vOwkJLy8gRnJhbWUgbnVtYmVyIGZvciBTT0YgdG9rZW5zCisKK291dHB1dAlbNzowXQlyeF9kYXRhX3N0OwkJLy8gRGF0YSB0byBtZW1vcnkgc3RvcmUgdW5pdAorb3V0cHV0CQlyeF9kYXRhX3ZhbGlkOwkJLy8gRGF0YSBvbiByeF9kYXRhX3N0IGlzIHZhbGlkCitvdXRwdXQJCXJ4X2RhdGFfZG9uZTsJCS8vIEluZGljYXRlcyBlbmQgb2YgYSB0cmFuc2Zlcgorb3V0cHV0CQljcmMxNl9lcnI7CQkvLyBEYXRhIHBhY2tldCBDUkMgMTYgZXJyb3IKKworb3V0cHV0CQlzZXFfZXJyOwkJLy8gU3RhdGUgTWFjaGluZSBTZXF1ZW5jZSBFcnJvcgorb3V0cHV0CQlyeF9idXN5OwkJLy8gUmVjZWl2aWcgRGF0YSBQYWNrZXQKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIExvY2FsIFdpcmVzIGFuZCBSZWdpc3RlcnMKKy8vCisKK3BhcmFtZXRlcglbMzowXQkvLyBzeW5vcHN5cyBlbnVtIHN0YXRlCisJCUlETEUgICA9IDQnYjAwMDEsCisJCUFDVElWRSA9IDQnYjAwMTAsCisJCVRPS0VOICA9IDQnYjAxMDAsCisJCURBVEEgICA9IDQnYjEwMDA7CisKK3JlZwlbMzowXQkvKiBzeW5vcHN5cyBlbnVtIHN0YXRlICovIHN0YXRlLCBuZXh0X3N0YXRlOworLy8gc3lub3BzeXMgc3RhdGVfdmVjdG9yIHN0YXRlCisKK3JlZwlbNzowXQlwaWQ7CQkJLy8gUGFja2V0IFBESQorcmVnCQlwaWRfbGVfc207CQkvLyBQSUQgTG9hZCBlbmFibGUgZnJvbSBTdGF0ZSBNYWNoaW5lCit3aXJlCQlwaWRfbGRfZW47CQkvLyBFbmFibGUgbG9hZGluZyBvZiBQSUQgKGFsbCBjb25kaXRpb25zKQord2lyZQkJcGlkX2Nrc19lcnI7CQkvLyBJbmRpY2F0ZXMgYSBwaWQgY2hlY2tzdW0gZXJyCisKKwkJLy8gRGVjb2RlZCBQSUQgdmFsdWVzCit3aXJlCQlwaWRfT1VULCBwaWRfSU4sIHBpZF9TT0YsIHBpZF9TRVRVUDsKK3dpcmUJCXBpZF9EQVRBMCwgcGlkX0RBVEExLCBwaWRfREFUQTIsIHBpZF9NREFUQTsKK3dpcmUJCXBpZF9BQ0ssIHBpZF9OQUNLLCBwaWRfU1RBTEwsIHBpZF9OWUVUOword2lyZQkJcGlkX1BSRSwgcGlkX0VSUiwgcGlkX1NQTElULCBwaWRfUElORywgcGlkX1JFUzsKK3dpcmUJCXBpZF9UT0tFTjsJCS8vIEFsbCBUT0tFTiBwYWNrZXQgdGhhdCB3ZSByZWNvZ25pemUKK3dpcmUJCXBpZF9EQVRBOwkJLy8gQWxsIERBVEEgcGFja2V0cyB0aGF0IHdlIHJlY29nbml6ZQorCityZWcJWzc6MF0JdG9rZW4wLCB0b2tlbjE7CQkvLyBUb2tlbiBSZWdpc3RlcnMKK3JlZwkJdG9rZW5fbGVfMSwgdG9rZW5fbGVfMjsJLy8gTGF0Y2ggZW5hYmxlcyBmb3IgdG9rZW4gc3RvcmFnZSByZWdpc3RlcnMKK3dpcmUJWzQ6MF0JdG9rZW5fY3JjNTsKKworcmVnCVs3OjBdCWQwLCBkMSwgZDI7CQkvLyBEYXRhIHBhdGggZGVsYXkgbGluZSAodXNlZCB0byBmaWx0ZXIgb3V0IGNyY3MpCityZWcJCWRhdGFfdmFsaWRfZDsJCS8vIERhdGEgVmFsaWQgb3V0cHV0IGZyb20gU3RhdGUgTWFjaGluZQorcmVnCQlkYXRhX2RvbmU7CQkvLyBEYXRhIGN5Y2xlIGNvbXBsZXRlIG91dHB1dCBmcm9tIFN0YXRlIE1hY2hpbmUKK3JlZwkJZGF0YV92YWxpZDA7IAkJLy8gRGF0YSB2YWxpZCBkZWxheSBsaW5lCityZWcJCXJ4djE7CityZWcJCXJ4djI7CisKK3JlZwkJc2VxX2VycjsJCS8vIFN0YXRlIG1hY2hpbmUgc2VxdWVuY2UgZXJyb3IKKworcmVnCQlwaWRfYWNrOworCityZWcJCXRva2VuX3ZhbGlkX3IxOworcmVnCQl0b2tlbl92YWxpZF9zdHIxLCB0b2tlbl92YWxpZF9zdHIyOworCityZWcJCXJ4X2FjdGl2ZV9yOworCit3aXJlCVs0OjBdCWNyYzVfb3V0Oword2lyZQlbNDowXQljcmM1X291dDI7Cit3aXJlCQljcmMxNl9jbHI7CityZWcJWzE1OjBdCWNyYzE2X3N1bTsKK3dpcmUJWzE1OjBdCWNyYzE2X291dDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1pc2MgTG9naWMKKy8vCisKK3JlZwlyeF9idXN5LCByeF9idXN5X2Q7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJcnhfYnVzeV9kIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKHJ4X3ZhbGlkICYgKHN0YXRlID09IERBVEEpKQlyeF9idXN5X2QgPD0gIzEgMSdiMTsKKwllbHNlCisJaWYoc3RhdGUgIT0gREFUQSkJCXJ4X2J1c3lfZCA8PSAjMSAxJ2IwOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlyeF9idXN5IDw9ICMxIHJ4X2J1c3lfZDsKKworLy8gUElEIERlY29kaW5nIExvZ2ljCithc3NpZ24gcGlkX2xkX2VuID0gcGlkX2xlX3NtICYgcnhfYWN0aXZlICYgcnhfdmFsaWQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQlwaWQgPD0gIzEgOCdoZjA7CisJZWxzZQorCWlmKHBpZF9sZF9lbikJCXBpZCA8PSAjMSByeF9kYXRhOworCithc3NpZ24JcGlkX2Nrc19lcnIgPSAocGlkWzM6MF0gIT0gfnBpZFs3OjRdKTsKKworYXNzaWduCXBpZF9PVVQgICA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX09VVDsKK2Fzc2lnbglwaWRfSU4gICAgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9JTjsKK2Fzc2lnbglwaWRfU09GICAgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9TT0Y7Cithc3NpZ24JcGlkX1NFVFVQID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfU0VUVVA7Cithc3NpZ24JcGlkX0RBVEEwID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfREFUQTA7Cithc3NpZ24JcGlkX0RBVEExID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfREFUQTE7Cithc3NpZ24JcGlkX0RBVEEyID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfREFUQTI7Cithc3NpZ24JcGlkX01EQVRBID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfTURBVEE7Cithc3NpZ24JcGlkX0FDSyAgID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfQUNLOworYXNzaWduCXBpZF9OQUNLICA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX05BQ0s7Cithc3NpZ24JcGlkX1NUQUxMID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfU1RBTEw7Cithc3NpZ24JcGlkX05ZRVQgID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfTllFVDsKK2Fzc2lnbglwaWRfUFJFICAgPSBwaWRbMzowXSA9PSBgVVNCRl9UX1BJRF9QUkU7Cithc3NpZ24JcGlkX0VSUiAgID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfRVJSOworYXNzaWduCXBpZF9TUExJVCA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX1NQTElUOworYXNzaWduCXBpZF9QSU5HICA9IHBpZFszOjBdID09IGBVU0JGX1RfUElEX1BJTkc7Cithc3NpZ24JcGlkX1JFUyAgID0gcGlkWzM6MF0gPT0gYFVTQkZfVF9QSURfUkVTOworCithc3NpZ24JcGlkX1RPS0VOID0gcGlkX09VVCB8IHBpZF9JTiB8IHBpZF9TT0YgfCBwaWRfU0VUVVAgfCBwaWRfUElORzsKK2Fzc2lnbglwaWRfREFUQSA9IHBpZF9EQVRBMCB8IHBpZF9EQVRBMSB8IHBpZF9EQVRBMiB8IHBpZF9NREFUQTsKKworLy8gVG9rZW4gRGVjb2RpbmcgTE9HSUMKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKHRva2VuX2xlXzEpCXRva2VuMCA8PSAjMSByeF9kYXRhOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZih0b2tlbl9sZV8yKQl0b2tlbjEgPD0gIzEgcnhfZGF0YTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdG9rZW5fdmFsaWRfcjEgPD0gIzEgdG9rZW5fbGVfMjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdG9rZW5fdmFsaWRfc3RyMSA8PSAjMSB0b2tlbl92YWxpZF9yMSB8IHBpZF9hY2s7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXRva2VuX3ZhbGlkX3N0cjIgPD0gIzEgdG9rZW5fdmFsaWRfc3RyMTsKKworYXNzaWduIHRva2VuX3ZhbGlkID0gdG9rZW5fdmFsaWRfc3RyMTsKKworLy8gQ1JDIDUgc2hvdWxkIHBlcmZvcm0gdGhlIGNoZWNrIGluIG9uZSBjeWNsZSAoZmxvdyB0aHJvdWdoIGxvZ2ljKQorLy8gMTEgYml0cyBhbmQgY3JjNSBpbnB1dCwgMSBiaXQgb3V0cHV0Cithc3NpZ24gY3JjNV9lcnIgPSB0b2tlbl92YWxpZCAmIChjcmM1X291dDIgIT0gdG9rZW5fY3JjNSk7CisKK3VzYjFkX2NyYzUgdTAoCisJLmNyY19pbigJNSdoMWYJCQkpLAorCS5kaW4oCXsJdG9rZW5fZmFkclswXSwKKwkJCXRva2VuX2ZhZHJbMV0sCisJCQl0b2tlbl9mYWRyWzJdLAorCQkJdG9rZW5fZmFkclszXSwKKwkJCXRva2VuX2ZhZHJbNF0sCisJCQl0b2tlbl9mYWRyWzVdLAorCQkJdG9rZW5fZmFkcls2XSwKKwkJCXRva2VuX2VuZHBbMF0sCisJCQl0b2tlbl9lbmRwWzFdLAorCQkJdG9rZW5fZW5kcFsyXSwKKwkJCXRva2VuX2VuZHBbM10gICB9CSksCisJLmNyY19vdXQoCWNyYzVfb3V0CQkpICk7CisKKy8vIEludmVydCBhbmQgcmV2ZXJzZSByZXN1bHQgYml0cworYXNzaWduCWNyYzVfb3V0MiA9IH57Y3JjNV9vdXRbMF0sIGNyYzVfb3V0WzFdLCBjcmM1X291dFsyXSwgY3JjNV9vdXRbM10sCisJCQljcmM1X291dFs0XX07CisKK2Fzc2lnbiBmcmFtZV9ubyA9IHsgdG9rZW4xWzI6MF0sIHRva2VuMH07Cithc3NpZ24gdG9rZW5fZmFkciA9IHRva2VuMFs2OjBdOworYXNzaWduIHRva2VuX2VuZHAgPSB7dG9rZW4xWzI6MF0sIHRva2VuMFs3XX07Cithc3NpZ24gdG9rZW5fY3JjNSA9IHRva2VuMVs3OjNdOworCisvLyBEYXRhIHJlY2VpdmluZyBsb2dpYworLy8gYnVpbGQgYSBkZWxheSBsaW5lIGFuZCBzdG9wIHdoZW4gd2UgYXJlIGFib3V0IHRvIGdldCBjcmMKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQlyeHYxIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKGRhdGFfdmFsaWRfZCkJcnh2MSA8PSAjMSAxJ2IxOworCWVsc2UKKwlpZihkYXRhX2RvbmUpCQlyeHYxIDw9ICMxIDEnYjA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQlyeHYyIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKHJ4djEgJiBkYXRhX3ZhbGlkX2QpCXJ4djIgPD0gIzEgMSdiMTsKKwllbHNlCisJaWYoZGF0YV9kb25lKQkJcnh2MiA8PSAjMSAxJ2IwOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlkYXRhX3ZhbGlkMCA8PSAjMSByeHYyICYgZGF0YV92YWxpZF9kOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKyAgIGJlZ2luCisJaWYoZGF0YV92YWxpZF9kKQlkMCA8PSAjMSByeF9kYXRhOworCWlmKGRhdGFfdmFsaWRfZCkJZDEgPD0gIzEgZDA7CisJaWYoZGF0YV92YWxpZF9kKQlkMiA8PSAjMSBkMTsKKyAgIGVuZAorCithc3NpZ24gcnhfZGF0YV9zdCA9IGQyOworYXNzaWduIHJ4X2RhdGFfdmFsaWQgPSBkYXRhX3ZhbGlkMDsKK2Fzc2lnbiByeF9kYXRhX2RvbmUgPSBkYXRhX2RvbmU7CisKKy8vIGNyYzE2IGFjY3VtdWxhdGVzIHJ4X2RhdGEgYXMgbG9uZyBhcyBkYXRhX3ZhbGlkX2QgaXMgYXNzZXJ0ZWQuCisvLyB3aGVuIGRhdGFfZG9uZSBpcyBhc3NlcnRlZCwgY3JjMTYgcmVwb3J0cyBzdGF0dXMsIGFuZCByZXNldHMgaXRzZWxmCisvLyBuZXh0IGN5Y2xlLgorYWx3YXlzIEAocG9zZWRnZSBjbGspCisJcnhfYWN0aXZlX3IgPD0gIzEgcnhfYWN0aXZlOworCithc3NpZ24gY3JjMTZfY2xyID0gcnhfYWN0aXZlICYgIXJ4X2FjdGl2ZV9yOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihjcmMxNl9jbHIpCQljcmMxNl9zdW0gPD0gIzEgMTYnaGZmZmY7CisJZWxzZQorCWlmKGRhdGFfdmFsaWRfZCkJY3JjMTZfc3VtIDw9ICMxIGNyYzE2X291dDsKKwordXNiMWRfY3JjMTYgdTEoCisJLmNyY19pbigJY3JjMTZfc3VtCQkpLAorCS5kaW4oCXtyeF9kYXRhWzBdLCByeF9kYXRhWzFdLCByeF9kYXRhWzJdLCByeF9kYXRhWzNdLAorCQlyeF9kYXRhWzRdLCByeF9kYXRhWzVdLCByeF9kYXRhWzZdLCByeF9kYXRhWzddfQkpLAorCS5jcmNfb3V0KAljcmMxNl9vdXQJCSkgKTsKKworLy8gVmVyaWZ5IGFnYWluc3QgcG9seW5vbWlhbCAKK2Fzc2lnbiBjcmMxNl9lcnIgPSBkYXRhX2RvbmUgJiAoY3JjMTZfc3VtICE9IDE2J2g4MDBkKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFJlY2VpdmUvRGVjb2RlIFN0YXRlIG1hY2hpbmUKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCXN0YXRlIDw9ICMxIElETEU7CisJZWxzZQkJc3RhdGUgPD0gIzEgbmV4dF9zdGF0ZTsKKworYWx3YXlzIEAoc3RhdGUgb3IgcnhfdmFsaWQgb3IgcnhfYWN0aXZlIG9yIHJ4X2VyciBvciBwaWRfQUNLIG9yIHBpZF9UT0tFTgorCW9yIHBpZF9EQVRBKQorICAgYmVnaW4KKwluZXh0X3N0YXRlID0gc3RhdGU7CS8vIERlZmF1bHQgZG9uJ3QgY2hhbmdlIGN1cnJlbnQgc3RhdGUKKwlwaWRfbGVfc20gPSAxJ2IwOworCXRva2VuX2xlXzEgPSAxJ2IwOworCXRva2VuX2xlXzIgPSAxJ2IwOworCWRhdGFfdmFsaWRfZCA9IDEnYjA7CisJZGF0YV9kb25lID0gMSdiMDsKKwlzZXFfZXJyID0gMSdiMDsKKwlwaWRfYWNrID0gMSdiMDsKKwljYXNlKHN0YXRlKQkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICBJRExFOgorCQkgICBiZWdpbgorCQkJcGlkX2xlX3NtID0gMSdiMTsKKwkJCWlmKHJ4X3ZhbGlkICYgcnhfYWN0aXZlKQluZXh0X3N0YXRlID0gQUNUSVZFOworCQkgICBlbmQKKwkgICBBQ1RJVkU6CisJCSAgIGJlZ2luCisJCQkvLyBSZWNlaXZlZCBhIEFDSyBmcm9tIEhvc3QKKwkJCWlmKHBpZF9BQ0sgJiAhcnhfZXJyKQorCQkJICAgYmVnaW4KKwkJCQlwaWRfYWNrID0gMSdiMTsKKwkJCQlpZighcnhfYWN0aXZlKQluZXh0X3N0YXRlID0gSURMRTsKKwkJCSAgIGVuZAorCQkJZWxzZQorCQkJLy8gUmVjZWl2aW5nIGEgVE9LRU4KKwkJCWlmKHBpZF9UT0tFTiAmIHJ4X3ZhbGlkICYgcnhfYWN0aXZlICYgIXJ4X2VycikKKwkJCSAgIGJlZ2luCisJCQkJdG9rZW5fbGVfMSA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IFRPS0VOOworCQkJICAgZW5kCisJCQllbHNlCisJCQkvLyBSZWNlaXZpbmcgREFUQQorCQkJaWYocGlkX0RBVEEgJiByeF92YWxpZCAmIHJ4X2FjdGl2ZSAmICFyeF9lcnIpCisJCQkgICBiZWdpbgorCQkJCWRhdGFfdmFsaWRfZCA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IERBVEE7CisJCQkgICBlbmQKKwkJCWVsc2UKKwkJCWlmKAkhcnhfYWN0aXZlIHwgcnhfZXJyIHwKKwkJCQkocnhfdmFsaWQgJiAhKHBpZF9UT0tFTiB8IHBpZF9EQVRBKSkgKQkvLyBFUlJPUgorCQkJICAgYmVnaW4KKwkJCQlzZXFfZXJyID0gIXJ4X2VycjsKKwkJCQlpZighcnhfYWN0aXZlKQluZXh0X3N0YXRlID0gSURMRTsKKwkJCSAgIGVuZAorCQkgICBlbmQKKwkgICBUT0tFTjoKKwkJICAgYmVnaW4KKwkJCWlmKHJ4X3ZhbGlkICYgcnhfYWN0aXZlICYgIXJ4X2VycikKKwkJCSAgIGJlZ2luCisJCQkJdG9rZW5fbGVfMiA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IElETEU7CisJCQkgICBlbmQKKwkJCWVsc2UKKwkJCWlmKCFyeF9hY3RpdmUgfCByeF9lcnIpCS8vIEVSUk9SCisJCQkgICBiZWdpbgorCQkJCXNlcV9lcnIgPSAhcnhfZXJyOworCQkJCWlmKCFyeF9hY3RpdmUpCW5leHRfc3RhdGUgPSBJRExFOworCQkJICAgZW5kCisJCSAgIGVuZAorCSAgIERBVEE6CisJCSAgIGJlZ2luCisJCQlpZihyeF92YWxpZCAmIHJ4X2FjdGl2ZSAmICFyeF9lcnIpCWRhdGFfdmFsaWRfZCA9IDEnYjE7CisJCQlpZighcnhfYWN0aXZlIHwgcnhfZXJyKQorCQkJICAgYmVnaW4KKwkJCQlkYXRhX2RvbmUgPSAxJ2IxOworCQkJCWlmKCFyeF9hY3RpdmUpCW5leHRfc3RhdGUgPSBJRExFOworCQkJICAgZW5kCisJCSAgIGVuZAorCQkKKwllbmRjYXNlCisgICBlbmQKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9wZS52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3BlLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzBkYWFmZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9wZS52CkBAIC0wLDAgKzEsODM2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUHJvdG9jb2wgRW5naW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBQZXJmb3JtcyBhdXRvbWF0aWMgcHJvdG9jb2wgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2IxX2Z1bmN0Ly8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2IxX3BlLnYsdiAxLjEuMS4xIDIwMDItMDktMTkgMTI6MDc6MjQgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMi0wOS0xOSAxMjowNzoyNCAkCisvLyAgJFJldmlzaW9uOiAxLjEuMS4xICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vCisvLworLy8KKy8vCisvLworLy8KKworYGluY2x1ZGUgInVzYjFkX2RlZmluZXMudiIKKworbW9kdWxlIHVzYjFkX3BlKAljbGssIHJzdCwKKworCQkvLyBVVE1JIEludGVyZmFjZXMKKwkJdHhfdmFsaWQsIHJ4X2FjdGl2ZSwKKworCQkvLyBQSUQgSW5mb3JtYXRpb24KKwkJcGlkX09VVCwgcGlkX0lOLCBwaWRfU09GLCBwaWRfU0VUVVAsCisJCXBpZF9EQVRBMCwgcGlkX0RBVEExLCBwaWRfREFUQTIsIHBpZF9NREFUQSwKKwkJcGlkX0FDSywgcGlkX1BJTkcsCisKKwkJLy8gVG9rZW4gSW5mb3JtYXRpb24KKwkJdG9rZW5fdmFsaWQsIAorCisJCS8vIFJlY2VpdmUgRGF0YSBPdXRwdXQKKwkJcnhfZGF0YV9kb25lLCBjcmMxNl9lcnIsCisKKwkJLy8gUGFja2V0IEFzc2VtYmxlciBJbnRlcmZhY2UKKwkJc2VuZF90b2tlbiwgdG9rZW5fcGlkX3NlbCwKKwkJZGF0YV9waWRfc2VsLAorCisJCS8vIElETUEgSW50ZXJmYWNlCisJCXJ4X2RtYV9lbiwgdHhfZG1hX2VuLAorCQlhYm9ydCwKKwkJaWRtYV9kb25lLAorCisJCS8vIFJlZ2lzdGVyIEZpbGUgSW50ZXJmYWNlCisKKwkJZnNlbCwKKwkJZXBfc2VsLCBtYXRjaCwgbnNlX2VyciwKKwkJZXBfZnVsbCwgZXBfZW1wdHksCisKKwkJaW50X3VwaWRfc2V0LCBpbnRfY3JjMTZfc2V0LCBpbnRfdG9fc2V0LCBpbnRfc2VxZXJyX3NldCwKKwkJY3NyLAorCQlzZW5kX3N0YWxsCisKKwkJKTsKKworaW5wdXQJCWNsaywgcnN0OworaW5wdXQJCXR4X3ZhbGlkLCByeF9hY3RpdmU7CisKKy8vIFBhY2tldCBEaXNhc3NlbWJsZXIgSW50ZXJmYWNlCisJCS8vIERlY29kZWQgUElEcyAodXNlZCB3aGVuIHRva2VuX3ZhbGlkIGlzIGFzc2VydGVkKQoraW5wdXQJCXBpZF9PVVQsIHBpZF9JTiwgcGlkX1NPRiwgcGlkX1NFVFVQOworaW5wdXQJCXBpZF9EQVRBMCwgcGlkX0RBVEExLCBwaWRfREFUQTIsIHBpZF9NREFUQTsKK2lucHV0CQlwaWRfQUNLLCBwaWRfUElORzsKKworaW5wdXQJCXRva2VuX3ZhbGlkOwkJLy8gVG9rZW4gaXMgdmFsaWQKKworaW5wdXQJCXJ4X2RhdGFfZG9uZTsJCS8vIEluZGljYXRlcyBlbmQgb2YgYSB0cmFuc2ZlcgoraW5wdXQJCWNyYzE2X2VycjsJCS8vIERhdGEgcGFja2V0IENSQyAxNiBlcnJvcgorCisvLyBQYWNrZXQgQXNzZW1ibGVyIEludGVyZmFjZQorb3V0cHV0CQlzZW5kX3Rva2VuOworb3V0cHV0CVsxOjBdCXRva2VuX3BpZF9zZWw7CitvdXRwdXQJWzE6MF0JZGF0YV9waWRfc2VsOworCisvLyBJRE1BIEludGVyZmFjZQorb3V0cHV0CQlyeF9kbWFfZW47CS8vIEFsbG93cyB0aGUgZGF0YSB0byBiZSBzdG9yZWQKK291dHB1dAkJdHhfZG1hX2VuOwkvLyBBbGxvd3MgZm9yIGRhdGEgdG8gYmUgcmV0cmlldmVkCitvdXRwdXQJCWFib3J0OwkJLy8gQWJvcnQgVHJhbnNmZXIgKHRpbWVfb3V0LCBjcmNfZXJyIG9yIHJ4X2Vycm9yKQoraW5wdXQJCWlkbWFfZG9uZTsJLy8gRE1BIGlzIGRvbmUgaW5kaWNhdG9yCisKK2lucHV0CQllcF9mdWxsOwkvLyBJbmRpY2F0ZXMgdGhlIGVuZHBvaW50cyBmaWZvIGlzIGZ1bGwKK2lucHV0CQllcF9lbXB0eTsJLy8gSW5kaWNhdGVzIHRoZSBlbmRwb2ludHMgZmlmbyBpcyBlbXB0eQorCisvLyBSZWdpc3RlciBGaWxlIGludGVyZmFjZQoraW5wdXQJCWZzZWw7CQkvLyBUaGlzIGZ1bmN0aW9uIGlzIHNlbGVjdGVkCitpbnB1dAlbMzowXQllcF9zZWw7CQkvLyBFbmRwb2ludCBOdW1iZXIgSW5wdXQKK2lucHV0CQltYXRjaDsJCS8vIEVuZHBvaW50IE1hdGNoZWQKK291dHB1dAkJbnNlX2VycjsJLy8gbm8gc3VjaCBlbmRwb2ludCBlcnJvcgorCitvdXRwdXQJCWludF91cGlkX3NldDsJLy8gU2V0IHVuc3VwcG9ydGVkIFBJRCBpbnRlcnJ1cHQKK291dHB1dAkJaW50X2NyYzE2X3NldDsJLy8gU2V0IENSQzE2IGVycm9yIGludGVycnVwdAorb3V0cHV0CQlpbnRfdG9fc2V0OwkvLyBTZXQgdGltZSBvdXQgaW50ZXJydXB0CitvdXRwdXQJCWludF9zZXFlcnJfc2V0OwkvLyBTZXQgUElEIHNlcXVlbmNlIGVycm9yIGludGVycnVwdAorCitpbnB1dAlbMTM6MF0JY3NyOwkJLy8gSW50ZXJuYWwgQ1NSIE91dHB1dAorCitpbnB1dAkJc2VuZF9zdGFsbDsJLy8gRm9yY2Ugc2VuZGluZyBhIFNUQUxMIGR1cmluZyBzZXR1cAorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBMb2NhbCBXaXJlcyBhbmQgUmVnaXN0ZXJzCisvLworCisvLyB0eCB0b2tlbiBkZWNvZGluZworcGFyYW1ldGVyCUFDSyAgID0gMCwKKwkJTkFDSyAgPSAxLAorCQlTVEFMTCA9IDIsCisJCU5ZRVQgID0gMzsKKworLy8gU3RhdGUgZGVjb2RpbmcKK3BhcmFtZXRlcglbOTowXQkvLyBzeW5vcHN5cyBlbnVtIHN0YXRlCisJCUlETEUJPSAxMCdiMDAwMDAwXzAwMDEsCisJCVRPS0VOCT0gMTAnYjAwMDAwMF8wMDEwLAorCQlJTgk9IDEwJ2IwMDAwMDBfMDEwMCwKKwkJSU4yCT0gMTAnYjAwMDAwMF8xMDAwLAorCQlPVVQJPSAxMCdiMDAwMDAxXzAwMDAsCisJCU9VVDJBCT0gMTAnYjAwMDAxMF8wMDAwLAorCQlPVVQyQgk9IDEwJ2IwMDAxMDBfMDAwMCwKKwkJVVBEQVRFVwk9IDEwJ2IwMDEwMDBfMDAwMCwKKwkJVVBEQVRFCT0gMTAnYjAxMDAwMF8wMDAwLAorCQlVUERBVEUyCT0gMTAnYjEwMDAwMF8wMDAwOworCityZWcJWzE6MF0JdG9rZW5fcGlkX3NlbDsKK3JlZwlbMTowXQl0b2tlbl9waWRfc2VsX2Q7CityZWcJCXNlbmRfdG9rZW47CityZWcJCXNlbmRfdG9rZW5fZDsKK3JlZwkJcnhfZG1hX2VuLCB0eF9kbWFfZW47CityZWcJCWludF9zZXFlcnJfc2V0X2Q7CityZWcJCWludF9zZXFlcnJfc2V0OworcmVnCQlpbnRfdXBpZF9zZXQ7CisKK3JlZwkJbWF0Y2hfcjsKKworLy8gRW5kcG9pbnQgRGVjb2RpbmcKK3dpcmUJCUlOX2VwLCBPVVRfZXAsIENUUkxfZXA7CQkvLyBFbmRwb2ludCBUeXBlcword2lyZQkJdHhmcl9pc28sIHR4ZnJfYnVsaywgdHhmcl9pbnQ7CS8vIFRyYW5zZmVyIFR5cGVzCisKK3JlZwlbMTowXQl1Y19kcGQ7CisKKy8vIEJ1ZmZlciBjaGVja3MKK3JlZwlbOTowXQkvKiBzeW5vcHN5cyBlbnVtIHN0YXRlICovIHN0YXRlLCBuZXh0X3N0YXRlOworLy8gc3lub3BzeXMgc3RhdGVfdmVjdG9yIHN0YXRlCisKKy8vIFBJRCBuZXh0IGFuZCBjdXJyZW50IGRlY29kZXJzCityZWcJWzE6MF0JbmV4dF9kcGlkOworcmVnCVsxOjBdCXRoaXNfZHBpZDsKK3JlZwkJcGlkX3NlcV9lcnI7Cit3aXJlCVsxOjBdCXRyX2ZyX2Q7CisKK3dpcmUJWzEzOjBdCXNpemVfbmV4dDsKK3dpcmUJCWJ1Zl9zbWFsbGVyOworCisvLyBBZnRlciBzZW5kaW5nIERhdGEgaW4gcmVzcG9uc2UgdG8gYW4gSU4gdG9rZW4gZnJvbSBob3N0LCB0aGUKKy8vIGhvc3QgbXVzdCByZXBseSB3aXRoIGFuIGFjay4gVGhlIGhvc3QgaGFzIFhYWG5TIHRvIHJlcGx5LgorLy8gInJ4X2Fja190byIgaW5kaWNhdGVzIHdoZW4gdGhpcyB0aW1lIGhhcyBleHBpcmVkLgorLy8gcnhfYWNrX3RvX2NsciwgY2xlYXJzIHRoZSB0aW1lcgorcmVnCQlyeF9hY2tfdG9fY2xyOworcmVnCQlyeF9hY2tfdG9fY2xyX2Q7CityZWcJCXJ4X2Fja190bzsKK3JlZwlbNzowXQlyeF9hY2tfdG9fY250OworCisvLyBBZnRlciBzZW5kaW5nIGEgT1VUIHRva2VuIHRoZSBob3N0IG11c3Qgc2VuZCBhIGRhdGEgcGFja2V0LgorLy8gVGhlIGhvc3QgaGFzIFhYIG5TIHRvIHNlbmQgdGhlIHBhY2tldC4gInR4X2RhdGFfdG8iIGluZGljYXRlcworLy8gd2hlbiB0aGlzIHRpbWUgaGFzIGV4cGlyZWQuCisvLyB0eF9kYXRhX3RvX2NsciwgY2xlYXJzIHRoZSB0aW1lcgord2lyZQkJdHhfZGF0YV90b19jbHI7CityZWcJCXR4X2RhdGFfdG87CityZWcJWzc6MF0JdHhfZGF0YV90b19jbnQ7CisKK3dpcmUJWzc6MF0JcnhfYWNrX3RvX3ZhbCwgdHhfZGF0YV90b192YWw7CisKKword2lyZQlbMTowXQluZXh0X2JzZWw7CityZWcJCXVjX3N0YXRfc2V0X2Q7CityZWcJCXVjX2RwZF9zZXQ7CisKK3JlZwkJaW5fdG9rZW47CityZWcJCW91dF90b2tlbjsKK3JlZwkJc2V0dXBfdG9rZW47CisKK3dpcmUJCWluX29wLCBvdXRfb3A7CS8vIEluZGljYXRlIGEgSU4gb3IgT1VUIG9wZXJhdGlvbgorCityZWcJWzE6MF0JYWxsb3dfcGlkOworCityZWcJCW5zZV9lcnI7CityZWcJCWFib3J0OworCit3aXJlCVsxOjBdCWVwX3R5cGUsIHR4ZnJfdHlwZTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1pc2MgTG9naWMKKy8vCisKKy8vIEVuZHBvaW50L0NTUiBEZWNvZGluZworYXNzaWduIElOX2VwICAgPSBjc3JbOV07Cithc3NpZ24gT1VUX2VwICA9IGNzclsxMF07Cithc3NpZ24gQ1RSTF9lcCA9IGNzclsxMV07CisKK2Fzc2lnbiB0eGZyX2lzbyAgPSBjc3JbMTJdOworYXNzaWduIHR4ZnJfYnVsayA9IGNzclsxM107Cithc3NpZ24gdHhmcl9pbnQgPSAhY3NyWzEyXSAmICFjc3JbMTNdOworCithc3NpZ24gZXBfdHlwZSA9IGNzclsxMDo5XTsKK2Fzc2lnbiB0eGZyX3R5cGUgPSBjc3JbMTM6MTJdOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwltYXRjaF9yIDw9ICMxIG1hdGNoICAmIGZzZWw7CisKKy8vIE5vIFN1Y2ggRW5kcG9pbnQgSW5kaWNhdG9yCithbHdheXMgQChwb3NlZGdlIGNsaykKKwluc2VfZXJyIDw9ICMxIHRva2VuX3ZhbGlkICYgKHBpZF9PVVQgfCBwaWRfSU4gfCBwaWRfU0VUVVApICYgIW1hdGNoOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlzZW5kX3Rva2VuIDw9ICMxIHNlbmRfdG9rZW5fZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdG9rZW5fcGlkX3NlbCA8PSAjMSB0b2tlbl9waWRfc2VsX2Q7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBEYXRhIFBpZCBTdG9yYWdlCisvLworCityZWcJWzE6MF0JZXAwX2RwaWQsIGVwMV9kcGlkLCBlcDJfZHBpZCwgZXAzX2RwaWQ7CityZWcJWzE6MF0JZXA0X2RwaWQsIGVwNV9kcGlkLCBlcDZfZHBpZCwgZXA3X2RwaWQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJCWVwMF9kcGlkIDw9IDInYjAwOworCWVsc2UKKwlpZih1Y19kcGRfc2V0ICYgKGVwX3NlbCA9PSA0J2gwKSkJZXAwX2RwaWQgPD0gbmV4dF9kcGlkOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCQllcDFfZHBpZCA8PSAyJ2IwMDsKKwllbHNlCisJaWYodWNfZHBkX3NldCAmIChlcF9zZWwgPT0gNCdoMSkpCWVwMV9kcGlkIDw9IG5leHRfZHBpZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQkJZXAyX2RwaWQgPD0gMidiMDA7CisJZWxzZQorCWlmKHVjX2RwZF9zZXQgJiAoZXBfc2VsID09IDQnaDIpKQllcDJfZHBpZCA8PSBuZXh0X2RwaWQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJCWVwM19kcGlkIDw9IDInYjAwOworCWVsc2UKKwlpZih1Y19kcGRfc2V0ICYgKGVwX3NlbCA9PSA0J2gzKSkJZXAzX2RwaWQgPD0gbmV4dF9kcGlkOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCQllcDRfZHBpZCA8PSAyJ2IwMDsKKwllbHNlCisJaWYodWNfZHBkX3NldCAmIChlcF9zZWwgPT0gNCdoNCkpCWVwNF9kcGlkIDw9IG5leHRfZHBpZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCQkJZXA1X2RwaWQgPD0gMidiMDA7CisJZWxzZQorCWlmKHVjX2RwZF9zZXQgJiAoZXBfc2VsID09IDQnaDUpKQllcDVfZHBpZCA8PSBuZXh0X2RwaWQ7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQkJCWVwNl9kcGlkIDw9IDInYjAwOworCWVsc2UKKwlpZih1Y19kcGRfc2V0ICYgKGVwX3NlbCA9PSA0J2g2KSkJZXA2X2RwaWQgPD0gbmV4dF9kcGlkOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCQllcDdfZHBpZCA8PSAyJ2IwMDsKKwllbHNlCisJaWYodWNfZHBkX3NldCAmIChlcF9zZWwgPT0gNCdoNykpCWVwN19kcGlkIDw9IG5leHRfZHBpZDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJY2FzZShlcF9zZWwpCisJICAgNCdoMDogdWNfZHBkIDw9IGVwMF9kcGlkOworCSAgIDQnaDE6IHVjX2RwZCA8PSBlcDFfZHBpZDsKKwkgICA0J2gyOiB1Y19kcGQgPD0gZXAyX2RwaWQ7CisJICAgNCdoMzogdWNfZHBkIDw9IGVwM19kcGlkOworCSAgIDQnaDQ6IHVjX2RwZCA8PSBlcDRfZHBpZDsKKwkgICA0J2g1OiB1Y19kcGQgPD0gZXA1X2RwaWQ7CisJICAgNCdoNjogdWNfZHBkIDw9IGVwNl9kcGlkOworCSAgIDQnaDc6IHVjX2RwZCA8PSBlcDdfZHBpZDsKKwllbmRjYXNlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBEYXRhIFBpZCBTZXF1ZW5jZXIKKy8vCisKK2Fzc2lnbiB0cl9mcl9kID0gMidoMDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCS8vIHRyL21mOmVwL3R5cGU6dHIvdHlwZTpsYXN0IGRwZAorCWNhc2V4KHt0cl9mcl9kLGVwX3R5cGUsdHhmcl90eXBlLHVjX2RwZH0pCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgOCdiMD9fMDFfMDFfPz86IG5leHRfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gSVNPIHR4ZnIuIElOLCAxIHRyL21mCisKKwkgICA4J2IxMF8wMV8wMV8/MDogbmV4dF9kcGlkIDw9ICMxIDInYjAxOwkvLyBJU08gdHhmci4gSU4sIDIgdHIvbWYKKwkgICA4J2IxMF8wMV8wMV8/MTogbmV4dF9kcGlkIDw9ICMxIDInYjAwOwkvLyBJU08gdHhmci4gSU4sIDIgdHIvbWYKKworCSAgIDgnYjExXzAxXzAxXzAwOiBuZXh0X2RwaWQgPD0gIzEgMidiMDE7CS8vIElTTyB0eGZyLiBJTiwgMyB0ci9tZgorCSAgIDgnYjExXzAxXzAxXzAxOiBuZXh0X2RwaWQgPD0gIzEgMidiMTA7CS8vIElTTyB0eGZyLiBJTiwgMyB0ci9tZgorCSAgIDgnYjExXzAxXzAxXzEwOiBuZXh0X2RwaWQgPD0gIzEgMidiMDA7CS8vIElTTyB0eGZyLiBJTiwgMyB0ci9tZgorCisJICAgOCdiMD9fMTBfMDFfPz86IG5leHRfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gSVNPIHR4ZnIuIE9VVCwgMSB0ci9tZgorCisJICAgOCdiMTBfMTBfMDFfPz86IAkJCQkvLyBJU08gdHhmci4gT1VULCAyIHRyL21mCisJCQkgICBiZWdpbgkvLyBSZXN5bmNocm9uaXplIGluIGNhc2Ugb2YgUElEIGVycm9yCisJCQkJY2FzZSh7cGlkX01EQVRBLCBwaWRfREFUQTF9KQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCQkJCSAgMidiMTA6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMTsKKwkJCQkgIDInYjAxOiBuZXh0X2RwaWQgPD0gIzEgMidiMDA7CisJCQkJZW5kY2FzZQorCQkJICAgZW5kCisKKwkgICA4J2IxMV8xMF8wMV8wMDogCQkJCS8vIElTTyB0eGZyLiBPVVQsIDMgdHIvbWYKKwkJCSAgIGJlZ2luCS8vIFJlc3luY2hyb25pemUgaW4gY2FzZSBvZiBQSUQgZXJyb3IKKwkJCQljYXNlKHtwaWRfTURBVEEsIHBpZF9EQVRBMn0pCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJCQkJICAyJ2IxMDogbmV4dF9kcGlkIDw9ICMxIDInYjAxOworCQkJCSAgMidiMDE6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMDsKKwkJCQllbmRjYXNlCisJCQkgICBlbmQKKwkgICA4J2IxMV8xMF8wMV8wMTogCQkJCS8vIElTTyB0eGZyLiBPVVQsIDMgdHIvbWYKKwkJCSAgIGJlZ2luCS8vIFJlc3luY2hyb25pemUgaW4gY2FzZSBvZiBQSUQgZXJyb3IKKwkJCQljYXNlKHtwaWRfTURBVEEsIHBpZF9EQVRBMn0pCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJCQkJICAyJ2IxMDogbmV4dF9kcGlkIDw9ICMxIDInYjEwOworCQkJCSAgMidiMDE6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMDsKKwkJCQllbmRjYXNlCisJCQkgICBlbmQKKwkgICA4J2IxMV8xMF8wMV8xMDogCQkJCS8vIElTTyB0eGZyLiBPVVQsIDMgdHIvbWYKKwkJCSAgIGJlZ2luCS8vIFJlc3luY2hyb25pemUgaW4gY2FzZSBvZiBQSUQgZXJyb3IKKwkJCQljYXNlKHtwaWRfTURBVEEsIHBpZF9EQVRBMn0pCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJCQkJICAyJ2IxMDogbmV4dF9kcGlkIDw9ICMxIDInYjAxOworCQkJCSAgMidiMDE6IG5leHRfZHBpZCA8PSAjMSAyJ2IwMDsKKwkJCQllbmRjYXNlCisJCQkgICBlbmQKKworCSAgIDgnYj8/XzAxXzAwXz8wLAkJCQkvLyBJTi9PVVQgZW5kcG9pbnQgb25seQorCSAgIDgnYj8/XzEwXzAwXz8wOiBuZXh0X2RwaWQgPD0gIzEgMidiMDE7CS8vIElOVCB0cmFuc2ZlcnMKKworCSAgIDgnYj8/XzAxXzAwXz8xLAkJCQkvLyBJTi9PVVQgZW5kcG9pbnQgb25seQorCSAgIDgnYj8/XzEwXzAwXz8xOiBuZXh0X2RwaWQgPD0gIzEgMidiMDA7CS8vIElOVCB0cmFuc2ZlcnMKKworCSAgIDgnYj8/XzAxXzEwXz8wLAkJCQkvLyBJTi9PVVQgZW5kcG9pbnQgb25seQorCSAgIDgnYj8/XzEwXzEwXz8wOiBuZXh0X2RwaWQgPD0gIzEgMidiMDE7CS8vIEJVTEsgdHJhbnNmZXJzCisKKwkgICA4J2I/P18wMV8xMF8/MSwJCQkJLy8gSU4vT1VUIGVuZHBvaW50IG9ubHkKKwkgICA4J2I/P18xMF8xMF8/MTogbmV4dF9kcGlkIDw9ICMxIDInYjAwOwkvLyBCVUxLIHRyYW5zZmVycworCisJICAgOCdiPz9fMDBfPz9fPz86CQkJCS8vIENUUkwgRW5kcG9pbnQKKwkJY2FzZXgoe3NldHVwX3Rva2VuLCBpbl9vcCwgb3V0X29wLCB1Y19kcGR9KQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCQkgICA1J2IxXz8/Xz8/OiBuZXh0X2RwaWQgPD0gIzEgMidiMTE7CS8vIFNFVFVQIG9wZXJhdGlvbgorCQkgICA1J2IwXzEwXzA/OiBuZXh0X2RwaWQgPD0gIzEgMidiMTE7CS8vIElOIG9wZXJhdGlvbgorCQkgICA1J2IwXzEwXzE/OiBuZXh0X2RwaWQgPD0gIzEgMidiMDE7CS8vIElOIG9wZXJhdGlvbgorCQkgICA1J2IwXzAxXz8wOiBuZXh0X2RwaWQgPD0gIzEgMidiMTE7CS8vIE9VVCBvcGVyYXRpb24KKwkJICAgNSdiMF8wMV8/MTogbmV4dF9kcGlkIDw9ICMxIDInYjEwOwkvLyBPVVQgb3BlcmF0aW9uCisJCWVuZGNhc2UKKworCWVuZGNhc2UKKworLy8gQ3VycmVudCBQSUQgZGVjb2RlcgorCisvLyBBbGxvdyBhbnkgUElEIGZvciBJU08uIHRyYW5zZmVycyB3aGVuIG1vZGUgZnVsbCBzcGVlZCBvciB0cl9mciBpcyB6ZXJvCithbHdheXMgQChwaWRfREFUQTAgb3IgcGlkX0RBVEExIG9yIHBpZF9EQVRBMiBvciBwaWRfTURBVEEpCisJY2FzZSh7cGlkX0RBVEEwLCBwaWRfREFUQTEsIHBpZF9EQVRBMiwgcGlkX01EQVRBfSApIC8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgNCdiMTAwMDogYWxsb3dfcGlkID0gMidiMDA7CisJICAgNCdiMDEwMDogYWxsb3dfcGlkID0gMidiMDE7CisJICAgNCdiMDAxMDogYWxsb3dfcGlkID0gMidiMTA7CisJICAgNCdiMDAwMTogYWxsb3dfcGlkID0gMidiMTE7CisJZW5kY2FzZQorCithbHdheXMgQChwb3NlZGdlIGNsaykJLy8gdGYvbWY6ZXAvdHlwZTp0ci90eXBlOmxhc3QgZHBkCisJY2FzZXgoe3RyX2ZyX2QsZXBfdHlwZSx0eGZyX3R5cGUsdWNfZHBkfSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICA4J2IwP18wMV8wMV8/PzogdGhpc19kcGlkIDw9ICMxIDInYjAwOwkvLyBJU08gdHhmci4gSU4sIDEgdHIvbWYKKworCSAgIDgnYjEwXzAxXzAxXz8wOiB0aGlzX2RwaWQgPD0gIzEgMidiMDE7CS8vIElTTyB0eGZyLiBJTiwgMiB0ci9tZgorCSAgIDgnYjEwXzAxXzAxXz8xOiB0aGlzX2RwaWQgPD0gIzEgMidiMDA7CS8vIElTTyB0eGZyLiBJTiwgMiB0ci9tZgorCisJICAgOCdiMTFfMDFfMDFfMDA6IHRoaXNfZHBpZCA8PSAjMSAyJ2IxMDsJLy8gSVNPIHR4ZnIuIElOLCAzIHRyL21mCisJICAgOCdiMTFfMDFfMDFfMDE6IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMTsJLy8gSVNPIHR4ZnIuIElOLCAzIHRyL21mCisJICAgOCdiMTFfMDFfMDFfMTA6IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMDsJLy8gSVNPIHR4ZnIuIElOLCAzIHRyL21mCisKKwkgICA4J2IwMF8xMF8wMV8/PzogdGhpc19kcGlkIDw9ICMxIGFsbG93X3BpZDsJLy8gSVNPIHR4ZnIuIE9VVCwgMCB0ci9tZgorCSAgIDgnYjAxXzEwXzAxXz8/OiB0aGlzX2RwaWQgPD0gIzEgMidiMDA7CS8vIElTTyB0eGZyLiBPVVQsIDEgdHIvbWYKKworCSAgIDgnYjEwXzEwXzAxXz8wOiB0aGlzX2RwaWQgPD0gIzEgMidiMTE7CS8vIElTTyB0eGZyLiBPVVQsIDIgdHIvbWYKKwkgICA4J2IxMF8xMF8wMV8/MTogdGhpc19kcGlkIDw9ICMxIDInYjAxOwkvLyBJU08gdHhmci4gT1VULCAyIHRyL21mCisKKwkgICA4J2IxMV8xMF8wMV8wMDogdGhpc19kcGlkIDw9ICMxIDInYjExOwkvLyBJU08gdHhmci4gT1VULCAzIHRyL21mCisJICAgOCdiMTFfMTBfMDFfMDE6IHRoaXNfZHBpZCA8PSAjMSAyJ2IxMTsJLy8gSVNPIHR4ZnIuIE9VVCwgMyB0ci9tZgorCSAgIDgnYjExXzEwXzAxXzEwOiB0aGlzX2RwaWQgPD0gIzEgMidiMTA7CS8vIElTTyB0eGZyLiBPVVQsIDMgdHIvbWYKKworCSAgIDgnYj8/XzAxXzAwXz8wLAkJCQkvLyBJTi9PVVQgZW5kcG9pbnQgb25seQorCSAgIDgnYj8/XzEwXzAwXz8wOiB0aGlzX2RwaWQgPD0gIzEgMidiMDA7CS8vIElOVCB0cmFuc2ZlcnMKKwkgICA4J2I/P18wMV8wMF8/MSwJCQkJLy8gSU4vT1VUIGVuZHBvaW50IG9ubHkKKwkgICA4J2I/P18xMF8wMF8/MTogdGhpc19kcGlkIDw9ICMxIDInYjAxOwkvLyBJTlQgdHJhbnNmZXJzCisKKwkgICA4J2I/P18wMV8xMF8/MCwJCQkJLy8gSU4vT1VUIGVuZHBvaW50IG9ubHkKKwkgICA4J2I/P18xMF8xMF8/MDogdGhpc19kcGlkIDw9ICMxIDInYjAwOwkvLyBCVUxLIHRyYW5zZmVycworCSAgIDgnYj8/XzAxXzEwXz8xLAkJCQkvLyBJTi9PVVQgZW5kcG9pbnQgb25seQorCSAgIDgnYj8/XzEwXzEwXz8xOiB0aGlzX2RwaWQgPD0gIzEgMidiMDE7CS8vIEJVTEsgdHJhbnNmZXJzCisKKwkgICA4J2I/P18wMF8/P18/PzoJCQkJLy8gQ1RSTCBFbmRwb2ludAorCQljYXNleCh7c2V0dXBfdG9rZW4saW5fb3AsIG91dF9vcCwgdWNfZHBkfSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkJICAgNSdiMV8/P18/PzogdGhpc19kcGlkIDw9ICMxIDInYjAwOwkvLyBTRVRVUCBvcGVyYXRpb24KKwkJICAgNSdiMF8xMF8wPzogdGhpc19kcGlkIDw9ICMxIDInYjAwOwkvLyBJTiBvcGVyYXRpb24KKwkJICAgNSdiMF8xMF8xPzogdGhpc19kcGlkIDw9ICMxIDInYjAxOwkvLyBJTiBvcGVyYXRpb24KKwkJICAgNSdiMF8wMV8/MDogdGhpc19kcGlkIDw9ICMxIDInYjAwOwkvLyBPVVQgb3BlcmF0aW9uCisJCSAgIDUnYjBfMDFfPzE6IHRoaXNfZHBpZCA8PSAjMSAyJ2IwMTsJLy8gT1VUIG9wZXJhdGlvbgorCQllbmRjYXNlCisJZW5kY2FzZQorCisvLyBBc3NpZ24gUElEIGZvciBvdXRnb2luZyBwYWNrZXRzCithc3NpZ24gZGF0YV9waWRfc2VsID0gdGhpc19kcGlkOworCisvLyBWZXJpZnkgUElEIGZvciBpbmNvbWluZyBkYXRhIHBhY2tldHMKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXBpZF9zZXFfZXJyIDw9ICMxICEoCSh0aGlzX2RwaWQ9PTInYjAwICYgcGlkX0RBVEEwKSB8CisJCQkJKHRoaXNfZHBpZD09MidiMDEgJiBwaWRfREFUQTEpIHwKKwkJCQkodGhpc19kcGlkPT0yJ2IxMCAmIHBpZF9EQVRBMikgfAorCQkJCSh0aGlzX2RwaWQ9PTInYjExICYgcGlkX01EQVRBKQkpOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gSURNQSBTZXR1cCAmIHNyYy9kc3QgYnVmZmVyIHNlbGVjdAorLy8KKworLy8gRm9yIENvbnRyb2wgZW5kcG9pbnRzIHRoaW5ncyBhcmUgZGlmZmVyZW50OgorLy8gYnVmZmVyMCBpcyB1c2VkIGZvciBPVVQgKGluY29taW5nKSBkYXRhIHBhY2tldHMKKy8vIGJ1ZmZlcjEgaXMgdXNlZCBmb3IgSU4gKG91dGdvaW5nKSBkYXRhIHBhY2tldHMKKworLy8gS2VlcCB0cmFjayBvZiBsYXN0IHRva2VuIGZvciBjb250cm9sIGVuZHBvaW50cworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCWluX3Rva2VuIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKHBpZF9JTikJCWluX3Rva2VuIDw9ICMxIDEnYjE7CisJZWxzZQorCWlmKHBpZF9PVVQgfCBwaWRfU0VUVVApCWluX3Rva2VuIDw9ICMxIDEnYjA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCQlvdXRfdG9rZW4gPD0gIzEgMSdiMDsKKwllbHNlCisJaWYocGlkX09VVCB8IHBpZF9TRVRVUCkJb3V0X3Rva2VuIDw9ICMxIDEnYjE7CisJZWxzZQorCWlmKHBpZF9JTikJCW91dF90b2tlbiA8PSAjMSAxJ2IwOworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJc2V0dXBfdG9rZW4gPD0gIzEgMSdiMDsKKwllbHNlCisJaWYocGlkX1NFVFVQKQkJc2V0dXBfdG9rZW4gPD0gIzEgMSdiMTsKKwllbHNlCisJaWYocGlkX09VVCB8IHBpZF9JTikJc2V0dXBfdG9rZW4gPD0gIzEgMSdiMDsKKworLy8gSW5kaWNhdGVzIGlmIHdlIGFyZSBwZXJmb3JtaW5nIGFuIElOIG9wZXJhdGlvbgorYXNzaWduCWluX29wID0gSU5fZXAgfCAoQ1RSTF9lcCAmIGluX3Rva2VuKTsKKworLy8gSW5kaWNhdGVzIGlmIHdlIGFyZSBwZXJmb3JtaW5nIGFuIE9VVCBvcGVyYXRpb24KK2Fzc2lnbglvdXRfb3AgPSBPVVRfZXAgfCAoQ1RSTF9lcCAmIG91dF90b2tlbik7CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIERldGVybWluZSBpZiBwYWNrZXQgaXMgdG8gc21hbGwgb3IgdG8gbGFyZ2UKKy8vIFRoaXMgaXMgdXNlZCB0byBOQUNLIGFuZCBpZ25vcmUgcGFja2V0IGZvciBPVVQgZW5kcG9pbnRzCisvLworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBSZWdpc3RlciBGaWxlIFVwZGF0ZSBMb2dpYworLy8KKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdWNfZHBkX3NldCA8PSAjMSB1Y19zdGF0X3NldF9kOworCisvLyBBYm9ydCBzaWduYWwKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWFib3J0IDw9ICMxIG1hdGNoICYgZnNlbCAmIChzdGF0ZSAhPSBJRExFKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFRJTUUgT1VUIFRJTUVSUworLy8KKworLy8gQWZ0ZXIgc2VuZGluZyBEYXRhIGluIHJlc3BvbnNlIHRvIGFuIElOIHRva2VuIGZyb20gaG9zdCwgdGhlCisvLyBob3N0IG11c3QgcmVwbHkgd2l0aCBhbiBhY2suIFRoZSBob3N0IGhhcyA2MjJuUyBpbiBGdWxsIFNwZWVkCisvLyBtb2RlIGFuZCA0MDBuUyBpbiBIaWdoIFNwZWVkIG1vZGUgdG8gcmVwbHkuCisvLyAicnhfYWNrX3RvIiBpbmRpY2F0ZXMgd2hlbiB0aGlzIHRpbWUgaGFzIGV4cGlyZWQuCisvLyByeF9hY2tfdG9fY2xyLCBjbGVhcnMgdGhlIHRpbWVyCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXJ4X2Fja190b19jbHIgPD0gIzEgdHhfdmFsaWQgfCByeF9hY2tfdG9fY2xyX2Q7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKHJ4X2Fja190b19jbHIpCXJ4X2Fja190b19jbnQgPD0gIzEgOCdoMDsKKwllbHNlCQkJcnhfYWNrX3RvX2NudCA8PSAjMSByeF9hY2tfdG9fY250ICsgOCdoMTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJcnhfYWNrX3RvIDw9ICMxIChyeF9hY2tfdG9fY250ID09IHJ4X2Fja190b192YWwpOworCithc3NpZ24gcnhfYWNrX3RvX3ZhbCA9IGBVU0JGX1JYX0FDS19UT19WQUxfRlM7CisKKy8vIEFmdGVyIHNlbmRpbmcgYSBPVVQgdG9rZW4gdGhlIGhvc3QgbXVzdCBzZW5kIGEgZGF0YSBwYWNrZXQuCisvLyBUaGUgaG9zdCBoYXMgNjIyblMgaW4gRnVsbCBTcGVlZCBtb2RlIGFuZCA0MDBuUyBpbiBIaWdoIFNwZWVkCisvLyBtb2RlIHRvIHNlbmQgdGhlIGRhdGEgcGFja2V0LgorLy8gInR4X2RhdGFfdG8iIGluZGljYXRlcyB3aGVuIHRoaXMgdGltZSBoYXMgZXhwaXJlZC4KKy8vICJ0eF9kYXRhX3RvX2NsciIgY2xlYXJzIHRoZSB0aW1lcgorCithc3NpZ24JdHhfZGF0YV90b19jbHIgPSByeF9hY3RpdmU7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKHR4X2RhdGFfdG9fY2xyKQl0eF9kYXRhX3RvX2NudCA8PSAjMSA4J2gwOworCWVsc2UJCQl0eF9kYXRhX3RvX2NudCA8PSAjMSB0eF9kYXRhX3RvX2NudCArIDgnaDE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXR4X2RhdGFfdG8gPD0gIzEgKHR4X2RhdGFfdG9fY250ID09IHR4X2RhdGFfdG9fdmFsKTsKKworYXNzaWduIHR4X2RhdGFfdG9fdmFsID0gYFVTQkZfVFhfREFUQV9UT19WQUxfRlM7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBJbnRlcnJ1cHRzCisvLworcmVnCXBpZF9PVVRfciwgcGlkX0lOX3IsIHBpZF9QSU5HX3IsIHBpZF9TRVRVUF9yOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlwaWRfT1VUX3IgPD0gIzEgcGlkX09VVDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJcGlkX0lOX3IgPD0gIzEgcGlkX0lOOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlwaWRfUElOR19yIDw9ICMxIHBpZF9QSU5HOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlwaWRfU0VUVVBfciA8PSAjMSBwaWRfU0VUVVA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWludF91cGlkX3NldCA8PSAjMSBtYXRjaF9yICYgIXBpZF9TT0YgJiAoCisJCQkJKCBPVVRfZXAgJiAhKHBpZF9PVVRfciB8IHBpZF9QSU5HX3IpKQkJfAorCQkJCSggIElOX2VwICYgICFwaWRfSU5fcikJCQkJfAorCQkJCShDVFJMX2VwICYgIShwaWRfSU5fciB8IHBpZF9PVVRfciB8IHBpZF9QSU5HX3IgfCBwaWRfU0VUVVBfcikpCisJCQkJCSk7CisKKworYXNzaWduIGludF90b19zZXQgID0gKChzdGF0ZSA9PSBJTjIpICYgcnhfYWNrX3RvKSB8ICgoc3RhdGUgPT0gT1VUKSAmIHR4X2RhdGFfdG8pOworCithc3NpZ24gaW50X2NyYzE2X3NldCA9IHJ4X2RhdGFfZG9uZSAmIGNyYzE2X2VycjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaW50X3NlcWVycl9zZXQgPD0gIzEgaW50X3NlcWVycl9zZXRfZDsKKworcmVnCXNlbmRfc3RhbGxfcjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJc2VuZF9zdGFsbF9yIDw9ICMxIDEnYjA7CisJZWxzZQorCWlmKHNlbmRfc3RhbGwpCXNlbmRfc3RhbGxfciA8PSAjMSAxJ2IxOworCWVsc2UJCisJaWYoc2VuZF90b2tlbikJc2VuZF9zdGFsbF9yIDw9ICMxIDEnYjA7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNYWluIFByb3RvY29sIFN0YXRlIE1hY2hpbmUKKy8vCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCXN0YXRlIDw9ICMxIElETEU7CisJZWxzZQorCWlmKG1hdGNoKQlzdGF0ZSA8PSAjMSBJRExFOworCWVsc2UJCXN0YXRlIDw9ICMxIG5leHRfc3RhdGU7CisKK2Fsd2F5cyBAKHN0YXRlIG9yIAorCXBpZF9zZXFfZXJyIG9yIGlkbWFfZG9uZSBvciBlcF9mdWxsIG9yIGVwX2VtcHR5IG9yCisJdG9rZW5fdmFsaWQgb3IgcGlkX0FDSyBvciByeF9kYXRhX2RvbmUgb3IKKwl0eF9kYXRhX3RvIG9yIGNyYzE2X2VyciBvciAKKwlyeF9hY2tfdG8gb3IgcGlkX1BJTkcgb3IgdHhmcl9pc28gb3IgdHhmcl9pbnQgb3IKKwlDVFJMX2VwIG9yIHBpZF9JTiBvciBwaWRfT1VUIG9yIElOX2VwIG9yIE9VVF9lcCBvciBwaWRfU0VUVVAgb3IgcGlkX1NPRgorCW9yIG1hdGNoX3Igb3IgYWJvcnQgb3Igc2VuZF9zdGFsbF9yCisJKQorICAgYmVnaW4KKwluZXh0X3N0YXRlID0gc3RhdGU7CisJdG9rZW5fcGlkX3NlbF9kID0gQUNLOworCXNlbmRfdG9rZW5fZCA9IDEnYjA7CisJcnhfZG1hX2VuID0gMSdiMDsKKwl0eF9kbWFfZW4gPSAxJ2IwOworCXVjX3N0YXRfc2V0X2QgPSAxJ2IwOworCXJ4X2Fja190b19jbHJfZCA9IDEnYjE7CisJaW50X3NlcWVycl9zZXRfZCA9IDEnYjA7CisKKwljYXNlKHN0YXRlKQkvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgIElETEU6CisJCSAgIGJlZ2luCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCitgaWZkZWYgVVNCRl9WRVJCT1NFX0RFQlVHCisJCSRkaXNwbGF5KCJQRTogRW50ZXJlZCBzdGF0ZSBJRExFICgldCkiLCAkdGltZSk7CitgZW5kaWYKK2BpZmRlZiBVU0JGX0RFQlVHCisJCWlmKHJzdCAmIG1hdGNoX3IgJiAhcGlkX1NPRikKKwkJYmVnaW4KKwkJaWYobWF0Y2hfciA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBJRExFOiBtYXRjaF9yIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKHBpZF9TT0YgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogSURMRTogcGlkX1NPRiBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihDVFJMX2VwID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IElETEU6IENUUkxfZXAgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYocGlkX0lOID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IElETEU6IHBpZF9JTiBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihwaWRfT1VUID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IElETEU6IHBpZF9PVVQgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYocGlkX1NFVFVQID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IElETEU6IHBpZF9TRVRVUCBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihwaWRfUElORyA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBJRExFOiBwaWRfUElORyBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihJTl9lcCA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBJRExFOiBJTl9lcCBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihPVVRfZXAgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogSURMRTogT1VUX2VwIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWVuZAorYGVuZGlmCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKworCQkJaWYobWF0Y2hfciAmICFwaWRfU09GKQorCQkJICAgYmVnaW4KKy8qCisJCQkJaWYoZXBfc3RhbGwpCQkvLyBIYWx0IEZvcmNlZCBzZW5kIFNUQUxMCisJCQkJICAgYmVnaW4KKwkJCQkJdG9rZW5fcGlkX3NlbF9kID0gU1RBTEw7CisJCQkJCXNlbmRfdG9rZW5fZCA9IDEnYjE7CisJCQkJCW5leHRfc3RhdGUgPSBUT0tFTjsKKwkJCQkgICBlbmQKKwkJCQllbHNlCisqLworCQkJCWlmKElOX2VwIHwgKENUUkxfZXAgJiBwaWRfSU4pKQorCQkJCSAgIGJlZ2luCisJCQkJCWlmKHR4ZnJfaW50ICYgZXBfZW1wdHkpCisJCQkJCSAgIGJlZ2luCisJCQkJCQl0b2tlbl9waWRfc2VsX2QgPSBOQUNLOworCQkJCQkJc2VuZF90b2tlbl9kID0gMSdiMTsKKwkJCQkJCW5leHRfc3RhdGUgPSBUT0tFTjsKKwkJCQkJICAgZW5kCisJCQkJCWVsc2UKKwkJCQkJICAgYmVnaW4KKwkJCQkJCXR4X2RtYV9lbiA9IDEnYjE7CisJCQkJCQluZXh0X3N0YXRlID0gSU47CisJCQkJCSAgIGVuZAorCQkJCSAgIGVuZAorCQkJCWVsc2UKKwkJCQlpZihPVVRfZXAgfCAoQ1RSTF9lcCAmIChwaWRfT1VUIHwgcGlkX1NFVFVQKSkpCisJCQkJICAgYmVnaW4KKwkJCQkJcnhfZG1hX2VuID0gMSdiMTsKKwkJCQkJbmV4dF9zdGF0ZSA9IE9VVDsKKwkJCQkgICBlbmQKKwkJCSAgIGVuZAorCQkgICBlbmQKKworCSAgIFRPS0VOOgorCQkgICBiZWdpbgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorYGlmZGVmIFVTQkZfVkVSQk9TRV9ERUJVRworCQkkZGlzcGxheSgiUEU6IEVudGVyZWQgc3RhdGUgVE9LRU4gKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisJCQluZXh0X3N0YXRlID0gSURMRTsKKwkJICAgZW5kCisKKwkgICBJTjoKKwkJICAgYmVnaW4KKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2BpZmRlZiBVU0JGX1ZFUkJPU0VfREVCVUcKKwkJJGRpc3BsYXkoIlBFOiBFbnRlcmVkIHN0YXRlIElOICgldCkiLCAkdGltZSk7CitgZW5kaWYKK2BpZmRlZiBVU0JGX0RFQlVHCisJCWlmKGlkbWFfZG9uZSA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBJTjogaWRtYV9kb25lIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKHR4ZnJfaXNvID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IElOOiB0eGZyX2lzbyBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworYGVuZGlmCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKwkJCXJ4X2Fja190b19jbHJfZCA9IDEnYjA7CisJCQlpZihpZG1hX2RvbmUpCisJCQkgICBiZWdpbgorCQkJCWlmKHR4ZnJfaXNvKQluZXh0X3N0YXRlID0gVVBEQVRFOworCQkJCWVsc2UJCW5leHRfc3RhdGUgPSBJTjI7CisJCQkgICBlbmQKKworCQkgICBlbmQKKwkgICBJTjI6CisJCSAgIGJlZ2luCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCitgaWZkZWYgVVNCRl9WRVJCT1NFX0RFQlVHCisJCSRkaXNwbGF5KCJQRTogRW50ZXJlZCBzdGF0ZSBJTjIgKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorYGlmZGVmIFVTQkZfREVCVUcKKwkJaWYocnhfYWNrX3RvID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IElOMjogcnhfYWNrX3RvIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKHRva2VuX3ZhbGlkID09PSAxJ2J4KSRkaXNwbGF5KCJFUlJPUjogSU4yOiB0b2tlbl92YWxpZCBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihwaWRfQUNLID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IElOMjogcGlkX0FDSyBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworYGVuZGlmCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKwkJCXJ4X2Fja190b19jbHJfZCA9IDEnYjA7CisJCQkvLyBXYWl0IGZvciBBQ0sgZnJvbSBIT1NUIG9yIFRpbWVvdXQKKwkJCWlmKHJ4X2Fja190bykJbmV4dF9zdGF0ZSA9IElETEU7CisJCQllbHNlCisJCQlpZih0b2tlbl92YWxpZCAmIHBpZF9BQ0spCisJCQkgICBiZWdpbgorCQkJCW5leHRfc3RhdGUgPSBVUERBVEU7CisJCQkgICBlbmQKKwkJICAgZW5kCisKKwkgICBPVVQ6CisJCSAgIGJlZ2luCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCitgaWZkZWYgVVNCRl9WRVJCT1NFX0RFQlVHCisJCSRkaXNwbGF5KCJQRTogRW50ZXJlZCBzdGF0ZSBPVVQgKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorYGlmZGVmIFVTQkZfREVCVUcKKwkJaWYodHhfZGF0YV90byA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBPVVQ6IHR4X2RhdGFfdG8gaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYoY3JjMTZfZXJyID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IE9VVDogY3JjMTZfZXJyIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CisJCWlmKGFib3J0ID09PSAxJ2J4KQkkZGlzcGxheSgiRVJST1I6IE9VVDogYWJvcnQgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYocnhfZGF0YV9kb25lID09PSAxJ2J4KSRkaXNwbGF5KCJFUlJPUjogT1VUOiByeF9kYXRhX2RvbmUgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYodHhmcl9pc28gPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogT1VUOiB0eGZyX2lzbyBpcyB1bmtub3duLiAoJXQpIiwgJHRpbWUpOworCQlpZihwaWRfc2VxX2VyciA9PT0gMSdieCkkZGlzcGxheSgiRVJST1I6IE9VVDogcnhfZGF0YV9kb25lIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CitgZW5kaWYKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCQkJaWYodHhfZGF0YV90byB8IGNyYzE2X2VyciB8IGFib3J0ICkKKwkJCQluZXh0X3N0YXRlID0gSURMRTsKKwkJCWVsc2UKKwkJCWlmKHJ4X2RhdGFfZG9uZSkKKwkJCSAgIGJlZ2luCQkvLyBTZW5kIEFjaworCQkJCWlmKHR4ZnJfaXNvKQorCQkJCSAgIGJlZ2luCisJCQkJCWlmKHBpZF9zZXFfZXJyKQkJaW50X3NlcWVycl9zZXRfZCA9IDEnYjE7CisJCQkJCW5leHRfc3RhdGUgPSBVUERBVEVXOworCQkJCSAgIGVuZAorCQkJCWVsc2UJCW5leHRfc3RhdGUgPSBPVVQyQTsKKwkJCSAgIGVuZAorCQkgICBlbmQKKworCSAgIE9VVDJCOgorCQkgICBiZWdpbgkvLyBUaGlzIGlzIGEgZGVsYXkgU3RhdGUgdG8gTkFDSyB0byBzbWFsbCBvciB0bworCQkJCS8vIGxhcmdlIHBhY2tldHMuIHRoaXMgc3RhdGUgY291bGQgYmUgc2tpcHBlZAorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorYGlmZGVmIFVTQkZfVkVSQk9TRV9ERUJVRworCQkkZGlzcGxheSgiUEU6IEVudGVyZWQgc3RhdGUgT1VUMkIgKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorYGlmZGVmIFVTQkZfREVCVUcKKwkJaWYoYWJvcnQgPT09IDEnYngpCSRkaXNwbGF5KCJFUlJPUjogT1VUMkE6IGFib3J0IGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CitgZW5kaWYKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCQkJaWYoYWJvcnQpCW5leHRfc3RhdGUgPSBJRExFOworCQkJZWxzZQkJbmV4dF9zdGF0ZSA9IE9VVDJCOworCQkgICBlbmQKKwkgICBPVVQyQToKKwkJICAgYmVnaW4JLy8gU2VuZCBBQ0svTkFDSy9OWUVUCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCitgaWZkZWYgVVNCRl9WRVJCT1NFX0RFQlVHCisJCSRkaXNwbGF5KCJQRTogRW50ZXJlZCBzdGF0ZSBPVVQyQSAoJXQpIiwgJHRpbWUpOworYGVuZGlmCitgaWZkZWYgVVNCRl9ERUJVRworCQlpZihhYm9ydCA9PT0gMSdieCkJJGRpc3BsYXkoIkVSUk9SOiBPVVQyQTogYWJvcnQgaXMgdW5rbm93bi4gKCV0KSIsICR0aW1lKTsKKwkJaWYocGlkX3NlcV9lcnIgPT09IDEnYngpJGRpc3BsYXkoIkVSUk9SOiBPVVQyQTogcnhfZGF0YV9kb25lIGlzIHVua25vd24uICgldCkiLCAkdGltZSk7CitgZW5kaWYKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCQkJaWYoYWJvcnQpCW5leHRfc3RhdGUgPSBJRExFOworCQkJZWxzZQorCisJCQlpZihzZW5kX3N0YWxsX3IpCisJCQkgICBiZWdpbgorCQkJCXRva2VuX3BpZF9zZWxfZCA9IFNUQUxMOworCQkJCXNlbmRfdG9rZW5fZCA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IElETEU7CisJCQkgICBlbmQKKwkJCWVsc2UKKwkJCWlmKGVwX2Z1bGwpCisJCQkgICBiZWdpbgorCQkJCXRva2VuX3BpZF9zZWxfZCA9IE5BQ0s7CisJCQkJc2VuZF90b2tlbl9kID0gMSdiMTsKKwkJCQluZXh0X3N0YXRlID0gSURMRTsKKwkJCSAgIGVuZAorCQkJZWxzZQorCQkJICAgYmVnaW4KKwkJCQl0b2tlbl9waWRfc2VsX2QgPSBBQ0s7CisJCQkJc2VuZF90b2tlbl9kID0gMSdiMTsKKwkJCQlpZihwaWRfc2VxX2VycikJbmV4dF9zdGF0ZSA9IElETEU7CisJCQkJZWxzZQkJbmV4dF9zdGF0ZSA9IFVQREFURTsKKwkJCSAgIGVuZAorCQkgICBlbmQKKworCSAgIFVQREFURVc6CisJCSAgIGJlZ2luCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCitgaWZkZWYgVVNCRl9WRVJCT1NFX0RFQlVHCisJCSRkaXNwbGF5KCJQRTogRW50ZXJlZCBzdGF0ZSBVUERBVEVXICgldCkiLCAkdGltZSk7CitgZW5kaWYKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCQkJbmV4dF9zdGF0ZSA9IFVQREFURTsKKwkJICAgZW5kCisKKwkgICBVUERBVEU6CisJCSAgIGJlZ2luCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCitgaWZkZWYgVVNCRl9WRVJCT1NFX0RFQlVHCisJCSRkaXNwbGF5KCJQRTogRW50ZXJlZCBzdGF0ZSBVUERBVEUgKCV0KSIsICR0aW1lKTsKK2BlbmRpZgorLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisJCQl1Y19zdGF0X3NldF9kID0gMSdiMTsKKwkJCW5leHRfc3RhdGUgPSBJRExFOworCQkgICBlbmQKKwllbmRjYXNlCisgICBlbmQKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9wbC52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3BsLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYThhMjgxYwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9wbC52CkBAIC0wLDAgKzEsNDE5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUHJvdG9jb2wgTGF5ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGJsb2NrIGlzIHR5cGljYWxseSByZWZlcnJlZCB0byBhcyB0aGUgU0VJIGluIFVTQiAgICAgIC8vLy8KKy8vLy8gIFNwZWNpZmljYXRpb24uIEl0IGVuY2Fwc3VsYXRlcyB0aGUgUGFja2V0IEFzc2VtYmxlciwgICAgICAgLy8vLworLy8vLyAgZGlzYXNzZW1ibGVyLCBwcm90b2NvbCBlbmdpbmUgYW5kIGludGVybmFsIERNQSAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiMV9mdWNudC8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiMV9wbC52LHYgMS4yIDIwMDItMDktMjUgMDY6MDY6NDkgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMi0wOS0yNSAwNjowNjo0OSAkCisvLyAgJFJldmlzaW9uOiAxLjIgJAorLy8gICRBdXRob3I6IHJ1ZGkgJAorLy8gICRMb2NrZXI6ICAkCisvLyAgJFN0YXRlOiBFeHAgJAorLy8KKy8vIENoYW5nZSBIaXN0b3J5OgorLy8gICAgICAgICAgICAgICAkTG9nOiBub3Qgc3VwcG9ydGVkIGJ5IGN2czJzdm4gJAorLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjEuMS4xICAyMDAyLzA5LzE5IDEyOjA3OjI4ICBydWRpCisvLyAgICAgICAgICAgICAgIEluaXRpYWwgQ2hlY2tpbgorLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworYGluY2x1ZGUgInVzYjFkX2RlZmluZXMudiIKKworbW9kdWxlIHVzYjFkX3BsKAljbGssIHJzdCwKKworCQkvLyBVVE1JIEludGVyZmFjZQorCQlyeF9kYXRhLCByeF92YWxpZCwgcnhfYWN0aXZlLCByeF9lcnIsCisJCXR4X2RhdGEsIHR4X3ZhbGlkLCB0eF92YWxpZF9sYXN0LCB0eF9yZWFkeSwKKwkJdHhfZmlyc3QsIHR4X3ZhbGlkX291dCwKKworCQl0b2tlbl92YWxpZCwKKworCQkvLyBSZWdpc3RlciBGaWxlIEludGVyZmFjZQorCQlmYSwKKwkJZXBfc2VsLCAKKwkJeF9idXN5LAorCQlpbnRfY3JjMTZfc2V0LCBpbnRfdG9fc2V0LCBpbnRfc2VxZXJyX3NldCwKKworCQkvLyBNaXNjCisJCWZybV9uYXQsCisJCXBpZF9jc19lcnIsIG5zZV9lcnIsCisJCWNyYzVfZXJyLAorCQlyeF9zaXplLCByeF9kb25lLAorCQljdHJsX3NldHVwLCBjdHJsX2luLCBjdHJsX291dCwKKworCQkvLyBCbG9jayBGcmFtZXMKKwkJZXBfYmZfZW4sIGVwX2JmX3NpemUsCisJCWRyb3BwZWRfZnJhbWUsIG1pc2FsaWduZWRfZnJhbWUsCisKKwkJLy8gRVAgSW50ZXJmYWNlCisJCWNzciwKKwkJdHhfZGF0YV9zdCwgCisJCXJ4X2N0cmxfZGF0YSwgCisJCXJ4X2N0cmxfZGF0YV9kLCAKKwkJcnhfY3RybF9kdmFsaWQsCisJCXJ4X2N0cmxfZGRvbmUsCisJCWlkbWFfcmUsIGlkbWFfd2UsCisJCWVwX2VtcHR5LCBlcF9mdWxsLCBzZW5kX3N0YWxsCisKKwkJKTsKKworLy8gVVRNSSBJbnRlcmZhY2UKK2lucHV0CQljbGssIHJzdDsKK2lucHV0CVs3OjBdCXJ4X2RhdGE7CitpbnB1dAkJcnhfdmFsaWQsIHJ4X2FjdGl2ZSwgcnhfZXJyOworb3V0cHV0CVs3OjBdCXR4X2RhdGE7CitvdXRwdXQJCXR4X3ZhbGlkOworb3V0cHV0CQl0eF92YWxpZF9sYXN0OworaW5wdXQJCXR4X3JlYWR5Oworb3V0cHV0CQl0eF9maXJzdDsKK2lucHV0CQl0eF92YWxpZF9vdXQ7CisKK291dHB1dAkJdG9rZW5fdmFsaWQ7CisKKy8vIFJlZ2lzdGVyIEZpbGUgaW50ZXJmYWNlCitpbnB1dAlbNjowXQlmYTsJCS8vIEZ1bmN0aW9uIEFkZHJlc3MgKGFzIHNldCBieSB0aGUgY29udHJvbGxlcikKK291dHB1dAlbMzowXQllcF9zZWw7CQkvLyBFbmRwb2ludCBOdW1iZXIgSW5wdXQKK291dHB1dAkJeF9idXN5OwkJLy8gSW5kaWNhdGVzIFVTQiBpcyBidXN5CisKK291dHB1dAkJaW50X2NyYzE2X3NldDsJLy8gU2V0IENSQzE2IGVycm9yIGludGVycnVwdAorb3V0cHV0CQlpbnRfdG9fc2V0OwkvLyBTZXQgdGltZSBvdXQgaW50ZXJydXB0CitvdXRwdXQJCWludF9zZXFlcnJfc2V0OwkvLyBTZXQgUElEIHNlcXVlbmNlIGVycm9yIGludGVycnVwdAorCisvLyBNaXNjCitvdXRwdXQJCXBpZF9jc19lcnI7CS8vIHBpZCBjaGVja3N1bSBlcnJvcgorb3V0cHV0CQljcmM1X2VycjsJLy8gY3JjNSBlcnJvcgorb3V0cHV0CVszMTowXQlmcm1fbmF0Oworb3V0cHV0CQluc2VfZXJyOwkvLyBubyBzdWNoIGVuZHBvaW50IGVycm9yCitvdXRwdXQJWzc6MF0Jcnhfc2l6ZTsKK291dHB1dAkJcnhfZG9uZTsKK291dHB1dAkJY3RybF9zZXR1cDsKK291dHB1dAkJY3RybF9pbjsKK291dHB1dAkJY3RybF9vdXQ7CitpbnB1dAkJZXBfYmZfZW47CitpbnB1dAlbNjowXQllcF9iZl9zaXplOworb3V0cHV0CQlkcm9wcGVkX2ZyYW1lLCBtaXNhbGlnbmVkX2ZyYW1lOworCisvLyBFbmRwb2ludCBJbnRlcmZhY2VzCitpbnB1dAlbMTM6MF0JY3NyOwkKK2lucHV0CVs3OjBdCXR4X2RhdGFfc3Q7CitvdXRwdXQJWzc6MF0JcnhfY3RybF9kYXRhOworb3V0cHV0CVs3OjBdCXJ4X2N0cmxfZGF0YV9kOworb3V0cHV0CQlyeF9jdHJsX2R2YWxpZDsKK291dHB1dAkJcnhfY3RybF9kZG9uZTsKK291dHB1dAkJaWRtYV9yZSwgaWRtYV93ZTsKK2lucHV0CQllcF9lbXB0eTsKK2lucHV0CQllcF9mdWxsOworCitpbnB1dAkJc2VuZF9zdGFsbDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIExvY2FsIFdpcmVzIGFuZCBSZWdpc3RlcnMKKy8vCisKKy8vIFBhY2tldCBEaXNhc3NlbWJsZXIgSW50ZXJmYWNlCit3aXJlCQljbGssIHJzdDsKK3dpcmUJWzc6MF0JcnhfZGF0YTsKK3dpcmUJCXBpZF9PVVQsIHBpZF9JTiwgcGlkX1NPRiwgcGlkX1NFVFVQOword2lyZQkJcGlkX0RBVEEwLCBwaWRfREFUQTEsIHBpZF9EQVRBMiwgcGlkX01EQVRBOword2lyZQkJcGlkX0FDSywgcGlkX05BQ0ssIHBpZF9TVEFMTCwgcGlkX05ZRVQ7Cit3aXJlCQlwaWRfUFJFLCBwaWRfRVJSLCBwaWRfU1BMSVQsIHBpZF9QSU5HOword2lyZQlbNjowXQl0b2tlbl9mYWRyOword2lyZQkJdG9rZW5fdmFsaWQ7Cit3aXJlCQljcmM1X2VycjsKK3dpcmUJWzEwOjBdCWZyYW1lX25vOword2lyZQlbNzowXQlyeF9jdHJsX2RhdGE7CityZWcJWzc6MF0JcnhfY3RybF9kYXRhX2Q7Cit3aXJlCQlyeF9jdHJsX2R2YWxpZDsKK3dpcmUJCXJ4X2N0cmxfZGRvbmU7Cit3aXJlCQljcmMxNl9lcnI7Cit3aXJlCQlyeF9zZXFfZXJyOworCisvLyBQYWNrZXQgQXNzZW1ibGVyIEludGVyZmFjZQord2lyZQkJc2VuZF90b2tlbjsKK3dpcmUJWzE6MF0JdG9rZW5fcGlkX3NlbDsKK3dpcmUJCXNlbmRfZGF0YTsKK3dpcmUJWzE6MF0JZGF0YV9waWRfc2VsOword2lyZQlbNzowXQl0eF9kYXRhX3N0Oword2lyZQlbNzowXQl0eF9kYXRhX3N0X287Cit3aXJlCQlyZF9uZXh0OworCisvLyBJRE1BIEludGVyZmFjZQord2lyZQkJcnhfZG1hX2VuOwkvLyBBbGxvd3MgdGhlIGRhdGEgdG8gYmUgc3RvcmVkCit3aXJlCQl0eF9kbWFfZW47CS8vIEFsbG93cyBmb3IgZGF0YSB0byBiZSByZXRyaWV2ZWQKK3dpcmUJCWFib3J0OwkJLy8gQWJvcnQgVHJhbnNmZXIgKHRpbWVfb3V0LCBjcmNfZXJyIG9yIHJ4X2Vycm9yKQord2lyZQkJaWRtYV9kb25lOwkvLyBETUEgaXMgZG9uZQorCisvLyBNZW1vcnkgQXJiaXRlciBJbnRlcmZhY2UKK3dpcmUJCWlkbWFfd2U7Cit3aXJlCQlpZG1hX3JlOworCisvLyBMb2NhbCBzaWduYWxzCit3aXJlCQlwaWRfYmFkOworCityZWcJCWhtc19jbGs7CS8vIDAuNSBNaWNybyBTZWNvbmQgQ2xvY2sKK3JlZwlbNDowXQlobXNfY250OworcmVnCVsxMDowXQlmcmFtZV9ub19yOwkvLyBDdXJyZW50IEZyYW1lIE51bWJlciByZWdpc3Rlcgord2lyZQkJZnJhbWVfbm9fd2U7CityZWcJWzExOjBdCXNvZl90aW1lOwkvLyBUaW1lIHNpbmNlIGxhc3Qgc29mCityZWcJCWNscl9zb2ZfdGltZTsKK3dpcmUJCWZzZWw7CQkvLyBUaGlzIEZ1bmN0aW9uIGlzIHNlbGVjdGVkCit3aXJlCQltYXRjaF9vOworCityZWcJCWZyYW1lX25vX3dlX3I7CityZWcJCWN0cmxfc2V0dXA7CityZWcJCWN0cmxfaW47CityZWcJCWN0cmxfb3V0OworCit3aXJlCQlpZG1hX3dlX2Q7Cit3aXJlCQllcF9lbXB0eV9pbnQ7Cit3aXJlCQlyeF9idXN5Oword2lyZQkJdHhfYnVzeTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1pc2MgTG9naWMKKy8vCisKK2Fzc2lnbiB4X2J1c3kgPSB0eF9idXN5IHwgcnhfYnVzeTsKKworLy8gUElEcyB3ZSBzaG91bGQgbmV2ZXIgcmVjZWl2ZQorYXNzaWduIHBpZF9iYWQgPSBwaWRfQUNLIHwgcGlkX05BQ0sgfCBwaWRfU1RBTEwgfCBwaWRfTllFVCB8IHBpZF9QUkUgfAorCQkJcGlkX0VSUiB8IHBpZF9TUExJVCB8ICBwaWRfUElORzsKKworYXNzaWduIG1hdGNoX28gPSAhcGlkX2JhZCAmIHRva2VuX3ZhbGlkICYgIWNyYzVfZXJyOworCisvLyBSZWNlaXZpbmcgU2V0dXAKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWN0cmxfc2V0dXAgPD0gIzEgdG9rZW5fdmFsaWQgJiBwaWRfU0VUVVAgJiAoZXBfc2VsPT00J2gwKTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJY3RybF9pbiA8PSAjMSB0b2tlbl92YWxpZCAmIHBpZF9JTiAmIChlcF9zZWw9PTQnaDApOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwljdHJsX291dCA8PSAjMSB0b2tlbl92YWxpZCAmIHBpZF9PVVQgJiAoZXBfc2VsPT00J2gwKTsKKworLy8gRnJhbWUgTnVtYmVyIChmcm9tIFNPRiB0b2tlbikKK2Fzc2lnbiBmcmFtZV9ub193ZSA9IHRva2VuX3ZhbGlkICYgIWNyYzVfZXJyICYgcGlkX1NPRjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJZnJhbWVfbm9fd2VfciA8PSAjMSBmcmFtZV9ub193ZTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJCWZyYW1lX25vX3IgPD0gIzEgMTEnaDA7CisJZWxzZQorCWlmKGZyYW1lX25vX3dlX3IpCWZyYW1lX25vX3IgPD0gIzEgZnJhbWVfbm87CisKKy8vU09GIGRlbGF5IGNvdW50ZXIKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWNscl9zb2ZfdGltZSA8PSAjMSBmcmFtZV9ub193ZTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoY2xyX3NvZl90aW1lKQlzb2ZfdGltZSA8PSAjMSAxMidoMDsKKwllbHNlCisJaWYoaG1zX2NsaykJCXNvZl90aW1lIDw9ICMxIHNvZl90aW1lICsgMTInaDE7CisKK2Fzc2lnbiBmcm1fbmF0ID0gezQnaDAsIDEnYjAsIGZyYW1lX25vX3IsIDQnaDAsIHNvZl90aW1lfTsKKworLy8gMC41IE1pY3JvIFNlY29uZHMgQ2xvY2sgR2VuZXJhdG9yCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdCkKKwlpZighcnN0KQkJCQlobXNfY250IDw9ICMxIDUnaDA7CisJZWxzZQorCWlmKGhtc19jbGsgfCBmcmFtZV9ub193ZV9yKQkJaG1zX2NudCA8PSAjMSA1J2gwOworCWVsc2UJCQkJCWhtc19jbnQgPD0gIzEgaG1zX2NudCArIDUnaDE7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWhtc19jbGsgPD0gIzEgKGhtc19jbnQgPT0gYFVTQkZfSE1TX0RFTCk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCXJ4X2N0cmxfZGF0YV9kIDw9IHJ4X2N0cmxfZGF0YTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBUaGlzIGZ1bmN0aW9uIGlzIGFkZHJlc3NlZAorYXNzaWduIGZzZWwgPSAodG9rZW5fZmFkciA9PSBmYSk7CisKKy8vIE9ubHkgd3JpdGUgd2hlbiB3ZSBhcmUgYWRkcmVzc2VkICEhIQorYXNzaWduIGlkbWFfd2UgPSBpZG1hX3dlX2QgJiBmc2VsOyAvLyBtb3ZlZCBmdWxsIGNoZWNrIHRvIGlkbWEgLi4uICAmICFlcF9mdWxsOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTW9kdWxlIEluc3RhbnRpYXRpb25zCisvLworCisvL1BhY2tldCBEZWNvZGVyCit1c2IxZF9wZAl1MCgJLmNsaygJCWNsawkJKSwKKwkJLnJzdCgJCXJzdAkJKSwKKworCQkucnhfZGF0YSgJcnhfZGF0YQkJKSwKKwkJLnJ4X3ZhbGlkKAlyeF92YWxpZAkpLAorCQkucnhfYWN0aXZlKAlyeF9hY3RpdmUJKSwKKwkJLnJ4X2VycigJcnhfZXJyCQkpLAorCQkucGlkX09VVCgJcGlkX09VVAkJKSwKKwkJLnBpZF9JTigJcGlkX0lOCQkpLAorCQkucGlkX1NPRigJcGlkX1NPRgkJKSwKKwkJLnBpZF9TRVRVUCgJcGlkX1NFVFVQCSksCisJCS5waWRfREFUQTAoCXBpZF9EQVRBMAkpLAorCQkucGlkX0RBVEExKAlwaWRfREFUQTEJKSwKKwkJLnBpZF9EQVRBMigJcGlkX0RBVEEyCSksCisJCS5waWRfTURBVEEoCXBpZF9NREFUQQkpLAorCQkucGlkX0FDSygJcGlkX0FDSwkJKSwKKwkJLnBpZF9OQUNLKAlwaWRfTkFDSwkpLAorCQkucGlkX1NUQUxMKAlwaWRfU1RBTEwJKSwKKwkJLnBpZF9OWUVUKAlwaWRfTllFVAkpLAorCQkucGlkX1BSRSgJcGlkX1BSRQkJKSwKKwkJLnBpZF9FUlIoCXBpZF9FUlIJCSksCisJCS5waWRfU1BMSVQoCXBpZF9TUExJVAkpLAorCQkucGlkX1BJTkcoCXBpZF9QSU5HCSksCisJCS5waWRfY2tzX2VycigJcGlkX2NzX2VycgkpLAorCQkudG9rZW5fZmFkcigJdG9rZW5fZmFkcgkpLAorCQkudG9rZW5fZW5kcCgJZXBfc2VsCQkpLAorCQkudG9rZW5fdmFsaWQoCXRva2VuX3ZhbGlkCSksCisJCS5jcmM1X2VycigJY3JjNV9lcnIJKSwKKwkJLmZyYW1lX25vKAlmcmFtZV9ubwkpLAorCQkucnhfZGF0YV9zdCgJcnhfY3RybF9kYXRhCSksCisJCS5yeF9kYXRhX3ZhbGlkKAlyeF9jdHJsX2R2YWxpZAkpLAorCQkucnhfZGF0YV9kb25lKAlyeF9jdHJsX2Rkb25lCSksCisJCS5jcmMxNl9lcnIoCWNyYzE2X2VycgkpLAorCQkuc2VxX2VycigJcnhfc2VxX2VycgkpLAorCQkucnhfYnVzeSgJcnhfYnVzeQkJKQorCQkpOworCisvLyBQYWNrZXQgQXNzZW1ibGVyCit1c2IxZF9wYQl1MSgJLmNsaygJCWNsawkJKSwKKwkJLnJzdCgJCXJzdAkJKSwKKwkJLnR4X2RhdGEoCXR4X2RhdGEJCSksCisJCS50eF92YWxpZCgJdHhfdmFsaWQJKSwKKwkJLnR4X3ZhbGlkX2xhc3QoCXR4X3ZhbGlkX2xhc3QJKSwKKwkJLnR4X3JlYWR5KAl0eF9yZWFkeQkpLAorCQkudHhfZmlyc3QoCXR4X2ZpcnN0CSksCisJCS5zZW5kX3Rva2VuKAlzZW5kX3Rva2VuCSksCisJCS50b2tlbl9waWRfc2VsKAl0b2tlbl9waWRfc2VsCSksCisJCS5zZW5kX2RhdGEoCXNlbmRfZGF0YQkpLAorCQkuZGF0YV9waWRfc2VsKAlkYXRhX3BpZF9zZWwJKSwKKwkJLnR4X2RhdGFfc3QoCXR4X2RhdGFfc3RfbwkpLAorCQkucmRfbmV4dCgJcmRfbmV4dAkJKSwKKwkJLmVwX2VtcHR5KAllcF9lbXB0eV9pbnQpCisJCSk7CisKKy8vIEludGVybmFsIERNQSAvIE1lbW9yeSBBcmJpdGVyIEludGVyZmFjZQordXNiMWRfaWRtYQorCXUyKAkuY2xrKAkJY2xrCQkpLAorCQkucnN0KAkJcnN0CQkpLAorCisJCS50eF92YWxpZCgJdHhfdmFsaWQJKSwKKwkJLnJ4X2RhdGFfdmFsaWQoCXJ4X2N0cmxfZHZhbGlkCSksCisJCS5yeF9kYXRhX2RvbmUoCXJ4X2N0cmxfZGRvbmUJKSwKKwkJLnNlbmRfZGF0YSgJc2VuZF9kYXRhCSksCisJCS5yZF9uZXh0KAlyZF9uZXh0CQkpLAorCisJCS50eF9kYXRhX3N0X2koCXR4X2RhdGFfc3QJKSwKKwkJLnR4X2RhdGFfc3RfbygJdHhfZGF0YV9zdF9vCSksCisJCS5lcF9zZWwoCWVwX3NlbAkJKSwKKworCQkuZXBfYmZfZW4oCWVwX2JmX2VuCSksCisJCS5lcF9iZl9zaXplKAllcF9iZl9zaXplCSksCisJCS5kcm9wcGVkX2ZyYW1lKGRyb3BwZWRfZnJhbWUJKSwKKwkJLm1pc2FsaWduZWRfZnJhbWUobWlzYWxpZ25lZF9mcmFtZSksCisKKwkJLnR4X2J1c3koCXR4X2J1c3kJCSksCisKKwkJLnR4X2RtYV9lbigJdHhfZG1hX2VuCSksCisJCS5yeF9kbWFfZW4oCXJ4X2RtYV9lbgkpLAorCQkuaWRtYV9kb25lKAlpZG1hX2RvbmUJKSwKKwkJLnNpemUoCQljc3JbODowXQkpLAorCQkucnhfY250KAlyeF9zaXplCQkpLAorCQkucnhfZG9uZSgJcnhfZG9uZQkJKSwKKwkJLm13ZSgJCWlkbWFfd2VfZAkpLAorCQkubXJlKAkJaWRtYV9yZQkJKSwKKwkJLmVwX2VtcHR5KAllcF9lbXB0eQkpLAorCQkuZXBfZW1wdHlfaW50KAllcF9lbXB0eV9pbnQJKSwKKwkJLmVwX2Z1bGwoCWVwX2Z1bGwJCSkKKwkJKTsKKworLy8gUHJvdG9jb2wgRW5naW5lCit1c2IxZF9wZQorCXUzKAkuY2xrKAkJCWNsawkJCSksCisJCS5yc3QoCQkJcnN0CQkJKSwKKworCQkudHhfdmFsaWQoCQl0eF92YWxpZF9vdXQJCSksCisJCS5yeF9hY3RpdmUoCQlyeF9hY3RpdmUJCSksCisJCS5waWRfT1VUKAkJcGlkX09VVAkJCSksCisJCS5waWRfSU4oCQlwaWRfSU4JCQkpLAorCQkucGlkX1NPRigJCXBpZF9TT0YJCQkpLAorCQkucGlkX1NFVFVQKAkJcGlkX1NFVFVQCQkpLAorCQkucGlkX0RBVEEwKAkJcGlkX0RBVEEwCQkpLAorCQkucGlkX0RBVEExKAkJcGlkX0RBVEExCQkpLAorCQkucGlkX0RBVEEyKAkJcGlkX0RBVEEyCQkpLAorCQkucGlkX01EQVRBKAkJcGlkX01EQVRBCQkpLAorCQkucGlkX0FDSygJCXBpZF9BQ0sJCQkpLAorCQkucGlkX1BJTkcoCQlwaWRfUElORwkJKSwKKwkJLnRva2VuX3ZhbGlkKAkJdG9rZW5fdmFsaWQJCSksCisJCS5yeF9kYXRhX2RvbmUoCQlyeF9jdHJsX2Rkb25lCQkpLAorCQkuY3JjMTZfZXJyKAkJY3JjMTZfZXJyCQkpLAorCQkuc2VuZF90b2tlbigJCXNlbmRfdG9rZW4JCSksCisJCS50b2tlbl9waWRfc2VsKAkJdG9rZW5fcGlkX3NlbAkJKSwKKwkJLmRhdGFfcGlkX3NlbCgJCWRhdGFfcGlkX3NlbAkJKSwKKwkJLnJ4X2RtYV9lbigJCXJ4X2RtYV9lbgkJKSwKKwkJLnR4X2RtYV9lbigJCXR4X2RtYV9lbgkJKSwKKwkJLmFib3J0KAkJCWFib3J0CQkJKSwKKwkJLmlkbWFfZG9uZSgJCWlkbWFfZG9uZQkJKSwKKwkJLmZzZWwoCQkJZnNlbAkJCSksCisJCS5lcF9zZWwoCQllcF9zZWwJCQkpLAorCQkuZXBfZnVsbCgJCWVwX2Z1bGwJCQkpLAorCQkuZXBfZW1wdHkoCQllcF9lbXB0eQkJKSwKKwkJLm1hdGNoKAkJCW1hdGNoX28JCQkpLAorCQkubnNlX2VycigJCW5zZV9lcnIJCQkpLAorCQkuaW50X3VwaWRfc2V0KAkJICAgICAgICAgCQkpLAorCQkuaW50X2NyYzE2X3NldCgJCWludF9jcmMxNl9zZXQJCSksCisJCS5pbnRfdG9fc2V0KAkJaW50X3RvX3NldAkJKSwKKwkJLmludF9zZXFlcnJfc2V0KAlpbnRfc2VxZXJyX3NldAkJKSwKKwkJLmNzcigJCQljc3IJCQkpLAorCQkuc2VuZF9zdGFsbCgJCXNlbmRfc3RhbGwJCSkKKwkJKTsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfcm9tMS52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3JvbTEudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZTc1M2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3JvbTEudgpAQCAtMCwwICsxLDI0MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0b3IgUk9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiMV9mdW5jdC8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiMV9yb20xLnYsdiAxLjEuMS4xIDIwMDItMDktMTkgMTI6MDc6MjkgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMi0wOS0xOSAxMjowNzoyOSAkCisvLyAgJFJldmlzaW9uOiAxLjEuMS4xICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vCisvLworLy8KKy8vCisvLworCitgaW5jbHVkZSAidXNiMWRfZGVmaW5lcy52IgorCittb2R1bGUgdXNiMWRfcm9tMShjbGssIGFkciwgZG91dCk7CitpbnB1dAkJY2xrOworaW5wdXQJWzY6MF0JYWRyOworb3V0cHV0CVs3OjBdCWRvdXQ7CisKK3JlZwlbNzowXQlkb3V0OworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwljYXNlKGFkcikJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKworCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gPT09PT0gICAgREVWSUNFIERlc2NyaXB0b3IgICAgID09PT09CisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJICAgNydoMDA6CWRvdXQgPD0gIzEgOCdkMTg7CS8vIHRoaXMgZGVzY3JpcHRvciBsZW5ndGgKKwkgICA3J2gwMToJZG91dCA8PSAjMSA4J2gwMTsJLy8gZGVzY3JpcHRvciB0eXBlCisJICAgNydoMDI6CWRvdXQgPD0gIzEgOCdoMDA7CS8vIFVTQiB2ZXJzaW9uIGxvdyBieXRlCisJICAgNydoMDM6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIFVTQiB2ZXJzaW9uIGhpZ2ggYnl0ZQorCSAgIDcnaDA0Oglkb3V0IDw9ICMxIDgnaGZmOwkvLyBkZXZpY2UgY2xhc3MKKwkgICA3J2gwNToJZG91dCA8PSAjMSA4J2gwMDsJLy8gZGV2aWNlIHN1YiBjbGFzcworCSAgIDcnaDA2Oglkb3V0IDw9ICMxIDgnaGZmOwkvLyBkZXZpY2UgcHJvdG9jb2wKKwkgICA3J2gwNzoJZG91dCA8PSAjMSA4J2Q2NDsJLy8gbWF4IHBhY2tldCBzaXplCisJICAgNydoMDg6CWRvdXQgPD0gIzEgOCdoMzQ7CS8vIHZlbmRvciBJRCBsb3cgYnl0ZQorCSAgIDcnaDA5Oglkb3V0IDw9ICMxIDgnaDEyOwkvLyB2ZW5kb3IgSUQgaGlnaCBieXRlCisJICAgNydoMGE6CWRvdXQgPD0gIzEgOCdoNzg7CS8vIHByb2R1Y3QgSUQgbG93IGJ5dGUKKwkgICA3J2gwYjoJZG91dCA8PSAjMSA4J2g1NjsJLy8gcHJvZHVjdCBJRCBoaWdoIGJ5dGUKKwkgICA3J2gwYzoJZG91dCA8PSAjMSA4J2gxMDsJLy8gZGV2aWNlIHJlbC4gbnVtYmVyIGxvdyBieXRlCisJICAgNydoMGQ6CWRvdXQgPD0gIzEgOCdoMDA7CS8vIGRldmljZSByZWwuIG51bWJlciBoaWdoIGJ5dGUKKwkgICA3J2gwZToJZG91dCA8PSAjMSA4J2gwMDsJLy8gTWFudWZhY3R1cmVyIFN0cmluZyBJbmRleAorCSAgIDcnaDBmOglkb3V0IDw9ICMxIDgnaDAwOwkvLyBQcm9kdWN0IERlc2NyLiBTdHJpbmcgSW5kZXgKKwkgICA3J2gxMDoJZG91dCA8PSAjMSA4J2gwMDsJLy8gUy9OIFN0cmluZyBJbmRleAorCSAgIDcnaDExOglkb3V0IDw9ICMxIDgnaDAxOwkvLyBOdW1iZXIgb2YgcG9zc2libGUgY29uZmlnLgorCisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyA9PT09PSBDb25maWd1cmF0aW9uIERlc2NyaXB0b3IgPT09PT0KKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJICAgNydoMTI6CWRvdXQgPD0gIzEgOCdoMDk7CS8vIHRoaXMgZGVzY3JpcHRvciBsZW5ndGgKKwkgICA3J2gxMzoJZG91dCA8PSAjMSA4J2gwMjsJLy8gZGVzY3JpcHRvciB0eXBlCisJICAgNydoMTQ6CWRvdXQgPD0gIzEgOCdkNTM7CS8vIHRvdGFsIGRhdGEgbGVuZ3RoIGxvdyBieXRlCisJICAgNydoMTU6CWRvdXQgPD0gIzEgOCdkMDA7CS8vIHRvdGFsIGRhdGEgbGVuZ3RoIGhpZ2ggYnl0ZQorCSAgIDcnaDE2Oglkb3V0IDw9ICMxIDgnaDAxOwkvLyBudW1iZXIgb2YgaW50ZXJmYWNlcworCSAgIDcnaDE3Oglkb3V0IDw9ICMxIDgnaDAxOwkvLyBudW1iZXIgb2YgY29uZmlndXJhdGlvbnMKKwkgICA3J2gxODoJZG91dCA8PSAjMSA4J2gwMDsJLy8gQ29uZi4gU3RyaW5nIEluZGV4CisJICAgNydoMTk6CWRvdXQgPD0gIzEgOCdoNDA7CS8vIENvbmZpZy4gQ2hhcmFjdGVyaXN0aWNzCisJICAgNydoMWE6CWRvdXQgPD0gIzEgOCdoMDA7CS8vIE1heC4gUG93ZXIgQ29uc3VtcHRpb24KKworCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gPT09PT0gICBJbnRlcmZhY2UgRGVzY3JpcHRvciAgID09PT09CisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSAgIDcnaDFiOglkb3V0IDw9ICMxIDgnaDA5OwkvLyB0aGlzIGRlc2NyaXB0b3IgbGVuZ3RoCisJICAgNydoMWM6CWRvdXQgPD0gIzEgOCdoMDQ7CS8vIGRlc2NyaXB0b3IgdHlwZQorCSAgIDcnaDFkOglkb3V0IDw9ICMxIDgnaDAwOwkvLyBpbnRlcmZhY2UgbnVtYmVyCisJICAgNydoMWU6CWRvdXQgPD0gIzEgOCdoMDA7CS8vIGFsdGVybmF0ZSBzZXR0aW5nCisJICAgNydoMWY6CWRvdXQgPD0gIzEgOCdoMDU7CS8vIG51bWJlciBvZiBlbmRwb2ludHMKKwkgICA3J2gyMDoJZG91dCA8PSAjMSA4J2hmZjsJLy8gaW50ZXJmYWNlIGNsYXNzCisJICAgNydoMjE6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIGludGVyZmFjZSBzdWIgY2xhc3MKKwkgICA3J2gyMjoJZG91dCA8PSAjMSA4J2hmZjsJLy8gaW50ZXJmYWNlIHByb3RvY29sCisJICAgNydoMjM6CWRvdXQgPD0gIzEgOCdoMDA7CS8vIGludGVyZmFjZSBzdHJpbmcgaW5kZXgKKworCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gPT09PT0gICBFbmRwb2ludCAxIERlc2NyaXB0b3IgID09PT09CisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSAgIDcnaDI0Oglkb3V0IDw9ICMxIDgnaDA3OwkvLyB0aGlzIGRlc2NyaXB0b3IgbGVuZ3RoCisJICAgNydoMjU6CWRvdXQgPD0gIzEgOCdoMDU7CS8vIGRlc2NyaXB0b3IgdHlwZQorCSAgIDcnaDI2Oglkb3V0IDw9ICMxIDgnaDgxOwkvLyBlbmRwb2ludCBhZGRyZXNzCisJICAgNydoMjc6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIGVuZHBvaW50IGF0dHJpYnV0ZXMKKwkgICA3J2gyODoJZG91dCA8PSAjMSA4J2gwMDsJLy8gbWF4IHBhY2tldCBzaXplIGxvdyBieXRlCisJICAgNydoMjk6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIG1heCBwYWNrZXQgc2l6ZSBoaWdoIGJ5dGUKKwkgICA3J2gyYToJZG91dCA8PSAjMSA4J2gwMTsJLy8gcG9sbGluZyBpbnRlcnZhbAorCisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyA9PT09PSAgIEVuZHBvaW50IDIgRGVzY3JpcHRvciAgPT09PT0KKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJICAgNydoMmI6CWRvdXQgPD0gIzEgOCdoMDc7CS8vIHRoaXMgZGVzY3JpcHRvciBsZW5ndGgKKwkgICA3J2gyYzoJZG91dCA8PSAjMSA4J2gwNTsJLy8gZGVzY3JpcHRvciB0eXBlCisJICAgNydoMmQ6CWRvdXQgPD0gIzEgOCdoMDI7CS8vIGVuZHBvaW50IGFkZHJlc3MKKwkgICA3J2gyZToJZG91dCA8PSAjMSA4J2gwMTsJLy8gZW5kcG9pbnQgYXR0cmlidXRlcworCSAgIDcnaDJmOglkb3V0IDw9ICMxIDgnaDAwOwkvLyBtYXggcGFja2V0IHNpemUgbG93IGJ5dGUKKwkgICA3J2gzMDoJZG91dCA8PSAjMSA4J2gwMTsJLy8gbWF4IHBhY2tldCBzaXplIGhpZ2ggYnl0ZQorCSAgIDcnaDMxOglkb3V0IDw9ICMxIDgnaDAxOwkvLyBwb2xsaW5nIGludGVydmFsCisKKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vID09PT09ICAgRW5kcG9pbnQgMyBEZXNjcmlwdG9yICA9PT09PQorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkgICA3J2gzMjoJZG91dCA8PSAjMSA4J2gwNzsJLy8gdGhpcyBkZXNjcmlwdG9yIGxlbmd0aAorCSAgIDcnaDMzOglkb3V0IDw9ICMxIDgnaDA1OwkvLyBkZXNjcmlwdG9yIHR5cGUKKwkgICA3J2gzNDoJZG91dCA8PSAjMSA4J2g4MzsJLy8gZW5kcG9pbnQgYWRkcmVzcworCSAgIDcnaDM1Oglkb3V0IDw9ICMxIDgnaDAyOwkvLyBlbmRwb2ludCBhdHRyaWJ1dGVzCisJICAgNydoMzY6CWRvdXQgPD0gIzEgOCdkNjQ7CS8vIG1heCBwYWNrZXQgc2l6ZSBsb3cgYnl0ZQorCSAgIDcnaDM3Oglkb3V0IDw9ICMxIDgnZDAwOwkvLyBtYXggcGFja2V0IHNpemUgaGlnaCBieXRlCisJICAgNydoMzg6CWRvdXQgPD0gIzEgOCdoMDE7CS8vIHBvbGxpbmcgaW50ZXJ2YWwKKworCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gPT09PT0gICBFbmRwb2ludCA0IERlc2NyaXB0b3IgID09PT09CisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSAgIDcnaDM5Oglkb3V0IDw9ICMxIDgnaDA3OwkvLyB0aGlzIGRlc2NyaXB0b3IgbGVuZ3RoCisJICAgNydoM2E6CWRvdXQgPD0gIzEgOCdoMDU7CS8vIGRlc2NyaXB0b3IgdHlwZQorCSAgIDcnaDNiOglkb3V0IDw9ICMxIDgnaDA0OwkvLyBlbmRwb2ludCBhZGRyZXNzCisJICAgNydoM2M6CWRvdXQgPD0gIzEgOCdoMDI7CS8vIGVuZHBvaW50IGF0dHJpYnV0ZXMKKwkgICA3J2gzZDoJZG91dCA8PSAjMSA4J2Q2NDsJLy8gbWF4IHBhY2tldCBzaXplIGxvdyBieXRlCisJICAgNydoM2U6CWRvdXQgPD0gIzEgOCdkMDA7CS8vIG1heCBwYWNrZXQgc2l6ZSBoaWdoIGJ5dGUKKwkgICA3J2gzZjoJZG91dCA8PSAjMSA4J2gwMTsJLy8gcG9sbGluZyBpbnRlcnZhbAorCisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyA9PT09PSAgIEVuZHBvaW50IDUgRGVzY3JpcHRvciAgPT09PT0KKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJICAgNydoNDA6CWRvdXQgPD0gIzEgOCdoMDc7CS8vIHRoaXMgZGVzY3JpcHRvciBsZW5ndGgKKwkgICA3J2g0MToJZG91dCA8PSAjMSA4J2gwNTsJLy8gZGVzY3JpcHRvciB0eXBlCisJICAgNydoNDI6CWRvdXQgPD0gIzEgOCdoODU7CS8vIGVuZHBvaW50IGFkZHJlc3MKKwkgICA3J2g0MzoJZG91dCA8PSAjMSA4J2gwMzsJLy8gZW5kcG9pbnQgYXR0cmlidXRlcworCSAgIDcnaDQ0Oglkb3V0IDw9ICMxIDgnZDY0OwkvLyBtYXggcGFja2V0IHNpemUgbG93IGJ5dGUKKwkgICA3J2g0NToJZG91dCA8PSAjMSA4J2QwMDsJLy8gbWF4IHBhY2tldCBzaXplIGhpZ2ggYnl0ZQorCSAgIDcnaDQ2Oglkb3V0IDw9ICMxIDgnaDAxOwkvLyBwb2xsaW5nIGludGVydmFsCisKKy8qCisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyA9PT09PSBTdHJpbmcgRGVzY3JpcHRvciBMYW5nIElEPT09PT0KKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkgICA3J2g0NzoJZG91dCA8PSAjMSA4J2QwNjsJLy8gdGhpcyBkZXNjcmlwdG9yIGxlbmd0aAorCSAgIDcnaDQ4Oglkb3V0IDw9ICMxIDgnZDAzOwkvLyBkZXNjcmlwdG9yIHR5cGUKKworCSAgIDcnaDQ5Oglkb3V0IDw9ICMxIDgnZDA5OwkvLyBMYW5ndWFnZSBJRCAwIGxvdyBieXRlCisJICAgNydoNGE6CWRvdXQgPD0gIzEgOCdkMDQ7CS8vIExhbmd1YWdlIElEIDAgaGlnaCBieXRlCisKKwkgICA3J2g0YjoJZG91dCA8PSAjMSA4J2QwOTsJLy8gTGFuZ3VhZ2UgSUQgMSBsb3cgYnl0ZQorCSAgIDcnaDRjOglkb3V0IDw9ICMxIDgnZDA0OwkvLyBMYW5ndWFnZSBJRCAxIGhpZ2ggYnl0ZQorCisJICAgNydoNGQ6CWRvdXQgPD0gIzEgOCdkMDk7CS8vIExhbmd1YWdlIElEIDIgbG93IGJ5dGUKKwkgICA3J2g0ZToJZG91dCA8PSAjMSA4J2QwNDsJLy8gTGFuZ3VhZ2UgSUQgMiBoaWdoIGJ5dGUKKworCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gPT09PT0gICBTdHJpbmcgRGVzY3JpcHRvciAwICAgID09PT09CisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJICAgNydoNTA6CWRvdXQgPD0gIzEgOCdkMDEwOwkvLyB0aGlzIGRlc2NyaXB0b3IgbGVuZ3RoCisJICAgNydoNTE6CWRvdXQgPD0gIzEgOCdkMDM7CS8vIGRlc2NyaXB0b3IgdHlwZQorCSAgIDcnaDUyOglkb3V0IDw9ICMxICIwIjsKKwkgICA3J2g1MzoJZG91dCA8PSAjMSAiICI7CisJICAgNydoNTQ6CWRvdXQgPD0gIzEgImciOworCSAgIDcnaDU1Oglkb3V0IDw9ICMxICJuIjsKKwkgICA3J2g1NjoJZG91dCA8PSAjMSAiaSI7CisJICAgNydoNTc6CWRvdXQgPD0gIzEgInIiOworCSAgIDcnaDU4Oglkb3V0IDw9ICMxICJ0IjsKKwkgICA3J2g1OToJZG91dCA8PSAjMSAiUyI7CisKKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vID09PT09ICAgU3RyaW5nIERlc2NyaXB0b3IgMSAgICA9PT09PQorCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCSAgIDcnaDYwOglkb3V0IDw9ICMxIDgnZDAxMDsJLy8gdGhpcyBkZXNjcmlwdG9yIGxlbmd0aAorCSAgIDcnaDYxOglkb3V0IDw9ICMxIDgnZDAzOwkvLyBkZXNjcmlwdG9yIHR5cGUKKwkgICA3J2g2MjoJZG91dCA8PSAjMSAiMSI7CisJICAgNydoNjM6CWRvdXQgPD0gIzEgIiAiOworCSAgIDcnaDY0Oglkb3V0IDw9ICMxICJnIjsKKwkgICA3J2g2NToJZG91dCA8PSAjMSAibiI7CisJICAgNydoNjY6CWRvdXQgPD0gIzEgImkiOworCSAgIDcnaDY3Oglkb3V0IDw9ICMxICJyIjsKKwkgICA3J2g2ODoJZG91dCA8PSAjMSAidCI7CisJICAgNydoNjk6CWRvdXQgPD0gIzEgIlMiOworCisJCS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyA9PT09PSAgIFN0cmluZyBEZXNjcmlwdG9yIDIgICAgPT09PT0KKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkgICA3J2g3MDoJZG91dCA8PSAjMSA4J2QwMTA7CS8vIHRoaXMgZGVzY3JpcHRvciBsZW5ndGgKKwkgICA3J2g3MToJZG91dCA8PSAjMSA4J2QwMzsJLy8gZGVzY3JpcHRvciB0eXBlCisJICAgNydoNzI6CWRvdXQgPD0gIzEgIjIiOworCSAgIDcnaDczOglkb3V0IDw9ICMxICIgIjsKKwkgICA3J2g3NDoJZG91dCA8PSAjMSAiZyI7CisJICAgNydoNzU6CWRvdXQgPD0gIzEgIm4iOworCSAgIDcnaDc2Oglkb3V0IDw9ICMxICJpIjsKKwkgICA3J2g3NzoJZG91dCA8PSAjMSAiciI7CisJICAgNydoNzg6CWRvdXQgPD0gIzEgInQiOworCSAgIDcnaDc5Oglkb3V0IDw9ICMxICJTIjsKKworKi8KKworCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwkgICAvL2RlZmF1bHQ6CWRvdXQgPD0gIzEgOCdkMDA7CisJZW5kY2FzZQorCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9zeW5jX2ZpZm8udiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvY29yZS91c2IxZF9zeW5jX2ZpZm8udgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMzVlMzRlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3N5bmNfZmlmby52CkBAIC0wLDAgKzEsMTU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgc2RyYW0gY29udHJvbGxlciBwcm9qZWN0ICAgICAgICAgICAKKyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3Nkcl9jdHJsLyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBEZXNjcmlwdGlvbjogU1lOQyBGSUZPIAorICBQYXJhbWV0ZXJzOgorICAgICAgVyA6IFdpZHRoIChpbnRlZ2VyKQorICAgICAgRCA6IERlcHRoIChpbnRlZ2VyLCBwb3dlciBvZiAyLCA0IHRvIDI1NikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEF1dGhvcihzKTogIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKKyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgCisgcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAorIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIAorIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKKyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCisgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIAorbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgCisgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAorIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKKyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCisgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCisgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIAorIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK21vZHVsZSB1c2IxZF9zeW5jX2ZpZm8gKGNsaywKKwkgICAgICAgICAgcmVzZXRfbiwKKwkJICBjbHIsCisJCSAgd3JfZW4sCisJCSAgd3JfZGF0YSwKKwkJICBmdWxsLAorCQkgIGVtcHR5LAorCQkgIHJkX2VuLAorCQkgIHJkX2RhdGEpOworCisgICBwYXJhbWV0ZXIgVyA9IDg7CisgICBwYXJhbWV0ZXIgRCA9IDQ7CisKKyAgIHBhcmFtZXRlciBBVyA9IChEID09IDQpICAgPyAyIDoKKwkJICAoRCA9PSA4KSAgID8gMyA6CisJCSAgKEQgPT0gMTYpICA/IDQgOgorCQkgIChEID09IDMyKSAgPyA1IDoKKwkJICAoRCA9PSA2NCkgID8gNiA6CisJCSAgKEQgPT0gMTI4KSA/IDcgOgorCQkgIChEID09IDI1NikgPyA4IDogMDsKKyAgIAorICAgb3V0cHV0IFtXLTEgOiAwXSAgcmRfZGF0YTsKKyAgIGlucHV0IFtXLTEgOiAwXSAgIHdyX2RhdGE7CisgICBpbnB1dCAJICAgICBjbGssIHJlc2V0X24sIGNscix3cl9lbiwgcmRfZW47CisgICBvdXRwdXQgCSAgICAgZnVsbCwgZW1wdHk7CisKKyAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKKworICAgaW5pdGlhbCBiZWdpbgorICAgICAgaWYgKEFXID09IDApIGJlZ2luCisJICRkaXNwbGF5ICgiJW0gOiBFUlJPUiEhISBGaWZvIGRlcHRoICVkIG5vdCBpbiByYW5nZSA0IHRvIDI1NiIsIEQpOworICAgICAgZW5kIC8vIGlmIChBVyA9PSAwKQorICAgZW5kIC8vIGluaXRpYWwgYmVnaW4KKworICAgLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisKKworICAgcmVnIFtXLTEgOiAwXSAgICBtZW1bRC0xIDogMF07CisgICByZWcgW0FXLTEgOiAwXSAgIHJkX3B0ciwgd3JfcHRyOworICAgcmVnCSAJICAgIGZ1bGwsIGVtcHR5OworCisKKyAgIHdpcmUgW1ctMSA6IDBdICAgcmRfZGF0YTsKKyAgIAorICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgCisgICAgICBpZiAocmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgICAgICAgd3JfcHRyIDw9IHtBV3sxJ2IwfX0gOworICAgICAgZW5kCisgICAgICBlbHNlIGJlZ2luCisJIGlmKGNscikgICB3cl9wdHIgPD0ge0FXezEnYjB9fSA7CisJIGVsc2UgYmVnaW4KKwkgICAgaWYgKHdyX2VuICYgIWZ1bGwpIGJlZ2luCisgICAgICAgICAgICAgICB3cl9wdHIgPD0gd3JfcHRyICsgMSdiMSA7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgIGVuZAorICAgICAgZW5kCisKKyAgIGFsd2F5cyBAIChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pIAorICAgICAgaWYgKHJlc2V0X24gPT0gMSdiMCkgYmVnaW4KKyAgICAgICAgIHJkX3B0ciA8PSB7QVd7MSdiMH19IDsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorCSBpZihjbHIpICAgcmRfcHRyIDw9IHtBV3sxJ2IwfX0gOworCSBlbHNlIGJlZ2luCisJICAgIGlmIChyZF9lbiAmICFlbXB0eSkgYmVnaW4KKyAgICAgICAgICAgICAgIHJkX3B0ciA8PSByZF9wdHIgKyAxJ2IxIDsKKyAgICAgICAgICAgIGVuZAorCSBlbmQKKyAgICAgIGVuZAorCisKKyAgIGFsd2F5cyBAIChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pIAorICAgICAgaWYgKHJlc2V0X24gPT0gMSdiMCkgYmVnaW4KKyAgICAgICAgIGVtcHR5IDw9IDEnYjEgOworICAgICAgZW5kCisgICAgICBlbHNlIGJlZ2luCisgICAgICAgICBlbXB0eSA8PSAoKCh3cl9wdHIgLSByZF9wdHIpID09IHt7KEFXLTEpezEnYjB9fSwgMSdiMX0pICYgcmRfZW4gJiB+d3JfZW4pID8gMSdiMSA6IAorICAgICAgICAgICAgICAgICAgICgod3JfcHRyID09IHJkX3B0cikgJiB+cmRfZW4gJiB3cl9lbikgPyAxJ2IwIDogZW1wdHkgOworICAgICAgZW5kCisKKyAgIGFsd2F5cyBAIChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pIAorICAgICAgaWYgKHJlc2V0X24gPT0gMSdiMCkgYmVnaW4KKyAgICAgICAgIGZ1bGwgPD0gMSdiMCA7CisgICAgICBlbmQKKyAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgIGZ1bGwgPD0gKCgod3JfcHRyIC0gcmRfcHRyKSA9PSB7eyhBVy0xKXsxJ2IxfX0sIDEnYjB9KSAmIH5yZF9lbiAmIHdyX2VuKSA/IDEnYjEgOiAKKyAgICAgICAgICAgICAgICAgKCgod3JfcHRyIC0gcmRfcHRyKSA9PSB7QVd7MSdiMX19KSAmIHJkX2VuICYgfndyX2VuKSA/IDEnYjAgOiBmdWxsIDsKKyAgICAgIGVuZAorCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGspIAorICAgICAgaWYgKHdyX2VuKQorCSBtZW1bd3JfcHRyXSA8PSB3cl9kYXRhOworCithc3NpZ24gIHJkX2RhdGEgPSBtZW1bcmRfcHRyXTsKKworCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCisgICBhbHdheXMgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICAgIGlmICh3cl9lbiAmJiBmdWxsKSBiZWdpbgorICAgICAgICAgJGRpc3BsYXkoIiVtIDogRXJyb3IhIHNmaWZvIG92ZXJmbG93ISIpOworICAgICAgZW5kCisgICBlbmQKKworICAgYWx3YXlzIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICAgICBpZiAocmRfZW4gJiYgZW1wdHkpIGJlZ2luCisgICAgICAgICAkZGlzcGxheSgiJW0gOiBlcnJvciEgc2ZpZm8gdW5kZXJmbG93ISIpOworICAgICAgZW5kCisgICBlbmQKKworLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbmRtb2R1bGUKKworCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL2NvcmUvdXNiMWRfdXRtaV9pZi52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3V0bWlfaWYudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NTQ2OTA2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9jb3JlL3VzYjFkX3V0bWlfaWYudgpAQCAtMCwwICsxLDE0NyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVUTUkgSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcjogUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdXNiMV9mdW5jdC8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgd3d3LmFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICBydWRpQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogdXNiMV91dG1pX2lmLnYsdiAxLjEuMS4xIDIwMDItMDktMTkgMTI6MDc6MTQgcnVkaSBFeHAgJAorLy8KKy8vICAkRGF0ZTogMjAwMi0wOS0xOSAxMjowNzoxNCAkCisvLyAgJFJldmlzaW9uOiAxLjEuMS4xICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisKK2BpbmNsdWRlICJ1c2IxZF9kZWZpbmVzLnYiCisKK21vZHVsZSB1c2IxZF91dG1pX2lmKCAvLyBVVE1JIEludGVyZmFjZSAoRVhURVJOQUwpCisJCXBoeV9jbGssIHJzdCwKKwkJRGF0YU91dCwgVHhWYWxpZCwgVHhSZWFkeSwKKwkJUnhWYWxpZCwgUnhBY3RpdmUsIFJ4RXJyb3IsIERhdGFJbiwKKworCQkvLyBJbnRlcm5hbCBJbnRlcmZhY2UKKwkJcnhfZGF0YSwgcnhfdmFsaWQsIHJ4X2FjdGl2ZSwgcnhfZXJyLAorCQl0eF9kYXRhLCB0eF92YWxpZCwgdHhfdmFsaWRfbGFzdCwgdHhfcmVhZHksCisJCXR4X2ZpcnN0CisKKwkJKTsKKworaW5wdXQJCXBoeV9jbGs7CitpbnB1dAkJcnN0OworCitvdXRwdXQJWzc6MF0JRGF0YU91dDsKK291dHB1dAkJVHhWYWxpZDsKK2lucHV0CQlUeFJlYWR5OworCitpbnB1dAlbNzowXQlEYXRhSW47CitpbnB1dAkJUnhWYWxpZDsKK2lucHV0CQlSeEFjdGl2ZTsKK2lucHV0CQlSeEVycm9yOworCisKK291dHB1dAlbNzowXQlyeF9kYXRhOworb3V0cHV0CQlyeF92YWxpZCwgcnhfYWN0aXZlLCByeF9lcnI7CitpbnB1dAlbNzowXQl0eF9kYXRhOworaW5wdXQJCXR4X3ZhbGlkOworaW5wdXQJCXR4X3ZhbGlkX2xhc3Q7CitvdXRwdXQJCXR4X3JlYWR5OworaW5wdXQJCXR4X2ZpcnN0OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTG9jYWwgV2lyZXMgYW5kIFJlZ2lzdGVycworLy8KK3JlZwlbNzowXQlyeF9kYXRhOworcmVnCQlyeF92YWxpZCwgcnhfYWN0aXZlLCByeF9lcnI7CityZWcJWzc6MF0JRGF0YU91dDsKK3JlZwkJdHhfcmVhZHk7CityZWcJCVR4VmFsaWQ7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNaXNjIExvZ2ljCisvLworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBSWCBJbnRlcmZhY2UgSW5wdXQgcmVnaXN0ZXJzCisvLworCithbHdheXMgQChwb3NlZGdlIHBoeV9jbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJcnhfdmFsaWQgPD0gIzEgMSdiMDsKKwllbHNlCQlyeF92YWxpZCA8PSAjMSBSeFZhbGlkOworCithbHdheXMgQChwb3NlZGdlIHBoeV9jbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJcnhfYWN0aXZlIDw9ICMxIDEnYjA7CisJZWxzZQkJcnhfYWN0aXZlIDw9ICMxIFJ4QWN0aXZlOworCithbHdheXMgQChwb3NlZGdlIHBoeV9jbGsgb3IgbmVnZWRnZSByc3QpCisJaWYoIXJzdCkJcnhfZXJyIDw9ICMxIDEnYjA7CisJZWxzZQkJcnhfZXJyIDw9ICMxIFJ4RXJyb3I7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgcGh5X2NsaykKKwkJcnhfZGF0YSA8PSAjMSBEYXRhSW47CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBUWCBJbnRlcmZhY2UgT3V0cHV0L0lucHV0IHJlZ2lzdGVycworLy8KKworYWx3YXlzIEAocG9zZWRnZSBwaHlfY2xrKQorCWlmKFR4UmVhZHkgfCB0eF9maXJzdCkJRGF0YU91dCA8PSAjMSB0eF9kYXRhOworCithbHdheXMgQChwb3NlZGdlIHBoeV9jbGspCisJdHhfcmVhZHkgPD0gIzEgVHhSZWFkeTsKKworYWx3YXlzIEAocG9zZWRnZSBwaHlfY2xrIG9yIG5lZ2VkZ2UgcnN0KQorCWlmKCFyc3QpCVR4VmFsaWQgPD0gIzEgMSdiMDsKKwllbHNlCisJVHhWYWxpZCA8PSAjMSB0eF92YWxpZCB8IHR4X3ZhbGlkX2xhc3QgfCAoVHhWYWxpZCAmICFUeFJlYWR5KTsKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvcGh5L3VzYjFkX3BoeS52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9waHkvdXNiMWRfcGh5LnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzQ2YzUyMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvcGh5L3VzYjFkX3BoeS52CkBAIC0wLDAgKzEsMTkwIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVVNCIDEuMSBQSFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2JfcGh5LyAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2JfcGh5LnYsdiAxLjQgMjAwMy0xMC0yMSAwNTo1ODo0MCBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDAzLTEwLTIxIDA1OjU4OjQwICQKKy8vICAkUmV2aXNpb246IDEuNCAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMyAgMjAwMy8xMC8xOSAxNzo0MDoxMyAgcnVkaQorLy8gICAgICAgICAgICAgICAtIE1hZGUgY29yZSBtb3JlIHJvYnVzdCBhZ2FpbnN0IGxpbmUgbm9pc2UKKy8vICAgICAgICAgICAgICAgLSBBZGRlZCBFcnJvciBDaGVja2luZyBhbmQgUmVwb3J0aW5nCisvLyAgICAgICAgICAgICAgIChTZWUgUkVBRE1FLnR4dCBmb3IgbW9yZSBpbmZvKQorLy8KKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4yICAyMDAyLzA5LzE2IDE2OjA2OjM3ICBydWRpCisvLyAgICAgICAgICAgICAgIENoYW5nZWQgdG9wIGxldmVsIG5hbWUgdG8gYmUgY29uc2lzdGVudCAuLi4KKy8vCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMS4xLjEgIDIwMDIvMDkvMTYgMTQ6MjY6NTkgIHJ1ZGkKKy8vICAgICAgICAgICAgICAgQ3JlYXRlZCBEaXJlY3RvcnkgU3RydWN0dXJlCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworLy8KKworCittb2R1bGUgdXNiMWRfcGh5KGNsaywgcnN0biwgcGh5X3R4X21vZGUsIHVzYl9yc3QsCisJCisJCS8vIFRyYW5zY2lldmVyIEludGVyZmFjZQorCQl0eGRwLCB0eGRuLCB0eG9lLAkKKwkJcnhkLCByeGRwLCByeGRuLAorCisJCS8vIFVUTUkgSW50ZXJmYWNlCisJCURhdGFPdXRfaSwgVHhWYWxpZF9pLCBUeFJlYWR5X28sIFJ4VmFsaWRfbywKKwkJUnhBY3RpdmVfbywgUnhFcnJvcl9vLCBEYXRhSW5fbywgTGluZVN0YXRlX28KKwkJKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb21tYW4gU2lnbmFsCisqICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW5wdXQJCWNsayAgICAgICAgICAgICAgOyAvLyA0OE1oeiBjbG9jaworaW5wdXQJCXJzdG4gICAgICAgICAgICAgIDsgLy8gQWN0aXZlIGxvdyBhc3luYyByZXNldAorCitpbnB1dAkJcGh5X3R4X21vZGUgICAgICA7IC8vIFVzZWQgaW4gVHggUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIFBIWSBzdXBwb3J0cyBzaW5nbGUgZW5kZWQgYW5kIGRpZmZlcmVudGlhbCBvdXRwdXQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zY2VpdmVyIERlcGVuZGluZyBvbiB3aGljaCBkZXZpY2UgeW91IGFyZSB1c2luZywgeW91IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gdGllIHRoZSBwaHlfdHhfbW9kZSBoaWdoIG9yIGxvdy4gCitvdXRwdXQJCXVzYl9yc3QgICAgICAgICAgOyAvLyB1c2JfcnN0IGlzIGFzc2VydGVkIHdoZW5ldmVyIHRoZSBob3N0IHNpZ25hbHMgcmVzZXQgb24gdGhlIFVTQiBidXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBVU0IgY29yZSB3aWxsIGludGVybmFsbHkgcmVzZXQgaXRzZWxmIGF1dG9tYXRpY2FsbHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgb3V0cHV0IGlzIHByb3ZpZGVkIGZvciBleHRlcm5hbCBsb2dpYyB0aGF0IG5lZWRzIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0IHdoZW4gdGhlIFVTQiBidXMgaXMgcmVzZXQuCisKK291dHB1dAkJdHhkcCwgdHhkbiwgdHhvZTsKK2lucHV0CQlyeGQsIHJ4ZHAsIHJ4ZG47CitpbnB1dAlbNzowXQlEYXRhT3V0X2k7CitpbnB1dAkJVHhWYWxpZF9pOworb3V0cHV0CQlUeFJlYWR5X287CitvdXRwdXQJWzc6MF0JRGF0YUluX287CitvdXRwdXQJCVJ4VmFsaWRfbzsKK291dHB1dAkJUnhBY3RpdmVfbzsKK291dHB1dAkJUnhFcnJvcl9vOworb3V0cHV0CVsxOjBdCUxpbmVTdGF0ZV9vOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTG9jYWwgV2lyZXMgYW5kIFJlZ2lzdGVycworLy8KKworcmVnCVs0OjBdCXJzdF9jbnQ7CityZWcJCXVzYl9yc3Q7Cit3aXJlCQlmc19jZTsKK3dpcmUJCXJzdG47CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNaXNjIExvZ2ljCisvLworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVFggUGh5CisvLworCit1c2IxZF90eF9waHkgaV90eF9waHkoCisJLmNsaygJCWNsawkJKSwKKwkucnN0bigJCXJzdG4JCSksCisJLmZzX2NlKAkJZnNfY2UJCSksCisJLnBoeV9tb2RlKAlwaHlfdHhfbW9kZQkpLAorCisJLy8gVHJhbnNjaWV2ZXIgSW50ZXJmYWNlCisJLnR4ZHAoCQl0eGRwCQkpLAorCS50eGRuKAkJdHhkbgkJKSwKKwkudHhvZSgJCXR4b2UJCSksCisKKwkvLyBVVE1JIEludGVyZmFjZQorCS5EYXRhT3V0X2koCURhdGFPdXRfaQkpLAorCS5UeFZhbGlkX2koCVR4VmFsaWRfaQkpLAorCS5UeFJlYWR5X28oCVR4UmVhZHlfbwkpCisJKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFJYIFBoeSBhbmQgRFBMTAorLy8KKwordXNiMWRfcnhfcGh5IGlfcnhfcGh5KAorCS5jbGsoCQljbGsJCSksCisJLnJzdG4oCQlyc3RuCQkpLAorCS5mc19jZSgJCWZzX2NlCQkpLAorCisJLy8gVHJhbnNjaWV2ZXIgSW50ZXJmYWNlCisJLnJ4ZCgJCXJ4ZAkJKSwKKwkucnhkcCgJCXJ4ZHAJCSksCisJLnJ4ZG4oCQlyeGRuCQkpLAorCisJLy8gVVRNSSBJbnRlcmZhY2UKKwkuRGF0YUluX28oCURhdGFJbl9vCSksCisJLlJ4VmFsaWRfbygJUnhWYWxpZF9vCSksCisJLlJ4QWN0aXZlX28oCVJ4QWN0aXZlX28JKSwKKwkuUnhFcnJvcl9vKAlSeEVycm9yX28JKSwKKwkuUnhFbl9pKAl0eG9lCQkpLAorCS5MaW5lU3RhdGUoCUxpbmVTdGF0ZV9vCSkKKwkpOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gR2VuZXJhdGUgYW4gVVNCIFJlc2V0IGlzIHdlIHNlZSBTRTAgZm9yIGF0IGxlYXN0IDIuNXVTCisvLworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQkJCXJzdF9jbnQgPD0gNSdoMDsKKwllbHNlCisJaWYoTGluZVN0YXRlX28gIT0gMidoMCkJCXJzdF9jbnQgPD0gNSdoMDsKKwllbHNlCQorCWlmKCF1c2JfcnN0ICYmIGZzX2NlKQkJcnN0X2NudCA8PSByc3RfY250ICsgNSdoMTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJdXNiX3JzdCA8PSAocnN0X2NudCA9PSA1J2gxZik7CisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL3BoeS91c2IxZF9yeF9waHkudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvcGh5L3VzYjFkX3J4X3BoeS52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjZjQyZGIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL3BoeS91c2IxZF9yeF9waHkudgpAQCAtMCwwICsxLDQ1NSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVTQiAxLjEgUEhZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUlggJiBEUExMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yOiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91c2JfcGh5LyAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgUnVkb2xmIFVzc2VsbWFubiAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICB3d3cuYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHJ1ZGlAYXNpY3Mud3MgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSAgICAgLy8vLworLy8vLyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgICAvLy8vCisvLy8vIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyAgIC8vLy8KKy8vLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SICAgICAgLy8vLworLy8vLyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgICAgICAgICAvLy8vCisvLy8vIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTICAgIC8vLy8KKy8vLy8gKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFICAgLy8vLworLy8vLyBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SICAgICAgICAvLy8vCisvLy8vIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgIC8vLy8KKy8vLy8gTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAgLy8vLworLy8vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUICAvLy8vCisvLy8vIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgIC8vLy8KKy8vLy8gUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIENWUyBMb2cKKy8vCisvLyAgJElkOiB1c2JfcnhfcGh5LnYsdiAxLjUgMjAwNC0xMC0xOSAwOToyOTowNyBydWRpIEV4cCAkCisvLworLy8gICREYXRlOiAyMDA0LTEwLTE5IDA5OjI5OjA3ICQKKy8vICAkUmV2aXNpb246IDEuNSAkCisvLyAgJEF1dGhvcjogcnVkaSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuNCAgMjAwMy8xMi8wMiAwNDo1NjowMCAgcnVkaQorLy8gICAgICAgICAgICAgICBGaXhlZCBhIGJ1ZyByZXBvcnRlZCBieSBLYXJsIEMuIFBvc2NoIGZyb20gR3JheiBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3kuIFRoYW5rcyBLYXJsICEKKy8vCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMyAgMjAwMy8xMC8xOSAxODowNzo0NSAgcnVkaQorLy8gICAgICAgICAgICAgICAtIEZpeGVkIFN5bmMgRXJyb3IgdG8gYmUgb25seSBjaGVja2VkL2dlbmVyYXRlZCBkdXJpbmcgdGhlIHN5bmMgcGhhc2UKKy8vCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMiAgMjAwMy8xMC8xOSAxNzo0MDoxMyAgcnVkaQorLy8gICAgICAgICAgICAgICAtIE1hZGUgY29yZSBtb3JlIHJvYnVzdCBhZ2FpbnN0IGxpbmUgbm9pc2UKKy8vICAgICAgICAgICAgICAgLSBBZGRlZCBFcnJvciBDaGVja2luZyBhbmQgUmVwb3J0aW5nCisvLyAgICAgICAgICAgICAgIChTZWUgUkVBRE1FLnR4dCBmb3IgbW9yZSBpbmZvKQorLy8KKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4xLjEuMSAgMjAwMi8wOS8xNiAxNDoyNzowMSAgcnVkaQorLy8gICAgICAgICAgICAgICBDcmVhdGVkIERpcmVjdG9yeSBTdHJ1Y3R1cmUKKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisvLworCisKK21vZHVsZSB1c2IxZF9yeF9waHkoCWNsaywgcnN0biwgZnNfY2UsCisJCisJCQkvLyBUcmFuc2NpZXZlciBJbnRlcmZhY2UKKwkJCXJ4ZCwgcnhkcCwgcnhkbiwKKworCQkJLy8gVVRNSSBJbnRlcmZhY2UKKwkJCVJ4VmFsaWRfbywgUnhBY3RpdmVfbywgUnhFcnJvcl9vLCBEYXRhSW5fbywKKwkJCVJ4RW5faSwgTGluZVN0YXRlKTsKKworaW5wdXQJCWNsazsKK2lucHV0CQlyc3RuOworb3V0cHV0CQlmc19jZTsKK2lucHV0CQlyeGQsIHJ4ZHAsIHJ4ZG47CitvdXRwdXQJWzc6MF0JRGF0YUluX287CitvdXRwdXQJCVJ4VmFsaWRfbzsKK291dHB1dAkJUnhBY3RpdmVfbzsKK291dHB1dAkJUnhFcnJvcl9vOworaW5wdXQJCVJ4RW5faTsKK291dHB1dAlbMTowXQlMaW5lU3RhdGU7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBMb2NhbCBXaXJlcyBhbmQgUmVnaXN0ZXJzCisvLworCityZWcJCXJ4ZF9zMCwgcnhkX3MxLCAgcnhkX3M7CityZWcJCXJ4ZHBfczAsIHJ4ZHBfczEsIHJ4ZHBfcywgcnhkcF9zX3I7CityZWcJCXJ4ZG5fczAsIHJ4ZG5fczEsIHJ4ZG5fcywgcnhkbl9zX3I7CityZWcJCXN5bmNlZF9kOword2lyZQkJaywgaiwgc2UwOworcmVnCQlyeGRfcjsKK3JlZwkJcnhfZW47CityZWcJCXJ4X2FjdGl2ZTsKK3JlZwlbMjowXQliaXRfY250OworcmVnCQlyeF92YWxpZDEsIHJ4X3ZhbGlkOworcmVnCQlzaGlmdF9lbjsKK3JlZwkJc2RfcjsKK3JlZwkJc2RfbnJ6aTsKK3JlZwlbNzowXQlob2xkX3JlZzsKK3dpcmUJCWRyb3BfYml0OwkvLyBJbmRpY2F0ZXMgYSBzdHVmZmVkIGJpdAorcmVnCVsyOjBdCW9uZV9jbnQ7CisKK3JlZwlbMTowXQlkcGxsX3N0YXRlLCBkcGxsX25leHRfc3RhdGU7CityZWcJCWZzX2NlX2Q7CityZWcJCWZzX2NlOword2lyZQkJY2hhbmdlOword2lyZQkJbG9ja19lbjsKK3JlZwlbMjowXQlmc19zdGF0ZSwgZnNfbmV4dF9zdGF0ZTsKK3JlZwkJcnhfdmFsaWRfcjsKK3JlZwkJc3luY19lcnJfZCwgc3luY19lcnI7CityZWcJCWJpdF9zdHVmZl9lcnI7CityZWcJCXNlMF9yLCBieXRlX2VycjsKK3JlZwkJc2UwX3M7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBNaXNjIExvZ2ljCisvLworCithc3NpZ24gUnhBY3RpdmVfbyA9IHJ4X2FjdGl2ZTsKK2Fzc2lnbiBSeFZhbGlkX28gPSByeF92YWxpZDsKK2Fzc2lnbiBSeEVycm9yX28gPSBzeW5jX2VyciB8IGJpdF9zdHVmZl9lcnIgfCBieXRlX2VycjsKK2Fzc2lnbiBEYXRhSW5fbyA9IGhvbGRfcmVnOworYXNzaWduIExpbmVTdGF0ZSA9IHtyeGRuX3MxLCByeGRwX3MxfTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCXJ4X2VuIDw9IFJ4RW5faTsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlzeW5jX2VyciA8PSAhcnhfYWN0aXZlICYgc3luY19lcnJfZDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFN5bmNocm9uaXplIElucHV0cworLy8KKworLy8gRmlyc3Qgc3luY2hyb25pemUgdG8gdGhlIGxvY2FsIHN5c3RlbSBjbG9jayB0bworLy8gYXZvaWQgbWV0YXN0YWJpbGl0eSBvdXRzaWRlIHRoZSBzeW5jIGJsb2NrICgqX3MwKS4KKy8vIFRoZW4gbWFrZSBzdXJlIHdlIHNlZSB0aGUgc2lnbmFsIGZvciBhdCBsZWFzdCB0d28KKy8vIGNsb2NrIGN5Y2xlcyBzdGFibGUgdG8gYXZvaWQgZ2xpdGNoZXMgYW5kIG5vaXNlCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlyeGRfczAgIDw9IHJ4ZDsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlyeGRfczEgIDw9IHJ4ZF9zMDsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQkJCQkJCQkvLyBBdm9pZCBkZXRlY3RpbmcgTGluZSBHbGl0Y2hlcyBhbmQgbm9pc2UKKwlpZihyeGRfczAgJiYgcnhkX3MxKQlyeGRfcyA8PSAxJ2IxOworCWVsc2UKKwlpZighcnhkX3MwICYmICFyeGRfczEpCXJ4ZF9zIDw9IDEnYjA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlyeGRwX3MwICA8PSByeGRwOworYWx3YXlzIEAocG9zZWRnZSBjbGspCXJ4ZHBfczEgIDw9IHJ4ZHBfczA7CithbHdheXMgQChwb3NlZGdlIGNsaykJcnhkcF9zX3IgPD0gcnhkcF9zMCAmIHJ4ZHBfczE7CithbHdheXMgQChwb3NlZGdlIGNsaykJcnhkcF9zICAgPD0gKHJ4ZHBfczAgJiByeGRwX3MxKSB8IHJ4ZHBfc19yOwkvLyBBdm9pZCBkZXRlY3RpbmcgTGluZSBHbGl0Y2hlcyBhbmQgbm9pc2UKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCXJ4ZG5fczAgIDw9IHJ4ZG47CithbHdheXMgQChwb3NlZGdlIGNsaykJcnhkbl9zMSAgPD0gcnhkbl9zMDsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlyeGRuX3NfciA8PSByeGRuX3MwICYgcnhkbl9zMTsKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlyeGRuX3MgICA8PSAocnhkbl9zMCAmIHJ4ZG5fczEpIHwgcnhkbl9zX3I7CS8vIEF2b2lkIGRldGVjdGluZyBMaW5lIEdsaXRjaGVzIGFuZCBub2lzZQorCithc3NpZ24gayA9ICFyeGRwX3MgJiAgcnhkbl9zOworYXNzaWduIGogPSAgcnhkcF9zICYgIXJ4ZG5fczsKK2Fzc2lnbiBzZTAgPSAhcnhkcF9zICYgIXJ4ZG5fczsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCWlmKGZzX2NlKQlzZTBfcyA8PSBzZTA7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBEUExMCisvLworCisvLyBUaGlzIGRlc2lnbiB1c2VzIGEgY2xvY2sgZW5hYmxlIHRvIGRvIDEyTWh6IHRpbWluZyBhbmQgbm90IGEKKy8vIHJlYWwgMTJNaHogY2xvY2suIEV2ZXJ5dGhpbmcgYWx3YXlzIHJ1bnMgYXQgNDhNaHouIFdlIHdhbnQgdG8KKy8vIG1ha2Ugc3VyZSBob3dldmVyLCB0aGF0IHRoZSBjbG9jayBlbmFibGUgaXMgYWx3YXlzIGV4YWN0bHkgaW4KKy8vIHRoZSBtaWRkbGUgYmV0d2VlbiB0d28gdmlydHVhbCAxMk1oeiByaXNpbmcgZWRnZXMuCisvLyBXZSBtb25pdG9yIHJ4ZHAgYW5kIHJ4ZG4gZm9yIGFueSBjaGFuZ2VzIGFuZCBkbyB0aGUgYXBwcm9waWF0ZQorLy8gYWRqdXN0bWVudHMuCisvLyBJbiBhZGRpdGlvbiB0byB0aGUgbG9ja2luZyBkb25lIGluIHRoZSBkcGxsIEZTTSwgd2UgYWRqdXN0IHRoZQorLy8gZmluYWwgbGF0Y2ggZW5hYmxlIHRvIGNvbXBlbnNhdGUgZm9yIHZhcmlvdXMgc3luYyByZWdpc3RlcnMgLi4uCisKKy8vIEFsbG93IGxvY2tpbmYgb25seSB3aGVuIHdlIGFyZSByZWNlaXZpbmcKK2Fzc2lnbglsb2NrX2VuID0gcnhfZW47CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlyeGRfciA8PSByeGRfczsKKworLy8gRWRnZSBkZXRlY3RvcgorYXNzaWduIGNoYW5nZSA9IHJ4ZF9yICE9IHJ4ZF9zOworCisvLyBEUExMIEZTTQorYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJZHBsbF9zdGF0ZSA8PSAyJ2gxOworCWVsc2UJCWRwbGxfc3RhdGUgPD0gZHBsbF9uZXh0X3N0YXRlOworCithbHdheXMgQChkcGxsX3N0YXRlIG9yIGxvY2tfZW4gb3IgY2hhbmdlKQorICAgYmVnaW4KKwlmc19jZV9kID0gMSdiMDsKKwljYXNlKGRwbGxfc3RhdGUpCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJICAgMidoMDoKKwkJaWYobG9ja19lbiAmJiBjaGFuZ2UpCWRwbGxfbmV4dF9zdGF0ZSA9IDInaDA7CisJCWVsc2UJCQlkcGxsX25leHRfc3RhdGUgPSAyJ2gxOworCSAgIDInaDE6YmVnaW4KKwkJZnNfY2VfZCA9IDEnYjE7CisJCWlmKGxvY2tfZW4gJiYgY2hhbmdlKQlkcGxsX25leHRfc3RhdGUgPSAyJ2gzOworCQllbHNlCQkJZHBsbF9uZXh0X3N0YXRlID0gMidoMjsKKwkJZW5kCisJICAgMidoMjoKKwkJaWYobG9ja19lbiAmJiBjaGFuZ2UpCWRwbGxfbmV4dF9zdGF0ZSA9IDInaDA7CisJCWVsc2UJCQlkcGxsX25leHRfc3RhdGUgPSAyJ2gzOworCSAgIDInaDM6CisJCWlmKGxvY2tfZW4gJiYgY2hhbmdlKQlkcGxsX25leHRfc3RhdGUgPSAyJ2gwOworCQllbHNlCQkJZHBsbF9uZXh0X3N0YXRlID0gMidoMDsKKwllbmRjYXNlCisgICBlbmQKKworLy8gQ29tcGVuc2F0ZSBmb3Igc3luYyByZWdpc3RlcnMgYXQgdGhlIGlucHV0IC0gYWxsaWduIGZ1bGwgc3BlZWQKKy8vIGNsb2NrIGVuYWJsZSB0byBiZSBpbiB0aGUgbWlkZGxlIGJldHdlZW4gdHdvIGJpdCBjaGFuZ2VzIC4uLgorcmVnCWZzX2NlX3IxLCBmc19jZV9yMjsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCWZzX2NlX3IxIDw9IGZzX2NlX2Q7CithbHdheXMgQChwb3NlZGdlIGNsaykJZnNfY2VfcjIgPD0gZnNfY2VfcjE7CithbHdheXMgQChwb3NlZGdlIGNsaykJZnNfY2UgPD0gZnNfY2VfcjI7CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEZpbmQgU3luYyBQYXR0ZXJuIEZTTQorLy8KKworcGFyYW1ldGVyCUZTX0lETEUJPSAzJ2gwLAorCQlLMQk9IDMnaDEsCisJCUoxCT0gMydoMiwKKwkJSzIJPSAzJ2gzLAorCQlKMgk9IDMnaDQsCisJCUszCT0gMydoNSwKKwkJSjMJPSAzJ2g2LAorCQlLNAk9IDMnaDc7CisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCWZzX3N0YXRlIDw9IEZTX0lETEU7CisJZWxzZQkJZnNfc3RhdGUgPD0gZnNfbmV4dF9zdGF0ZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgRGluZXNoLkEsIDd0aCBGZWIgMjAxMworICAgICAgIFN5bmMgRGV0ZWN0aW9uLCB3aGVuIGZvbGxvd2luZyBwYXR0ZXJuIGRldGVjdGVkCisgICAgICAgICAgayxqLGssaixrLGosayxrCisgICAgICAgV2hlcmUgayA9MTsgaWYgIHJ4ZHAgPT0gMCAgYW5kIHJ4ZG4gPT0gMSAKKyAgICAgICBXaGVyZSBqID0xOyBpZiAgcnhkcCA9PSAxICBhbmQgcnhkbiA9PSAwCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCithbHdheXMgQChmc19zdGF0ZSBvciBmc19jZSBvciBrIG9yIGogb3IgcnhfZW4gb3IgcnhfYWN0aXZlIG9yIHNlMCBvciBzZTBfcykKKyAgIGJlZ2luCisJc3luY2VkX2QgPSAxJ2IwOworCXN5bmNfZXJyX2QgPSAxJ2IwOworCWZzX25leHRfc3RhdGUgPSBmc19zdGF0ZTsKKwlpZihmc19jZSAmJiAhcnhfYWN0aXZlICYmICFzZTAgJiYgIXNlMF9zKQorCSAgIGNhc2UoZnNfc3RhdGUpCS8vIHN5bm9wc3lzIGZ1bGxfY2FzZSBwYXJhbGxlbF9jYXNlCisJCUZTX0lETEU6CisJCSAgICAgYmVnaW4KKwkJCWlmKGsgJiYgcnhfZW4pCWZzX25leHRfc3RhdGUgPSBLMTsKKwkJICAgICBlbmQKKwkJSzE6CisJCSAgICAgYmVnaW4KKwkJCWlmKGogJiYgcnhfZW4pCWZzX25leHRfc3RhdGUgPSBKMTsKKwkJCWVsc2UKKwkJCSAgIGJlZ2luCisJCQkJCXN5bmNfZXJyX2QgPSAxJ2IxOworCQkJCQlmc19uZXh0X3N0YXRlID0gRlNfSURMRTsKKwkJCSAgIGVuZAorCQkgICAgIGVuZAorCQlKMToKKwkJICAgICBiZWdpbgorCQkJaWYoayAmJiByeF9lbikJZnNfbmV4dF9zdGF0ZSA9IEsyOworCQkJZWxzZQorCQkJICAgYmVnaW4KKwkJCQkJc3luY19lcnJfZCA9IDEnYjE7CisJCQkJCWZzX25leHRfc3RhdGUgPSBGU19JRExFOworCQkJICAgZW5kCisJCSAgICAgZW5kCisJCUsyOgorCQkgICAgIGJlZ2luCisJCQlpZihqICYmIHJ4X2VuKQlmc19uZXh0X3N0YXRlID0gSjI7CisJCQllbHNlCisJCQkgICBiZWdpbgorCQkJCQlzeW5jX2Vycl9kID0gMSdiMTsKKwkJCQkJZnNfbmV4dF9zdGF0ZSA9IEZTX0lETEU7CisJCQkgICBlbmQKKwkJICAgICBlbmQKKwkJSjI6CisJCSAgICAgYmVnaW4KKwkJCWlmKGsgJiYgcnhfZW4pCWZzX25leHRfc3RhdGUgPSBLMzsKKwkJCWVsc2UKKwkJCSAgIGJlZ2luCisJCQkJCXN5bmNfZXJyX2QgPSAxJ2IxOworCQkJCQlmc19uZXh0X3N0YXRlID0gRlNfSURMRTsKKwkJCSAgIGVuZAorCQkgICAgIGVuZAorCQlLMzoKKwkJICAgICBiZWdpbgorCQkJaWYoaiAmJiByeF9lbikJZnNfbmV4dF9zdGF0ZSA9IEozOworCQkJZWxzZQorCQkJaWYoayAmJiByeF9lbikKKwkJCSAgIGJlZ2luCisJCQkJCWZzX25leHRfc3RhdGUgPSBGU19JRExFOwkvLyBBbGxvdyBtaXNzaW5nIGZpcnN0IEstSgorCQkJCQlzeW5jZWRfZCA9IDEnYjE7CisJCQkgICBlbmQKKwkJCWVsc2UKKwkJCSAgIGJlZ2luCisJCQkJCXN5bmNfZXJyX2QgPSAxJ2IxOworCQkJCQlmc19uZXh0X3N0YXRlID0gRlNfSURMRTsKKwkJCSAgIGVuZAorCQkgICAgIGVuZAorCQlKMzoKKwkJICAgICBiZWdpbgorCQkJaWYoayAmJiByeF9lbikJZnNfbmV4dF9zdGF0ZSA9IEs0OworCQkJZWxzZQorCQkJICAgYmVnaW4KKwkJCQkJc3luY19lcnJfZCA9IDEnYjE7CisJCQkJCWZzX25leHRfc3RhdGUgPSBGU19JRExFOworCQkJICAgZW5kCisJCSAgICAgZW5kCisJCUs0OgorCQkgICAgIGJlZ2luCisJCQlpZihrKQlzeW5jZWRfZCA9IDEnYjE7CisJCQlmc19uZXh0X3N0YXRlID0gRlNfSURMRTsKKwkJICAgICBlbmQKKwkgICBlbmRjYXNlCisgICBlbmQKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEdlbmVyYXRlIFJ4QWN0aXZlCisvLworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQkJcnhfYWN0aXZlIDw9IDEnYjA7CisJZWxzZQorCWlmKHN5bmNlZF9kICYmIHJ4X2VuKQlyeF9hY3RpdmUgPD0gMSdiMTsKKwllbHNlCisJaWYoc2UwICYmIHJ4X3ZhbGlkX3IpCXJ4X2FjdGl2ZSA8PSAxJ2IwOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihyeF92YWxpZCkJcnhfdmFsaWRfciA8PSAxJ2IxOworCWVsc2UKKwlpZihmc19jZSkJcnhfdmFsaWRfciA8PSAxJ2IwOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTlJaSSBEZWNvZGVyCisvLworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihmc19jZSkJc2RfciA8PSByeGRfczsKKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJCXNkX25yemkgPD0gMSdiMDsKKwllbHNlCisJaWYoIXJ4X2FjdGl2ZSkJCXNkX25yemkgPD0gMSdiMTsKKwllbHNlCisJaWYocnhfYWN0aXZlICYmIGZzX2NlKQlzZF9ucnppIDw9ICEocnhkX3MgXiBzZF9yKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEJpdCBTdHVmZiBEZXRlY3QKKy8vCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCW9uZV9jbnQgPD0gMydoMDsKKwllbHNlCisJaWYoIXNoaWZ0X2VuKQlvbmVfY250IDw9IDMnaDA7CisJZWxzZQorCWlmKGZzX2NlKQorCSAgIGJlZ2luCisJCWlmKCFzZF9ucnppIHx8IGRyb3BfYml0KQlvbmVfY250IDw9IDMnaDA7CisJCWVsc2UJCQkJb25lX2NudCA8PSBvbmVfY250ICsgMydoMTsKKwkgICBlbmQKKworYXNzaWduIGRyb3BfYml0ID0gKG9uZV9jbnQ9PTMnaDYpOworCithbHdheXMgQChwb3NlZGdlIGNsaykJYml0X3N0dWZmX2VyciA8PSBkcm9wX2JpdCAmIHNkX25yemkgJiBmc19jZSAmICFzZTAgJiByeF9hY3RpdmU7IC8vIEJpdCBTdHVmZiBFcnJvcgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gU2VyaWFsID0+IFBhcmFsbGVsIGNvbnZlcnRlcgorLy8KKworYWx3YXlzIEAocG9zZWRnZSBjbGspCisJaWYoZnNfY2UpCXNoaWZ0X2VuIDw9IHN5bmNlZF9kIHwgcnhfYWN0aXZlOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZihmc19jZSAmJiBzaGlmdF9lbiAmJiAhZHJvcF9iaXQpCisJCWhvbGRfcmVnIDw9IHtzZF9ucnppLCBob2xkX3JlZ1s3OjFdfTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEdlbmVyYXRlIFJ4VmFsaWQKKy8vCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCQliaXRfY250IDw9IDMnYjA7CisJZWxzZQorCWlmKCFzaGlmdF9lbikJCWJpdF9jbnQgPD0gMydoMDsKKwllbHNlCisJaWYoZnNfY2UgJiYgIWRyb3BfYml0KQliaXRfY250IDw9IGJpdF9jbnQgKyAzJ2gxOworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQkJCQkJcnhfdmFsaWQxIDw9IDEnYjA7CisJZWxzZQorCWlmKGZzX2NlICYmICFkcm9wX2JpdCAmJiAoYml0X2NudD09MydoNykpCXJ4X3ZhbGlkMSA8PSAxJ2IxOworCWVsc2UKKwlpZihyeF92YWxpZDEgJiYgZnNfY2UgJiYgIWRyb3BfYml0KQkJcnhfdmFsaWQxIDw9IDEnYjA7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQlyeF92YWxpZCA8PSAhZHJvcF9iaXQgJiByeF92YWxpZDEgJiBmc19jZTsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCXNlMF9yIDw9IHNlMDsKKworYWx3YXlzIEAocG9zZWRnZSBjbGspCWJ5dGVfZXJyIDw9IHNlMCAmICFzZTBfciAmICh8Yml0X2NudFsyOjFdKSAmIHJ4X2FjdGl2ZTsKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvcGh5L3VzYjFkX3R4X3BoeS52IGIvdmVyaWxvZy9kdi9iZm0vdXNiX2RldmljZS9waHkvdXNiMWRfdHhfcGh5LnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGMwZjlmZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvcGh5L3VzYjFkX3R4X3BoeS52CkBAIC0wLDAgKzEsNDYxIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVVNCIDEuMSBQSFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3I6IFJ1ZG9sZiBVc3NlbG1hbm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERvd25sb2FkZWQgZnJvbTogaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3VzYl9waHkvICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBSdWRvbGYgVXNzZWxtYW5uICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgIHd3dy5hc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgcnVkaUBhc2ljcy53cyAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLi8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZICAgICAvLy8vCisvLy8vIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCAgIC8vLy8KKy8vLy8gVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTICAgLy8vLworLy8vLyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgICAgICAvLy8vCisvLy8vIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAgICAgICAgIC8vLy8KKy8vLy8gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgICAgLy8vLworLy8vLyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgICAvLy8vCisvLy8vIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgICAgICAgIC8vLy8KKy8vLy8gQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiAgLy8vLworLy8vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUICAvLy8vCisvLy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgIC8vLy8KKy8vLy8gT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFICAgICAgICAgLy8vLworLy8vLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyAgQ1ZTIExvZworLy8KKy8vICAkSWQ6IHVzYl90eF9waHkudix2IDEuNCAyMDA0LTEwLTE5IDA5OjI5OjA3IHJ1ZGkgRXhwICQKKy8vCisvLyAgJERhdGU6IDIwMDQtMTAtMTkgMDk6Mjk6MDcgJAorLy8gICRSZXZpc2lvbjogMS40ICQKKy8vICAkQXV0aG9yOiBydWRpICQKKy8vICAkTG9ja2VyOiAgJAorLy8gICRTdGF0ZTogRXhwICQKKy8vCisvLyBDaGFuZ2UgSGlzdG9yeToKKy8vICAgICAgICAgICAgICAgJExvZzogbm90IHN1cHBvcnRlZCBieSBjdnMyc3ZuICQKKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4zICAyMDAzLzEwLzIxIDA1OjU4OjQxICBydWRpCisvLyAgICAgICAgICAgICAgIHVzYl9yc3QgaXMgbm8gbG9uZ2VyIG9yJ2VkIHdpdGggdGhlIGluY29tbWluZyByZXNldCBpbnRlcm5hbGx5LgorLy8gICAgICAgICAgICAgICBOb3cgdXNiX3JzdCBpcyBzaW1wbHkgYW4gb3V0cHV0LCB0aGUgYXBwbGljYXRpb24gY2FuIGRlY2lkZSBob3cKKy8vICAgICAgICAgICAgICAgdG8gdXRpbGl6ZSBpdC4KKy8vCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuMiAgMjAwMy8xMC8xOSAxNzo0MDoxMyAgcnVkaQorLy8gICAgICAgICAgICAgICAtIE1hZGUgY29yZSBtb3JlIHJvYnVzdCBhZ2FpbnN0IGxpbmUgbm9pc2UKKy8vICAgICAgICAgICAgICAgLSBBZGRlZCBFcnJvciBDaGVja2luZyBhbmQgUmVwb3J0aW5nCisvLyAgICAgICAgICAgICAgIChTZWUgUkVBRE1FLnR4dCBmb3IgbW9yZSBpbmZvKQorLy8KKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS4xLjEuMSAgMjAwMi8wOS8xNiAxNDoyNzowMiAgcnVkaQorLy8gICAgICAgICAgICAgICBDcmVhdGVkIERpcmVjdG9yeSBTdHJ1Y3R1cmUKKy8vCisvLworLy8KKy8vCisvLworLy8KKy8vCisKKworbW9kdWxlIHVzYjFkX3R4X3BoeSgKKwkJY2xrLCByc3RuLCBmc19jZSwgcGh5X21vZGUsCisJCisJCS8vIFRyYW5zY2lldmVyIEludGVyZmFjZQorCQl0eGRwLCB0eGRuLCB0eG9lLAkKKworCQkvLyBVVE1JIEludGVyZmFjZQorCQlEYXRhT3V0X2ksIFR4VmFsaWRfaSwgVHhSZWFkeV9vCisJCSk7CisKK2lucHV0CQljbGs7CitpbnB1dAkJcnN0bjsKK2lucHV0CQlmc19jZTsKK2lucHV0CQlwaHlfbW9kZTsKK291dHB1dAkJdHhkcCwgdHhkbiwgdHhvZTsKK2lucHV0CVs3OjBdCURhdGFPdXRfaTsKK2lucHV0CQlUeFZhbGlkX2k7CitvdXRwdXQJCVR4UmVhZHlfbzsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIExvY2FsIFdpcmVzIGFuZCBSZWdpc3RlcnMKKy8vCisKK3BhcmFtZXRlcglJRExFCT0gMydkMCwKKwkJU09QCT0gMydoMSwKKwkJREFUQQk9IDMnaDIsCisJCUVPUDEJPSAzJ2gzLAorCQlFT1AyCT0gMydoNCwKKwkJV0FJVAk9IDMnaDU7CisKK3JlZwkJVHhSZWFkeV9vOworcmVnCVsyOjBdCXN0YXRlLCBuZXh0X3N0YXRlOworcmVnCQl0eF9yZWFkeV9kOworcmVnCQlsZF9zb3BfZDsKK3JlZwkJbGRfZGF0YV9kOworcmVnCQlsZF9lb3BfZDsKK3JlZwkJdHhfaXA7CityZWcJCXR4X2lwX3N5bmM7CityZWcJWzI6MF0JYml0X2NudDsKK3JlZwlbNzowXQlob2xkX3JlZzsKK3JlZwlbNzowXQlob2xkX3JlZ19kOworCityZWcJCXNkX3Jhd19vOword2lyZQkJaG9sZDsKK3JlZwkJZGF0YV9kb25lOworcmVnCQlzZnRfZG9uZTsKK3JlZwkJc2Z0X2RvbmVfcjsKK3dpcmUJCXNmdF9kb25lX2U7CityZWcJCWxkX2RhdGE7Cit3aXJlCQllb3BfZG9uZTsKK3JlZwlbMjowXQlvbmVfY250Oword2lyZQkJc3R1ZmY7CityZWcJCXNkX2JzX287CityZWcJCXNkX25yemlfbzsKK3JlZwkJYXBwZW5kX2VvcDsKK3JlZwkJYXBwZW5kX2VvcF9zeW5jMTsKK3JlZwkJYXBwZW5kX2VvcF9zeW5jMjsKK3JlZwkJYXBwZW5kX2VvcF9zeW5jMzsKK3JlZwkJYXBwZW5kX2VvcF9zeW5jNDsKK3JlZwkJdHhkcCwgdHhkbjsKK3JlZwkJdHhvZV9yMSwgdHhvZV9yMjsKK3JlZwkJdHhvZTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE1pc2MgTG9naWMKKy8vCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCVR4UmVhZHlfbyA8PSAxJ2IwOworCWVsc2UJCVR4UmVhZHlfbyA8PSB0eF9yZWFkeV9kICYgVHhWYWxpZF9pOworCithbHdheXMgQChwb3NlZGdlIGNsaykgbGRfZGF0YSA8PSBsZF9kYXRhX2Q7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBUcmFuc21pdCBpbiBwcm9ncmVzcyBpbmRpY2F0b3IKKy8vCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCXR4X2lwIDw9IDEnYjA7CisJZWxzZQorCWlmKGxkX3NvcF9kKQl0eF9pcCA8PSAxJ2IxOworCWVsc2UKKwlpZihlb3BfZG9uZSkJdHhfaXAgPD0gMSdiMDsKKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJCXR4X2lwX3N5bmMgPD0gMSdiMDsKKwllbHNlCisJaWYoZnNfY2UpCQl0eF9pcF9zeW5jIDw9IHR4X2lwOworCisvLyBkYXRhX2RvbmUgaGVscHMgdXMgdG8gY2F0Y2ggY2FzZXMgd2hlcmUgVHhWYWxpZCBkcm9wcyBkdWUgdG8KKy8vIHBhY2tldCBlbmQgYW5kIHRoZW4gZ2V0cyByZS1hc3NlcnRlZCBhcyBhIG5ldyBwYWNrZXQgc3RhcnRzLgorLy8gV2UgbWlnaHQgbm90IHNlZSB0aGlzIGJlY2F1c2Ugd2UgYXJlIHN0aWxsIHRyYW5zbWl0dGluZy4KKy8vIGRhdGFfZG9uZSBzaG91bGQgc29sdmUgdGhvc2UgY2FzZXMgLi4uCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQkJCWRhdGFfZG9uZSA8PSAxJ2IwOworCWVsc2UKKwlpZihUeFZhbGlkX2kgJiYgISB0eF9pcCkJZGF0YV9kb25lIDw9IDEnYjE7CisJZWxzZQorCWlmKCFUeFZhbGlkX2kpCQkJZGF0YV9kb25lIDw9IDEnYjA7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBTaGlmdCBSZWdpc3RlcgorLy8KKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJCWJpdF9jbnQgPD0gMydoMDsKKwllbHNlCisJaWYoIXR4X2lwX3N5bmMpCQliaXRfY250IDw9IDMnaDA7CisJZWxzZQorCWlmKGZzX2NlICYmICFob2xkKQliaXRfY250IDw9IGJpdF9jbnQgKyAzJ2gxOworCithc3NpZ24gaG9sZCA9IHN0dWZmOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlpZighdHhfaXBfc3luYykJCXNkX3Jhd19vIDw9IDEnYjA7CisJZWxzZQorCWNhc2UoYml0X2NudCkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICAzJ2gwOiBzZF9yYXdfbyA8PSBob2xkX3JlZ19kWzBdOworCSAgIDMnaDE6IHNkX3Jhd19vIDw9IGhvbGRfcmVnX2RbMV07CisJICAgMydoMjogc2RfcmF3X28gPD0gaG9sZF9yZWdfZFsyXTsKKwkgICAzJ2gzOiBzZF9yYXdfbyA8PSBob2xkX3JlZ19kWzNdOworCSAgIDMnaDQ6IHNkX3Jhd19vIDw9IGhvbGRfcmVnX2RbNF07CisJICAgMydoNTogc2RfcmF3X28gPD0gaG9sZF9yZWdfZFs1XTsKKwkgICAzJ2g2OiBzZF9yYXdfbyA8PSBob2xkX3JlZ19kWzZdOworCSAgIDMnaDc6IHNkX3Jhd19vIDw9IGhvbGRfcmVnX2RbN107CisJZW5kY2FzZQorCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlzZnRfZG9uZSA8PSAhaG9sZCAmIChiaXRfY250ID09IDMnaDcpOworCithbHdheXMgQChwb3NlZGdlIGNsaykKKwlzZnRfZG9uZV9yIDw9IHNmdF9kb25lOworCithc3NpZ24gc2Z0X2RvbmVfZSA9IHNmdF9kb25lICYgIXNmdF9kb25lX3I7CisKKy8vIE91dCBEYXRhIEhvbGQgUmVnaXN0ZXIKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorCWlmKGxkX3NvcF9kKQlob2xkX3JlZyA8PSA4J2g4MDsKKwllbHNlCisJaWYobGRfZGF0YSkJaG9sZF9yZWcgPD0gRGF0YU91dF9pOworCithbHdheXMgQChwb3NlZGdlIGNsaykgaG9sZF9yZWdfZCA8PSBob2xkX3JlZzsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEJpdCBTdHVmZmVyCisvLworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQlvbmVfY250IDw9IDMnaDA7CisJZWxzZQorCWlmKCF0eF9pcF9zeW5jKQlvbmVfY250IDw9IDMnaDA7CisJZWxzZQorCWlmKGZzX2NlKQorCSAgIGJlZ2luCisJCWlmKCFzZF9yYXdfbyB8fCBzdHVmZikJb25lX2NudCA8PSAzJ2gwOworCQllbHNlCQkJb25lX2NudCA8PSBvbmVfY250ICsgMydoMTsKKwkgICBlbmQKKworYXNzaWduIHN0dWZmID0gKG9uZV9jbnQ9PTMnaDYpOworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQlzZF9ic19vIDw9IDEnaDA7CisJZWxzZQorCWlmKGZzX2NlKQlzZF9ic19vIDw9ICF0eF9pcF9zeW5jID8gMSdiMCA6IChzdHVmZiA/IDEnYjAgOiBzZF9yYXdfbyk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBOUlpJIEVuY29kZXIKKy8vCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCQkJc2RfbnJ6aV9vIDw9IDEnYjE7CisJZWxzZQorCWlmKCF0eF9pcF9zeW5jIHx8ICF0eG9lX3IxKQlzZF9ucnppX28gPD0gMSdiMTsKKwllbHNlCisJaWYoZnNfY2UpCQkJc2RfbnJ6aV9vIDw9IHNkX2JzX28gPyBzZF9ucnppX28gOiB+c2RfbnJ6aV9vOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gRU9QIGFwcGVuZCBsb2dpYworLy8KKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJCWFwcGVuZF9lb3AgPD0gMSdiMDsKKwllbHNlCisJaWYobGRfZW9wX2QpCQlhcHBlbmRfZW9wIDw9IDEnYjE7CisJZWxzZQorCWlmKGFwcGVuZF9lb3Bfc3luYzIpCWFwcGVuZF9lb3AgPD0gMSdiMDsKKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJYXBwZW5kX2VvcF9zeW5jMSA8PSAxJ2IwOworCWVsc2UKKwlpZihmc19jZSkJYXBwZW5kX2VvcF9zeW5jMSA8PSBhcHBlbmRfZW9wOworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQlhcHBlbmRfZW9wX3N5bmMyIDw9IDEnYjA7CisJZWxzZQorCWlmKGZzX2NlKQlhcHBlbmRfZW9wX3N5bmMyIDw9IGFwcGVuZF9lb3Bfc3luYzE7CisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCWFwcGVuZF9lb3Bfc3luYzMgPD0gMSdiMDsKKwllbHNlCisJaWYoZnNfY2UpCWFwcGVuZF9lb3Bfc3luYzMgPD0gYXBwZW5kX2VvcF9zeW5jMiB8CisJCQkoYXBwZW5kX2VvcF9zeW5jMyAmICFhcHBlbmRfZW9wX3N5bmM0KTsJLy8gTWFrZSBzdXJlIGFsd2F5cyAyIGJpdCB3aWRlCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCWFwcGVuZF9lb3Bfc3luYzQgPD0gMSdiMDsKKwllbHNlCisJaWYoZnNfY2UpCWFwcGVuZF9lb3Bfc3luYzQgPD0gYXBwZW5kX2VvcF9zeW5jMzsKKworYXNzaWduIGVvcF9kb25lID0gYXBwZW5kX2VvcF9zeW5jMzsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIE91dHB1dCBFbmFibGUgTG9naWMKKy8vCisKK2BpZmRlZiBVU0JfQVNZTkNfUkVTVAorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RuKQorYGVsc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKQorYGVuZGlmCisJaWYoIXJzdG4pCXR4b2VfcjEgPD0gMSdiMDsKKwllbHNlCisJaWYoZnNfY2UpCXR4b2VfcjEgPD0gdHhfaXBfc3luYzsKKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJdHhvZV9yMiA8PSAxJ2IwOworCWVsc2UKKwlpZihmc19jZSkJdHhvZV9yMiA8PSB0eG9lX3IxOworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQl0eG9lIDw9IDEnYjE7CisJZWxzZQorCWlmKGZzX2NlKQl0eG9lIDw9ICEodHhvZV9yMSB8IHR4b2VfcjIpOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gT3V0cHV0IFJlZ2lzdGVycworLy8KKworYGlmZGVmIFVTQl9BU1lOQ19SRVNUCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdG4pCitgZWxzZQorYWx3YXlzIEAocG9zZWRnZSBjbGspCitgZW5kaWYKKwlpZighcnN0bikJdHhkcCA8PSAxJ2IxOworCWVsc2UKKwlpZihmc19jZSkJdHhkcCA8PSBwaHlfbW9kZSA/CisJCQkJCSghYXBwZW5kX2VvcF9zeW5jMyAmICBzZF9ucnppX28pIDoKKwkJCQkJc2RfbnJ6aV9vOworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQl0eGRuIDw9IDEnYjA7CisJZWxzZQorCWlmKGZzX2NlKQl0eGRuIDw9IHBoeV9tb2RlID8KKwkJCQkJKCFhcHBlbmRfZW9wX3N5bmMzICYgfnNkX25yemlfbykgOgorCQkJCQlhcHBlbmRfZW9wX3N5bmMzOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVHggU3RhdGVtYXNoaW5lCisvLworCitgaWZkZWYgVVNCX0FTWU5DX1JFU1QKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKK2BlbHNlCithbHdheXMgQChwb3NlZGdlIGNsaykKK2BlbmRpZgorCWlmKCFyc3RuKQlzdGF0ZSA8PSBJRExFOworCWVsc2UJCXN0YXRlIDw9IG5leHRfc3RhdGU7CisKK2Fsd2F5cyBAKHN0YXRlIG9yIFR4VmFsaWRfaSBvciBkYXRhX2RvbmUgb3Igc2Z0X2RvbmVfZSBvciBlb3BfZG9uZSBvciBmc19jZSkKKyAgIGJlZ2luCisJbmV4dF9zdGF0ZSA9IHN0YXRlOworCXR4X3JlYWR5X2QgPSAxJ2IwOworCisJbGRfc29wX2QgPSAxJ2IwOworCWxkX2RhdGFfZCA9IDEnYjA7CisJbGRfZW9wX2QgPSAxJ2IwOworCisJY2FzZShzdGF0ZSkJLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKwkgICBJRExFOgorCQkJaWYoVHhWYWxpZF9pKQorCQkJICAgYmVnaW4KKwkJCQlsZF9zb3BfZCA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IFNPUDsKKwkJCSAgIGVuZAorCSAgIFNPUDoKKwkJCWlmKHNmdF9kb25lX2UpCisJCQkgICBiZWdpbgorCQkJCXR4X3JlYWR5X2QgPSAxJ2IxOworCQkJCWxkX2RhdGFfZCA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IERBVEE7CisJCQkgICBlbmQKKwkgICBEQVRBOgorCQkgICBiZWdpbgorCQkJaWYoIWRhdGFfZG9uZSAmJiBzZnRfZG9uZV9lKQorCQkJICAgYmVnaW4KKwkJCQlsZF9lb3BfZCA9IDEnYjE7CisJCQkJbmV4dF9zdGF0ZSA9IEVPUDE7CisJCQkgICBlbmQKKwkJCQorCQkJaWYoZGF0YV9kb25lICYmIHNmdF9kb25lX2UpCisJCQkgICBiZWdpbgorCQkJCXR4X3JlYWR5X2QgPSAxJ2IxOworCQkJCWxkX2RhdGFfZCA9IDEnYjE7CisJCQkgICBlbmQKKwkJICAgZW5kCisJICAgRU9QMToKKwkJCWlmKGVvcF9kb25lKQkJbmV4dF9zdGF0ZSA9IEVPUDI7CisJICAgRU9QMjoKKwkJCWlmKCFlb3BfZG9uZSAmJiBmc19jZSkJbmV4dF9zdGF0ZSA9IFdBSVQ7CisJICAgV0FJVDoKKwkJCWlmKGZzX2NlKQkJbmV4dF9zdGF0ZSA9IElETEU7CisJZW5kY2FzZQorICAgZW5kCisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL3RvcC91c2IxZF90b3AudiBiL3Zlcmlsb2cvZHYvYmZtL3VzYl9kZXZpY2UvdG9wL3VzYjFkX3RvcC52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2MWMxYjIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2JmbS91c2JfZGV2aWNlL3RvcC91c2IxZF90b3AudgpAQCAtMCwwICsxLDQxMSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIFVTQiBEZXZpY2UgbGV2ZWwgaW50ZWdyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICBGb2xsb3dpbmcgbW9kdWxlcyBhcmUgaW50ZWdyYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgIDEuIHVzYjFfcGh5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAyLiB1c2IxX2NvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgVmVyIDAuMSA6IDAxLk1hci4yMDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vDQorLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLw0KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8NCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8NCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vDQorLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLw0KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8NCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8NCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vDQorLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLw0KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8NCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8NCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vDQorLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorDQorDQorbW9kdWxlIHVzYjFkX3RvcCgNCisgICAgICAgIGNsa19pLCANCisgICAgICAgIHJzdG5faSwNCisNCisgICAgICAgIC8vIFRyYW5zY2lldmVyIEludGVyZmFjZQ0KKwl1c2JfZHAsDQorCXVzYl9kbiwNCisNCisgICAgICAgIC8vIFVTQiBNaXNjDQorICAgICAgICBwaHlfdHhfbW9kZSAsDQorICAgICAgICB1c2JfcnN0LA0KKw0KKyAgICAgICAgLy8gSW50ZXJydXB0cw0KKyAgICAgICAgZHJvcHBlZF9mcmFtZSwgDQorICAgICAgICBtaXNhbGlnbmVkX2ZyYW1lLA0KKyAgICAgICAgY3JjMTZfZXJyLA0KKw0KKyAgICAgICAgLy8gVmVuZG9yIEZlYXR1cmVzDQorICAgICAgICB2X3NldF9pbnQsIA0KKyAgICAgICAgdl9zZXRfZmVhdHVyZSwgDQorICAgICAgICB3VmFsdWUsDQorICAgICAgICB3SW5kZXgsIA0KKyAgICAgICAgdmVuZG9yX2RhdGEsDQorDQorICAgICAgICAvLyBVU0IgU3RhdHVzDQorICAgICAgICB1c2JfYnVzeSwgDQorICAgICAgICBlcF9zZWwsDQorDQorICAgICAgICAvLyBFbmRwb2ludCBJbnRlcmZhY2UNCisgICAgICAgIGVwMV9jZmcsDQorICAgICAgICBlcDFfZGluLCAgDQorICAgICAgICBlcDFfd2UsIA0KKyAgICAgICAgZXAxX2Z1bGwsDQorICAgICAgICBlcDFfZG91dCwgDQorICAgICAgICBlcDFfcmUsIA0KKyAgICAgICAgZXAxX2VtcHR5LA0KKyAgICAgICAgZXAxX2JmX2VuLCANCisgICAgICAgIGVwMV9iZl9zaXplLA0KKw0KKyAgICAgICAgZXAyX2NmZywNCisgICAgICAgIGVwMl9kaW4sICANCisgICAgICAgIGVwMl93ZSwgDQorICAgICAgICBlcDJfZnVsbCwNCisgICAgICAgIGVwMl9kb3V0LCANCisgICAgICAgIGVwMl9yZSwgDQorICAgICAgICBlcDJfZW1wdHksDQorICAgICAgICBlcDJfYmZfZW4sIA0KKyAgICAgICAgZXAyX2JmX3NpemUsDQorDQorICAgICAgICBlcDNfY2ZnLA0KKyAgICAgICAgZXAzX2RpbiwgIA0KKyAgICAgICAgZXAzX3dlLCANCisgICAgICAgIGVwM19mdWxsLA0KKyAgICAgICAgZXAzX2RvdXQsIA0KKyAgICAgICAgZXAzX3JlLCANCisgICAgICAgIGVwM19lbXB0eSwNCisgICAgICAgIGVwM19iZl9lbiwgDQorICAgICAgICBlcDNfYmZfc2l6ZSwNCisNCisgICAgICAgIGVwNF9jZmcsDQorICAgICAgICBlcDRfZGluLCAgDQorICAgICAgICBlcDRfd2UsIA0KKyAgICAgICAgZXA0X2Z1bGwsDQorICAgICAgICBlcDRfZG91dCwgDQorICAgICAgICBlcDRfcmUsIA0KKyAgICAgICAgZXA0X2VtcHR5LA0KKyAgICAgICAgZXA0X2JmX2VuLCANCisgICAgICAgIGVwNF9iZl9zaXplLA0KKw0KKyAgICAgICAgZXA1X2NmZywNCisgICAgICAgIGVwNV9kaW4sICANCisgICAgICAgIGVwNV93ZSwgDQorICAgICAgICBlcDVfZnVsbCwNCisgICAgICAgIGVwNV9kb3V0LCANCisgICAgICAgIGVwNV9yZSwgDQorICAgICAgICBlcDVfZW1wdHksDQorICAgICAgICBlcDVfYmZfZW4sIA0KKyAgICAgICAgZXA1X2JmX3NpemUsDQorDQorICAgICAgICBlcDZfY2ZnLA0KKyAgICAgICAgZXA2X2RpbiwgIA0KKyAgICAgICAgZXA2X3dlLCBlcDZfZnVsbCwNCisgICAgICAgIGVwNl9kb3V0LCBlcDZfcmUsIGVwNl9lbXB0eSwNCisgICAgICAgIGVwNl9iZl9lbiwgZXA2X2JmX3NpemUsDQorDQorICAgICAgICBlcDdfY2ZnLA0KKyAgICAgICAgZXA3X2RpbiwgIGVwN193ZSwgZXA3X2Z1bGwsDQorICAgICAgICBlcDdfZG91dCwgZXA3X3JlLCBlcDdfZW1wdHksDQorICAgICAgICBlcDdfYmZfZW4sIGVwN19iZl9zaXplLA0KKwkJLy8gUmVnaXN0ZXIgSW50ZXJmYWNlDQorCQlyZWdfYWRkciwNCisJCXJlZ19yZHdybiwNCisJCXJlZ19yZXEsDQorCQlyZWdfd2RhdGEsDQorCQlyZWdfcmRhdGEsDQorCQlyZWdfYWNrDQorDQorICAgICAgICApOyAgICAgIA0KKw0KK2lucHV0ICAgICAgICAgICBjbGtfaTsNCitpbnB1dCAgICAgICAgICAgcnN0bl9pOw0KKw0KK2lub3V0ICAgICAJdXNiX2RwOw0KK2lub3V0ICAgICAJdXNiX2RuOw0KKw0KK2lucHV0ICAgICAgICAgICBwaHlfdHhfbW9kZTsNCitvdXRwdXQgICAgICAgICAgdXNiX3JzdDsNCitvdXRwdXQgICAgICAgICAgZHJvcHBlZF9mcmFtZSwgbWlzYWxpZ25lZF9mcmFtZTsNCitvdXRwdXQgICAgICAgICAgY3JjMTZfZXJyOw0KKw0KK291dHB1dCAgICAgICAgICB2X3NldF9pbnQ7DQorb3V0cHV0ICAgICAgICAgIHZfc2V0X2ZlYXR1cmU7DQorb3V0cHV0ICBbMTU6MF0gIHdWYWx1ZTsNCitvdXRwdXQgIFsxNTowXSAgd0luZGV4Ow0KK2lucHV0ICAgWzE1OjBdICB2ZW5kb3JfZGF0YTsNCisNCitvdXRwdXQgICAgICAgICAgdXNiX2J1c3k7DQorb3V0cHV0ICBbMzowXSAgIGVwX3NlbDsNCisNCisvLyBFbmRwb2ludCBJbnRlcmZhY2VzDQoraW5wdXQgICBbMTM6MF0gIGVwMV9jZmc7DQoraW5wdXQgICBbNzowXSAgIGVwMV9kaW47DQorb3V0cHV0ICBbNzowXSAgIGVwMV9kb3V0Ow0KK291dHB1dCAgICAgICAgICBlcDFfd2UsIGVwMV9yZTsNCitpbnB1dCAgICAgICAgICAgZXAxX2VtcHR5LCBlcDFfZnVsbDsNCitpbnB1dCAgICAgICAgICAgZXAxX2JmX2VuOw0KK2lucHV0ICAgWzY6MF0gICBlcDFfYmZfc2l6ZTsNCisNCitpbnB1dCAgIFsxMzowXSAgZXAyX2NmZzsNCitpbnB1dCAgIFs3OjBdICAgZXAyX2RpbjsNCitvdXRwdXQgIFs3OjBdICAgZXAyX2RvdXQ7DQorb3V0cHV0ICAgICAgICAgIGVwMl93ZSwgZXAyX3JlOw0KK2lucHV0ICAgICAgICAgICBlcDJfZW1wdHksIGVwMl9mdWxsOw0KK2lucHV0ICAgICAgICAgICBlcDJfYmZfZW47DQoraW5wdXQgICBbNjowXSAgIGVwMl9iZl9zaXplOw0KKw0KK2lucHV0ICAgWzEzOjBdICBlcDNfY2ZnOw0KK2lucHV0ICAgWzc6MF0gICBlcDNfZGluOw0KK291dHB1dCAgWzc6MF0gICBlcDNfZG91dDsNCitvdXRwdXQgICAgICAgICAgZXAzX3dlLCBlcDNfcmU7DQoraW5wdXQgICAgICAgICAgIGVwM19lbXB0eSwgZXAzX2Z1bGw7DQoraW5wdXQgICAgICAgICAgIGVwM19iZl9lbjsNCitpbnB1dCAgIFs2OjBdICAgZXAzX2JmX3NpemU7DQorDQoraW5wdXQgICBbMTM6MF0gIGVwNF9jZmc7DQoraW5wdXQgICBbNzowXSAgIGVwNF9kaW47DQorb3V0cHV0ICBbNzowXSAgIGVwNF9kb3V0Ow0KK291dHB1dCAgICAgICAgICBlcDRfd2UsIGVwNF9yZTsNCitpbnB1dCAgICAgICAgICAgZXA0X2VtcHR5LCBlcDRfZnVsbDsNCitpbnB1dCAgICAgICAgICAgZXA0X2JmX2VuOw0KK2lucHV0ICAgWzY6MF0gICBlcDRfYmZfc2l6ZTsNCisNCitpbnB1dCAgIFsxMzowXSAgZXA1X2NmZzsNCitpbnB1dCAgIFs3OjBdICAgZXA1X2RpbjsNCitvdXRwdXQgIFs3OjBdICAgZXA1X2RvdXQ7DQorb3V0cHV0ICAgICAgICAgIGVwNV93ZSwgZXA1X3JlOw0KK2lucHV0ICAgICAgICAgICBlcDVfZW1wdHksIGVwNV9mdWxsOw0KK2lucHV0ICAgICAgICAgICBlcDVfYmZfZW47DQoraW5wdXQgICBbNjowXSAgIGVwNV9iZl9zaXplOw0KKw0KK2lucHV0ICAgWzEzOjBdICBlcDZfY2ZnOw0KK2lucHV0ICAgWzc6MF0gICBlcDZfZGluOw0KK291dHB1dCAgWzc6MF0gICBlcDZfZG91dDsNCitvdXRwdXQgICAgICAgICAgZXA2X3dlLCBlcDZfcmU7DQoraW5wdXQgICAgICAgICAgIGVwNl9lbXB0eSwgZXA2X2Z1bGw7DQoraW5wdXQgICAgICAgICAgIGVwNl9iZl9lbjsNCitpbnB1dCAgIFs2OjBdICAgZXA2X2JmX3NpemU7DQorDQoraW5wdXQgICBbMTM6MF0gIGVwN19jZmc7DQoraW5wdXQgICBbNzowXSAgIGVwN19kaW47DQorb3V0cHV0ICBbNzowXSAgIGVwN19kb3V0Ow0KK291dHB1dCAgICAgICAgICBlcDdfd2UsIGVwN19yZTsNCitpbnB1dCAgICAgICAgICAgZXA3X2VtcHR5LCBlcDdfZnVsbDsNCitpbnB1dCAgICAgICAgICAgZXA3X2JmX2VuOw0KK2lucHV0ICAgWzY6MF0gICBlcDdfYmZfc2l6ZTsNCisNCisNCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLy8gUmVnaXN0ZXIgSW50ZXJmYWNlDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK291dHB1dCBbMzE6MF0gICByZWdfYWRkcjsgICAvLyBSZWdpc3RlciBBZGRyZXNzDQorb3V0cHV0ICAgICAgICAgIHJlZ19yZHdybjsgIC8vIDAgLT4gd3JpdGUsIDEtPiByZWFkDQorb3V0cHV0ICAgICAgICAgIHJlZ19yZXE7ICAgIC8vICBSZWdpc3RlciBSZXENCitvdXRwdXQgWzMxOjBdICAgcmVnX3dkYXRhOyAgLy8gUmVnaXN0ZXIgd3JpdGUgZGF0YQ0KK2lucHV0IFszMTowXSAgICByZWdfcmRhdGE7ICAvLyBSZWdpc3RlciBSZWFkIERhdGENCitpbnB1dCAgICAgICAgICAgcmVnX2FjazsgICAgLy8gUmVnaXN0ZXIgQWNrDQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vIExvY2FsIFdpcmVzIGFuZCBSZWdpc3RlcnMNCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyBVVE1JIEludGVyZmFjZQ0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQord2lyZSAgICBbNzowXSAgIERhdGFPdXQ7DQord2lyZSAgICAgICAgICAgIFR4VmFsaWQ7DQord2lyZSAgICAgICAgICAgIFR4UmVhZHk7DQord2lyZSAgICBbNzowXSAgIERhdGFJbjsNCit3aXJlICAgICAgICAgICAgUnhWYWxpZDsNCit3aXJlICAgICAgICAgICAgUnhBY3RpdmU7DQord2lyZSAgICAgICAgICAgIFJ4RXJyb3I7DQord2lyZSAgICBbMTowXSAgIExpbmVTdGF0ZTsNCit3aXJlICAgICAgICAgICAgY2xrOw0KK3dpcmUgICAgICAgICAgICByc3Q7DQord2lyZSAgICAgICAgICAgIHBoeV90eF9tb2RlOw0KK3dpcmUgICAgICAgICAgICB1c2JfcnN0Ow0KKw0KKy8vIFVTQiBUcmFjZWl2ZXIgaW50ZXJmYWNlDQord2lyZSAgICAgICAgICB1c2JfdHhkcDsgLy8gVVNCIFRYICsgDQord2lyZSAgICAgICAgICB1c2JfdHhkbjsgLy8gVVNCIFRYIC0NCit3aXJlICAgICAgICAgIHVzYl90eG9lOyAvLyBVU0IgVFggT0VOLCBPdXRwdXQgZHJpdmVuIGF0IHR4b2U9MA0KK3dpcmUgICAgICAgICAgdXNiX3J4ZDsgDQord2lyZSAgICAgICAgICB1c2JfcnhkcDsgIC8vIFVTQiBSWCsNCit3aXJlICAgICAgICAgIHVzYl9yeGRuOyAgLy8gVVNCIFJYLQ0KKw0KK2Fzc2lnbiAgdXNiX2RwID0gKHVzYl90eG9lID09IDEnYjApID8gdXNiX3R4ZHAgIDogMSdiejsNCithc3NpZ24gIHVzYl9kbiA9ICh1c2JfdHhvZSA9PSAxJ2IwKSA/IHVzYl90eGRuICA6IDEnYno7DQorDQorYXNzaWduICB1c2JfcnhkID0gIHVzYl9kcDsNCithc3NpZ24gIHVzYl9yeGRwID0gdXNiX2RwOw0KK2Fzc2lnbiAgdXNiX3J4ZG4gPSB1c2JfZG47DQorDQorICAgIA0KK3VzYjFkX3BoeSB1X3VzYl9waHkoDQorICAgICAgICAgICAgICAgICAgICAuY2xrICAgICAgICAgICAgICAgICggY2xrX2kgICAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5yc3RuICAgICAgICAgICAgICAgKCByc3RuX2kgICAgICAgICAgICAgKSwgIA0KKyAgICAgICAgICAgICAgICAgICAgLnBoeV90eF9tb2RlICAgICAgICAoIHBoeV90eF9tb2RlICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAudXNiX3JzdCAgICAgICAgICAgICggdXNiX3JzdCAgICAgICAgICAgKSwNCisNCisgICAgICAgIC8vIFRyYW5zY2VpdmVyIEludGVyZmFjZQ0KKyAgICAgICAgICAgICAgICAgICAgLnJ4ZCAgICAgICAgICAgICAgICAoIHVzYl9yeGQgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAucnhkcCAgICAgICAgICAgICAgICggdXNiX3J4ZHAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5yeGRuICAgICAgICAgICAgICAgKCB1c2JfcnhkbiAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLnR4ZHAgICAgICAgICAgICAgICAoIHVzYl90eGRwICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAudHhkbiAgICAgICAgICAgICAgICggdXNiX3R4ZG4gICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC50eG9lICAgICAgICAgICAgICAgKCB1c2JfdHhvZSAgICAgICAgICApLA0KKw0KKyAgICAgICAgLy8gVVRNSSBJbnRlcmZhY2UNCisgICAgICAgICAgICAgICAgICAgIC5EYXRhSW5fbyAgICAgICAgICAgKCBEYXRhSW4gICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLlJ4VmFsaWRfbyAgICAgICAgICAoIFJ4VmFsaWQgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuUnhBY3RpdmVfbyAgICAgICAgICggUnhBY3RpdmUgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5SeEVycm9yX28gICAgICAgICAgKCBSeEVycm9yICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLkRhdGFPdXRfaSAgICAgICAgICAoIERhdGFPdXQgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuVHhWYWxpZF9pICAgICAgICAgICggVHhWYWxpZCAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5UeFJlYWR5X28gICAgICAgICAgKCBUeFJlYWR5ICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLkxpbmVTdGF0ZV9vICAgICAgICAoIExpbmVTdGF0ZSAgICAgICAgICkNCisgICAgICAgICk7DQorDQorDQordXNiMWRfY29yZSAgdV91c2JfY29yZSgNCisgICAgICAgICAgICAgICAgICAgIC5jbGtfaSAgICAgICAgICAgICAgKCBjbGtfaSAgICAgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5yc3RfaSAgICAgICAgICAgICAgKCByc3RuX2kgICAgICAgICAgICAgKSwNCisNCisNCisgICAgICAgICAgICAgICAgIC8vIFVTQiBNaXNjDQorICAgICAgICAgICAgICAgICAgICAucGh5X3R4X21vZGUgICAgICAgICggcGh5X3R4X21vZGUgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAudXNiX3JzdCAgICAgICAgICAgICggdXNiX3JzdCAgICAgICAgICAgKSwgDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVUTUkgSW50ZXJmYWNlDQorICAgICAgICAgICAgICAgICAgICAuRGF0YUluICAgICAgICAgICAgICggRGF0YUluICAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5SeFZhbGlkICAgICAgICAgICAgKCBSeFZhbGlkICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLlJ4QWN0aXZlICAgICAgICAgICAoIFJ4QWN0aXZlICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuUnhFcnJvciAgICAgICAgICAgICggUnhFcnJvciAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5EYXRhT3V0ICAgICAgICAgICAgKCBEYXRhT3V0ICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLlR4VmFsaWQgICAgICAgICAgICAoIFR4VmFsaWQgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuVHhSZWFkeSAgICAgICAgICAgICggVHhSZWFkeSAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5MaW5lU3RhdGUgICAgICAgICAgKCBMaW5lU3RhdGUgICAgICAgICApLA0KKw0KKyAgICAgICAgICAgICAgICAgLy8gSW50ZXJydXB0cw0KKyAgICAgICAgICAgICAgICAgICAgLmRyb3BwZWRfZnJhbWUgICAgICAoIGRyb3BwZWRfZnJhbWUgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLm1pc2FsaWduZWRfZnJhbWUgICAoIG1pc2FsaWduZWRfZnJhbWUgICksDQorICAgICAgICAgICAgICAgICAgICAuY3JjMTZfZXJyICAgICAgICAgICggY3JjMTZfZXJyICAgICAgICAgKSwNCisNCisgICAgICAgICAgICAgICAgICAvLyBWZW5kb3IgRmVhdHVyZXMNCisgICAgICAgICAgICAgICAgICAgIC52X3NldF9pbnQgICAgICAgICAgKCB2X3NldF9pbnQgICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC52X3NldF9mZWF0dXJlICAgICAgKCB2X3NldF9mZWF0dXJlICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC53VmFsdWUgICAgICAgICAgICAgKCB3VmFsdWUgICAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLndJbmRleCAgICAgICAgICAgICAoIHdJbmRleCAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLnZlbmRvcl9kYXRhICAgICAgICAoIHZlbmRvcl9kYXRhICAgICAgICksDQorDQorICAgICAgICAvLyBVU0IgU3RhdHVzDQorICAgICAgICAgICAgICAgICAgICAudXNiX2J1c3kgICAgICAgICAgICggdXNiX2J1c3kgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXBfc2VsICAgICAgICAgICAgICggZXBfc2VsICAgICAgICAgICAgKSwNCisNCisgICAgICAgIC8vIEVuZHBvaW50IEludGVyZmFjZQ0KKyAgICAgICAgICAgICAgICAgICAgLmVwMV9jZmcgICAgICAgICAgICAoIGVwMV9jZmcgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXAxX2RpbiAgICAgICAgICAgICggZXAxX2RpbiAgICAgICAgICAgKSwgIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMV93ZSAgICAgICAgICAgICAoIGVwMV93ZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMV9mdWxsICAgICAgICAgICAoIGVwMV9mdWxsICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXAxX2RvdXQgICAgICAgICAgICggZXAxX2RvdXQgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXAxX3JlICAgICAgICAgICAgICggZXAxX3JlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXAxX2VtcHR5ICAgICAgICAgICggZXAxX2VtcHR5ICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDFfYmZfZW4gICAgICAgICAgKCBlcDFfYmZfZW4gICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDFfYmZfc2l6ZSAgICAgICAgKCBlcDFfYmZfc2l6ZSAgICAgICApLA0KKw0KKyAgICAgICAgICAgICAgICAgICAgLmVwMl9jZmcgICAgICAgICAgICAoIGVwMl9jZmcgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXAyX2RpbiAgICAgICAgICAgICggZXAyX2RpbiAgICAgICAgICAgKSwgIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMl93ZSAgICAgICAgICAgICAoIGVwMl93ZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwMl9mdWxsICAgICAgICAgICAoIGVwMl9mdWxsICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXAyX2RvdXQgICAgICAgICAgICggZXAyX2RvdXQgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXAyX3JlICAgICAgICAgICAgICggZXAyX3JlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXAyX2VtcHR5ICAgICAgICAgICggZXAyX2VtcHR5ICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDJfYmZfZW4gICAgICAgICAgKCBlcDJfYmZfZW4gICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDJfYmZfc2l6ZSAgICAgICAgKCBlcDJfYmZfc2l6ZSAgICAgICApLA0KKw0KKyAgICAgICAgICAgICAgICAgICAgLmVwM19jZmcgICAgICAgICAgICAoIGVwM19jZmcgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXAzX2RpbiAgICAgICAgICAgICggZXAzX2RpbiAgICAgICAgICAgKSwgIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwM193ZSAgICAgICAgICAgICAoIGVwM193ZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwM19mdWxsICAgICAgICAgICAoIGVwM19mdWxsICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXAzX2RvdXQgICAgICAgICAgICggZXAzX2RvdXQgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXAzX3JlICAgICAgICAgICAgICggZXAzX3JlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXAzX2VtcHR5ICAgICAgICAgICggZXAzX2VtcHR5ICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDNfYmZfZW4gICAgICAgICAgKCBlcDNfYmZfZW4gICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDNfYmZfc2l6ZSAgICAgICAgKCBlcDNfYmZfc2l6ZSAgICAgICApLA0KKw0KKyAgICAgICAgICAgICAgICAgICAgLmVwNF9jZmcgICAgICAgICAgICAoIGVwNF9jZmcgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXA0X2RpbiAgICAgICAgICAgICggZXA0X2RpbiAgICAgICAgICAgKSwgIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNF93ZSAgICAgICAgICAgICAoIGVwNF93ZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNF9mdWxsICAgICAgICAgICAoIGVwNF9mdWxsICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXA0X2RvdXQgICAgICAgICAgICggZXA0X2RvdXQgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA0X3JlICAgICAgICAgICAgICggZXA0X3JlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA0X2VtcHR5ICAgICAgICAgICggZXA0X2VtcHR5ICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDRfYmZfZW4gICAgICAgICAgKCBlcDRfYmZfZW4gICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDRfYmZfc2l6ZSAgICAgICAgKCBlcDRfYmZfc2l6ZSAgICAgICApLA0KKw0KKyAgICAgICAgICAgICAgICAgICAgLmVwNV9jZmcgICAgICAgICAgICAoIGVwNV9jZmcgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXA1X2RpbiAgICAgICAgICAgICggZXA1X2RpbiAgICAgICAgICAgKSwgIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNV93ZSAgICAgICAgICAgICAoIGVwNV93ZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNV9mdWxsICAgICAgICAgICAoIGVwNV9mdWxsICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXA1X2RvdXQgICAgICAgICAgICggZXA1X2RvdXQgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA1X3JlICAgICAgICAgICAgICggZXA1X3JlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA1X2VtcHR5ICAgICAgICAgICggZXA1X2VtcHR5ICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDVfYmZfZW4gICAgICAgICAgKCBlcDVfYmZfZW4gICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDVfYmZfc2l6ZSAgICAgICAgKCBlcDVfYmZfc2l6ZSAgICAgICApLA0KKw0KKyAgICAgICAgICAgICAgICAgICAgLmVwNl9jZmcgICAgICAgICAgICAoIGVwNl9jZmcgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXA2X2RpbiAgICAgICAgICAgICggZXA2X2RpbiAgICAgICAgICAgKSwgIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNl93ZSAgICAgICAgICAgICAoIGVwNl93ZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwNl9mdWxsICAgICAgICAgICAoIGVwNl9mdWxsICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXA2X2RvdXQgICAgICAgICAgICggZXA2X2RvdXQgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA2X3JlICAgICAgICAgICAgICggZXA2X3JlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA2X2VtcHR5ICAgICAgICAgICggZXA2X2VtcHR5ICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDZfYmZfZW4gICAgICAgICAgKCBlcDZfYmZfZW4gICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDZfYmZfc2l6ZSAgICAgICAgKCBlcDZfYmZfc2l6ZSAgICAgICApLA0KKw0KKyAgICAgICAgICAgICAgICAgICAgLmVwN19jZmcgICAgICAgICAgICAoIGVwN19jZmcgICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXA3X2RpbiAgICAgICAgICAgICggZXA3X2RpbiAgICAgICAgICAgKSwgIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwN193ZSAgICAgICAgICAgICAoIGVwN193ZSAgICAgICAgICAgICksIA0KKyAgICAgICAgICAgICAgICAgICAgLmVwN19mdWxsICAgICAgICAgICAoIGVwN19mdWxsICAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAuZXA3X2RvdXQgICAgICAgICAgICggZXA3X2RvdXQgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA3X3JlICAgICAgICAgICAgICggZXA3X3JlICAgICAgICAgICAgKSwgDQorICAgICAgICAgICAgICAgICAgICAuZXA3X2VtcHR5ICAgICAgICAgICggZXA3X2VtcHR5ICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5lcDdfYmZfZW4gICAgICAgICAgKCBlcDdfYmZfZW4gICAgICAgICApLCANCisgICAgICAgICAgICAgICAgICAgIC5lcDdfYmZfc2l6ZSAgICAgICAgKCBlcDdfYmZfc2l6ZSAgICAgICApLA0KKw0KKyAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciBJbnRlcmZhY2UNCisgICAgICAgICAgICAgICAgICAgIC5yZWdfYWRkciAgICAgICAgICAgKCByZWdfYWRkciAgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLnJlZ19yZHdybiAgICAgICAgICAoIHJlZ19yZHdybiAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAucmVnX3JlcSAgICAgICAgICAgICggcmVnX3JlcSAgICAgICAgICAgKSwNCisgICAgICAgICAgICAgICAgICAgIC5yZWdfd2RhdGEgICAgICAgICAgKCByZWdfd2RhdGEgICAgICAgICApLA0KKyAgICAgICAgICAgICAgICAgICAgLnJlZ19yZGF0YSAgICAgICAgICAoIHJlZ19yZGF0YSAgICAgICAgICksDQorICAgICAgICAgICAgICAgICAgICAucmVnX2FjayAgICAgICAgICAgICggcmVnX2FjayAgICAgICAgICAgKQ0KKw0KKw0KKyAgICAgICAgKTsgICAgICANCisNCisNCisNCitlbmRtb2R1bGUNCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2JmbS91c2JkX2ZpbGVzLnYgYi92ZXJpbG9nL2R2L2JmbS91c2JkX2ZpbGVzLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA4N2NmMAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYmZtL3VzYmRfZmlsZXMudgpAQCAtMCwwICsxLDE5IEBACitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX2NvcmUudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfY3RybC52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9nZW5lcmljX2RwcmFtLnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX3BhLnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX3BsLnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX3V0bWlfaWYudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfY3JjMTYudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfZ2VuZXJpY19maWZvLnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX3BkLnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX3JvbTEudiIKK2BpbmNsdWRlICJ1c2JfZGV2aWNlL2NvcmUvdXNiMWRfY3JjNS52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9maWZvMi52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvY29yZS91c2IxZF9pZG1hLnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX3BlLnYiCitgaW5jbHVkZSAidXNiX2RldmljZS9jb3JlL3VzYjFkX3N5bmNfZmlmby52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvcGh5L3VzYjFkX3J4X3BoeS52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvcGh5L3VzYjFkX3BoeS52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvcGh5L3VzYjFkX3R4X3BoeS52IgorYGluY2x1ZGUgInVzYl9kZXZpY2UvdG9wL3VzYjFkX3RvcC52IgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlcl90Yi52IGIvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlcl90Yi52CmluZGV4IDQ2MzZkY2UuLmFhNGQ5ZjYgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvZHYvdWFydF9tYXN0ZXIvdWFydF9tYXN0ZXJfdGIudgorKysgYi92ZXJpbG9nL2R2L3VhcnRfbWFzdGVyL3VhcnRfbWFzdGVyX3RiLnYKQEAgLTg4LDYgKzg4LDggQEAKIAogCWluaXRpYWwgYmVnaW4KIAorCQkkZGlzcGxheSgiVGVzdCBTdGFydGVkIC4uLiIpOworCQkkZHVtcG9uOwogCQkvLyBSZXBlYXQgY3ljbGVzIG9mIDEwMDAgY2xvY2sgZWRnZXMgYXMgbmVlZGVkIHRvIGNvbXBsZXRlIHRlc3RiZW5jaAogCQlyZXBlYXQgKDQwMCkgYmVnaW4KIAkJCXJlcGVhdCAoMTAwMCkgQChwb3NlZGdlIGNsb2NrKTsKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy91c2VyX2Jhc2ljX3RiLnYgYi92ZXJpbG9nL2R2L3VzZXJfYmFzaWMvdXNlcl9iYXNpY190Yi52CmluZGV4IDk5ZTBhY2IuLmRlZGQyNjAgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy91c2VyX2Jhc2ljX3RiLnYKKysrIGIvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL3VzZXJfYmFzaWNfdGIudgpAQCAtMTc5LDYyICsxNzksNjEgQEAKICAgICAgICAgICAvLyBjZmdfd2JfY2xrX2N0cmwgICAgICA9IHJlZ18wWzExOjldOwogICAgICAgICAgIC8vIGNmZ19ydGNfY2xrX2N0cmwgICAgID0gcmVnXzBbMTk6MTJdOwogICAgICAgICAgIC8vIGNmZ19jcHVfY2xrX2N0cmwgICAgID0gcmVnXzBbMjM6MjBdOwotICAgICAgICAgIC8vIGNmZ19zZHJhbV9jbGtfY3RybCAgID0gcmVnXzBbMjc6MjRdOwotICAgICAgICAgIC8vIGNmZ191c2JfY2xrX2N0cmwgICAgID0gcmVnXzBbMzE6MjhdOworICAgICAgICAgIC8vIGNmZ191c2JfY2xrX2N0cmwgICAgID0gcmVnXzBbMzE6MjRdOwogCSAgJGRpc3BsYXkoIlN0ZXAtMSwgQ1BVOiBDTE9DSzEsIFJUQzogQ0xPQ0syICoyLCBVU0I6IENMT0NLMiwgV0JTOkNMT0NLMSIpOwogCSAgdGVzdF9zdGVwID0gMTsKLSAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaDAsNCdoMCw0J2gwLDgnaDAsNCdoMCw4J2gwMH0pOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7OCdoMCw0J2gwLDgnaDAsNCdoMCw4J2gwMH0pOwogCSAgY2xvY2tfbW9uaXRvcihDTEsxX1BFUklPRCxDTEsyX1BFUklPRCoyLENMSzJfUEVSSU9ELENMSzFfUEVSSU9EKTsKIAogCSAgJGRpc3BsYXkoIlN0ZXAtMiwgQ1BVOiBDTE9DSzIsIFJUQzogQ0xPQ0syLygyKzEpLCBVU0I6IENMT0NLMi8yLCBXQlM6Q0xPQ0syIik7CiAJICB0ZXN0X3N0ZXAgPSAyOwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoOCw0J2gwLDQnaDgsOCdoMSw0J2g4LDgnaDAwfSk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4MCw0J2g4LDgnaDEsNCdoOCw4J2gwMH0pOwogCSAgY2xvY2tfbW9uaXRvcihDTEsyX1BFUklPRCwoMykqQ0xLMl9QRVJJT0QsMipDTEsyX1BFUklPRCxDTEsyX1BFUklPRCk7CiAKIAkgICRkaXNwbGF5KCJTdGVwLTMsIENQVTogQ0xPQ0sxLzIsIFJUQzogQ0xPQ0syLygyKzIpLCBVU0I6IENMT0NLMi8oMisxKSwgV0JTOkNMT0NLMS8yIik7CiAJICB0ZXN0X3N0ZXAgPSAzOwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoOSw0J2gwLDQnaDQsOCdoMiw0J2g0LDgnaDAwfSk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4MSw0J2g0LDgnaDIsNCdoNCw4J2gwMH0pOwogCSAgY2xvY2tfbW9uaXRvcigyKkNMSzFfUEVSSU9ELCg0KSpDTEsyX1BFUklPRCwzKkNMSzJfUEVSSU9ELDIqQ0xLMV9QRVJJT0QpOwogCiAJICAkZGlzcGxheSgiU3RlcC00LCBDUFU6IENMT0NLMS8zLCBSVEM6IENMT0NLMi8oMiszKSwgVVNCOiBDTE9DSzIvKDIrMiksIFdCUzpDTE9DSzEvMyIpOwogCSAgdGVzdF9zdGVwID0gNDsKLSAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaEEsNCdoMCw0J2g1LDgnaDMsNCdoNSw4J2gwMH0pOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7OCdoODIsNCdoNSw4J2gzLDQnaDUsOCdoMDB9KTsKIAkgIGNsb2NrX21vbml0b3IoMypDTEsxX1BFUklPRCw1KkNMSzJfUEVSSU9ELDQqQ0xLMl9QRVJJT0QsMypDTEsxX1BFUklPRCk7CiAKIAkgICRkaXNwbGF5KCJTdGVwLTUsIENQVTogQ0xPQ0sxLzQsIFJUQzogQ0xPQ0syLygyKzQpLCBVU0I6IENMT0NLMi8oMiszKSwgV0JTOkNMT0NLMS80Iik7CiAJICB0ZXN0X3N0ZXAgPSA1OwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoQiw0J2gwLDQnaDYsOCdoNCw0J2g2LDgnaDAwfSk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4Myw0J2g2LDgnaDQsNCdoNiw4J2gwMH0pOwogCSAgY2xvY2tfbW9uaXRvcig0KkNMSzFfUEVSSU9ELDYqQ0xLMl9QRVJJT0QsNSpDTEsyX1BFUklPRCw0KkNMSzFfUEVSSU9EKTsKIAogCSAgJGRpc3BsYXkoIlN0ZXAtNiwgQ1BVOiBDTE9DSzEvKDIrMyksIFJUQzogQ0xPQ0syLygyKzUpLCBVU0I6IENMT0NLMi8oMis0KSwgV0JTOkNMT0NLMS8oMiszKSIpOwogCSAgdGVzdF9zdGVwID0gNjsKLSAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaEMsNCdoMCw0J2g3LDgnaDUsNCdoNyw4J2gwMH0pOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7OCdoODQsNCdoNyw4J2g1LDQnaDcsOCdoMDB9KTsKIAkgIGNsb2NrX21vbml0b3IoNSpDTEsxX1BFUklPRCw3KkNMSzJfUEVSSU9ELDYqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CiAKIAkgICRkaXNwbGF5KCJTdGVwLTcsIENQVTogQ0xPQ0syLygyKSwgUlRDOiBDTE9DSzIvKDIrNiksIFVTQjogQ0xPQ0syLygyKzUpLCBXQlM6Q0xPQ0syLygyKSIpOwogCSAgdGVzdF9zdGVwID0gNzsKLSAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaEQsNCdoMCw0J2hDLDgnaDYsNCdoQyw4J2gwMH0pOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7OCdoODUsNCdoQyw4J2g2LDQnaEMsOCdoMDB9KTsKIAkgIGNsb2NrX21vbml0b3IoMipDTEsyX1BFUklPRCw4KkNMSzJfUEVSSU9ELDcqQ0xLMl9QRVJJT0QsMipDTEsyX1BFUklPRCk7CiAKIAkgICRkaXNwbGF5KCJTdGVwLTgsIENQVTogQ0xPQ0syLzMsIFJUQzogQ0xPQ0syLygyKzcpLCBVU0I6IENMT0NLMi8oMis2KSwgV0JTOkNMT0NLMi8zIik7CiAJICB0ZXN0X3N0ZXAgPSA4OwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRSw0J2gwLDQnaEQsOCdoNyw0J2hELDgnaDAwfSk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4Niw0J2hELDgnaDcsNCdoRCw4J2gwMH0pOwogCSAgY2xvY2tfbW9uaXRvcigzKkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsOCpDTEsyX1BFUklPRCwzKkNMSzJfUEVSSU9EKTsKIAogCSAgJGRpc3BsYXkoIlN0ZXAtOSwgQ1BVOiBDTE9DSzIvNCwgUlRDOiBDTE9DSzIvKDIrOCksIFVTQjogQ0xPQ0syLygyKzcpLCBXQlM6Q0xPQ0syLzQiKTsKIAkgIHRlc3Rfc3RlcCA9IDk7Ci0gICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hGLDQnaDAsNCdoRSw4J2g4LDQnaEUsOCdoMDB9KTsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezgnaDg3LDQnaEUsOCdoOCw0J2hFLDgnaDAwfSk7CiAJICBjbG9ja19tb25pdG9yKDQqQ0xLMl9QRVJJT0QsMTAqQ0xLMl9QRVJJT0QsOSpDTEsyX1BFUklPRCw0KkNMSzJfUEVSSU9EKTsKIAotCSAgJGRpc3BsYXkoIlN0ZXAtMTAsIENQVTogQ0xPQ0syLygyKzMpLCBSVEM6IENMT0NLMi8oMisxMjgpLCBVU0I6IENMT0NLMi8oMis3KSwgV0JTOkNMT0NLMS8oMiszKSIpOworCSAgJGRpc3BsYXkoIlN0ZXAtMTAsIENQVTogQ0xPQ0syLygyKzMpLCBSVEM6IENMT0NLMi8oMisxMjgpLCBVU0I6IENMT0NLMi8oMis4KSwgV0JTOkNMT0NLMS8oMiszKSIpOwogCSAgdGVzdF9zdGVwID0gMTA7Ci0gICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hGLDQnaDAsNCdoRiw4J2g4MCw0J2hGLDgnaDAwfSk7Ci0JICBjbG9ja19tb25pdG9yKDUqQ0xLMl9QRVJJT0QsMTMwKkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsNSpDTEsyX1BFUklPRCk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4OCw0J2hGLDgnaDgwLDQnaEYsOCdoMDB9KTsKKwkgIGNsb2NrX21vbml0b3IoNSpDTEsyX1BFUklPRCwxMzAqQ0xLMl9QRVJJT0QsMTAqQ0xLMl9QRVJJT0QsNSpDTEsyX1BFUklPRCk7CiAKLQkgICRkaXNwbGF5KCJTdGVwLTEwLCBDUFU6IENMT0NLMi8oMiszKSwgUlRDOiBDTE9DSzIvKDIrMjU1KSwgVVNCOiBDTE9DSzIvKDIrNyksIFdCUzpDTE9DSzIvKDIrMykiKTsKKwkgICRkaXNwbGF5KCJTdGVwLTEwLCBDUFU6IENMT0NLMi8oMiszKSwgUlRDOiBDTE9DSzIvKDIrMjU1KSwgVVNCOiBDTE9DSzIvKDIrOSksIFdCUzpDTE9DSzIvKDIrMykiKTsKIAkgIHRlc3Rfc3RlcCA9IDEwOwotICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRiw0J2gwLDQnaEYsOCdoRkYsNCdoRiw4J2gwMH0pOwotCSAgY2xvY2tfbW9uaXRvcig1KkNMSzJfUEVSSU9ELDI1NypDTEsyX1BFUklPRCw5KkNMSzJfUEVSSU9ELDUqQ0xLMl9QRVJJT0QpOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7OCdoODksNCdoRiw4J2hGRiw0J2hGLDgnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKDUqQ0xLMl9QRVJJT0QsMjU3KkNMSzJfUEVSSU9ELDExKkNMSzJfUEVSSU9ELDUqQ0xLMl9QRVJJT0QpOwogCiAgICAgICAgICAkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CiAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogQ2hlY2tpbmcgdGhlIGNoaXAgc2lnbmF0dXJlIDoiKTsKQEAgLTI0Miw4ICsyNDEsOCBAQAogICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLCdoMSk7CiAKIAkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDU4LHJlYWRfZGF0YSwzMidoODI3M184MzQzKTsKLQkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDVDLHJlYWRfZGF0YSwzMidoMDIwM18yMDIyKTsKLQkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDYwLHJlYWRfZGF0YSwzMidoMDAwM183MDAwKTsKKwkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDVDLHJlYWRfZGF0YSwzMidoMTAwM18yMDIyKTsKKwkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDYwLHJlYWRfZGF0YSwzMidoMDAwM184MDAwKTsKIAogICAgICAgZW5kCiAgICAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91c2IvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfdXNiL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDgyZDMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfdXNiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTAxIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAuLi9hZ2VudHMKK1VQUkpfQkVIQVZJT1VSQUxfQkZNICAgID0gLi4vYmZtCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IyYy9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcworVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKKworIyMgWUlGSVZFIEZJUk1XQVJFCitZSUZJVkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCitHQ0M2NF9QUkVGSVg/PXJpc2N2NjQtdW5rbm93bi1lbGYKKworIyMgUklTQ1YgR0NDIAorR0NDX1BBVEg/PS9lZi9hcHBzL2JpbgorR0NDX1BSRUZJWD89cmlzY3YzMi11bmtub3duLWVsZgorUERLX1BBVEg/PS9vcHQvcGRrL3NreTEzMEEKKworIyMgU2ltdWxhdGlvbiBtb2RlOiBSVEwvR0wKK1NJTT89UlRMCitEVU1QPz1PRkYKK1JJU0NfQ09SRT89MAorCisuU1VGRklYRVM6CisKK1BBVFRFUk4gPSB1c2VyX3VzYgorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKKwordnZwOiAgJHtQQVRURVJOOj0udnZwfQorCislLnZ2cDogJV90Yi52CitpZmVxICgkKFNJTSksUlRMKQorICAgaWZlcSAoJChEVU1QKSxPRkYpCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkKFBES19QQVRIKSBcCisJLUkgJChDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUykgLUkgJChDQVJBVkVMX1JUTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX01PREVMUykgICAgLUkgJChVUFJKX1JUTF9QQVRIKSAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgLUkgJChVUFJKX0JFSEFWSU9VUkFMX0JGTSkgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgICBlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURXRkRVTVAgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICAtSSAkKFVQUkpfQkVIQVZJT1VSQUxfQkZNKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgZW5kaWYKK2Vsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLURHTCAtSSAkKFBES19QQVRIKSBcCisJLUkgJChDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUykgLUkgJChDQVJBVkVMX1JUTF9QQVRIKSAtSSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX01PREVMUykgLUkgJChVUFJKX0dMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJJDwgLW8gJEAgCitlbmRpZgorCislLnZjZDogJS52dnAKKwl2dnAgJDwKKworJS5oZXg6IAorCWVjaG8gQCJUaGlzIGlzIHVzZXIgYm9vdCB0ZXN0LCBub3RpbmcgdG8gY29tcGlsZSB0aGUgbWFuZ21lbnQgY29yZSBjb2RlIgorCisKKyMgLS0tLSBDbGVhbiAtLS0tCisKK2NsZWFuOgorCXJtIC1mICoudnZwICoudmNkICoubG9nICouZnN0CisKKy5QSE9OWTogY2xlYW4gaGV4IGFsbApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VzYi90ZXN0cy91c2JfdGVzdDEudiBiL3Zlcmlsb2cvZHYvdXNlcl91c2IvdGVzdHMvdXNiX3Rlc3QxLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTUyMmQwOAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl91c2IvdGVzdHMvdXNiX3Rlc3QxLnYKQEAgLTAsMCArMSw1NiBAQAorYGRlZmluZSB1c2JiZm0gIHVfdXNiX2FnZW50Cit0YXNrIHVzYl90ZXN0MTsKKworcmVnIFs2OjBdIGFkZHJlc3M7CityZWcgWzM6MF0gZW5kcHQ7CityZWcgWzM6MF0gU3RhdHVzOworcmVnIFszMTowXSBCeXRlQ291bnQ7CisKK2ludGVnZXIgICAgaSxqOworcmVnIFs3OjBdICBzdGFydGJ5dGU7CityZWcgWzE1OjBdIG1hc2s7CitpbnRlZ2VyICAgIE1heFBrdFNpemU7CityZWcgWzM6MF0gIFBhY2tUeXBlOworCisKK3BhcmFtZXRlciAgTVlBQ0sgICA9IDQnYjAwMDAsCisgICAgICAgICAgIE1ZTkFLICAgPSA0J2IwMDAxLAorICAgICAgICAgICBNWVNUQUxMID0gNCdiMDAxMCwKKyAgICAgICAgICAgTVlUT1VUICA9IDQnYjAwMTEsCisgICAgICAgICAgIE1ZSVZSRVMgPSA0J2IwMTAwLAorICAgICAgICAgICBNWUNSQ0VSID0gNCdiMDEwMTsKKworCisKKyAgICAgYmVnaW4KKyAgCisKKyAgICAkZGlzcGxheSgiJTBkOiBVU0IgUmVzZXQgIC0tLS0tIiwgJHRpbWUpOworICAgIGB1c2JiZm0udXNiaHdfcmVzZXQ7CisKKyAgICBhZGRyZXNzID0gMTsKKyAgICBlbmRwdCAgICA9IDA7CisgICAgJGRpc3BsYXkoIiUwZDogU2V0IEFkZHJlc3MgPSAleCAtLS0tLSIsICR0aW1lLGFkZHJlc3MpOworICAgIGB1c2JiZm0uU2V0QWRkcmVzcyAoYWRkcmVzcyk7CisgICAgJGRpc3BsYXkoIiUwZDogU2VuZGluZyBTZXR1cCBDb21tYW5kICIsICR0aW1lKTsKKyAgICBgdXNiYmZtLnNldHVwKDcnaDAwLCA0J2gwLCBTdGF0dXMpOworICAgIGB1c2JiZm0ucHJpbnRzdGF0dXMoU3RhdHVzLCBNWUFDSyk7CisgICAgJGRpc3BsYXkoIiUwZDogU2VuZGluZyBTdGF0dXMgQ29tbWFuZCAiLCAkdGltZSk7CisgICAgYHVzYmJmbS5zdGF0dXNfSU4oNydoMDAsIGVuZHB0LCBTdGF0dXMpOworICAgIGB1c2JiZm0ucHJpbnRzdGF0dXMoU3RhdHVzLCBNWUFDSyk7CisgICAgIzUwMDA7CisgIAorICAgICRkaXNwbGF5KCIlMGQ6IFNldCBjb25maWd1cmF0aW9uICAtLS0tLSIsICR0aW1lKTsKKyAgICBgdXNiYmZtLlNldENvbmZpZ3VyYXRpb24oMidiMDEpOworICAgIGB1c2JiZm0uc2V0dXAoYWRkcmVzcywgNCdiMDAwMCwgU3RhdHVzKTsKKyAgICBgdXNiYmZtLnByaW50c3RhdHVzKFN0YXR1cywgTVlBQ0spOworICAgIGB1c2JiZm0uc3RhdHVzX0lOKGFkZHJlc3MsIDQnYjAwMDAsIFN0YXR1cyk7CisgICAgYHVzYmJmbS5wcmludHN0YXR1cyhTdGF0dXMsIE1ZQUNLKTsKKyAgICAjMjAwMDsKKworICAgICRkaXNwbGF5KCIlMGQ6IENvbmZpZ3VyYXRpb24gZG9uZSAhISEhISEiLCAkdGltZSk7CisgICAgdGVzdF9jb250cm9sLmZpbmlzaF90ZXN0OworICAgICAKKyAgZW5kCisKK2VuZHRhc2sKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91c2IvdGVzdHMvdXNiX3Rlc3QyLnYgYi92ZXJpbG9nL2R2L3VzZXJfdXNiL3Rlc3RzL3VzYl90ZXN0Mi52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlMzc1NDkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfdXNiL3Rlc3RzL3VzYl90ZXN0Mi52CkBAIC0wLDAgKzEsOTEgQEAKK2BkZWZpbmUgdXNiYmZtICB1X3VzYl9hZ2VudAordGFzayB1c2JfdGVzdDI7CisKK3JlZyBbNjowXSBhZGRyZXNzOworcmVnIFszOjBdIGVuZHB0OworcmVnIFszOjBdIFN0YXR1czsKKworICBpbnRlZ2VyICAgIGksajsKKyAgcmVnIFs3OjBdICBzdGFydGJ5dGU7CisgIHJlZyBbMTU6MF0gbWFzazsKKyAgaW50ZWdlciAgICBNYXhQa3RTaXplOworICByZWcgWzM6MF0gIFBhY2tUeXBlOworCisKK3BhcmFtZXRlciAgTVlBQ0sgICA9IDQnYjAwMDAsCisgICAgICAgICAgIE1ZTkFLICAgPSA0J2IwMDAxLAorICAgICAgICAgICBNWVNUQUxMID0gNCdiMDAxMCwKKyAgICAgICAgICAgTVlUT1VUICA9IDQnYjAwMTEsCisgICAgICAgICAgIE1ZSVZSRVMgPSA0J2IwMTAwLAorICAgICAgICAgICBNWUNSQ0VSID0gNCdiMDEwMTsKKworICAgICBiZWdpbgorICAgICBhZGRyZXNzID0gNydiMDAwXzAwMDE7CisgICAgIGVuZHB0ICAgPSA0J2IwMDAwOworCisgICAgJGRpc3BsYXkoIiUwZDogVVNCIFJlc2V0ICAtLS0tLSIsICR0aW1lKTsKKyAgICBgdXNiYmZtLnVzYmh3X3Jlc2V0OworCisgICAgJGRpc3BsYXkoIiUwZDogU2V0IEFkZHJlc3MgPSAxIC0tLS0tIiwgJHRpbWUpOworICAgIGB1c2JiZm0uU2V0QWRkcmVzcyAoYWRkcmVzcyk7CisgICAgYHVzYmJmbS5zZXR1cCg3J2gwMCwgNCdoMCwgU3RhdHVzKTsKKyAgICBgdXNiYmZtLnByaW50c3RhdHVzKFN0YXR1cywgTVlBQ0spOworICAgIGB1c2JiZm0uc3RhdHVzX0lOKDcnaDAwLCBlbmRwdCwgU3RhdHVzKTsKKyAgICBgdXNiYmZtLnByaW50c3RhdHVzKFN0YXR1cywgTVlBQ0spOworICAgICM1MDAwOworICAKKyAgICAkZGlzcGxheSgiJTBkOiBTZXQgY29uZmlndXJhdGlvbiAgLS0tLS0iLCAkdGltZSk7CisgICAgYHVzYmJmbS5TZXRDb25maWd1cmF0aW9uKDInYjAxKTsKKyAgICBgdXNiYmZtLnNldHVwKGFkZHJlc3MsIDQnYjAwMDAsIFN0YXR1cyk7CisgICAgYHVzYmJmbS5wcmludHN0YXR1cyhTdGF0dXMsIE1ZQUNLKTsKKyAgICBgdXNiYmZtLnN0YXR1c19JTihhZGRyZXNzLCA0J2IwMDAwLCBTdGF0dXMpOworICAgIGB1c2JiZm0ucHJpbnRzdGF0dXMoU3RhdHVzLCBNWUFDSyk7CisgICAgIzIwMDA7CisKKyAgICAkZGlzcGxheSgiJTBkOiBDb25maWd1cmF0aW9uIGRvbmUgISEhISEhIiwgJHRpbWUpOworICAgICAKKyAgIC8vIHdyaXRlIFVBUlQgIHJlZ2lzdGVycyB0aHJvdWdoIFVTQgorCQorICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCisJCisgICAgLy8gcmVnaXN0ZXIgd29yZCB3cml0ZQorICAgICRkaXNwbGF5KCIlMGQ6IFBlcmZvcm1pbmcgUmVnaXN0ZXIgV29yZCBXcml0ZS0tLS0tLS0tLS0tLSIsICR0aW1lKTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDAsICAzMidoMTEyMjMzNDQpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoNCwgIDMyJ2gyMjMzNDQ1NSk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2g4LCAgMzInaDMzNDQ1NTY2KTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaEMsICAzMidoNDQ1NTY2NzcpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoMTAsIDMyJ2g1NTY2Nzc4OCk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2gxNCwgMzInaDY2Nzc4ODk5KTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDE4LCAzMidoNzc4ODk5QUEpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoMUMsIDMyJ2g4ODk5QUFCQik7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2gyMCwgMzInaDk5QUFCQkNDKTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRXciAoYWRkcmVzcywgMzInaDI0LCAzMidoQUFCQkNDREQpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFdyIChhZGRyZXNzLCAzMidoMjgsIDMyJ2hCQkNDRERFRSk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2gyQywgMzInaENDRERFRUZGKTsKKyAgICAjNTAwOworCisgICAgLy8gcmVnaXN0ZXIgd29yZCBSZWFkCisgICAgJGRpc3BsYXkoIiUwZDogUGVyZm9ybWluZyBSZWdpc3RlciBXb3JkIFJlYWQtLS0tLS0tLS0tLS0iLCAkdGltZSk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmRDbXAgKGFkZHJlc3MsIDMyJ2gwICwgMzInaDExMjIzMzQ0KTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZENtcCAoYWRkcmVzcywgMzInaDQgLCAzMidoMjIzMzQ0NTUpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkQ21wIChhZGRyZXNzLCAzMidoOCAsIDMyJ2gzMzQ0NTU2Nik7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmRDbXAgKGFkZHJlc3MsIDMyJ2hDICwgMzInaDQ0NTU2Njc3KTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZENtcCAoYWRkcmVzcywgMzInaDEwLCAzMidoNTU2Njc3ODgpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkQ21wIChhZGRyZXNzLCAzMidoMTQsIDMyJ2g2Njc3ODg5OSk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmRDbXAgKGFkZHJlc3MsIDMyJ2gxOCwgMzInaDc3ODg5OUFBKTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZENtcCAoYWRkcmVzcywgMzInaDFDLCAzMidoODg5OUFBQkIpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkQ21wIChhZGRyZXNzLCAzMidoMjAsIDMyJ2g5OUFBQkJDQyk7CisgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmRDbXAgKGFkZHJlc3MsIDMyJ2gyNCwgMzInaEFBQkJDQ0REKTsKKyAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZENtcCAoYWRkcmVzcywgMzInaDI4LCAzMidoQkJDQ0RERUUpOworICAgIGB1c2JiZm0uVmVuUmVnV29yZFJkQ21wIChhZGRyZXNzLCAzMidoMkMsIDMyJ2hDQ0RERUVGRik7CisgICAgIzUwMAorCisKKyAgCisgICAgJGRpc3BsYXkgKCJVU0IgZG9pbmcgcmVnaXN0ZXIgd3JpdGVzIGFuZCByZWFkcyB0byBVU0IgYmxvY2sgZW5kIFxuIik7CisKKyAgICB0ZXN0X2NvbnRyb2wuZmluaXNoX3Rlc3Q7CisgIGVuZAorCitlbmR0YXNrCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfdXNiL3Rlc3RzL3VzYl90ZXN0My52IGIvdmVyaWxvZy9kdi91c2VyX3VzYi90ZXN0cy91c2JfdGVzdDMudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MWQxYzY5Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VzYi90ZXN0cy91c2JfdGVzdDMudgpAQCAtMCwwICsxLDE4MiBAQAorYGRlZmluZSB1c2JiZm0gIHRiX3RvcC51X3VzYl9hZ2VudAordGFzayB1c2JfdGVzdDM7CisKK3JlZyBbNjowXSBhZGRyZXNzOworcmVnIFszOjBdIGVuZHB0OworcmVnIFszOjBdIFN0YXR1czsKK3JlZyBbMzE6MF0gQnl0ZUNvdW50OworcmVnIFszMTowXSBSZWFkRGF0YTsKK2ludGVnZXIgICAgaSxqLGs7CisKKworcmVnIFsxOjBdIGRhdGFfYml0ICAgICAgICA7CityZWcJICBzdG9wX2JpdHMgICAgICAgOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworcmVnCSAgc3RpY2tfcGFyaXR5ICAgIDsgLy8gMTogZm9yY2UgZXZlbiBwYXJpdHkKK3JlZwkgIHBhcml0eV9lbiAgICAgICA7IC8vIHBhcml0eSBlbmFibGUKK3JlZwkgIGV2ZW5fb2RkX3Bhcml0eSA7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CityZWcgWzE1OjBdIGRpdmlzb3IgICAgICAgIDsJLy8gZGl2aWRlZCBieSAobisxKSAqIDE2CityZWcgWzE1OjBdIHRpbWVvdXQgICAgICAgIDsvLyB3YWl0IHRpbWUgbGltaXQKK3JlZyAJZmlmb19lbmFibGUgICAgICAgOwkvLyBmaWZvIG1vZGUgZGlzYWJsZQorCityZWcgWzc6MF0gd3JpdGVfZGF0YSBbMDozOV07CityZWcgWzE1OjBdIHJ4X251OworcmVnIFsxNTowXSB0eF9udTsKKworCitwYXJhbWV0ZXIgIE1ZQUNLICAgPSA0J2IwMDAwLAorICAgICAgICAgICBNWU5BSyAgID0gNCdiMDAwMSwKKyAgICAgICAgICAgTVlTVEFMTCA9IDQnYjAwMTAsCisgICAgICAgICAgIE1ZVE9VVCAgPSA0J2IwMDExLAorICAgICAgICAgICBNWUlWUkVTID0gNCdiMDEwMCwKKyAgICAgICAgICAgTVlDUkNFUiA9IDQnYjAxMDE7CisKKyAgICAgYmVnaW4KKyAgICAgYWRkcmVzcyA9IDcnYjAwMF8wMDAxOworICAgICBlbmRwdCAgID0gNCdiMDAwMDsKKworICAgICRkaXNwbGF5KCIlMGQ6IFVTQiBSZXNldCAgLS0tLS0iLCAkdGltZSk7CisgICAgYHVzYmJmbS51c2Jod19yZXNldDsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqICAgICAgICAgIEhPU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVWSUNFCisgICAgKiAgMS4gIDB4MkQsMHgwMCwgMHgwMCAgICAKKyAgICAqICAyLiAgMHhDMywweDAwLDB4MDUsMHgwMSwKKyAgICAqICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgICAqICAgICAgMHgwMCwweEVCLDB4MjUKKyAgICAqICAzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhEMgorICAgICogIDQuICAweDY5LDB4MDAsIDB4MTAgIAorICAgICogIDUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRCLCAweDAwICAKKyAgICAqICA2LiAgMHhEMgorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgJGRpc3BsYXkoIiUwZDogU2V0IEFkZHJlc3MgPSAxIC0tLS0tIiwgJHRpbWUpOworICAgIGB1c2JiZm0uU2V0QWRkcmVzcyAoYWRkcmVzcyk7CisgICAgYHVzYmJmbS5zZXR1cCg3J2gwMCwgNCdoMCwgU3RhdHVzKTsKKyAgICBgdXNiYmZtLnByaW50c3RhdHVzKFN0YXR1cywgTVlBQ0spOworICAgIGB1c2JiZm0uc3RhdHVzX0lOKDcnaDAwLCBlbmRwdCwgU3RhdHVzKTsKKyAgICBgdXNiYmZtLnByaW50c3RhdHVzKFN0YXR1cywgTVlBQ0spOworCisgICAgIzUwMDA7CisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogICAgICAgICAgSE9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVZJQ0UKKyAgICAqICAxLiAgMHgyRCwweDAxLCAweEU4ICAgIAorICAgICogIDIuICAweEMzLDB4MDAsMHgwOSwweDAxLAorICAgICogICAgICAweDAwLDB4MDAsMHgwMCwweDAwLAorICAgICogICAgICAweDAwLDB4MjcsMHgyNQorICAgICogIDMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEQyCisgICAgKiAgNC4gIDB4NjksMHgwMSwgMHhFOCAgCisgICAgKiAgNS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEIsIDB4MDAgIAorICAgICogIDYuICAweEQyCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgCisgICAgJGRpc3BsYXkoIiUwZDogU2V0IGNvbmZpZ3VyYXRpb24gIC0tLS0tIiwgJHRpbWUpOworICAgIGB1c2JiZm0uU2V0Q29uZmlndXJhdGlvbigyJ2IwMSk7CisgICAgYHVzYmJmbS5zZXR1cChhZGRyZXNzLCA0J2IwMDAwLCBTdGF0dXMpOworICAgIGB1c2JiZm0ucHJpbnRzdGF0dXMoU3RhdHVzLCBNWUFDSyk7CisgICAgYHVzYmJmbS5zdGF0dXNfSU4oYWRkcmVzcywgNCdiMDAwMCwgU3RhdHVzKTsKKyAgICBgdXNiYmZtLnByaW50c3RhdHVzKFN0YXR1cywgTVlBQ0spOworICAgICMyMDAwOworCisgICAgJGRpc3BsYXkoIiUwZDogQ29uZmlndXJhdGlvbiBkb25lICEhISEhISIsICR0aW1lKTsKKyAgICAgCisgICAvLyB3cml0ZSBVQVJUICByZWdpc3RlcnMgdGhyb3VnaCBVU0IKKwkKKyAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICBkYXRhX2JpdCAgICAgICAgPSAyJ2IxMTsKKyAgICAgIHN0b3BfYml0cyAgICAgICA9IDA7IC8vIDA6IDEgc3RvcCBiaXQ7IDE6IDIgc3RvcCBiaXQ7CisgICAgICBzdGlja19wYXJpdHkgICAgPSAwOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorICAgICAgcGFyaXR5X2VuICAgICAgID0gMTsgLy8gcGFyaXR5IGVuYWJsZQorICAgICAgZXZlbl9vZGRfcGFyaXR5ID0gMTsgLy8gMDogb2RkIHBhcml0eTsgMTogZXZlbiBwYXJpdHkKKyAgICAgIGRpdmlzb3IgICAgICAgID0gMTU7CS8vIGRpdmlkZWQgYnkgKG4rMSkgKiAxNgorICAgICAgdGltZW91dCAgICAgICAgPSA1MDA7Ly8gd2FpdCB0aW1lIGxpbWl0CisgICAgICBmaWZvX2VuYWJsZSAgICAgICA9IDA7CS8vIGZpZm8gbW9kZSBkaXNhYmxlCisJCisgICAgdGJfdG9wLnVfdWFydF9hZ2VudC51YXJ0X2luaXQ7CisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICogICAgICAgICAgSE9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVZJQ0UKKyAgICAqICAxLiAgMHgyRCwweDAxLCAweEU4ICAgIAorICAgICogIDIuICAweEMzLDB4NDAsMHgxMCwweDAwLAorICAgICogICAgICAweDAwLDB4MDAsMHgwMCwweDA0LAorICAgICogICAgICAweDAwLDB4QTgsMHhDNQorICAgICogIDMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEQyCisgICAgKiAgNC4gIDB4RTEsMHgwMSwgMHhFOCAgCisgICAgKiAgNS4gIDB4NEIsMHgwMCwweDAwLDB4MDAgICAgICAgICAgICAgICAgIAorICAgICogICAgICAweDE3LDB4QkYsMHhENQorICAgICogIDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEQyCisgICAgKiAgNy4gIDB4NjksMHgwMSwweEU4CisgICAgKiAgOC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEIsMHgwMAorICAgICogIDkuICAgMHhEMgorICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2gwLCB7MjcnaDAsMidiMTAsMSdiMSwxJ2IxLDEnYjF9KTsgIAorICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAqICAgICAgICAgIEhPU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVWSUNFCisgICAgKiAgMS4gIDB4MkQsMHgwMSwgMHhFOCAgICAKKyAgICAqICAyLiAgMHhDMywweDQwLDB4MTAsMHgwMCwKKyAgICAqICAgICAgMHgwMCwweDAwLDB4MDgsMHgwNCwKKyAgICAqICAgICAgMHgwMCwweDI5LDB4MDcKKyAgICAqICAzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhEMgorICAgICogIDQuICAweEUxLDB4MDEsIDB4RTggIAorICAgICogIDUuICAweDRCLDB4MDAsMHgwMCwweDAwICAgICAgICAgICAgICAgICAKKyAgICAqICAgICAgMHgwRSwweDdFLDB4MUYKKyAgICAqICA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhEMgorICAgICogIDcuICAweDY5LDB4MDEsMHhFOAorICAgICogIDguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRCLDB4MDAKKyAgICAqICA5LiAgIDB4RDIKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8vIEJhdWQgQ2xvY2sgMTZ4LCAgTWFzdGVyIENsb2NrLyAoMitjZmdfdmFsdWUpCisgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2g4LCBkaXZpc29yLTEpOyAgCisgICAgdGJfdG9wLnVfdWFydF9hZ2VudC5jb250cm9sX3NldHVwIChkYXRhX2JpdCwgc3RvcF9iaXRzLCBwYXJpdHlfZW4sIGV2ZW5fb2RkX3Bhcml0eSwgc3RpY2tfcGFyaXR5LCB0aW1lb3V0LCBkaXZpc29yLCBmaWZvX2VuYWJsZSk7CisJCisgICAgZm9yIChpPTA7IGk8NDA7IGk9aSsxKQorCXdyaXRlX2RhdGFbaV0gPSAkcmFuZG9tOworCisgICBmb3JrCisgICBiZWdpbgorICAgICAgZm9yIChpPTA7IGk8NDA7IGk9aSsxKQorICAgICAgYmVnaW4KKyAgICAgICAgJGRpc3BsYXkgKCJcbi4uLiBXcml0aW5nIGNoYXIgJWQgLi4uIiwgd3JpdGVfZGF0YVtpXSk7CisgICAgICAgICB0Yl90b3AudV91YXJ0X2FnZW50LndyaXRlX2NoYXIgKHdyaXRlX2RhdGFbaV0pOworCSAjMjAwMDA7CisgICAgICBlbmQKKyAgIGVuZAorCisgICBiZWdpbgorICAgICAgZm9yIChqPTA7IGo8NDA7IGo9aisxKQorICAgICAgYmVnaW4KKyAgICAgICAgdGJfdG9wLnVfdWFydF9hZ2VudC5yZWFkX2NoYXJfY2hrKHdyaXRlX2RhdGFbal0pOworICAgICAgZW5kCisgICBlbmQKKworICAgLy8gUmVhZCB0aHJvdWdoIHRoZSBVU0IgYW5kIGNoZWNrIHRoZSBVQVJUIFJYIEZpZm8gU3RhdHVzOworICAgLy8gSWYgQXZhaWxhYmxlLCB0aGVuIGxvb3AgaXQgYmFjaworICAgYmVnaW4KKyAgICAgIGZvciAoaz0wOyBrPDQwOyBrPWsrMSkKKyAgICAgIGJlZ2luCisgICAgICAgIFJlYWREYXRhWzFdPSAxJ2IxOworICAgICAgICB3aGlsZShSZWFkRGF0YVsxXSA9PSAxJ2IxICkgYmVnaW4gLy8gQ2hlY2sgZm9yIFVBUlQgUlggZmlmbyBub3QgZW1wdHkKKyAgICAgICAgICAgJGRpc3BsYXkgKCJcbi4uLiBSZWFkaW5nIHRoZSBVQVJUIFN0YXR1czogJXggLi4uIiwgUmVhZERhdGEpOworICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAqICAgICAgICAgIEhPU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVWSUNFCisgICAgICAgICAgKiAgMS4gIDB4MkQsMHgwMSwgMHhFOCAgICAKKyAgICAgICAgICAqICAyLiAgMHhDMywweEMwLDB4MTEsMHgwMCwKKyAgICAgICAgICAqICAgICAgMHgwMCwweDAwLDB4MEMsMHgwNCwKKyAgICAgICAgICAqICAgICAgMHgwMCwweDcwLDB4NjYKKyAgICAgICAgICAqICAzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhEMgorICAgICAgICAgICogIDQuICAweDY5LDB4MDEsIDB4RTggIAorCSAgKiAgNS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NEIsMDAKKwkgICogIDYuICAweEQyCisJICAqICA3LiAgMHhFMSwweDAxLDB4RTgKKwkgICogIDguICAweDRCLDB4MDAsIDB4MDAKKyAgICAgICAgICAqICA5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhEMgorICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgICAgYHVzYmJmbS5WZW5SZWdXb3JkUmQgKGFkZHJlc3MsIDMyJ2hDLCBSZWFkRGF0YSk7ICAKKyAgICAgICBlbmQKKyAgICAgICAgICBgdXNiYmZtLlZlblJlZ1dvcmRSZCAoYWRkcmVzcywgMzInaDE0LCBSZWFkRGF0YSk7ICAvLyBSZWFkIHRoZSBVQVJUIFJYRCBEYXRhCisgICAgICAgICAgYHVzYmJmbS5WZW5SZWdXb3JkV3IgKGFkZHJlc3MsIDMyJ2gxMCwgUmVhZERhdGEpOyAgIC8vIFdyaXRlIEJhY2sgdG8gVUFSVCBUWEQKKyAgICAgIGVuZAorICAgZW5kCisgICBqb2luCisKKyAgICMxMDAKKyAgIHRiX3RvcC51X3VhcnRfYWdlbnQucmVwb3J0X3N0YXR1cyhyeF9udSwgdHhfbnUpOworZW5kCitlbmR0YXNrCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfdXNiL3VzZXJfdXNiX3RiLnYgYi92ZXJpbG9nL2R2L3VzZXJfdXNiL3VzZXJfdXNiX3RiLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlMmI0NwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl91c2IvdXNlcl91c2JfdGIudgpAQCAtMCwwICsxLDU2MSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSByaXNjZHVpbm8gcHJvamVjdCAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3Jpc2NkdWluby5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICB1c2IgaW50ZXJmYWZhY2UgdGhyb3VnaCBFeHRlcm5hbCBXQiBpL0YuICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMDkgTWFyIDIwMjIsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgbnMKKworLy8gTm90ZSBpbiBjYXJhdmVsLCAweDMwWFhfWFhYWCBvbmx5IGNvbWUgdG8gdXNlciBpbnRlcmZhY2UKKy8vIFNvLCB1c2luZyB3Yl9ob3N0IGJhbmsgc2VsZWN0IHdlIGhhdmUgY2hhbmdpbmcgTVNCIGFkZHJlc3MgWzMxOjI0XSA9IDB4MTAKK2BkZWZpbmUgQUREUl9TUEFDRV9VQVJUICAgIDMyJ2gzMDAxXzAwMDAKK2BkZWZpbmUgQUREUl9TUEFDRV9VU0IgICAgIDMyJ2gzMDAxXzAwODAKK2BkZWZpbmUgQUREUl9TUEFDRV9TU1BJICAgIDMyJ2gzMDAxXzAwQzAKK2BkZWZpbmUgQUREUl9TUEFDRV9QSU5NVVggIDMyJ2gzMDAyXzAwMDAKKworYGRlZmluZSBUQl9HTEJMICAgIHVzZXJfdXNiX3RiCitgZGVmaW5lIFVTQl9CRk0gICAgdV91c2JfYWdlbnQKKworYGluY2x1ZGUgInVwcmpfbmV0bGlzdHMudiIKK2BpbmNsdWRlICJ1c2JfYWdlbnRzLnYiCitgaW5jbHVkZSAidGVzdF9jb250cm9sLnYiCitgaW5jbHVkZSAidXNiMWRfZGVmaW5lcy52IgorYGluY2x1ZGUgInVzYmRfZmlsZXMudiIKKworbW9kdWxlIHVzZXJfdXNiX3RiOworCitwYXJhbWV0ZXIgIFVTQl9IUEVSICAgPSAxMC40MTY3OyAvLyA0OE1oeiBIYWxmIGN5Y2xlCitwYXJhbWV0ZXIgIFVTRVIyX0hQRVIgPSAyLjYwNDI7IC8vIDE5Mk1oeiBIYWxmIGN5Y2xlCisKKwlyZWcgY2xvY2s7CisJcmVnIHVzZXJfY2xvY2syOworCXJlZyB1c2JfNDhtaHpfY2xrOworCXJlZyB3Yl9yc3RfaTsKKwlyZWcgcG93ZXIxLCBwb3dlcjI7CisJcmVnIHBvd2VyMywgcG93ZXI0OworCisgICAgICAgIHJlZyAgICAgICAgd2JkX2V4dF9jeWNfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIHJlZyAgICAgICAgd2JkX2V4dF9zdGJfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9hZHJfaTsgIC8vIGFkZHJlc3MKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3dlX2k7ICAvLyB3cml0ZQorICAgICAgICByZWcgWzMxOjBdIHdiZF9leHRfZGF0X2k7ICAvLyBkYXRhIG91dHB1dAorICAgICAgICByZWcgWzM6MF0gIHdiZF9leHRfc2VsX2k7ICAvLyBieXRlIGVuYWJsZQorCisgICAgICAgIHdpcmUgWzMxOjBdIHdiZF9leHRfZGF0X287ICAvLyBkYXRhIGlucHV0CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfYWNrX287ICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICB3aXJlICAgICAgICB3YmRfZXh0X2Vycl9vOyAgLy8gZXJyb3IKKworCS8vIFVzZXIgSS9PCisJd2lyZSBbMzc6MF0gaW9fb2ViOworCXdpcmUgWzM3OjBdIGlvX291dDsKKwl3aXJlIFszNzowXSBpb19pbjsKKworCisJcmVnIFsxOjBdIHNwaV9jaGlwX25vOworCisJd2lyZSBncGlvOworCXdpcmUgWzM3OjBdIG1wcmpfaW87CisJd2lyZSBbNzowXSBtcHJqX2lvXzA7CisJcmVnICAgICAgICB0ZXN0X2ZhaWw7CisJcmVnIFszMTowXSByZWFkX2RhdGE7CisKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBSZWdpc3RlciBJbnRlcmZhY2UKKyAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICB3aXJlIFszMTowXSAgIHVzYmRfcmVnX2FkZHI7ICAgLy8gUmVnaXN0ZXIgQWRkcmVzcworICAgICAgIAl3aXJlIAkgICAgICB1c2JkX3JlZ19yZHdybjsgIC8vIDAgLT4gd3JpdGUsIDEtPiByZWFkCisgICAgICAgCXdpcmUgCSAgICAgIHVzYmRfcmVnX3JlcTsgICAgLy8gIFJlZ2lzdGVyIFJlcQorICAgICAgICB3aXJlIFszMTowXSAgIHVzYmRfcmVnX3dkYXRhOyAgLy8gUmVnaXN0ZXIgd3JpdGUgZGF0YQorICAgICAgICByZWcgWzMxOjBdICAgIHVzYmRfcmVnX3JkYXRhOyAgLy8gUmVnaXN0ZXIgUmVhZCBEYXRhCisgICAgICAgIHJlZyAgICAgICAgICAgdXNiZF9yZWdfYWNrID0gMSdiMTsgICAgLy8gUmVnaXN0ZXIgQWNrCisKKwlyZWcgIFszMTowXSAgIFJlZ0JhbmsgWzA6MTVdOworCisJLy8gRXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBieSBkZWZhdWx0LiAgTWFrZSB0aGlzIGFydGlmaWNpYWxseSBmYXN0IGZvciB0aGUKKwkvLyBzaW11bGF0aW9uLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHNsb3cgY2xvY2sgYW5kIHRoZSBkaWdpdGFsIFBMTAorCS8vIHdvdWxkIGJlIHRoZSBmYXN0IGNsb2NrLgorCisJYWx3YXlzICMxMi41IGNsb2NrIDw9IChjbG9jayA9PT0gMSdiMCk7CisKKwkvLyA0OE1oeiBjbG9jayBnZW5lcmF0aW9uCisJYWx3YXlzIGJlZ2luCisgICAgICAgICAgI1VTQl9IUEVSICAgICB1c2JfNDhtaHpfY2xrID0gMSdiMDsKKyAgICAgICAgICAjVVNCX0hQRVIgICAgIHVzYl80OG1oel9jbGsgPSAxJ2IxOworICAgICAgICBlbmQKKworCS8vIFVTRVIgQ2xvY2sgZ2VuZXJhdGlvbgorCWFsd2F5cyBiZWdpbgorICAgICAgICAgICNVU0VSMl9IUEVSICAgICB1c2VyX2Nsb2NrMiA9IDEnYjA7CisgICAgICAgICAgI1VTRVIyX0hQRVIgICAgIHVzZXJfY2xvY2syID0gMSdiMTsKKyAgICAgICAgZW5kCisKKwlpbml0aWFsIGJlZ2luCisJCWNsb2NrID0gMDsKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICAgICAgICAgICAgICAgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgICAgICAgICAgICAgICAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorCWVuZAorCWluaXRpYWwgYmVnaW4KKwkJd2JfcnN0X2kgPD0gMSdiMTsKKwkJIzEwMDsKKwkJd2JfcnN0X2kgPD0gMSdiMDsJICAgIAkvLyBSZWxlYXNlIHJlc2V0CisJZW5kCisKKwlgaWZkZWYgV0ZEVU1QCisJICAgaW5pdGlhbCBiZWdpbgorCSAgIAkkZHVtcGZpbGUoInNpbXgudmNkIik7CisJICAgCSRkdW1wdmFycyg1LCB1c2VyX3VzYl90Yik7CisJICAgZW5kCisgICAgICAgYGVuZGlmCisKKyAgICAgICAgYWx3YXlzQChwb3NlZGdlIHdiX3JzdF9pICBvciBwb3NlZGdlIHVzYl80OG1oel9jbGspCisJYmVnaW4KKwkgICBpZih3Yl9yc3RfaSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICB1c2JkX3JlZ19yZGF0YSA9ICdoMDsKKyAgICAgICAgICAgICAgdXNiZF9yZWdfYWNrICAgPSAnaDA7CisJICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgICBpZih1c2JkX3JlZ19yZXEgJiYgdXNiZF9yZWdfcmR3cm4gPT0gMSdiMCAmJiAhdXNiZF9yZWdfYWNrKSBiZWdpbgorICAgICAgICAgICAgICAgICB1c2JkX3JlZ19hY2sgPSAnaDE7CisJCSBSZWdCYW5rW3VzYmRfcmVnX2FkZHJbNToyXV0gPSB1c2JkX3JlZ193ZGF0YTsKKwkJICRkaXNwbGF5KCJTVEFUVVM6IFdyaXRlIEFjY2VzcyBBZGRyZXNzIDogJXggRGF0YTogJXgiLHVzYmRfcmVnX2FkZHJbNzowXSx1c2JkX3JlZ193ZGF0YSk7CisJICAgICAgZW5kIGVsc2UgaWYodXNiZF9yZWdfcmVxICYmIHVzYmRfcmVnX3Jkd3JuID09IDEnYjEgJiYgIXVzYmRfcmVnX2FjaykgYmVnaW4KKyAgICAgICAgICAgICAgICAgdXNiZF9yZWdfYWNrID0gJ2gxOworCQkgdXNiZF9yZWdfcmRhdGEgPSBSZWdCYW5rW3VzYmRfcmVnX2FkZHJbNToyXV07CisJCSAkZGlzcGxheSgiU1RBVFVTOiBSZWFkIEFjY2VzcyBBZGRyZXNzIDogJXggRGF0YTogJXgiLHVzYmRfcmVnX2FkZHJbNzowXSx1c2JkX3JlZ19yZGF0YSk7CisJICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgdXNiZF9yZWdfYWNrID0gJ2gwOworCSAgICAgIGVuZAorCSAgIGVuZAorCWVuZAorCisJaW5pdGlhbCBiZWdpbgorCQkkZHVtcG9uOworCisJCSMyMDA7IC8vIFdhaXQgZm9yIHJlc2V0IHJlbW92YWwKKwkgICAgICAgIHJlcGVhdCAoMTApIEAocG9zZWRnZSBjbG9jayk7CisJCSRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IFRlc3QgU3RhcnRlZCIpOworCisJCS8vIFJlbW92ZSBXYiBSZXNldAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2gxKTsKKworICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBTUEkgTXVsdGkgRnVuY3Rpb25hbCBQb3J0cworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9QSU5NVVgrJ2gwMDM4LCdoNDAwKTsKKworCSAgICAgICAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworCQkjMTsKKyAgICAgICAgIAorCSAgICAgICAgLy8gU2V0IFVTQiBjbG9jayA6IDE5Mi80ID0gNDhNaHoJCisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs4J2g4Miw0J2gwLDgnaDAsNCdoMCw4J2gwMX0pOworCisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSByZXNldAorCQkvLyBSZW1vdmUgV0IgYW5kIFNQSS9VQVJUIFJlc2V0LCBLZWVwIENPUkUgdW5kZXIgUmVzZXQKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfUElOTVVYKzgnaDgsJ2gwM0YpOworCisKKwkJdGVzdF9mYWlsID0gMDsKKwkgICAgICAgIHJlcGVhdCAoMjAwKSBAKHBvc2VkZ2UgY2xvY2spOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCisKKwkJLy91c2JfdGVzdDE7CisJCXVzYl90ZXN0MjsKKworCisJCXJlcGVhdCAoMTAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkJLy8gJGRpc3BsYXkoIisxMDAwIGN5Y2xlcyIpOworCisgICAgICAgICAgCWlmKHRlc3RfY29udHJvbC5lcnJvcl9jb3VudCA9PSAwKSBiZWdpbgorCQkgICBgaWZkZWYgR0wKKwkgICAgCSAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogVVNCIE1vZGUgKEdMKSBQYXNzZWQiKTsKKwkJICAgYGVsc2UKKwkJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBVU0IgTW9kZSAoUlRMKSBQYXNzZWQiKTsKKwkJICAgYGVuZGlmCisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCQkgICAgYGlmZGVmIEdMCisJICAgIAkgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBVU0IgTW9kZSAoR0wpIEZhaWxlZCIpOworCQkgICAgYGVsc2UKKwkJICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogVVNCIE1vZGUgKFJUTCkgRmFpbGVkIik7CisJCSAgICBgZW5kaWYKKwkJIGVuZAorCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAgICAgJGZpbmlzaDsKKwllbmQKKword2lyZSBVU0VSX1ZERDFWOCA9IDEnYjE7Cit3aXJlIFZTUyA9IDEnYjA7CisKK3VzZXJfcHJvamVjdF93cmFwcGVyIHVfdG9wKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgLnZjY2QxKFVTRVJfVkREMVY4KSwJLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAudnNzZDEoVlNTKSwJLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorICAgIC53Yl9jbGtfaSAgICAoY2xvY2sgICAgICAgKSwgIC8vIFN5c3RlbSBjbG9jaworICAgIC51c2VyX2Nsb2NrMiAodXNlcl9jbG9jazIgKSwgIC8vIFJlYWwtdGltZSBjbG9jaworICAgIC53Yl9yc3RfaSAgICAod2JfcnN0X2kgICAgKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisKKyAgICAud2JzX2N5Y19pICAgKHdiZF9leHRfY3ljX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX3N0Yl9pICAgKHdiZF9leHRfc3RiX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX2Fkcl9pICAgKHdiZF9leHRfYWRyX2kpLCAgLy8gYWRkcmVzcworICAgIC53YnNfd2VfaSAgICAod2JkX2V4dF93ZV9pKSwgIC8vIHdyaXRlCisgICAgLndic19kYXRfaSAgICh3YmRfZXh0X2RhdF9pKSwgIC8vIGRhdGEgb3V0cHV0CisgICAgLndic19zZWxfaSAgICh3YmRfZXh0X3NlbF9pKSwgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAud2JzX2RhdF9vICAgKHdiZF9leHRfZGF0X28pLCAgLy8gZGF0YSBpbnB1dAorICAgIC53YnNfYWNrX28gICAod2JkX2V4dF9hY2tfbyksICAvLyBhY2tub3dsZWdlbWVudAorCisgCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgIC5sYV9kYXRhX2luICAgICAgKCcxKSAsCisgICAgLmxhX2RhdGFfb3V0ICAgICAoKSwKKyAgICAubGFfb2VuYiAgICAgICAgICgnMCksCisgCisKKyAgICAvLyBJT3MKKyAgICAuaW9faW4gICAgICAgICAgKGlvX2luKSAgLAorICAgIC5pb19vdXQgICAgICAgICAoaW9fb3V0KSAsCisgICAgLmlvX29lYiAgICAgICAgIChpb19vZWIpICwKKworICAgIC51c2VyX2lycSAgICAgICAoKSAKKworKTsKKyAgICB1c2JfYWdlbnQgdV91c2JfYWdlbnQoKTsKKyAgICB0ZXN0X2NvbnRyb2wgdGVzdF9jb250cm9sKCk7CisKK2BpZm5kZWYgR0wgLy8gRHJpdmUgUG93ZXIgZm9yIEhvbGQgRml4IEJ1ZgorICAgIC8vIEFsbCBzdGFuZGFyZCBjZWxsIG5lZWQgcG93ZXIgaG9vay11cCBmb3IgZnVuY3Rpb25hbGl0eSB3b3JrCisgICAgaW5pdGlhbCBiZWdpbgorCisgICAgZW5kCitgZW5kaWYgIAorCisvLyBEcml2ZSBVU0IgUGFkcworLy8KK3RyaSB1c2JkX3R4ZHAgPSAoaW9fb2ViWzM2XSA9PSAxJ2IwKSA/IGlvX291dFszNl0gOiAxJ2J6OwordHJpIHVzYmRfdHhkbiA9IChpb19vZWJbMzddID09IDEnYjApID8gaW9fb3V0WzM3XSA6IDEnYno7CisKK2Fzc2lnbiBpb19pblszNl0gPSB1c2JkX3R4ZHA7Cithc3NpZ24gaW9faW5bMzddID0gdXNiZF90eGRuOworCisvLyBGdWxsIFNwZWVkIERldmljZSBJbmRpY2F0aW9uCisKK3B1bGx1cCh1c2JkX3R4ZHApOyAKKy8vcHVsbGRvd24odXNiZF90eGRuKTsKKwordXNiMWRfdG9wIHVfdXNiX3RvcCgKKworCS5jbGtfaSAgICAgICAgICAgKHVzYl80OG1oel9jbGspLCAKKwkucnN0bl9pICAgICAgICAgICghd2JfcnN0X2kpLAorIAorCQkvLyBVU0IgUEhZIEludGVyZmFjZQorCS51c2JfZHAgICAgICAgICAgKHVzYmRfdHhkcCksIAorCS51c2JfZG4gICAgICAgICAgKHVzYmRfdHhkbiksIAorIAorCS8vIFVTQiBNaXNjCisJLnBoeV90eF9tb2RlICAgICAoMSdiMSksIAorICAgICAgICAudXNiX3JzdCAgICAgICAgICgpLAorIAorCS8vIEludGVycnVwdHMKKwkuZHJvcHBlZF9mcmFtZSAgICgpLCAKKwkubWlzYWxpZ25lZF9mcmFtZSgpLAorCS5jcmMxNl9lcnIgICAgICAgKCksCisgCisJLy8gVmVuZG9yIEZlYXR1cmVzCisJLnZfc2V0X2ludCAgICAgICAoKSwgCisJLnZfc2V0X2ZlYXR1cmUgICAoKSwgCisJLndWYWx1ZSAgICAgICAgICAoKSwKKwkud0luZGV4ICAgICAgICAgICgpLCAKKwkudmVuZG9yX2RhdGEgICAgICgpLAorIAorCS8vIFVTQiBTdGF0dXMKKwkudXNiX2J1c3kgICAgICAgICgpLCAKKwkuZXBfc2VsICAgICAgICAgICgpLAorIAorCS8vIEVuZCBwb2ludCAxIGNvbmZpZ3VyYXRpb24KKwkuZXAxX2NmZyAgICAgICAgICgJYElTTyAgfCBgSU4gIHwgMTQnZDAyNTYJCSksCisJLy8gRW5kIHBvaW50IDEgJ09VVCcgRklGTyBpL2YKKwkuZXAxX2RvdXQgICAgICAgICgJCQkJCSksCisJLmVwMV93ZSAgICAgICAgICAoCQkJCQkpLAorCS5lcDFfZnVsbCAgICAgICAgKAkJMSdiMAkJCSksCisJLy8gRW5kIHBvaW50IDEgJ0lOJyBGSUZPIGkvZgorCS5lcDFfZGluICAgICAgICAgKAkJOCdoMAkJICAgICAgICApLAorCS5lcDFfcmUgICAgICAgICAgKAkJICAgCQkgICAgICAgICksCisJLmVwMV9lbXB0eSAgICAgICAoCQkxJ2IwICAgICAJCSksCisJLmVwMV9iZl9lbiAgICAgICAoCQkxJ2IwCQkJKSwKKwkuZXAxX2JmX3NpemUgICAgICgJCTcnaDAJCQkpLAorIAorCS8vIEVuZCBwb2ludCAyIGNvbmZpZ3VyYXRpb24KKwkuZXAyX2NmZyAgICAgICAgICgJYElTTyAgfCBgT1VUIHwgMTQnZDAyNTYJCSksCisJLy8gRW5kIHBvaW50IDIgJ09VVCcgRklGTyBpL2YKKwkuZXAyX2RvdXQgICAgICAgICgJCQkJICAgICAgICApLAorCS5lcDJfd2UgICAgICAgICAgKAkJCQkgICAgICAgICksCisJLmVwMl9mdWxsICAgICAgICAoCQkxJ2IwICAgICAJCSksCisJLy8gRW5kIHBvaW50IDIgJ0lOJyBGSUZPIGkvZgorCS5lcDJfZGluICAgICAgICAgKAkJOCdoMAkJCSksCisJLmVwMl9yZSAgICAgICAgICAoCQkJCQkpLAorCS5lcDJfZW1wdHkgICAgICAgKAkJMSdiMAkJCSksCisJLmVwMl9iZl9lbiAgICAgICAoCQkxJ2IwCQkJKSwKKwkuZXAyX2JmX3NpemUgICAgICgJCTcnaDAJCQkpLAorIAorCS8vIEVuZCBwb2ludCAzIGNvbmZpZ3VyYXRpb24KKwkuZXAzX2NmZyAgICAgICAgICgJYEJVTEsgfCBgSU4gIHwgMTQnZDA2NAkJKSwKKwkvLyBFbmQgcG9pbnQgMyAnT1VUJyBGSUZPIGkvZgorCS5lcDNfZG91dCAgICAgICAgKAkJCQkJKSwKKwkuZXAzX3dlICAgICAgICAgICgJCQkJCSksCisJLmVwM19mdWxsICAgICAgICAoCQkxJ2IwCQkJKSwKKwkvLyBFbmQgcG9pbnQgMyAnSU4nIEZJRk8gaS9mCisJLmVwM19kaW4gICAgICAgICAoCQk4J2gwICAgICAgCQkpLAorCS5lcDNfcmUgICAgICAgICAgKAkJICAgICAgICAJCSksCisJLmVwM19lbXB0eSAgICAgICAoCQkxJ2IwICAgIAkJKSwKKwkuZXAzX2JmX2VuICAgICAgICgJCTEnYjAJCQkpLAorCS5lcDNfYmZfc2l6ZSAgICAgKAkJNydoMAkJCSksCisgCisJLy8gRW5kIHBvaW50IDQgY29uZmlndXJhdGlvbgorCS5lcDRfY2ZnICAgICAgICAgKAlgQlVMSyB8IGBPVVQgfCAxNCdkMDY0CQkpLAorCS8vIEVuZCBwb2ludCA0ICdPVVQnIEZJRk8gaS9mCisJLmVwNF9kb3V0ICAgICAgICAoCQkgICAgICAgIAkJKSwKKwkuZXA0X3dlICAgICAgICAgICgJCSAgICAgICAgCQkpLAorCS5lcDRfZnVsbCAgICAgICAgKAkJMSdiMCAgICAgCQkpLAorCS8vIEVuZCBwb2ludCA0ICdJTicgRklGTyBpL2YKKwkuZXA0X2RpbiAgICAgICAgICgJCTgnaDAJCQkpLAorCS5lcDRfcmUgICAgICAgICAgKAkJCQkJKSwKKwkuZXA0X2VtcHR5ICAgICAgICgJCTEnYjAJCQkpLAorCS5lcDRfYmZfZW4gICAgICAgKAkJMSdiMAkJCSksCisJLmVwNF9iZl9zaXplICAgICAoCQk3J2gwCQkJKSwKKyAKKwkvLyBFbmQgcG9pbnQgNSBjb25maWd1cmF0aW9uCisJLmVwNV9jZmcgICAgICAgICAoCWBJTlQgIHwgYElOICB8IDE0J2QwNjQJCSksCisJLy8gRW5kIHBvaW50IDUgJ09VVCcgRklGTyBpL2YKKwkuZXA1X2RvdXQgICAgICAgICgJCQkJCSksCisJLmVwNV93ZSAgICAgICAgICAoCQkJCQkpLAorCS5lcDVfZnVsbCAgICAgICAgKAkJMSdiMAkJCSksCisJLy8gRW5kIHBvaW50IDUgJ0lOJyBGSUZPIGkvZgorCS5lcDVfZGluICAgICAgICAgKAkJOCdoMCAgICAgCQkpLAorCS5lcDVfcmUgICAgICAgICAgKAkJCQkgICAgICAgICksCisJLmVwNV9lbXB0eSAgICAgICAoCQkxJ2IwICAgICAJCSksCisJLmVwNV9iZl9lbiAgICAgICAoCQkxJ2IwCQkJKSwKKwkuZXA1X2JmX3NpemUgICAgICgJCTcnaDAJCQkpLAorIAorCS8vIEVuZCBwb2ludCA2IGNvbmZpZ3VyYXRpb24KKwkuZXA2X2NmZyAgICAgICAgICgJCTE0J2gwMAkJCSksCisJLy8gRW5kIHBvaW50IDYgJ09VVCcgRklGTyBpL2YKKwkuZXA2X2RvdXQgICAgICAgICgJCQkJCSksCisJLmVwNl93ZSAgICAgICAgICAoCQkJCQkpLAorCS5lcDZfZnVsbCAgICAgICAgKAkJMSdiMAkJCSksCisJLy8gRW5kIHBvaW50IDYgJ0lOJyBGSUZPIGkvZgorCS5lcDZfZGluICAgICAgICAgKAkJOCdoMAkJCSksCisJLmVwNl9yZSAgICAgICAgICAoCQkJCQkpLAorCS5lcDZfZW1wdHkgICAgICAgKAkJMSdiMAkJCSksCisJLmVwNl9iZl9lbiAgICAgICAoCQkxJ2IwCQkJKSwKKwkuZXA2X2JmX3NpemUgICAgICgJCTcnaDAJCQkpLAorIAorCS8vIEVuZCBwb2ludCA3IGNvbmZpZ3VyYXRpb24KKwkuZXA3X2NmZyAgICAgICAgICgJCTE0J2gwMAkJCSksCisJLy8gRW5kIHBvaW50IDcgJ09VVCcgRklGTyBpL2YKKwkuZXA3X2RvdXQgICAgICAgICgJCQkJCSksCisJLmVwN193ZSAgICAgICAgICAoCQkJCQkpLAorCS5lcDdfZnVsbCAgICAgICAgKAkJMSdiMAkJCSksCisJLy8gRW5kIHBvaW50IDcgJ0lOJyBGSUZPIGkvZgorCS5lcDdfZGluICAgICAgICAgKAkJOCdoMAkJCSksCisJLmVwN19yZSAgICAgICAgICAoCQkJCQkpLAorCS5lcDdfZW1wdHkgICAgICAgKAkJMSdiMAkJCSksCisJLmVwN19iZl9lbiAgICAgICAoCQkxJ2IwCQkJKSwKKwkuZXA3X2JmX3NpemUgICAgICgJCTcnaDAJCQkpLAorIAorICAgICAgICAvLyBSZWdpc3RlciBJbnRlcmZhY2UKKwkucmVnX2FkZHIgICAgICAgICh1c2JkX3JlZ19hZGRyKSwKKwkucmVnX3Jkd3JuICAgICAgICh1c2JkX3JlZ19yZHdybiksCisJLnJlZ19yZXEgICAgICAgICAodXNiZF9yZWdfcmVxKSwKKwkucmVnX3dkYXRhICAgICAgICh1c2JkX3JlZ193ZGF0YSksCisJLnJlZ19yZGF0YSAgICAgICAodXNiZF9yZWdfcmRhdGEpLAorCS5yZWdfYWNrICAgICAgICAgKHVzYmRfcmVnX2FjaykKKyAKKwkpOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFRhc2sKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YXNrIHRlc3RfZXJyOworYmVnaW4KKyAgICAgdGVzdF9mYWlsID0gMTsKK2VuZAorZW5kdGFzaworCit0YXNrIHdiX3VzZXJfY29yZV93cml0ZTsKK2lucHV0IFszMTowXSBhZGRyZXNzOworaW5wdXQgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDE7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID1kYXRhOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFdSSVRFIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgLy8kZGlzcGxheSgiU1RBVFVTOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRGF0YSA6IDB4JXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCit0YXNrICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjazsKK2lucHV0IFszMTowXSBhZGRyZXNzOworb3V0cHV0IFszMTowXSBkYXRhOworaW5wdXQgWzMxOjBdIGNtcF9kYXRhOworcmVnICAgIFszMTowXSBkYXRhOworYmVnaW4KKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9hZHJfaSA9YWRkcmVzczsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9JzA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIGlmKGRhdGEgIT09IGNtcF9kYXRhKSBiZWdpbgorICAgICAkZGlzcGxheSgiRVJST1IgOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRXhkOiAweCV4IFJ4ZDogMHgleCAiLGFkZHJlc3MsY21wX2RhdGEsZGF0YSk7CisgICAgIHVzZXJfdXNiX3RiLnRlc3RfZmFpbCA9IDE7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgZW5kCisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCisKK2BpZmRlZiBHTAorCit3aXJlICAgICAgICB3YmRfc3BpX3N0Yl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NwaV9hY2tfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zcGlfd2VfaSAgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfYWRyX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWRyX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zcGlfc2VsX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9zdGJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9hY2tfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV93ZV9pICA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2Fkcl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2FkZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zZHJhbV9zZWxfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3VhcnRfc3RiX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2NzOword2lyZSAgICAgICAgd2JkX3VhcnRfYWNrX28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2FjazsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3dlX2kgICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193cjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2Fkcl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hZGRyOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3dkYXRhOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3JkYXRhOword2lyZSAgICAgICAgd2JkX3VhcnRfc2VsX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2JlOworCitgZW5kaWYKKworLyoqCitgaWZkZWYgR0wKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgSU1FTSBhbWQgRE1FTSBNb25pdG9yaW5nIFRBU0sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGRlZmluZSBSSVNDX0NPUkUgIHVzZXJfdWFydF90Yi51X3RvcC51X2NvcmUudV9yaXNjdl90b3AKKworYWx3YXlzQChwb3NlZGdlIGBSSVNDX0NPUkUud2JfY2xrKSBiZWdpbgorICAgIGlmKGBSSVNDX0NPUkUud2JkX2ltZW1fYWNrX2kpCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IElNRU0gQUREUkVTUzogJXggUmVhZCBEYXRhIDogJXgiLCBgUklTQ19DT1JFLndiZF9pbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2ltZW1fZGF0X2kpOworICAgIGlmKGBSSVNDX0NPUkUud2JkX2RtZW1fYWNrX2kgJiYgYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFdyaXRlIERhdGE6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9vKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmICFgUklTQ19DT1JFLndiZF9kbWVtX3dlX28pCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IERNRU0gQUREUkVTUzogJXggUkVBRCBEYXRhIDogJXggUmVzb25zZTogJXgiLCBgUklTQ19DT1JFLndiZF9kbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2RtZW1fZGF0X2kpOworZW5kCisKK2BlbmRpZgorKiovCitgaW5jbHVkZSAidGVzdHMvdXNiX3Rlc3QxLnYiCitgaW5jbHVkZSAidGVzdHMvdXNiX3Rlc3QyLnYiCisKK2VuZG1vZHVsZQorYGRlZmF1bHRfbmV0dHlwZSB3aXJlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3Bpbm11eF9yZWcuc3YgYi92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3Bpbm11eF9yZWcuc3YKaW5kZXggZTlmNzEyNS4uNjRmOTljNyAxMDA2NDQKLS0tIGEvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9waW5tdXhfcmVnLnN2CisrKyBiL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4X3JlZy5zdgpAQCAtNzY5LDcgKzc2OSw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBTb2Z0d2FyZSBSZWctMiwgUmVsZWFzZSBkYXRlOiA8REFZPjxNT05USD48WUVBUj4KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWdlbl8zMmJfcmVnICAjKDMyJ2gwMjAzXzIwMjIpIHVfcmVnXzIzCSgKK2dlbl8zMmJfcmVnICAjKDMyJ2gxMDAzXzIwMjIpIHVfcmVnXzIzCSgKIAkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCiAJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKIAkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLApAQCAtNzgyLDkgKzc4Miw5IEBACiAJICAgICAgKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU29mdHdhcmUgUmVnLTM6IFBvamVjdCBSZXZpc29uIDMuNyA9IDAwMDM3MDAKKy8vIFNvZnR3YXJlIFJlZy0zOiBQb2plY3QgUmV2aXNvbiAzLjggPSAwMDAzODAwCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1nZW5fMzJiX3JlZyAgIygzMidoMDAwM183MDAwKSB1X3JlZ18yNAkoCitnZW5fMzJiX3JlZyAgIygzMidoMDAwM184MDAwKSB1X3JlZ18yNAkoCiAJICAgICAgLy9MaXN0IG9mIElucHV0cwogCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCiAJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VhcnRfaTJjX3VzYl9zcGkvc3JjL3VhcnRfaTJjX3VzYl9zcGkuc3YgYi92ZXJpbG9nL3J0bC91YXJ0X2kyY191c2Jfc3BpL3NyYy91YXJ0X2kyY191c2Jfc3BpLnN2CmluZGV4IGQzMzc4ZTAuLjAyOGYxZDcgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvcnRsL3VhcnRfaTJjX3VzYl9zcGkvc3JjL3VhcnRfaTJjX3VzYl9zcGkuc3YKKysrIGIvdmVyaWxvZy9ydGwvdWFydF9pMmNfdXNiX3NwaS9zcmMvdWFydF9pMmNfdXNiX3NwaS5zdgpAQCAtMTY4LDggKzE2OCw4IEBACiAKIHdpcmUgcmVnX3VhcnRfY3MgID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9VQVJUKSA/IHJlZ19jcyA6IDEnYjA7CiB3aXJlIHJlZ19pMmNtX2NzICA9IChyZWdfYWRkcls3OjZdID09IGBTRUxfSTJDKSAgPyByZWdfY3MgOiAxJ2IwOwotd2lyZSByZWdfdXNiX2NzICAgPSAocmVnX2FkZHJbNzo2XSA9PSBgU0VMX1VBUlQpID8gcmVnX2NzIDogMSdiMDsKLXdpcmUgcmVnX3NwaW1fY3MgID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9TUEkpID8gIHJlZ19jcyA6IDEnYjA7Cit3aXJlIHJlZ191c2JfY3MgICA9IChyZWdfYWRkcls3OjZdID09IGBTRUxfVVNCKSAgPyByZWdfY3MgOiAxJ2IwOword2lyZSByZWdfc3BpbV9jcyAgPSAocmVnX2FkZHJbNzo2XSA9PSBgU0VMX1NQSSkgID8gIHJlZ19jcyA6IDEnYjA7CiAKIHVhcnRfY29yZSAgdV91YXJ0X2NvcmUgKCAgCiAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VwcmpfbmV0bGlzdHMudiBiL3Zlcmlsb2cvcnRsL3VwcmpfbmV0bGlzdHMudgppbmRleCBiNTRmMjE4Li42ZWViYmQ4IDEwMDY0NAotLS0gYS92ZXJpbG9nL3J0bC91cHJqX25ldGxpc3RzLnYKKysrIGIvdmVyaWxvZy9ydGwvdXByal9uZXRsaXN0cy52CkBAIC00Miw3ICs0Miw5IEBACiAgICAgIGBpbmNsdWRlICJsaWJzLnJlZi9za3kxMzBfZmRfc2NfaHZsL3Zlcmlsb2cvc2t5MTMwX2ZkX3NjX2h2bC52IgogCiAKLSAgICAgYGluY2x1ZGUgInNyYW1fbWFjcm9zL3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOC52IgorICAgICBgaWZuZGVmIEZVTExfQ0hJUF9TSU0gCisgICAgICAgIGBpbmNsdWRlICJzcmFtX21hY3Jvcy9za3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzgudiIKKyAgICAgYGVuZGlmCiAgICAgIGBpbmNsdWRlICJwaW5tdXgvc3JjL3Bpbm11eC5zdiIKICAgICAgYGluY2x1ZGUgInBpbm11eC9zcmMvcGlubXV4X3JlZy5zdiIKICAgICAgYGluY2x1ZGUgInBpbm11eC9zcmMvZ3Bpb19pbnRyLnN2IgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy90b3AvdXNiMV9ob3N0LnN2IGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy90b3AvdXNiMV9ob3N0LnN2CmluZGV4IDFkZTcwZDQuLjZlZTBmZjUgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvdG9wL3VzYjFfaG9zdC5zdgorKysgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL3RvcC91c2IxX2hvc3Quc3YKQEAgLTU3LDggKzU3LDggQEAKICAgICBpbnB1dCAgICAgICAgICAgICAgICAgIGluX2RwICAgLAogICAgIGlucHV0ICAgICAgICAgICAgICAgICAgaW5fZG4gICAsCiAKLSAgICBpbnB1dCAgICAgICAgICAgICAgICAgIG91dF9kcCAgICwKLSAgICBpbnB1dCAgICAgICAgICAgICAgICAgIG91dF9kbiAgICwKKyAgICBvdXRwdXQgICAgICAgICAgICAgICAgIG91dF9kcCAgICwKKyAgICBvdXRwdXQgICAgICAgICAgICAgICAgIG91dF9kbiAgICwKICAgICBvdXRwdXQgICAgICAgICAgICAgICAgIG91dF90eF9vZW4sCiAKICAgICAvLyBNYXN0ZXIgUG9ydApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdXNlcl9wcm9qZWN0X3dyYXBwZXIudiBiL3Zlcmlsb2cvcnRsL3VzZXJfcHJvamVjdF93cmFwcGVyLnYKaW5kZXggYzVjNGNhMi4uOTVhMzJjYyAxMDA2NDQKLS0tIGEvdmVyaWxvZy9ydGwvdXNlcl9wcm9qZWN0X3dyYXBwZXIudgorKysgYi92ZXJpbG9nL3J0bC91c2VyX3Byb2plY3Rfd3JhcHBlci52CkBAIC0xODYsNyArMTg2LDEwIEBACiAvLy8vICAgICAgIDEuIHFzcGkgY3MjIHBvcnQgbWFwcGluZyBjaGFuZ2VkIGZyb20gaW8gMjg6MjUgdG8gMjU6MjgvLy8vCiAvLy8vICAgICAgIDIuIHNzcGksIGJ1ZyBmaXggaW4gcmVnIGFjY2VzcyBhbmQgZW5kaWFuIHN1cHBvcnQgYWRkZWQvLy8vCiAvLy8vICAgICAgIDMuIFdpc2hib25lIGludGVyY29ubmVjdCBub3cgc3VwcG9ydCBjcm9zcy1jb25uZWN0ICAgICAvLy8vCi0vLy8vICAgICAgICAgIGZlYXR1cmUKKy8vLy8gICAgICAgICAgZmVhdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMy44ICBNYXIgMTAgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAxLiB1c2IgY2hpcCBzZWxlY3QgYnVnIGluc2lkZSB1YXJ0Xyogd3JhcHBlciAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAyLiBpbiB3Yl9ob3N0LCBpbmNyZWFzZWQgdXNiIGNsayBjdHJsIHRvIDQgdG8gOCBiaXQgIC8vLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KIC8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3diX2hvc3Qvc3JjL3diX2hvc3Quc3YgYi92ZXJpbG9nL3J0bC93Yl9ob3N0L3NyYy93Yl9ob3N0LnN2CmluZGV4IDU1YmY5ZmIuLmVlZjU0OWEgMTAwNjQ0Ci0tLSBhL3Zlcmlsb2cvcnRsL3diX2hvc3Qvc3JjL3diX2hvc3Quc3YKKysrIGIvdmVyaWxvZy9ydGwvd2JfaG9zdC9zcmMvd2JfaG9zdC5zdgpAQCAtMTUyLDcgKzE1Miw3IEBACiBsb2dpYyAgWzM6MF0gICAgICAgIGNmZ193Yl9jbGtfY3RybDsKIGxvZ2ljICBbMzowXSAgICAgICAgY2ZnX2NwdV9jbGtfY3RybDsKIGxvZ2ljICBbNzowXSAgICAgICAgY2ZnX3J0Y19jbGtfY3RybDsKLWxvZ2ljICBbMzowXSAgICAgICAgY2ZnX3VzYl9jbGtfY3RybDsKK2xvZ2ljICBbNzowXSAgICAgICAgY2ZnX3VzYl9jbGtfY3RybDsKIGxvZ2ljICBbNzowXSAgICAgICAgY2ZnX2dsYl9jdHJsOwogCiAvLyB1YXJ0IE1hc3RlciBQb3J0CkBAIC0zNjMsNyArMzYzLDcgQEAKIGFzc2lnbiBjZmdfd2JfY2xrX2N0cmwgICAgICA9IHJlZ18wWzExOjhdOwogYXNzaWduIGNmZ19ydGNfY2xrX2N0cmwgICAgID0gcmVnXzBbMTk6MTJdOwogYXNzaWduIGNmZ19jcHVfY2xrX2N0cmwgICAgID0gcmVnXzBbMjM6MjBdOwotYXNzaWduIGNmZ191c2JfY2xrX2N0cmwgICAgID0gcmVnXzBbMzE6MjhdOworYXNzaWduIGNmZ191c2JfY2xrX2N0cmwgICAgID0gcmVnXzBbMzE6MjRdOwogCiAKIGFsd2F5cyBAKCAqKQpAQCAtNTQ0LDggKzU0NCw4IEBACiB3aXJlICAgdXNiX3JlZl9jbGs7CiB3aXJlICAgdXNiX2Nsa19pbnQ7CiAKLXdpcmUgICAgICAgY2ZnX3VzYl9jbGtfZGl2ICAgICAgID0gY2ZnX3VzYl9jbGtfY3RybFszXTsKLXdpcmUgWzI6MF0gY2ZnX3VzYl9jbGtfcmF0aW8gICAgID0gY2ZnX3VzYl9jbGtfY3RybFsyOjBdOword2lyZSAgICAgICBjZmdfdXNiX2Nsa19kaXYgICAgICAgPSBjZmdfdXNiX2Nsa19jdHJsWzddOword2lyZSBbNjowXSBjZmdfdXNiX2Nsa19yYXRpbyAgICAgPSBjZmdfdXNiX2Nsa19jdHJsWzY6MF07CiAKIGFzc2lnbiB1c2JfcmVmX2NsayA9IHVzZXJfY2xvY2syIDsKIC8vYXNzaWduIHVzYl9jbGtfaW50ID0gKGNmZ191c2JfY2xrX2RpdikgICAgID8gdXNiX2Nsa19kaXYgOiB1c2JfcmVmX2NsazsKQEAgLTU1NCw3ICs1NTQsNyBAQAogCiBjdGVjaF9jbGtfYnVmIHVfY2xrYnVmX3VzYiAoLkEgKHVzYl9jbGtfaW50KSwgLiBYKHVzYl9jbGspKTsKIAotY2xrX2N0bCAjKDIpIHVfdXNiY2xrICgKK2Nsa19jdGwgIyg2KSB1X3VzYmNsayAoCiAgICAvLyBPdXRwdXRzCiAgICAgICAgLmNsa19vICAgICAgICAgKHVzYl9jbGtfZGl2ICAgICAgKSwKICAgIC8vIElucHV0cwo=