ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggM2E0YWZjYy4uYmNmZjY3NCAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsMTMgKzEsMTMgQEAKLVRoaXMgaXMgcmVsZWFzZSA5NzA2Mjkgb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKK1RoaXMgaXMgcmVsZWFzZSA5NzA3MjAgb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKIGRldmVsb3BlcidzIG9ubHkgcmVsZWFzZS4gIFRoZXJlIGFyZSBtYW55IGJ1Z3MgYW5kIG1hbnkgdW5pbXBsZW1lbnRlZCBBUEkKIGZlYXR1cmVzLiAgTW9zdCBhcHBsaWNhdGlvbnMgc3RpbGwgZG8gbm90IHdvcmsgY29ycmVjdGx5LgogCiBQYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gImp1bGxpYXJkQGxyYy5lcGZsLmNoIi4gIFBsZWFzZSBkb24ndAogZm9yZ2V0IHRvIGluY2x1ZGUgYSBDaGFuZ2VMb2cgZW50cnkuCiAKLVdIQVQnUyBORVcgd2l0aCBXaW5lLTk3MDYyOTogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCi0JLSBTdGFydCBvZiBDT01ETEczMiBpbXBsZW1lbnRhdGlvbi4KLQktIFJlbGF5IGRlYnVnZ2luZyBrbm93cyBhYm91dCBzdHJpbmdzLgorV0hBVCdTIE5FVyB3aXRoIFdpbmUtOTcwNzIwOiAoc2VlIENoYW5nZUxvZyBmb3IgZGV0YWlscykKKwktIFByZWxpbWluYXJ5IFdpbjk1IGxvb2smZmVlbCBpbXBsZW1lbnRhdGlvbi4KKwktIFN0YXJ0IG9mIHRleGluZm8gZG9jdW1lbnRhdGlvbi4KIAktIExvdHMgb2YgYnVnIGZpeGVzLgogCiBTZWUgdGhlIFJFQURNRSBmaWxlIGluIHRoZSBkaXN0cmlidXRpb24gZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCkBAIC0xNiwxMCArMTYsMTAgQEAKIHRoZSByZWxlYXNlIGlzIGF2YWlsYWJsZSBhdCB0aGUgZnRwIHNpdGVzLiAgVGhlIHNvdXJjZXMgd2lsbCBiZSBhdmFpbGFibGUKIGZyb20gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CiAKLSAgZnRwOi8vc3Vuc2l0ZS51bmMuZWR1L3B1Yi9MaW51eC9BTFBIQS93aW5lL2RldmVsb3BtZW50L1dpbmUtOTcwNjI5LnRhci5negotICBmdHA6Ly90c3gtMTEubWl0LmVkdS9wdWIvbGludXgvQUxQSEEvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDYyOS50YXIuZ3oKLSAgZnRwOi8vZnRwLmluZm9tYWdpYy5jb20vcHViL21pcnJvcnMvbGludXgvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDYyOS50YXIuZ3oKLSAgZnRwOi8vZnRwLnByb2dzb2MudXRzLmVkdS5hdS9wdWIvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDYyOS50YXIuZ3oKKyAgZnRwOi8vc3Vuc2l0ZS51bmMuZWR1L3B1Yi9MaW51eC9BTFBIQS93aW5lL2RldmVsb3BtZW50L1dpbmUtOTcwNzIwLnRhci5negorICBmdHA6Ly90c3gtMTEubWl0LmVkdS9wdWIvbGludXgvQUxQSEEvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDcyMC50YXIuZ3oKKyAgZnRwOi8vZnRwLmluZm9tYWdpYy5jb20vcHViL21pcnJvcnMvbGludXgvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDcyMC50YXIuZ3oKKyAgZnRwOi8vZnRwLnByb2dzb2MudXRzLmVkdS5hdS9wdWIvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDcyMC50YXIuZ3oKIAogSXQgc2hvdWxkIGFsc28gYmUgYXZhaWxhYmxlIGZyb20gYW55IHNpdGUgdGhhdCBtaXJyb3JzIHRzeC0xMSBvciBzdW5zaXRlLgogCkBAIC0zMCwzMCArMzAsOCBAQAogd2luZS1wYXRjaGVzIG1haWxpbmcgbGlzdCBieSBzZW5kaW5nIGEgbWFpbCBjb250YWluaW5nICdzdWJzY3JpYmUKIHdpbmUtcGF0Y2hlcyB5b3VyX2FkZHJlc3MnIHRvIG1ham9yZG9tb0B0aWdlci5pbmZvcm1hdGlrLmh1LWJlcmxpbi5kZS4KIAotV2luZSBpcyBhdmFpbGFibGUgdGhhbmtzIHRvIHRoZSB3b3JrIG9mIEJvYiBBbXN0YWR0LCBEYWcgQXNoZWltLAotTWFydGluIEF5b3R0ZSwgUGV0ZXIgQmFqdXN6LCBSb3NzIEJpcm8sIFV3ZSBCb25uZXMsIEVyaWsgQm9zLCBGb25zIEJvdG1hbiwKLUpvaG4gQnJlemFrLCBBbmRyZXcgQnVsaGFrLCBKb2huIEJ1cnRvbiwgTmllbHMgZGUgQ2FycGVudGllciwgSmltZW4gQ2hpbmcsCi1IdXcgRC4gTS4gRGF2aWVzLCBSb21hbiBEb2xlanNpLCBGcmFucyB2YW4gRG9yc3NlbGFlciwgUGF1bCBGYWxzdGFkLAotRGF2aWQgRmF1cmUsIE9sYWYgRmxlYmJlLCBQZXRlciBHYWxiYXZ5LCBSYW1vbiBHYXJjaWEsIE1hdHRoZXcgR2hpbywKLUhhbnMgZGUgR3JhYWZmLCBDaGFybGVzIE0uIEhhbm51bSwgSm9obiBIYXJ2ZXksIENhbWVyb24gSGVpZGUsCi1Kb2NoZW4gSG9lbmlja2UsIE9ubm8gSG92ZXJzLCBKZWZmcmV5IEhzdSwgTWlndWVsIGRlIEljYXphLCBKdWtrYSBJaXZvbmVuLAotTGVlIEphZWtpbCwgQWxleGFuZHJlIEp1bGxpYXJkLCBCYW5nIEp1bi1Zb3VuZywgUGF2ZWwgS2Fua292c2t5LAotSm9jaGVuIEthcnJlciwgQW5kcmVhcyBLaXJzY2hiYXVtLCBBbGJyZWNodCBLbGVpbmUsIEpvbiBLb25yYXRoLAotQWxleCBLb3JvYmthLCBHcmVnIEtyZWlkZXIsIEFuYW5kIEt1bXJpYSwgU2NvdHQgQS4gTGFpcmQsIEFuZHJldyBMZXd5Y2t5LAotTWFydGluIHZvbiBMb2V3aXMsIEtlbm5ldGggTWFjRG9uYWxkLCBQZXRlciBNYWNEb25hbGQsIFdpbGxpYW0gTWFncm8sCi1KdWVyZ2VuIE1hcnF1YXJkdCwgUmljYXJkbyBNYXNzYXJvLCBNYXJjdXMgTWVpc3NuZXIsIEdyYWhhbSBNZW5oZW5uaXR0LAotRGF2aWQgTWV0Y2FsZmUsIEJydWNlIE1pbG5lciwgU3RlZmZlbiBNb2VsbGVyLCBBbmRyZWFzIE1vaHIsCi1QaGlsaXBwZSBEZSBNdXl0ZXIsIEl0YWkgTmFoc2hvbiwgTWljaGFlbCBQYXRyYSwgSmltIFBldGVyc29uLAotUm9iZXJ0IFBvdWxpb3QsIEtlaXRoIFJleW5vbGRzLCBTbGF2ZW4gUmV6aWMsIEpvaG4gUmljaGFyZHNvbiwKLUpvaGFubmVzIFJ1c2NoZWluc2tpLCBUaG9tYXMgU2FuZGZvcmQsIENvbnN0YW50aW5lIFNhcHVudHpha2lzLAotUGFibG8gU2FyYXR4YWdhLCBEYW5pZWwgU2NoZXBsZXIsIFVscmljaCBTY2htaWQsIEJlcm5kIFNjaG1pZHQsCi1Zbmd2aSBTaWd1cmpvbnNzb24sIFN0ZXBoZW4gU2ltbW9ucywgUmljayBTbGFka2V5LCBXaWxsaWFtIFNtaXRoLAotRG9taW5payBTdHJhc3NlciwgVmFkaW0gU3RyaXpoZXZza3ksIEVyaWsgU3ZlbmRzZW4sIFRyaXN0YW4gVGFycmFudCwKLUFuZHJldyBUYXlsb3IsIER1bmNhbiBDIFRob21zb24sIEdvcmFuIFRoeW5pLCBKaW1teSBUaXJ0YXdhbmdzYSwgSm9uIFRvbWJzLAotTGludXMgVG9ydmFsZHMsIEdyZWdvcnkgVHJ1YmV0c2tveSwgUGV0cmkgVHVvbW9sYSwgTWljaGFlbCBWZWtzbGVyLAotU3ZlbiBWZXJkb29sYWVnZSwgUm9uYW4gV2FpZGUsIEVyaWMgV2FybmtlLCBNYW5mcmVkIFdlaWNoZWwsCi1Nb3J0ZW4gV2VsaW5kZXIsIEphbiBXaWxsYW1vd2l1cywgQ2FybCBXaWxsaWFtcywgS2FybCBHdWVudGVyIFd1ZW5zY2gsCi1FcmljIFlvdW5nZGFsZSwgSmFtZXMgWW91bmdtYW4sIE1pa29sYWogWmFsZXdza2ksIGFuZCBKb2huIFplcm8uCitXaW5lIGlzIGF2YWlsYWJsZSB0aGFua3MgdG8gdGhlIHdvcmsgb2YgbWFueSBwZW9wbGUuIFNlZSB0aGUgZmlsZQorQVVUSE9SUyBpbiB0aGUgZGlzdHJpYnV0aW9uIGZvciB0aGUgY29tcGxldGUgbGlzdC4KIAogLS0KIEFsZXhhbmRyZSBKdWxsaWFyZApkaWZmIC0tZ2l0IGEvQVVUSE9SUyBiL0FVVEhPUlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyMzY4NgotLS0gL2Rldi9udWxsCisrKyBiL0FVVEhPUlMKQEAgLTAsMCArMSwzMSBAQAorQGMgVGhpcyBmaWxlIGlzIHByb2Nlc3NlZCBieSBHTlUncyBUZVhpbmZvCitAYyBJZiB5b3UgbW9kaWZ5IGl0IG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsb2NhdGlvbiwgbWFrZSBzdXJlIHRoYXQKK0BjIFRlWGluZm8gd29ya3MgKHR5cGUgYG1ha2UnIGluIGRpcmVjdG9yeSBkb2N1bWVudGF0aW9uKS4KKworQGMgVGhpcyBpcyBhIGxpc3Qgb2YgdGhlIFdpbmUgYXV0aG9ycyBhbmQgY29weXJpZ2h0IGhvbGRlcnMuCisKK1dpbmUgaXMgYXZhaWxhYmxlIHRoYW5rcyB0byB0aGUgd29yayBvZiBCb2IgQW1zdGFkdCwgRGFnIEFzaGVpbSwKK01hcnRpbiBBeW90dGUsIFBldGVyIEJhanVzeiwgUm9zcyBCaXJvLCBVd2UgQm9ubmVzLCBFcmlrIEJvcywgRm9ucworQm90bWFuLCBKb2huIEJyZXphaywgQW5kcmV3IEJ1bGhhaywgSm9obiBCdXJ0b24sIE5pZWxzIGRlIENhcnBlbnRpZXIsCitKaW1lbiBDaGluZywgSHV3IEQuIE0uIERhdmllcywgUm9tYW4gRG9sZWpzaSwgRnJhbnMgdmFuIERvcnNzZWxhZXIsCitQYXVsIEZhbHN0YWQsIERhdmlkIEZhdXJlLCBDbGF1cyBGaXNjaGVyLCBPbGFmIEZsZWJiZSwgUGV0ZXIgR2FsYmF2eSwKK1JhbW9uIEdhcmNpYSwgTWF0dGhldyBHaGlvLCBIYW5zIGRlIEdyYWFmZiwgQ2hhcmxlcyBNLiBIYW5udW0sIEpvaG4KK0hhcnZleSwgQ2FtZXJvbiBIZWlkZSwgSm9jaGVuIEhvZW5pY2tlLCBPbm5vIEhvdmVycywgSmVmZnJleSBIc3UsCitNaWd1ZWwgZGUgSWNhemEsIEp1a2thIElpdm9uZW4sIExlZSBKYWVraWwsIEFsZXhhbmRyZSBKdWxsaWFyZCwgQmFuZworSnVuLVlvdW5nLCBQYXZlbCBLYW5rb3Zza3ksIEpvY2hlbiBLYXJyZXIsIEFuZHJlYXMgS2lyc2NoYmF1bSwKK0FsYnJlY2h0IEtsZWluZSwgSm9uIEtvbnJhdGgsIEFsZXggS29yb2JrYSwgR3JlZyBLcmVpZGVyLCBBbmFuZAorS3VtcmlhLCBTY290dCBBLiBMYWlyZCwgQW5kcmV3IExld3lja3ksIE1hcnRpbiB2b24gTG9ld2lzLCBLZW5uZXRoCitNYWNEb25hbGQsIFBldGVyIE1hY0RvbmFsZCwgV2lsbGlhbSBNYWdybywgSnVlcmdlbiBNYXJxdWFyZHQsIFJpY2FyZG8KK01hc3Nhcm8sIE1hcmN1cyBNZWlzc25lciwgR3JhaGFtIE1lbmhlbm5pdHQsIERhdmlkIE1ldGNhbGZlLCBCcnVjZQorTWlsbmVyLCBTdGVmZmVuIE1vZWxsZXIsIEFuZHJlYXMgTW9ociwgUGhpbGlwcGUgRGUgTXV5dGVyLCBJdGFpCitOYWhzaG9uLCBNaWNoYWVsIFBhdHJhLCBKaW0gUGV0ZXJzb24sIFJvYmVydCBQb3VsaW90LCBLZWl0aCBSZXlub2xkcywKK1NsYXZlbiBSZXppYywgSm9obiBSaWNoYXJkc29uLCBKb2hhbm5lcyBSdXNjaGVpbnNraSwgVGhvbWFzIFNhbmRmb3JkLAorQ29uc3RhbnRpbmUgU2FwdW50emFraXMsIFBhYmxvIFNhcmF0eGFnYSwgRGFuaWVsIFNjaGVwbGVyLCBVbHJpY2gKK1NjaG1pZCwgQmVybmQgU2NobWlkdCwgWW5ndmkgU2lndXJqb25zc29uLCBTdGVwaGVuIFNpbW1vbnMsIFJpY2sKK1NsYWRrZXksIFdpbGxpYW0gU21pdGgsIERvbWluaWsgU3RyYXNzZXIsIFZhZGltIFN0cml6aGV2c2t5LCBFcmlrCitTdmVuZHNlbiwgVHJpc3RhbiBUYXJyYW50LCBBbmRyZXcgVGF5bG9yLCBEdW5jYW4gQyBUaG9tc29uLCBHb3JhbgorVGh5bmksIEppbW15IFRpcnRhd2FuZ3NhLCBKb24gVG9tYnMsIExpbnVzIFRvcnZhbGRzLCBHcmVnb3J5CitUcnViZXRza295LCBQZXRyaSBUdW9tb2xhLCBNaWNoYWVsIFZla3NsZXIsIFN2ZW4gVmVyZG9vbGFlZ2UsIFJvbmFuCitXYWlkZSwgRXJpYyBXYXJua2UsIE1hbmZyZWQgV2VpY2hlbCwgTW9ydGVuIFdlbGluZGVyLCBKYW4gV2lsbGFtb3dpdXMsCitDYXJsIFdpbGxpYW1zLCBLYXJsIEd1ZW50ZXIgV3VlbnNjaCwgRXJpYyBZb3VuZ2RhbGUsIEphbWVzIFlvdW5nbWFuLAorTWlrb2xhaiBaYWxld3NraSwgYW5kIEpvaG4gWmVyby4KZGlmZiAtLWdpdCBhL0JVR1MgYi9CVUdTCmluZGV4IDQ3M2U4N2UuLjBkNTdkNjggMTAwNjQ0Ci0tLSBhL0JVR1MKKysrIGIvQlVHUwpAQCAtMTUsNiArMTUsOCBAQAogCiAgKiBWZXJ5IGFscGhhIHByaW50aW5nIGNvZGUuIFtqb2huQGRpdmlzaW9uLmNvLnVrXQogCisgKiBFeHRyZW1lbHkgYWxwaGEgV2luOTUgaW50ZXJmYWNlIGNvZGUuCisKICAqIE5vIE9MRTIgYW5kIE9MRTMyIHN1cHBvcnQgKGluY2x1ZGluZyBPTEUyIGludGVyZmFjZXMgZXRjLikuCiAKICAqIE5vIE1TIFZpZGVvIHN1cHBvcnQgKHBlcmhhcHMgaW50ZXJmYWNlIHdpdGggeGFuaW0sIGRvbid0IGhvbGQKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1MGZhMmZlLi43NGE0MjgxIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDQgKzEsMTMwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTYXQgSnVsIDE5IDEzOjAzOjAxIDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgorCisJKiBbdG9vbHMvYnVpbGQuY10gW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQorCVNhdmUgdGhlIGNvbXBsZXRlICVlYnAgcmVnaXN0ZXIgaW4gQ2FsbEZyb20xNjsgZml4ZXMgYSBjcmFzaCB3aXRoCisJTGFiVmlldyByZXBvcnRlZCBieSBBbmRyZWFzIE1vaHIuCisKKwkqIFtsb2FkZXIvbWFpbi5jXQorCUF2b2lkIGV4ZWN1dGluZyBhIGJ1aWx0LWluIERMTC4KKworCSogW2NvbnRyb2xzL3N0YXRpYy5jXQorCUNvbnZlcnRlZCBzdGF0aWMgd2luZG93IHByb2NlZHVyZSB0byBXaW4zMi4KKworCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9xdWV1ZS5jXSBbaW5jbHVkZS9xdWV1ZS5oXQorCUhhY2tlZCBTZW5kTWVzc2FnZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBpbnRlci10YXNrIG1lc3NhZ2VzIHdpdGgKKwlTZW5kTWVzc2FnZTMyQS9XLgorCitTdW4gSnVsIDEzIDE2OjU1OjM1IDE5OTcgIEJlcm5oYXJkIFJvc2Vua3JhZW56ZXIgPGJlcm9AYmVyby1vbmxpbmUubWwub3JnPgorCisJKiBbaXBjL2JpdF9hcnJheS5jXQorCURvbid0IHVzZSBiaXRvcHMuaCBpbiBMaW51eCAyLjEueCAodGhlc2UgdmVyc2lvbnMgZG8gbm90IHJldHVybgorCXRoZSBwcmV2aW91cyBzdGF0ZSBmb3IgY2xlYXJfYml0IGFuZCBzZXRfYml0KQorCisJKiBbaXBjL3NobV9tYWluX2Jsay5jXQorCUFkYXB0IHRvIEdMSUJDJ3MgaXBjX3Blcm0gc3RydWN0dXJlLgorCisJKiBbbWVtb3J5L2xkdC5jXQorCUluY2x1ZGUgPGFzbS91bmlzdGQuaD4gb24gTGludXgvR0xJQkMgc3lzdGVtcyAocmVxdWlyZWQgZm9yCisJX3N5c2NhbGwzKS4KKworV2VkIEp1bCA5IDIzOjUzOjE5IDE5OTcgIERhdmlkIEEuIEN1dGhiZXJ0ICA8ZGFjdXRAaGVucnkuZWNlLmNtdS5lZHU+CisKKwkqIFtpbmNsdWRlL29wdGlvbnMuaF0gW2ZpbGVzL3Byb2ZpbGUuY10KKwlBZGRlZCBQUk9GSUxFX0dldFdpbmVJbmlCb29sIGFuZCBQUk9GSUxFX0VudW1lcmF0ZVdpbmVJbmlTZWN0aW9uLgorCisJKiBbaW5jbHVkZS9zeXNtZXRyaWNzLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW3dpbmRvd3Mvc3lzbWV0cmljcy5jXQorCUFsbCBzeXNtZXRyaWNzIG1vdmVkIHRvIGFycmF5IChubyBtb3JlIGNvbnN0YW50IG1hY3JvcykuICBBZGRlZAorCU1PVVNFV0hFRUxQUkVTRU5UIG1ldHJpYy4KKworCSogW2luY2x1ZGUvYml0bWFwLmhdIFtvYmplY3RzL29lbWJpdG1hcC5jXQorCUFkZGVkIE9CTV9Jbml0KCkgKHNlZSBhbHNvIGxvYWRlci9tYWluLmMpIGFuZCBtb3JlIHN1cHBvcnQgZm9yIFdpbjk1CisJYml0bWFwczsgYWRkZWQgc2l6ZSBpbmZvIHRvIE9FTSBiaXRtYXBzLgorCisJKiBbaW5jbHVkZS9ncmFwaGljcy5oXSBbd2luZG93cy9ncmFwaGljcy5oXQorCUFkZGVkIEdSQVBIX0RyYXdHZW5lcmljUmVsaWVmUmVjdC4KKworCSogW2xvYWRlci9tYWluLmNdCisJQWRkZWQgVFdFQUtfSW5pdCgpIGFuZCBUV0VBS19DaGVja0NvbmZpZ3VyYXRpb24oKSBjYWxscyAodGhlCisJbGF0dGVyIGNoZWNrcyBmb3IgaW52YWxpZCBlbnRyaWVzIGluIHdpbmUuY29uZikuCisKKwkqIFtpbmNsdWRlL2RlYnVnLmhdIFtpbmNsdWRlL3N0ZGRlYnVnLmhdIFtpbmNsdWRlL25vbmNsaWVudC5oXQorCSAgW2luY2x1ZGUvdHdlYWsuaF0gW2NvbnRyb2xzL21lbnUuY10gW21pc2MvdHdlYWsuY10KKwkgIFtvYmplY3RzL2dkaW9iai5jXSBbd2luZG93cy9zeXNjb2xvci5jXSBbd2luZG93cy9ub25jbGllbnQuY10KKwkgIFtCVUdTXSBbZG9jdW1lbnRhdGlvbi93aW45NWxvb2tdCisJQWRkZWQgdHdlYWtzIGZvciBXaW5kb3dzIDk1IGludGVyZmFjZSBzdXBwb3J0LiAgU2VlCisgCWRvY3VtZW50YXRpb24vd2luOTVsb29rIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisJKiBbY29udHJvbHMvZWRpdC5jXQorCUZpeGVkIEVESVRfTW92ZUhvbWUgYnVnLgorCisJKiBbbWlzYy92ZXIuY10KKwlDaGFuZ2VkIG5hbWUgb2YgZHByaW50Zl92ZXJfc3RyaW5nIHRvIHZlcl9kc3RyaW5nIHRvIGZpeAorCXByb2JsZW0gd2l0aCB0b29scy9tYWtlX2RlYnVnIHV0aWxpdHkuCisKK1dlZCBKdWwgOSAyMTozMTo1NCAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KKworCSogW29iamVjdHMvZGliLmNdCisJRG9uJ3QgdXNlIHBhbGV0dGVzIHdpdGggZGlicyB3aXRoIGJpQml0Q291bnQgPiA4LgorCisJKiBbbWlzYy9vbGUybmxzLmNdW21pc2MvdmVyLmNdCisJSXNWYWxpZExvY2FsZSwgRW51bVN5c3RlbUxvY2FsZXMgZml4ZWQgKHdpbmhscDMyLmV4ZSB3b3JrcykKKwlTb21lIFZlckxhbmd1YWdlIGNvZGVkIG1vdmVkIHRvIG9sZTJubHMuYywgc29tZSBjbGVhbnVwcy4KKworCSogW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCisJRml4ZWQgImNhcGFiaWxpdGllcyA8ZGV2PiBkZXZpY2UgdHlwZSIgY3Jhc2ggKGNvb2wuZXhlKS4KKworCSogW21pc2MvbWFpbi5jXQorCVN5c3RlbVBhcmFtZXRlcnNJbmZvKjogYWRkZWQgc3R1YiBvcHRpb24gNDEKKwkoR0VUTk9OQ0xJRU5UTUVUUklDUyksIGR1cGxpY2F0ZWQgc29tZSBzdHVmZiBhd2F5IGZyb20gU1BJMTYKKwl0aGF0IHdyaXRlcyAzMmJpdCB2YXJzLihvbmUgQ09NQ1RMMzIuRExMIGNyYXNoLCBmcmVlY2VsbC5leGUpCisKK1R1ZSBKdWwgIDggMjI6NDA6NTMgMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KKworCSogW2lmMTYzMi9zaGVsbDMyLnNwZWNdCisJVXNlIFdpbmRvd3MgOTUncyBvcmRpbmFscy4gSGVscCB3YW50ZWQsIGlucXVpcmUgd2l0aGluLgorCitNb24gSnVsICA3IDExOjIwOjM2IDE5OTcgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CisKKwkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi91c2VyLnNwZWNdIFtpZjE2MzIva2VybmVsLnNwZWNdCisJICBbdG9vbHMvYnVpbGQtc3BlYy50eHRdIFt0b29scy9idWlsZC5jXQorCUFkZGVkIHR5cGUgJ3NlZ3N0cicgKHNlZ21lbnRlZCBwb2ludGVyIHRvIG51bGwtdGVybWluYXRlZCBzdHJpbmcpCisJdG8gLnNwZWMgZmlsZXMuCisKKwkqIFt3aW5kb3dzL3VzZXIuY10gW2lmMTYzMi91c2VyLnNwZWNdCisJRXhpdFdpbmRvd3NFeGVjIHN0dWIgZnVuY3Rpb24gYWRkZWQuCisKK01vbiBKdWwgIDcgMDE6MTg6MjUgMTk5NyAgVS4gQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+CisKKwkqIFtmaWxlcy9maWxlLmNdIFtpbmNsdWRlL3dpbmJhc2UuaF0gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQorCUltcGxlbWVudCBNb3ZlRmlsZUV4MzIsIHNvbWUgZW5oYW5jZW1lbnQgZm9yIE1vdmVmaWxlMzIuCisKK1NhdCBKdWwgIDUgMTg6MTM6NDggMTk5NyAgQnJ1Y2UgTWlsbmVyIDxCcnVjZS5NaWxuZXJAZ2VuZXRpY3MudXRhaC5lZHUuCisKKwkqIFtmaWxlcy9maWxlLmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2luY2x1ZGUvd2luZXJyb3IuaF0KKyAgICAgICAgICBbbXNkb3MvaW50MjEuY10gW3dpbjMyL2ZpbGUuY10KKwlBZGQgTG9ja0ZpbGUvVW5sb2NrRmlsZSBpbXBsZW1lbnRhdGlvbi4KKwlBZGQgYmFjayBpbiBpbnQyMSBmdW5jKDB4NWMpIFJlY29yZCBsb2NraW5nIGZ1bmN0aW9ucy4KKworCSogW2ZpbGVzL2ZpbGUuY10KKwlGaXhlZCBidWcgd2l0aCBPRl9SRU9QRU4gaW4gRklMRV9Eb09wZW5GaWxlLgorCitGcmkgSnVsIDQgMTI6MDA6MDAgMTk5NyAgSGVucmlrIE9sc2VuIDxIZW5yaWsuT2xzZW5AaWFlc3RlLmRrPgorCisJKiBbbWlzYy9vbGUybmxzLmNdIFtwcm9ncmFtcy9wcm9nbWFuL0RhLnJjXSBbcHJvZ3JhbXMvd2luaGVscC9EYS5yY10KKwkgIFtyZXNvdXJjZXMvc3lzcmVzX0RhLnJjXQorCUFkZGVkL3VwZGF0ZWQgRGFuaXNoIGxhbmd1YWdlIHN1cHBvcnQuCisKK1RodSBKdWwgIDMgMTM6MDQ6MjAgMTk5NyAgQ2xhdXMgRmlzY2hlciAgPGZpc2NoZXJAaXVlLnR1d2llbi5hYy5hdD4KKworCSogW2ZpbGVzL2Rvc19mcy5jXQorCVByb3Blcmx5IGltcGxlbWVudGVkIERPU0ZTX1VuaXhUaW1lVG9GaWxlVGltZSBhbmQKKwlET1NGU19GaWxlVGltZVRvVW5peFRpbWUuCisKKwkqIFtkb2N1bWVudGF0aW9uL3dpbmUudGV4aW5mb10KKwlGaXJzdCB2ZXJzaW9uIG9mIHRleGluZm8gZG9jdW1lbnRhdGlvbi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVGh1IEp1biAyNiAwMjoxNDowMyAxOTk3ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgogCiAJKiBbTWFrZWZpbGUuaW5dCmRpZmYgLS1naXQgYS9MSUNFTlNFIGIvTElDRU5TRQppbmRleCA5ZTAzNThiLi4yOTQzODI0IDEwMDY0NAotLS0gYS9MSUNFTlNFCisrKyBiL0xJQ0VOU0UKQEAgLTEsMyArMSwxMSBAQAorQGMgVGhpcyBmaWxlIGlzIHByb2Nlc3NlZCBieSBHTlUncyBUZVhpbmZvCitAYyBJZiB5b3UgbW9kaWZ5IGl0IG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsb2NhdGlvbiwgbWFrZSBzdXJlIHRoYXQKK0BjIFRlWGluZm8gd29ya3MgKHR5cGUgYG1ha2UnIGluIGRpcmVjdG9yeSBkb2N1bWVudGF0aW9uKS4KKworQGMgVGhpcyBpcyB0aGUgV2luZSBjb3B5cmlnaHQuCitAYyBUaGUgV2luZSB3YXJyYW50eSBpcyBwYXJ0IG9mIHRoZSBsaWNlbnNlIGFncmVlbWVudC4KK0BjIFJFQUQgVEhFIEZJTEUgYFdBUlJBTlRZJyBDQVJFRlVMTFkgRk9SIEEgU1RBVEVNRU5UIE9OIFRIRSBXSU5FIFdBUlJBTlRZLgorCiBZb3UgbWF5IHdpdGhvdXQgY2hhcmdlLCByb3lhbHR5IG9yIG90aGVyIHBheW1lbnQsIGNvcHkgYW5kCiBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGlzIHdvcmsgYW5kIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhpcyB3b3JrCiBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gcHJvdmlkZWQgdGhhdDogKDEpIApAQCAtMTQsMTYgKzIyLDkgQEAKIHRoYXQgY29udGFpbiBhbnkgcGFydHkgb2YgdGhlIG9yaWdpbmFsIHdvcmssIGFuZCAoYykgYWxsIHNvdXJjZQogZmlsZXMgb2YgdGhlIGRlcml2YXRpdmUgd29yayB0aGF0IGFyZSBuZWNlc3NhcnkgdG8gY29tcGlsZSwgbGluawogYW5kIHJ1biB0aGUgZGVyaXZhdGl2ZSB3b3JrIHdpdGhvdXQgdW5yZXNvbHZlZCBleHRlcm5hbCBjYWxscyBhbmQKLXdpdGggdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgb3JpZ2luYWwgd29yayAoIk5lY2Vzc2FyeQotU291cmNlcyIpIGNhcnJ5IGEgcHJvbWluZW50IG5vdGljZSBleHBsYWluaW5nIHRoZSBuYXR1cmUgYW5kIGRhdGUKK3dpdGggdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgb3JpZ2luYWwgd29yayAoYGBOZWNlc3NhcnkKK1NvdXJjZXMnJykgY2FycnkgYSBwcm9taW5lbnQgbm90aWNlIGV4cGxhaW5pbmcgdGhlIG5hdHVyZSBhbmQgZGF0ZQogb2YgdGhlIG1vZGlmaWNhdGlvbiBhbmQvb3IgY3JlYXRpb24uICBZb3UgYXJlIGVuY291cmFnZWQgdG8gbWFrZQogdGhlIE5lY2Vzc2FyeSBTb3VyY2VzIGF2YWlsYWJsZSB1bmRlciB0aGlzIGxpY2Vuc2UgaW4gb3JkZXIgdG8KIGZ1cnRoZXIgdGhlIGRldmVsb3BtZW50IGFuZCBhY2NlcHRhbmNlIG9mIHRoZSB3b3JrLgotIAotRVhDRVBUIEFTIE9USEVSV0lTRSBSRVNUUklDVEVEIEJZIExBVywgVEhJUyBXT1JLIElTIFBST1ZJREVECi1XSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgSU5DTFVESU5HCi1CVVQgTk9UIExJTUlURUQgVE8sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgRklUTkVTUyBGT1IgQQotUEFSVElDVUxBUiBQVVJQT1NFLCBNRVJDSEFOVEFCSUxJVFkgT1IgVElUTEUuICBFWENFUFQgQVMKLU9USEVSV0lTRSBQUk9WSURFRCBCWSBMQVcsIE5PIEFVVEhPUiwgQ09QWVJJR0hUIEhPTERFUiBPUgotTElDRU5TT1IgU0hBTEwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUyBPRiBBTlkgS0lORCwgRVZFTiBJRgotQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCmRpZmYgLS1naXQgYS9NYWtlLnJ1bGVzLmluIGIvTWFrZS5ydWxlcy5pbgppbmRleCBkYzk1Yzg1Li5mZDc1OGExIDEwMDY0NAotLS0gYS9NYWtlLnJ1bGVzLmluCisrKyBiL01ha2UucnVsZXMuaW4KQEAgLTUsNyArNSw3IEBACiAjIFRPUE9CSkRJUiAgICA6IHRvcC1sZXZlbCBvYmplY3QgZGlyZWN0b3J5CiAjIFNSQ0RJUiAgICAgICA6IHNvdXJjZSBkaXJlY3RvcnkgZm9yIHRoaXMgbW9kdWxlCiAjIE1PRFVMRSAgICAgICA6IG5hbWUgb2YgdGhlIG1vZHVsZSBiZWluZyBidWlsdAotIyBDX1NSQ1MgICAgICAgOiBDIHNvdXJjZXMgZm9yIHRoZSBtb2R1bGUKKyMgQ19TUkNTICAgICAgIDogQyBzb3VyY2VzIGZvciB0aGUgbW9kdWxlIChvcHRpb25hbCkKICMgR0VOX0NfU1JDUyAgIDogZ2VuZXJhdGVkIEMgc291cmNlcyAob3B0aW9uYWwpCiAjIEFTTV9TUkNTICAgICA6IGFzc2VtYmx5IHNvdXJjZXMgKG9wdGlvbmFsKQogIyBHRU5fQVNNX1NSQ1MgOiBnZW5lcmF0ZWQgYXNzZW1ibHkgc291cmNlcyAob3B0aW9uYWwpCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCmluZGV4IGM2MmViNTQuLjYxNjQ5ZmUgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmluCisrKyBiL01ha2VmaWxlLmluCkBAIC03NCw3ICs3NCwxNCBAQAogCiBQUk9HU1VCRElSUyA9IGxpYnRlc3QgcHJvZ3JhbXMKIAotQUxMU1VCRElSUyA9ICQoQ09NTU9OU1VCRElSUykgJChFTVVTVUJESVJTKSAkKExJQlNVQkRJUlMpICQoUFJPR1NVQkRJUlMpCitET0NTVUJESVJTID0gZG9jdW1lbnRhdGlvbgorCitBTExTVUJESVJTID0gXAorCSQoQ09NTU9OU1VCRElSUykgXAorCSQoRU1VU1VCRElSUykgXAorCSQoTElCU1VCRElSUykgXAorCSQoUFJPR1NVQkRJUlMpIFwKKwkkKERPQ1NVQkRJUlMpCiAKIENPTU1PTk9CSlMgPSBcCiAJY29udHJvbHMvY29udHJvbHMubyBcCkBAIC0xNDAsNyArMTQ3LDcgQEAKIAlAY2QgcHJvZ3JhbXM7ICQoU1VCTUFLRSkgaW5zdGFsbAogCiBkZXBlbmQ6IGR1bW15Ci0JZm9yIGkgaW4gJChDT01NT05TVUJESVJTKSAkKExJQlNVQkRJUlMpICQoRU1VU1VCRElSUyk7IGRvIFwKKwlmb3IgaSBpbiAkKENPTU1PTlNVQkRJUlMpICQoTElCU1VCRElSUykgJChFTVVTVUJESVJTKSAkKERPQ1NVQkRJUlMpOyBkbyBcCiAJICAoY2QgJCRpOyAkKE1BS0UpIGRlcGVuZCkgfHwgZXhpdCAxOyBcCiAJZG9uZQogCkBAIC0xNDksNyArMTU2LDcgQEAKIAogY2xlYW46CiAJZm9yIGkgaW4gJChBTExTVUJESVJTKTsgZG8gKGNkICQkaTsgJChNQUtFKSBjbGVhbikgfHwgZXhpdCAxOyBkb25lCi0JZm9yIGkgaW4gLiBpbmNsdWRlIGRvY3VtZW50YXRpb247IGRvIChjZCAkJGk7ICQoUk0pICoubyBcIypcIyAqfiAqLmJhayAqLm9yaWcgKi5yZWogKi5mbGMpOyBkb25lCisJZm9yIGkgaW4gLiBpbmNsdWRlOyBkbyAoY2QgJCRpOyAkKFJNKSAqLm8gXCMqXCMgKn4gKi5iYWsgKi5vcmlnICoucmVqICouZmxjKTsgZG9uZQogCSQoUk0pIHdpbmUgd2luZS5zeW0gbGlid2luZS5hIGxpYndpbmUuc28uMS4wIFRBR1MKIAogZGlzdGNsZWFuOiBjbGVhbgpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IDE3YmI5ZWMuLjI1YTgxZjYgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTE2LDYgKzE2LDcgQEAKIAlMaW51eCB2ZXJzaW9uIDAuOTkuMTMgb3IgYWJvdmUKIAlOZXRCU0QtY3VycmVudAogCUZyZWVCU0QtY3VycmVudCBvciBGcmVlQlNEIDEuMQorCU9wZW5CU0QvaTM4NiAyLjEgb3IgbGF0ZXIKIAogWW91IGFsc28gbmVlZCB0byBoYXZlIGxpYlhwbSBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0uIFRoZSBzb3VyY2VzIGZvcgogaXQgYXJlIHByb2JhYmx5IGF2YWlsYWJsZSBvbiB0aGUgZnRwIHNpdGUgd2hlcmUgeW91IGdvdCBXaW5lLiBUaGV5IGNhbgpkaWZmIC0tZ2l0IGEvUkVMRUFTRS1OT1RFUyBiL1JFTEVBU0UtTk9URVMKaW5kZXggYTlhY2JkMi4uNzk1OWRhMyAxMDA2NDQKLS0tIGEvUkVMRUFTRS1OT1RFUworKysgYi9SRUxFQVNFLU5PVEVTCkBAIC05LDQgKzksMyBAQAogTG9vayBhdCB0aGUgQ2hhbmdlTG9nIHRvIHNlZSB3aGF0IGZpbGVzIGhhdmUgYmVlbiBjaGFuZ2VkLiBUcnkgdG8gdW5kbwogdGhlIHBhcnRpY3VsYXIgcGF0Y2ggYW5kIGdvIHBhcnRpYWxseSBiYWNrIHRvIHRoZSBwcmV2aW91cyB2ZXJzaW9uLiBJZgogeW91IGhhdmUgYW55IHN1c3BpY2lvbnMsIHJlcG9ydCB0aGVtIHRvIHRoZSBhdXRob3Igb3IgdG8gdGhlIG5ld3Nncm91cC4KLQpkaWZmIC0tZ2l0IGEvV0FSUkFOVFkgYi9XQVJSQU5UWQppbmRleCA0OTJhZjg0Li43ZGVmMzVmIDEwMDY0NAotLS0gYS9XQVJSQU5UWQorKysgYi9XQVJSQU5UWQpAQCAtMSwzICsxLDEwIEBACitAYyBUaGlzIGZpbGUgaXMgcHJvY2Vzc2VkIGJ5IEdOVSdzIFRlWGluZm8KK0BjIElmIHlvdSBtb2RpZnkgaXQgb3IgbW92ZSBpdCB0byBhbm90aGVyIGxvY2F0aW9uLCBtYWtlIHN1cmUgdGhhdAorQGMgVGVYaW5mbyB3b3JrcyAodHlwZSBgbWFrZScgaW4gZGlyZWN0b3J5IGRvY3VtZW50YXRpb24pLgorCitAYyBUaGlzIHdhcnJhbnR5IGlzIHBhcnQgb2YgdGhlIGxpY2Vuc2UgYWdyZWVtZW50LgorQGMgU2VlIHRoZSBmaWxlIExJQ0VOU0UgZm9yIHRoZSBjb3B5aW5nIGNvbmRpdGlvbnMuCisKIEVYQ0VQVCBBUyBPVEhFUldJU0UgUkVTVFJJQ1RFRCBCWSBMQVcsIFRISVMgV09SSyBJUyBQUk9WSURFRAogV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIElOQ0xVRElORwogQlVUIE5PVCBMSU1JVEVEIFRPLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIEZJVE5FU1MgRk9SIEEKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCA5ZmYzNzFiLi5iY2UyYTc1IDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0yNDc3LDYgKzI0NzcsNyBAQAogTWFrZWZpbGUKIGNvbnRyb2xzL01ha2VmaWxlCiBkZWJ1Z2dlci9NYWtlZmlsZQorZG9jdW1lbnRhdGlvbi9NYWtlZmlsZQogZmlsZXMvTWFrZWZpbGUKIGdyYXBoaWNzL01ha2VmaWxlCiBncmFwaGljcy9tZXRhZmlsZWRydi9NYWtlZmlsZQpAQCAtMjU5NSw2ICsyNTk2LDcgQEAKIE1ha2VmaWxlCiBjb250cm9scy9NYWtlZmlsZQogZGVidWdnZXIvTWFrZWZpbGUKK2RvY3VtZW50YXRpb24vTWFrZWZpbGUKIGZpbGVzL01ha2VmaWxlCiBncmFwaGljcy9NYWtlZmlsZQogZ3JhcGhpY3MvbWV0YWZpbGVkcnYvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgppbmRleCAxODVhNDY0Li41MzBmMTkxIDEwMDY0NAotLS0gYS9jb25maWd1cmUuaW4KKysrIGIvY29uZmlndXJlLmluCkBAIC0zOCw3ICszOCw3IEBACiBBQ19QUk9HX0xFWAogQUNfUFJPR19SQU5MSUIKIEFDX1BST0dfSU5TVEFMTAotZG5sIENoZWNrIGZvciAtbGkzODYgZm9yIE5ldEJTRAorZG5sIENoZWNrIGZvciAtbGkzODYgZm9yIE5ldEJTRCBhbmQgT3BlbkJTRAogQUNfQ0hFQ0tfTElCKGkzODYsaTM4Nl9zZXRfbGR0LExETElCUz0iJExETElCUyAtbGkzODYiKQogCiBkbmwgKioqKiBDaGVjayBmb3IgZ2NjIHN0cmVuZ3RoLXJlZHVjZSBidWcgKioqKgpAQCAtMTE5LDYgKzExOSw3IEBACiBNYWtlZmlsZQogY29udHJvbHMvTWFrZWZpbGUKIGRlYnVnZ2VyL01ha2VmaWxlCitkb2N1bWVudGF0aW9uL01ha2VmaWxlCiBmaWxlcy9NYWtlZmlsZQogZ3JhcGhpY3MvTWFrZWZpbGUKIGdyYXBoaWNzL21ldGFmaWxlZHJ2L01ha2VmaWxlCmRpZmYgLS1naXQgYS9jb250cm9scy9lZGl0LmMgYi9jb250cm9scy9lZGl0LmMKaW5kZXggNzA3YmM2OS4uNDY5ZGU2NCAxMDA2NDQKLS0tIGEvY29udHJvbHMvZWRpdC5jCisrKyBiL2NvbnRyb2xzL2VkaXQuYwpAQCAtMTQ2Miw4ICsxNDYyLDggQEAKIAkJZSA9IEVESVRfQ2hhckZyb21Qb3Mod25kLCBlcywgMHg4MDAwMDAwMCwKIAkJCUhJV09SRChFRElUX0VNX1Bvc0Zyb21DaGFyKHduZCwgZXMsIGVzLT5zZWxlY3Rpb25fZW5kLCBlcy0+ZmxhZ3MgJiBFRl9BRlRFUl9XUkFQKSksIE5VTEwpOwogCWVsc2UKLQkJZSA9IGxzdHJsZW4zMkEoZXMtPnRleHQpOwotCUVESVRfRU1fU2V0U2VsKHduZCwgZXMsIGV4dGVuZCA/IGVzLT5zZWxlY3Rpb25fc3RhcnQgOiBlLCBlLCBGQUxTRSk7CisJCWUgPSAwOworCUVESVRfRU1fU2V0U2VsKHduZCwgZXMsIGUsIGV4dGVuZCA/IGVzLT5zZWxlY3Rpb25fc3RhcnQgOiBlLCBGQUxTRSk7CiAJRURJVF9FTV9TY3JvbGxDYXJldCh3bmQsIGVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvY29udHJvbHMvbWVudS5jIGIvY29udHJvbHMvbWVudS5jCmluZGV4IDRjN2M4MmYuLmQ5OWI2Y2MgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL21lbnUuYworKysgYi9jb250cm9scy9tZW51LmMKQEAgLTMzLDggKzMzLDE5IEBACiAjaW5jbHVkZSAiZ3JhcGhpY3MuaCIKICNpbmNsdWRlICJyZXNvdXJjZS5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCisjaW5jbHVkZSAidHdlYWsuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCisKK1VJTlQzMiAgTUVOVV9CYXJJdGVtVG9wTnVkZ2U7CitVSU5UMzIgIE1FTlVfQmFySXRlbUxlZnROdWRnZTsKK1VJTlQzMiAgTUVOVV9JdGVtVG9wTnVkZ2U7CitVSU5UMzIgIE1FTlVfSXRlbUxlZnROdWRnZTsKK1VJTlQzMiAgTUVOVV9IaWdobGlnaHRUb3BOdWRnZTsKK1VJTlQzMiAgTUVOVV9IaWdobGlnaHRMZWZ0TnVkZ2U7CitVSU5UMzIgIE1FTlVfSGlnaGxpZ2h0Qm90dG9tTnVkZ2U7CitVSU5UMzIgIE1FTlVfSGlnaGxpZ2h0UmlnaHROdWRnZTsKKwogLyogaW50ZXJuYWwgcG9wdXAgbWVudSB3aW5kb3cgbWVzc2FnZXMgKi8KIAogI2RlZmluZSBNTV9TRVRNRU5VSEFORExFCShXTV9VU0VSICsgMCkKQEAgLTEwMSwxMyArMTEyLDEzIEBACiAjZGVmaW5lIFBPUFVQX1lTSEFERQkJNAogCiAgIC8qIFNwYWNlIGJldHdlZW4gMiBtZW51IGJhciBpdGVtcyAqLwotI2RlZmluZSBNRU5VX0JBUl9JVEVNU19TUEFDRSAgMTYKK2ludCBNRU5VX0JBUl9JVEVNU19TUEFDRSA9IDEyOwogCiAgIC8qIE1pbmltdW0gd2lkdGggb2YgYSB0YWIgY2hhcmFjdGVyICovCi0jZGVmaW5lIE1FTlVfVEFCX1NQQUNFICAgICAgICA4CitpbnQgTUVOVV9UQUJfU1BBQ0UgPSA4OwogCiAgIC8qIEhlaWdodCBvZiBhIHNlcGFyYXRvciBpdGVtICovCi0jZGVmaW5lIFNFUEFSQVRPUl9IRUlHSFQgICAgICA1CitpbnQgU0VQQVJBVE9SX0hFSUdIVCA9IDU7CiAKICAgLyogKG90aGVyIG1lbnUtPkZvY3VzZWRJdGVtIHZhbHVlcyBnaXZlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZm9jdXNlZCBpdGVtKSAqLwogI2RlZmluZSBOT19TRUxFQ1RFRF9JVEVNICAweGZmZmYKQEAgLTE0NywxNCArMTU4LDE4IEBACiB7CiAgICAgSE1FTlUzMiBoTWVudSA9IExvYWRNZW51SW5kaXJlY3QzMkEoU1lTUkVTX0dldFJlc1B0cihTWVNSRVNfTUVOVV9TWVNNRU5VKSk7CiAKLSAgICBpZiggaE1lbnUgKQotICAgIHsKKyAgICBpZiggaE1lbnUgKSB7CiAgICAgICAgIFBPUFVQTUVOVSogbWVudSA9IChQT1BVUE1FTlUgKikgVVNFUl9IRUFQX0xJTl9BRERSKGhNZW51KTsKICAgICAgICAgbWVudS0+d0ZsYWdzIHw9IE1GX1NZU01FTlUgfCBNRl9QT1BVUDsKLQlyZXR1cm4gaE1lbnU7CiAgICAgfQotICAgIGVsc2UgZnByaW50Ziggc3RkZXJyLCAiVW5hYmxlIHRvIGxvYWQgZGVmYXVsdCBzeXN0ZW0gbWVudVxuIiApOwotICAgIHJldHVybiBGQUxTRTsKKyAgICBlbHNlIHsKKwloTWVudSA9IDA7CisJZnByaW50Ziggc3RkZXJyLCAiVW5hYmxlIHRvIGxvYWQgZGVmYXVsdCBzeXN0ZW0gbWVudVxuIiApOworICAgIH0KKworICAgIGRwcmludGZfbWVudSggc3RkZGViLCAiTUVOVV9Db3B5U3lzUG9wdXA6IHJldHVybmluZyAlbGQuXG4iLCBoTWVudSApOworCisgICAgcmV0dXJuIGhNZW51OwogfQogCiAKQEAgLTQwOSw2ICs0MjQsMTAgQEAKICAgICBEV09SRCBkd1NpemU7CiAgICAgY2hhciAqcDsKIAorICAgIGRwcmludGZfbWVudSggc3RkZGViLCAiTUVOVV9DYWxjSXRlbVNpemU6IEhEQyAweCVseCwgaXRlbSAnJXMnLCBhdCAiCisJCSAgIiglZCwgJWQpICVzXG4iLCBoZGMsIGxwaXRlbS0+dGV4dCwgb3JnWCwgb3JnWSwKKwkJICBtZW51QmFyID8gIihNZW51QmFyKSIgOiAiIiApOworCiAgICAgU2V0UmVjdDMyKCAmbHBpdGVtLT5yZWN0LCBvcmdYLCBvcmdZLCBvcmdYLCBvcmdZICk7CiAKICAgICBpZiAobHBpdGVtLT5pdGVtX2ZsYWdzICYgTUZfT1dORVJEUkFXKQpAQCAtNTA5LDYgKzUyOCwxMyBAQAogCXsKIAkgICAgaWYgKChpICE9IHN0YXJ0KSAmJgogCQkobHBpdGVtLT5pdGVtX2ZsYWdzICYgKE1GX01FTlVCUkVBSyB8IE1GX01FTlVCQVJCUkVBSykpKSBicmVhazsKKworCSAgICBkcHJpbnRmX21lbnUoIHN0ZGRlYiwgIk1FTlVfUG9wdXBNZW51Q2FsY1NpemU6IGNhbGxpbmcgIgorCQkJICAiTUVOVV9DYWxjSXRlbVNpemUgb24gJyVzJywgb3JnPSglZCwgJWQpXG4iLAorCQkJICBscGl0ZW0tPnRleHQsIG9yZ1gsIG9yZ1kgKTsKKwkgICAgaWYoVFdFQUtfV2luOTVMb29rKQorCQkrK29yZ1k7CisKIAkgICAgTUVOVV9DYWxjSXRlbVNpemUoIGhkYywgbHBpdGVtLCBod25kT3duZXIsIG9yZ1gsIG9yZ1ksIEZBTFNFICk7CiAgICAgICAgICAgICBpZiAobHBpdGVtLT5pdGVtX2ZsYWdzICYgTUZfTUVOVUJBUkJSRUFLKSBvcmdYKys7CiAJICAgIG1heFggPSBNQVgoIG1heFgsIGxwaXRlbS0+cmVjdC5yaWdodCApOwpAQCAtNTcyLDYgKzU5OCwxMSBAQAogCSAgICBpZiAoKGhlbHBQb3MgPT0gLTEpICYmIChscGl0ZW0tPml0ZW1fZmxhZ3MgJiBNRl9IRUxQKSkgaGVscFBvcyA9IGk7CiAJICAgIGlmICgoaSAhPSBzdGFydCkgJiYKIAkJKGxwaXRlbS0+aXRlbV9mbGFncyAmIChNRl9NRU5VQlJFQUsgfCBNRl9NRU5VQkFSQlJFQUspKSkgYnJlYWs7CisKKworCSAgICBkcHJpbnRmX21lbnUoIHN0ZGRlYiwgIk1FTlVfTWVudUJhckNhbGNTaXplOiBjYWxsaW5nICIKKwkJCSAgIk1FTlVfQ2FsY0l0ZW1TaXplIG9uIGl0ZW0gJyVzJywgb3JnPSglZCwgJWQpXG4iLAorCQkJICBscGl0ZW0tPnRleHQsIG9yZ1gsIG9yZ1kgKTsKIAkgICAgTUVOVV9DYWxjSXRlbVNpemUoIGhkYywgbHBpdGVtLCBod25kT3duZXIsIG9yZ1gsIG9yZ1ksIFRSVUUgKTsKIAkgICAgaWYgKGxwaXRlbS0+cmVjdC5yaWdodCA+IGxwcmVjdC0+cmlnaHQpCiAJICAgIHsKQEAgLTYxOSw4ICs2NTAsMTcgQEAKIAogICAgIGlmIChscGl0ZW0tPml0ZW1fZmxhZ3MgJiBNRl9TWVNNRU5VKQogICAgIHsKLQlpZiggIUlzSWNvbmljMzIoaHduZCkgKSBOQ19EcmF3U3lzQnV0dG9uKCBod25kLCBoZGMsIAotCQkJCWxwaXRlbS0+aXRlbV9mbGFncyAmIChNRl9ISUxJVEUgfCBNRl9NT1VTRVNFTEVDVCkpOworCWlmKCAhSXNJY29uaWMzMihod25kKSApIHsKKwkgICAgaWYoVFdFQUtfV2luOTVMb29rKQorCQlOQ19EcmF3U3lzQnV0dG9uOTUoIGh3bmQsIGhkYywKKwkJCQkgICAgbHBpdGVtLT5pdGVtX2ZsYWdzICYKKwkJCQkgICAgKE1GX0hJTElURSB8IE1GX01PVVNFU0VMRUNUKSApOworCSAgICBlbHNlCisJCU5DX0RyYXdTeXNCdXR0b24oIGh3bmQsIGhkYywgCisJCQkJICBscGl0ZW0tPml0ZW1fZmxhZ3MgJgorCQkJCSAgKE1GX0hJTElURSB8IE1GX01PVVNFU0VMRUNUKSApOworCX0KKwogCXJldHVybjsKICAgICB9CiAKQEAgLTY0NywxMSArNjg3LDMzIEBACiAgICAgaWYgKG1lbnVCYXIgJiYgKGxwaXRlbS0+aXRlbV9mbGFncyAmIE1GX1NFUEFSQVRPUikpIHJldHVybjsKICAgICByZWN0ID0gbHBpdGVtLT5yZWN0OwogCi0gICAgICAvKiBEcmF3IHRoZSBiYWNrZ3JvdW5kICovCisgICAgLyogRHJhdyB0aGUgYmFja2dyb3VuZCAqLworICAgIGlmKFRXRUFLX1dpbjk1TG9vaykgeworCWlmKG1lbnVCYXIpIHsKKwkgICAgLS1yZWN0LmxlZnQ7CisJICAgICsrcmVjdC5ib3R0b207CisJICAgIC0tcmVjdC50b3A7CisJfQorCUluZmxhdGVSZWN0MzIoICZyZWN0LCAtMSwgLTEgKTsKKyAgICB9CiAKLSAgICBpZiAobHBpdGVtLT5pdGVtX2ZsYWdzICYgTUZfSElMSVRFKQotCUZpbGxSZWN0MzIoIGhkYywgJnJlY3QsIHN5c0NvbG9yT2JqZWN0cy5oYnJ1c2hIaWdobGlnaHQgKTsKLSAgICBlbHNlIEZpbGxSZWN0MzIoIGhkYywgJnJlY3QsIHN5c0NvbG9yT2JqZWN0cy5oYnJ1c2hNZW51ICk7CisgICAgaWYgKGxwaXRlbS0+aXRlbV9mbGFncyAmIE1GX0hJTElURSkgeworCVJFQ1QzMiAgciA9IHJlY3Q7CisJci50b3AgKz0gTUVOVV9IaWdobGlnaHRUb3BOdWRnZTsKKwlyLmJvdHRvbSArPSBNRU5VX0hpZ2hsaWdodEJvdHRvbU51ZGdlOworCXIubGVmdCArPSBNRU5VX0hpZ2hsaWdodExlZnROdWRnZTsKKwlyLnJpZ2h0ICs9IE1FTlVfSGlnaGxpZ2h0UmlnaHROdWRnZTsKKwlGaWxsUmVjdDMyKCBoZGMsICZyLCBzeXNDb2xvck9iamVjdHMuaGJydXNoSGlnaGxpZ2h0ICk7CisgICAgfQorICAgIGVsc2UgeworCVJFQ1QzMiAgciA9IHJlY3Q7CisJci50b3AgKz0gTUVOVV9IaWdobGlnaHRUb3BOdWRnZTsKKwlyLmJvdHRvbSArPSBNRU5VX0hpZ2hsaWdodEJvdHRvbU51ZGdlOworCXIubGVmdCArPSBNRU5VX0hpZ2hsaWdodExlZnROdWRnZTsKKwlyLnJpZ2h0ICs9IE1FTlVfSGlnaGxpZ2h0UmlnaHROdWRnZTsKKwlGaWxsUmVjdDMyKCBoZGMsICZyLCBzeXNDb2xvck9iamVjdHMuaGJydXNoTWVudSApOworICAgIH0KKwogICAgIFNldEJrTW9kZTMyKCBoZGMsIFRSQU5TUEFSRU5UICk7CiAKICAgICAgIC8qIERyYXcgdGhlIHNlcGFyYXRvciBiYXIgKGlmIGFueSkgKi8KQEAgLTY2NCw5ICs3MjYsMTYgQEAKICAgICB9CiAgICAgaWYgKGxwaXRlbS0+aXRlbV9mbGFncyAmIE1GX1NFUEFSQVRPUikKICAgICB7Ci0JU2VsZWN0T2JqZWN0MzIoIGhkYywgc3lzQ29sb3JPYmplY3RzLmhwZW5XaW5kb3dGcmFtZSApOwotCU1vdmVUbyggaGRjLCByZWN0LmxlZnQsIHJlY3QudG9wICsgU0VQQVJBVE9SX0hFSUdIVC8yICk7Ci0JTGluZVRvMzIoIGhkYywgcmVjdC5yaWdodCwgcmVjdC50b3AgKyBTRVBBUkFUT1JfSEVJR0hULzIgKTsKKwlpZihUV0VBS19XaW45NUxvb2spCisJICAgIFRXRUFLX0RyYXdNZW51U2VwYXJhdG9yOTUoaGRjLCByZWN0LmxlZnQgKyAxLAorCQkJCSAgICAgIHJlY3QudG9wICsgU0VQQVJBVE9SX0hFSUdIVCAvIDIgKyAxLAorCQkJCSAgICAgIHJlY3QucmlnaHQgLSAxKTsKKwllbHNlIHsKKwkgICAgU2VsZWN0T2JqZWN0MzIoIGhkYywgc3lzQ29sb3JPYmplY3RzLmhwZW5XaW5kb3dGcmFtZSApOworCSAgICBNb3ZlVG8oIGhkYywgcmVjdC5sZWZ0LCByZWN0LnRvcCArIFNFUEFSQVRPUl9IRUlHSFQvMiApOworCSAgICBMaW5lVG8zMiggaGRjLCByZWN0LnJpZ2h0LCByZWN0LnRvcCArIFNFUEFSQVRPUl9IRUlHSFQvMiApOworCX0KKwogCXJldHVybjsKICAgICB9CiAKQEAgLTc0MiwxNiArODExLDQwIEBACiAJICAgIHJlY3QubGVmdCArPSBNRU5VX0JBUl9JVEVNU19TUEFDRSAvIDI7CiAJICAgIHJlY3QucmlnaHQgLT0gTUVOVV9CQVJfSVRFTVNfU1BBQ0UgLyAyOwogCSAgICBpID0gc3RybGVuKCBscGl0ZW0tPnRleHQgKTsKKworCSAgICByZWN0LnRvcCArPSBNRU5VX0Jhckl0ZW1Ub3BOdWRnZTsKKwkgICAgcmVjdC5sZWZ0ICs9IE1FTlVfQmFySXRlbUxlZnROdWRnZTsKIAl9CiAJZWxzZQogCXsKIAkgICAgZm9yIChpID0gMDsgbHBpdGVtLT50ZXh0W2ldOyBpKyspCiAgICAgICAgICAgICAgICAgaWYgKChscGl0ZW0tPnRleHRbaV0gPT0gJ1x0JykgfHwgKGxwaXRlbS0+dGV4dFtpXSA9PSAnXGInKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkgICAgcmVjdC50b3AgKz0gTUVOVV9JdGVtVG9wTnVkZ2U7CisJICAgIHJlY3QubGVmdCArPSBNRU5VX0l0ZW1MZWZ0TnVkZ2U7CiAJfQotCQotCURyYXdUZXh0MzJBKCBoZGMsIGxwaXRlbS0+dGV4dCwgaSwgJnJlY3QsCi0gICAgICAgICAgICAgICAgICAgICBEVF9MRUZUIHwgRFRfVkNFTlRFUiB8IERUX1NJTkdMRUxJTkUgKTsKKworCWlmKCFUV0VBS19XaW45NUxvb2sgfHwgIShscGl0ZW0tPml0ZW1fZmxhZ3MgJiBNRl9HUkFZRUQpKSB7CisJICAgIERyYXdUZXh0MzJBKCBoZGMsIGxwaXRlbS0+dGV4dCwgaSwgJnJlY3QsCisJCQkgRFRfTEVGVCB8IERUX1ZDRU5URVIgfCBEVF9TSU5HTEVMSU5FICk7CisJfQorCWVsc2UgeworCSAgICArK3JlY3QubGVmdDsKKwkgICAgKytyZWN0LnRvcDsKKwkgICAgKytyZWN0LnJpZ2h0OworCSAgICArK3JlY3QuYm90dG9tOworCSAgICBTZXRUZXh0Q29sb3IzMihoZGMsIFJHQigweGZmLCAweGZmLCAweGZmKSk7CisJICAgIERyYXdUZXh0MzJBKCBoZGMsIGxwaXRlbS0+dGV4dCwgaSwgJnJlY3QsCisJCQkgRFRfTEVGVCB8IERUX1ZDRU5URVIgfCBEVF9TSU5HTEVMSU5FICk7CisJICAgIC0tcmVjdC5sZWZ0OworCSAgICAtLXJlY3QudG9wOworCSAgICAtLXJlY3QucmlnaHQ7CisJICAgIC0tcmVjdC5ib3R0b207CisJICAgIFNldFRleHRDb2xvcjMyKGhkYywgUkdCKDB4ODAsIDB4ODAsIDB4ODApKTsKKwkgICAgRHJhd1RleHQzMkEoIGhkYywgbHBpdGVtLT50ZXh0LCBpLCAmcmVjdCwKKwkJCSBEVF9MRUZUIHwgRFRfVkNFTlRFUiB8IERUX1NJTkdMRUxJTkUgKTsKKwl9CiAKIAlpZiAobHBpdGVtLT50ZXh0W2ldKSAgLyogVGhlcmUncyBhIHRhYiBvciBmbHVzaC1yaWdodCBjaGFyICovCiAJewpAQCAtNzg3LDYgKzg4MCw3IEBACiAJSFBFTjMyIGhQcmV2UGVuOwogCiAJUmVjdGFuZ2xlMzIoIGhkYywgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20gKTsKKwogCWhQcmV2UGVuID0gU2VsZWN0T2JqZWN0MzIoIGhkYywgR2V0U3RvY2tPYmplY3QzMiggTlVMTF9QRU4gKSApOwogCWlmKCBoUHJldlBlbiApCiAJewpAQCAtNzk0LDIwICs4ODgsMjYgQEAKIAkgICAgUE9QVVBNRU5VICptZW51OwogCiAJICAgIC8qIGRyYXcgMy1kIHNoYWRlICovCisJICAgIGlmKCFUV0VBS19XaW45NUxvb2spIHsKKwkJU2VsZWN0T2JqZWN0MzIoIGhkYywgaFNoYWRlQnJ1c2ggKTsKKwkJU2V0QmtNb2RlMzIoIGhkYywgVFJBTlNQQVJFTlQgKTsKKwkJcm9wUHJldiA9IFNldFJPUDIzMiggaGRjLCBSMl9NQVNLUEVOICk7CiAKLQkgICAgU2VsZWN0T2JqZWN0MzIoIGhkYywgaFNoYWRlQnJ1c2ggKTsKLQkgICAgU2V0QmtNb2RlMzIoIGhkYywgVFJBTlNQQVJFTlQgKTsKLQkgICAgcm9wUHJldiA9IFNldFJPUDIzMiggaGRjLCBSMl9NQVNLUEVOICk7Ci0KLQkgICAgaSA9IHJlY3QucmlnaHQ7CQkvKiB3aHkgU2V0QnJ1c2hPcmcoKSBkb2Vzbid0PyAqLwotCSAgICBQYXRCbHQzMiggaGRjLCBpICYgMHhmZmZmZmZmZSwgcmVjdC50b3AgKyBQT1BVUF9ZU0hBREUqU1lTTUVUUklDU19DWUJPUkRFUiwgCi0JCSAgICAgIGklMiArIFBPUFVQX1hTSEFERSpTWVNNRVRSSUNTX0NYQk9SREVSLCByZWN0LmJvdHRvbSAtIHJlY3QudG9wLCAweDAwYTAwMGM5ICk7Ci0JICAgIGkgPSByZWN0LmJvdHRvbTsKLQkgICAgUGF0Qmx0MzIoIGhkYywgcmVjdC5sZWZ0ICsgUE9QVVBfWFNIQURFKlNZU01FVFJJQ1NfQ1hCT1JERVIsIGkgJiAweGZmZmZmZmZlLCAKLQkJICAgICAgcmVjdC5yaWdodCAtIHJlY3QubGVmdCwgaSUyICsgUE9QVVBfWVNIQURFKlNZU01FVFJJQ1NfQ1lCT1JERVIsIDB4MDBhMDAwYzkgKTsKLQkgICAgU2VsZWN0T2JqZWN0MzIoIGhkYywgaFByZXZQZW4gKTsKLQkgICAgU2VsZWN0T2JqZWN0MzIoIGhkYywgaFByZXZCcnVzaCApOwotCSAgICBTZXRST1AyMzIoIGhkYywgcm9wUHJldiApOworCQlpID0gcmVjdC5yaWdodDsJCS8qIHdoeSBTZXRCcnVzaE9yZygpIGRvZXNuJ3Q/ICovCisJCVBhdEJsdDMyKCBoZGMsIGkgJiAweGZmZmZmZmZlLAorCQkJICByZWN0LnRvcCArIFBPUFVQX1lTSEFERSpTWVNNRVRSSUNTX0NZQk9SREVSLCAKKwkJCSAgaSUyICsgUE9QVVBfWFNIQURFKlNZU01FVFJJQ1NfQ1hCT1JERVIsCisJCQkgIHJlY3QuYm90dG9tIC0gcmVjdC50b3AsIDB4MDBhMDAwYzkgKTsKKwkJaSA9IHJlY3QuYm90dG9tOworCQlQYXRCbHQzMiggaGRjLCByZWN0LmxlZnQgKyBQT1BVUF9YU0hBREUqU1lTTUVUUklDU19DWEJPUkRFUiwKKwkJCSAgaSAmIDB4ZmZmZmZmZmUscmVjdC5yaWdodCAtIHJlY3QubGVmdCwKKwkJCSAgaSUyICsgUE9QVVBfWVNIQURFKlNZU01FVFJJQ1NfQ1lCT1JERVIsIDB4MDBhMDAwYzkgKTsKKwkJU2VsZWN0T2JqZWN0MzIoIGhkYywgaFByZXZQZW4gKTsKKwkJU2VsZWN0T2JqZWN0MzIoIGhkYywgaFByZXZCcnVzaCApOworCQlTZXRST1AyMzIoIGhkYywgcm9wUHJldiApOworCSAgICB9CisJICAgIGVsc2UKKwkJVFdFQUtfRHJhd1JlbGllZlJlY3Q5NShoZGMsICZyZWN0KTsKIAogCSAgICAvKiBkcmF3IG1lbnUgaXRlbXMgKi8KIApAQCAtODQ2LDEwICs5NDYsMTYgQEAKICAgICBscHJlY3QtPmJvdHRvbSA9IGxwcmVjdC0+dG9wICsgbHBwb3AtPkhlaWdodDsKICAgICBpZiAoc3VwcHJlc3NfZHJhdykgcmV0dXJuIGxwcG9wLT5IZWlnaHQ7CiAgICAgCisgICAgaWYoVFdFQUtfV2luOTVMb29rKQorCSsrbHByZWN0LT5ib3R0b207CisKICAgICBGaWxsUmVjdDMyKGhEQywgbHByZWN0LCBzeXNDb2xvck9iamVjdHMuaGJydXNoTWVudSApOwotICAgIFNlbGVjdE9iamVjdDMyKCBoREMsIHN5c0NvbG9yT2JqZWN0cy5ocGVuV2luZG93RnJhbWUgKTsKLSAgICBNb3ZlVG8oIGhEQywgbHByZWN0LT5sZWZ0LCBscHJlY3QtPmJvdHRvbSApOwotICAgIExpbmVUbzMyKCBoREMsIGxwcmVjdC0+cmlnaHQsIGxwcmVjdC0+Ym90dG9tICk7CisKKyAgICBpZighVFdFQUtfV2luOTVMb29rKSB7CisJU2VsZWN0T2JqZWN0MzIoIGhEQywgc3lzQ29sb3JPYmplY3RzLmhwZW5XaW5kb3dGcmFtZSApOworCU1vdmVUbyggaERDLCBscHJlY3QtPmxlZnQsIGxwcmVjdC0+Ym90dG9tICk7CisJTGluZVRvMzIoIGhEQywgbHByZWN0LT5yaWdodCwgbHByZWN0LT5ib3R0b20gKTsKKyAgICB9CiAKICAgICBpZiAobHBwb3AtPm5JdGVtcyA9PSAwKSByZXR1cm4gU1lTTUVUUklDU19DWU1FTlU7CiAgICAgZm9yIChpID0gMDsgaSA8IGxwcG9wLT5uSXRlbXM7IGkrKykKQEAgLTExMTYsOCArMTIyMiw4IEBACiAgICAgTFBTVFIgcHJldlRleHQgPSBJU19TVFJJTkdfSVRFTShpdGVtLT5pdGVtX2ZsYWdzKSA/IGl0ZW0tPnRleHQgOiBOVUxMOwogCiAgICAgZHByaW50Zl9tZW51KHN0ZGRlYiwiU2V0SXRlbURhdGE6ICUwNHggWyUwOHhdICclcycgIC0+ICUwNHggWyUwOHhdICclcydcbiIsCi0JCSBpdGVtLT5pdGVtX2ZsYWdzLCBpdGVtLT5pdGVtX2lkLCBpdGVtLT50ZXh0ID8gaXRlbS0+dGV4dCA6ICIiLAotCQkgZmxhZ3MsIGlkLCBzdHIgPyBzdHIgOiAiIiApOworCQkgaXRlbS0+aXRlbV9mbGFncywgaXRlbS0+aXRlbV9pZCwgcHJldlRleHQgPyBwcmV2VGV4dCA6ICIiLAorCQkgZmxhZ3MsIGlkLCAoSVNfU1RSSU5HX0lURU0oZmxhZ3MpICYmIHN0cikgPyBzdHIgOiAiIiApOwogCiAgICAgaWYgKElTX1NUUklOR19JVEVNKGZsYWdzKSkKICAgICB7CkBAIC0yMjQxLDYgKzIzNDcsOSBAQAogICAgIFdORCAqd25kUHRyOwogICAgIExQUE9QVVBNRU5VIGxwcG9wOwogCisgICAgZHByaW50Zl9tZW51KCBzdGRkZWIsICJNRU5VX0dldE1lbnVCYXJIZWlnaHQ6IEhXTkQgMHglbHgsIHdpZHRoICVkLCAiCisJCSAgImF0ICglZCwgJWQpLlxuIiwgaHduZCwgbWVudWJhcldpZHRoLCBvcmdYLCBvcmdZICk7CisgICAgCiAgICAgaWYgKCEod25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKSkpIHJldHVybiAwOwogICAgIGlmICghKGxwcG9wID0gKExQUE9QVVBNRU5VKVVTRVJfSEVBUF9MSU5fQUREUigoSE1FTlUxNil3bmRQdHItPndJRG1lbnUpKSkKICAgICAgIHJldHVybiAwOwpAQCAtMjU3OCw5ICsyNjg3LDExIEBACiAgICAgTUVOVUlURU0gKml0ZW07CiAKICAgICBpZiAoSVNfU1RSSU5HX0lURU0oZmxhZ3MpICYmIHN0cikKLSAgICAgICAgZHByaW50Zl9tZW51KCBzdGRkZWIsICJJbnNlcnRNZW51OiAlMDR4ICVkICUwNHggJTA0eCAnJXMnXG4iLAorICAgICAgICBkcHJpbnRmX21lbnUoIHN0ZGRlYiwgIkluc2VydE1lbnU6IGhNZW51ICUwNHgsIHBvcyAlZCwgZmxhZ3MgJTA0eCwgIgorCQkgICAgICAiaWQgJTA0eCwgc3RyICclcydcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgaE1lbnUsIHBvcywgZmxhZ3MsIGlkLCBzdHIgKTsKLSAgICBlbHNlIGRwcmludGZfbWVudSggc3RkZGViLCAiSW5zZXJ0TWVudTogJTA0eCAlZCAlMDR4ICUwNHggJTA4bHhcbiIsCisgICAgZWxzZSBkcHJpbnRmX21lbnUoIHN0ZGRlYiwgIkluc2VydE1lbnU6IGhNZW51ICUwNHgsIHBvcyAlZCwgZmxhZ3MgJTA0eCwgIgorCQkgICAgICAgImlkICUwNHgsIHN0ciAlMDhseCAobm90IGEgc3RyaW5nKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgaE1lbnUsIHBvcywgZmxhZ3MsIGlkLCAoRFdPUkQpc3RyICk7CiAKICAgICBpZiAoIShpdGVtID0gTUVOVV9JbnNlcnRJdGVtKCBoTWVudSwgcG9zLCBmbGFncyApKSkgcmV0dXJuIEZBTFNFOwpkaWZmIC0tZ2l0IGEvY29udHJvbHMvc3RhdGljLmMgYi9jb250cm9scy9zdGF0aWMuYwppbmRleCA3N2U2YzU1Li42YTU0N2UyIDEwMDY0NAotLS0gYS9jb250cm9scy9zdGF0aWMuYworKysgYi9jb250cm9scy9zdGF0aWMuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAid2luLmgiCiAjaW5jbHVkZSAic3RhdGljLmgiCisjaW5jbHVkZSAiaGVhcC5oIgogCiBzdGF0aWMgdm9pZCBTVEFUSUNfUGFpbnRUZXh0Zm4oIFdORCAqd25kUHRyLCBIREMzMiBoZGMgKTsKIHN0YXRpYyB2b2lkIFNUQVRJQ19QYWludFJlY3RmbiggV05EICp3bmRQdHIsIEhEQzMyIGhkYyApOwpAQCAtNjUsOSArNjYsMzYgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBTVEFUSUNfTG9hZEljb24KKyAqCisgKiBMb2FkIHRoZSBpY29uIGZvciBhbiBTU19JQ09OIGNvbnRyb2wuCisgKi8KK3N0YXRpYyBISUNPTjE2IFNUQVRJQ19Mb2FkSWNvbiggV05EICp3bmRQdHIsIExQQ1NUUiBuYW1lICkKK3sKKyAgICBISUNPTjE2IGhpY29uOworCisgICAgaWYgKHduZFB0ci0+ZmxhZ3MgJiBXSU5fSVNXSU4zMikKKyAgICB7CisgICAgICAgIGhpY29uID0gTG9hZEljb24zMkEoIHduZFB0ci0+aEluc3RhbmNlLCBuYW1lICk7CisgICAgICAgIGlmICghaGljb24pICAvKiBUcnkgT0VNIGljb24gKEZJWE1FOiBpcyB0aGlzIHJpZ2h0PykgKi8KKyAgICAgICAgICAgIGhpY29uID0gTG9hZEljb24zMkEoIDAsIG5hbWUgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTFBTVFIgc2VnbmFtZSA9IFNFR1BUUl9TVFJEVVAobmFtZSk7CisgICAgICAgIGhpY29uID0gTG9hZEljb24xNiggd25kUHRyLT5oSW5zdGFuY2UsIFNFR1BUUl9HRVQoc2VnbmFtZSkgKTsKKyAgICAgICAgaWYgKCFoaWNvbikgIC8qIFRyeSBPRU0gaWNvbiAoRklYTUU6IGlzIHRoaXMgcmlnaHQ/KSAqLworICAgICAgICAgICAgaGljb24gPSBMb2FkSWNvbjMyQSggMCwgc2VnbmFtZSApOworICAgICAgICBTRUdQVFJfRlJFRShzZWduYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIGhpY29uOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFN0YXRpY1duZFByb2MKICAqLwotTFJFU1VMVCBTdGF0aWNXbmRQcm9jKCBIV05EMTYgaFduZCwgVUlOVDE2IHVNc2csIFdQQVJBTTE2IHdQYXJhbSwKK0xSRVNVTFQgU3RhdGljV25kUHJvYyggSFdORDMyIGhXbmQsIFVJTlQzMiB1TXNnLCBXUEFSQU0zMiB3UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgIExQQVJBTSBsUGFyYW0gKQogewogICAgIExSRVNVTFQgbFJlc3VsdCA9IDA7CkBAIC03NywxMjAgKzEwNSwxMTUgQEAKIAogICAgIHN3aXRjaCAodU1zZykKICAgICB7Ci0JY2FzZSBXTV9FTkFCTEU6Ci0JICAgIEludmFsaWRhdGVSZWN0MzIoIGhXbmQsIE5VTEwsIEZBTFNFICk7Ci0JICAgIGJyZWFrOworICAgIGNhc2UgV01fTkNDUkVBVEU6CisgICAgICAgIGlmIChzdHlsZSA9PSBTU19JQ09OKQorICAgICAgICB7CisgICAgICAgICAgICBDUkVBVEVTVFJVQ1QzMkEgKmNzID0gKENSRUFURVNUUlVDVDMyQSAqKWxQYXJhbTsKKyAgICAgICAgICAgIGlmIChjcy0+bHBzek5hbWUpCisgICAgICAgICAgICAgICAgU1RBVElDX1NldEljb24oIHduZFB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBVElDX0xvYWRJY29uKCB3bmRQdHIsIGNzLT5scHN6TmFtZSApKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiBEZWZXaW5kb3dQcm9jMzJBKCBoV25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSApOwogCi0gICAgICAgIGNhc2UgV01fTkNDUkVBVEU6Ci0JICAgIGlmIChzdHlsZSA9PSBTU19JQ09OKQotICAgICAgICAgICAgewotCQlDUkVBVEVTVFJVQ1QxNiAqY3MgPSAoQ1JFQVRFU1RSVUNUMTYgKilQVFJfU0VHX1RPX0xJTihsUGFyYW0pOwotCQlpZiAoY3MtPmxwc3pOYW1lKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgSElDT04xNiBoaWNvbiA9IExvYWRJY29uMTYoIGNzLT5oSW5zdGFuY2UsIGNzLT5scHN6TmFtZSApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWhpY29uKSAgLyogVHJ5IE9FTSBpY29uIChGSVhNRTogaXMgdGhpcyByaWdodD8pICovCi0gICAgICAgICAgICAgICAgICAgICAgICBoaWNvbiA9IExvYWRJY29uMTYoIDAsIGNzLT5scHN6TmFtZSApOwotICAgICAgICAgICAgICAgICAgICBTVEFUSUNfU2V0SWNvbiggd25kUHRyLCBoaWNvbiApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBEZWZXaW5kb3dQcm9jMTYoaFduZCwgdU1zZywgd1BhcmFtLCBsUGFyYW0pOwotCi0JY2FzZSBXTV9DUkVBVEU6Ci0JICAgIGlmIChzdHlsZSA8IDBMIHx8IHN0eWxlID4gTEFTVF9TVEFUSUNfVFlQRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJTVEFUSUM6IFVua25vd24gc3R5bGUgMHglMDJseFxuIiwgc3R5bGUgKTsKLQkJbFJlc3VsdCA9IC0xTDsKLQkJYnJlYWs7Ci0gICAgICAgICAgICB9Ci0JICAgIC8qIGluaXRpYWxpc2UgY29sb3VycyAqLwotCSAgICBjb2xvcl93aW5kb3dmcmFtZSAgPSBHZXRTeXNDb2xvcjMyKENPTE9SX1dJTkRPV0ZSQU1FKTsKLQkgICAgY29sb3JfYmFja2dyb3VuZCAgID0gR2V0U3lzQ29sb3IzMihDT0xPUl9CQUNLR1JPVU5EKTsKLQkgICAgY29sb3Jfd2luZG93ICAgICAgID0gR2V0U3lzQ29sb3IzMihDT0xPUl9XSU5ET1cpOwotCSAgICBicmVhazsKLQotICAgICAgICBjYXNlIFdNX05DREVTVFJPWToKLSAgICAgICAgICAgIGlmIChzdHlsZSA9PSBTU19JQ09OKQotICAgICAgICAgICAgICAgIERlc3Ryb3lJY29uMzIoIFNUQVRJQ19TZXRJY29uKCB3bmRQdHIsIDAgKSApOwotICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICBsUmVzdWx0ID0gRGVmV2luZG93UHJvYzE2KGhXbmQsIHVNc2csIHdQYXJhbSwgbFBhcmFtKTsKKyAgICBjYXNlIFdNX0NSRUFURToKKyAgICAgICAgaWYgKHN0eWxlIDwgMEwgfHwgc3R5bGUgPiBMQVNUX1NUQVRJQ19UWVBFKQorICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJTVEFUSUM6IFVua25vd24gc3R5bGUgMHglMDJseFxuIiwgc3R5bGUgKTsKKyAgICAgICAgICAgIGxSZXN1bHQgPSAtMUw7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvKiBpbml0aWFsaXNlIGNvbG91cnMgKi8KKyAgICAgICAgY29sb3Jfd2luZG93ZnJhbWUgID0gR2V0U3lzQ29sb3IzMihDT0xPUl9XSU5ET1dGUkFNRSk7CisgICAgICAgIGNvbG9yX2JhY2tncm91bmQgICA9IEdldFN5c0NvbG9yMzIoQ09MT1JfQkFDS0dST1VORCk7CisgICAgICAgIGNvbG9yX3dpbmRvdyAgICAgICA9IEdldFN5c0NvbG9yMzIoQ09MT1JfV0lORE9XKTsKKyAgICAgICAgYnJlYWs7CiAKLQljYXNlIFdNX1BBSU5UOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFBBSU5UU1RSVUNUMTYgcHM7Ci0gICAgICAgICAgICAgICAgQmVnaW5QYWludDE2KCBoV25kLCAmcHMgKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGljUGFpbnRGdW5jW3N0eWxlXSkKLSAgICAgICAgICAgICAgICAgICAgKHN0YXRpY1BhaW50RnVuY1tzdHlsZV0pKCB3bmRQdHIsIHBzLmhkYyApOwotICAgICAgICAgICAgICAgIEVuZFBhaW50MTYoIGhXbmQsICZwcyApOwotICAgICAgICAgICAgfQotCSAgICBicmVhazsKKyAgICBjYXNlIFdNX05DREVTVFJPWToKKyAgICAgICAgaWYgKHN0eWxlID09IFNTX0lDT04pCisgICAgICAgICAgICBEZXN0cm95SWNvbjMyKCBTVEFUSUNfU2V0SWNvbiggd25kUHRyLCAwICkgKTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIGxSZXN1bHQgPSBEZWZXaW5kb3dQcm9jMzJBKCBoV25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSApOworICAgICAgICBicmVhazsKIAotCWNhc2UgV01fU1lTQ09MT1JDSEFOR0U6Ci0JICAgIGNvbG9yX3dpbmRvd2ZyYW1lICA9IEdldFN5c0NvbG9yMzIoQ09MT1JfV0lORE9XRlJBTUUpOwotCSAgICBjb2xvcl9iYWNrZ3JvdW5kICAgPSBHZXRTeXNDb2xvcjMyKENPTE9SX0JBQ0tHUk9VTkQpOwotCSAgICBjb2xvcl93aW5kb3cgICAgICAgPSBHZXRTeXNDb2xvcjMyKENPTE9SX1dJTkRPVyk7Ci0JICAgIEludmFsaWRhdGVSZWN0MzIoIGhXbmQsIE5VTEwsIFRSVUUgKTsKLQkgICAgYnJlYWs7CisgICAgY2FzZSBXTV9QQUlOVDoKKyAgICAgICAgeworICAgICAgICAgICAgUEFJTlRTVFJVQ1QzMiBwczsKKyAgICAgICAgICAgIEJlZ2luUGFpbnQzMiggaFduZCwgJnBzICk7CisgICAgICAgICAgICBpZiAoc3RhdGljUGFpbnRGdW5jW3N0eWxlXSkKKyAgICAgICAgICAgICAgICAoc3RhdGljUGFpbnRGdW5jW3N0eWxlXSkoIHduZFB0ciwgcHMuaGRjICk7CisgICAgICAgICAgICBFbmRQYWludDMyKCBoV25kLCAmcHMgKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKIAotCWNhc2UgV01fU0VUVEVYVDoKLQkgICAgaWYgKHN0eWxlID09IFNTX0lDT04pCi0JICAgICAgICAvKiBGSVhNRSA6IHNob3VsZCB3ZSBhbHNvIHJldHVybiB0aGUgcHJldmlvdXMgaEljb24gaGVyZSA/Pz8gKi8KLSAgICAgICAgICAgICAgICBTVEFUSUNfU2V0SWNvbiggd25kUHRyLCBMb2FkSWNvbjE2KCB3bmRQdHItPmhJbnN0YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNFR1BUUilsUGFyYW0gKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgREVGV05EX1NldFRleHQoIHduZFB0ciwgKExQU1RSKVBUUl9TRUdfVE9fTElOKGxQYXJhbSkgKTsKLQkgICAgSW52YWxpZGF0ZVJlY3QzMiggaFduZCwgTlVMTCwgRkFMU0UgKTsKLQkgICAgVXBkYXRlV2luZG93MzIoIGhXbmQgKTsKLQkgICAgYnJlYWs7CisgICAgY2FzZSBXTV9FTkFCTEU6CisgICAgICAgIEludmFsaWRhdGVSZWN0MzIoIGhXbmQsIE5VTEwsIEZBTFNFICk7CisgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgV01fU0VURk9OVDoKLSAgICAgICAgICAgIGlmIChzdHlsZSA9PSBTU19JQ09OKSByZXR1cm4gMDsKLSAgICAgICAgICAgIGluZm9QdHItPmhGb250ID0gKEhGT05UMTYpd1BhcmFtOwotICAgICAgICAgICAgaWYgKExPV09SRChsUGFyYW0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEludmFsaWRhdGVSZWN0MzIoIGhXbmQsIE5VTEwsIEZBTFNFICk7Ci0gICAgICAgICAgICAgICAgVXBkYXRlV2luZG93MzIoIGhXbmQgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fU1lTQ09MT1JDSEFOR0U6CisgICAgICAgIGNvbG9yX3dpbmRvd2ZyYW1lICA9IEdldFN5c0NvbG9yMzIoQ09MT1JfV0lORE9XRlJBTUUpOworICAgICAgICBjb2xvcl9iYWNrZ3JvdW5kICAgPSBHZXRTeXNDb2xvcjMyKENPTE9SX0JBQ0tHUk9VTkQpOworICAgICAgICBjb2xvcl93aW5kb3cgICAgICAgPSBHZXRTeXNDb2xvcjMyKENPTE9SX1dJTkRPVyk7CisgICAgICAgIEludmFsaWRhdGVSZWN0MzIoIGhXbmQsIE5VTEwsIFRSVUUgKTsKKyAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBXTV9HRVRGT05UOgotICAgICAgICAgICAgcmV0dXJuIGluZm9QdHItPmhGb250OworICAgIGNhc2UgV01fU0VUVEVYVDoKKyAgICAgICAgaWYgKHN0eWxlID09IFNTX0lDT04pCisgICAgICAgICAgICAvKiBGSVhNRSA6IHNob3VsZCB3ZSBhbHNvIHJldHVybiB0aGUgcHJldmlvdXMgaEljb24gaGVyZSA/Pz8gKi8KKyAgICAgICAgICAgIFNUQVRJQ19TZXRJY29uKCB3bmRQdHIsIFNUQVRJQ19Mb2FkSWNvbiggd25kUHRyLCAoTFBDU1RSKWxQYXJhbSApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgREVGV05EX1NldFRleHQoIHduZFB0ciwgKExQQ1NUUilsUGFyYW0gKTsKKyAgICAgICAgSW52YWxpZGF0ZVJlY3QzMiggaFduZCwgTlVMTCwgRkFMU0UgKTsKKyAgICAgICAgVXBkYXRlV2luZG93MzIoIGhXbmQgKTsKKyAgICAgICAgYnJlYWs7CiAKLQljYXNlIFdNX05DSElUVEVTVDoKLQkgICAgcmV0dXJuIEhUVFJBTlNQQVJFTlQ7Ci0KLSAgICAgICAgY2FzZSBXTV9HRVRETEdDT0RFOgotICAgICAgICAgICAgcmV0dXJuIERMR0NfU1RBVElDOwotCi0JY2FzZSBTVE1fR0VUSUNPTjoKLQkgICAgcmV0dXJuIGluZm9QdHItPmhJY29uOwotCi0JY2FzZSBTVE1fU0VUSUNPTjoKLSAgICAgICAgICAgIGxSZXN1bHQgPSBTVEFUSUNfU2V0SWNvbiggd25kUHRyLCAoSElDT04xNil3UGFyYW0gKTsKKyAgICBjYXNlIFdNX1NFVEZPTlQ6CisgICAgICAgIGlmIChzdHlsZSA9PSBTU19JQ09OKSByZXR1cm4gMDsKKyAgICAgICAgaW5mb1B0ci0+aEZvbnQgPSAoSEZPTlQxNil3UGFyYW07CisgICAgICAgIGlmIChMT1dPUkQobFBhcmFtKSkKKyAgICAgICAgewogICAgICAgICAgICAgSW52YWxpZGF0ZVJlY3QzMiggaFduZCwgTlVMTCwgRkFMU0UgKTsKICAgICAgICAgICAgIFVwZGF0ZVdpbmRvdzMyKCBoV25kICk7Ci0JICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogCi0JZGVmYXVsdDoKLQkJbFJlc3VsdCA9IERlZldpbmRvd1Byb2MxNihoV25kLCB1TXNnLCB3UGFyYW0sIGxQYXJhbSk7Ci0JCWJyZWFrOwotCX0KKyAgICBjYXNlIFdNX0dFVEZPTlQ6CisgICAgICAgIHJldHVybiBpbmZvUHRyLT5oRm9udDsKIAotCXJldHVybiBsUmVzdWx0OworICAgIGNhc2UgV01fTkNISVRURVNUOgorICAgICAgICByZXR1cm4gSFRUUkFOU1BBUkVOVDsKKworICAgIGNhc2UgV01fR0VURExHQ09ERToKKyAgICAgICAgcmV0dXJuIERMR0NfU1RBVElDOworCisgICAgY2FzZSBTVE1fR0VUSUNPTjoKKyAgICAgICAgcmV0dXJuIGluZm9QdHItPmhJY29uOworCisgICAgY2FzZSBTVE1fU0VUSUNPTjoKKyAgICAgICAgbFJlc3VsdCA9IFNUQVRJQ19TZXRJY29uKCB3bmRQdHIsIChISUNPTjE2KXdQYXJhbSApOworICAgICAgICBJbnZhbGlkYXRlUmVjdDMyKCBoV25kLCBOVUxMLCBGQUxTRSApOworICAgICAgICBVcGRhdGVXaW5kb3czMiggaFduZCApOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGxSZXN1bHQgPSBEZWZXaW5kb3dQcm9jMzJBKGhXbmQsIHVNc2csIHdQYXJhbSwgbFBhcmFtKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBsUmVzdWx0OwogfQogCiAKIHN0YXRpYyB2b2lkIFNUQVRJQ19QYWludFRleHRmbiggV05EICp3bmRQdHIsIEhEQzMyIGhkYyApCiB7Ci0gICAgUkVDVDE2IHJjOwotICAgIEhCUlVTSDE2IGhCcnVzaDsKKyAgICBSRUNUMzIgcmM7CisgICAgSEJSVVNIMzIgaEJydXNoOwogICAgIFdPUkQgd0Zvcm1hdDsKIAogICAgIExPTkcgc3R5bGUgPSB3bmRQdHItPmR3U3R5bGU7CiAgICAgU1RBVElDSU5GTyAqaW5mb1B0ciA9IChTVEFUSUNJTkZPICopd25kUHRyLT53RXh0cmE7CiAKLSAgICBHZXRDbGllbnRSZWN0MTYoIHduZFB0ci0+aHduZFNlbGYsICZyYyk7CisgICAgR2V0Q2xpZW50UmVjdDMyKCB3bmRQdHItPmh3bmRTZWxmLCAmcmMpOwogCiAgICAgc3dpdGNoIChzdHlsZSAmIDB4MDAwMDAwMEYpCiAgICAgewpAQCAtMjI1LDQyICsyNDgsNDIgQEAKICAgICBoQnJ1c2ggPSBTZW5kTWVzc2FnZTMyQSggR2V0UGFyZW50MzIod25kUHRyLT5od25kU2VsZiksIFdNX0NUTENPTE9SU1RBVElDLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZGMsIHduZFB0ci0+aHduZFNlbGYgKTsKICAgICBpZiAoIWhCcnVzaCkgaEJydXNoID0gR2V0U3RvY2tPYmplY3QzMihXSElURV9CUlVTSCk7Ci0gICAgRmlsbFJlY3QxNihoZGMsICZyYywgaEJydXNoKTsKLSAgICBpZiAod25kUHRyLT50ZXh0KSBEcmF3VGV4dDE2KCBoZGMsIHduZFB0ci0+dGV4dCwgLTEsICZyYywgd0Zvcm1hdCApOworICAgIEZpbGxSZWN0MzIoIGhkYywgJnJjLCBoQnJ1c2ggKTsKKyAgICBpZiAod25kUHRyLT50ZXh0KSBEcmF3VGV4dDMyQSggaGRjLCB3bmRQdHItPnRleHQsIC0xLCAmcmMsIHdGb3JtYXQgKTsKIH0KIAogc3RhdGljIHZvaWQgU1RBVElDX1BhaW50UmVjdGZuKCBXTkQgKnduZFB0ciwgSERDMzIgaGRjICkKIHsKLSAgICBSRUNUMTYgcmM7CisgICAgUkVDVDMyIHJjOwogICAgIEhCUlVTSDMyIGhCcnVzaDsKIAotICAgIEdldENsaWVudFJlY3QxNiggd25kUHRyLT5od25kU2VsZiwgJnJjKTsKKyAgICBHZXRDbGllbnRSZWN0MzIoIHduZFB0ci0+aHduZFNlbGYsICZyYyk7CiAgICAgCiAgICAgc3dpdGNoICh3bmRQdHItPmR3U3R5bGUgJiAweDBmKQogICAgIHsKICAgICBjYXNlIFNTX0JMQUNLUkVDVDoKIAloQnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNoMzIoY29sb3Jfd2luZG93ZnJhbWUpOwotICAgICAgICBGaWxsUmVjdDE2KCBoZGMsICZyYywgaEJydXNoICk7CisgICAgICAgIEZpbGxSZWN0MzIoIGhkYywgJnJjLCBoQnJ1c2ggKTsKIAlicmVhazsKICAgICBjYXNlIFNTX0dSQVlSRUNUOgogCWhCcnVzaCA9IENyZWF0ZVNvbGlkQnJ1c2gzMihjb2xvcl9iYWNrZ3JvdW5kKTsKLSAgICAgICAgRmlsbFJlY3QxNiggaGRjLCAmcmMsIGhCcnVzaCApOworICAgICAgICBGaWxsUmVjdDMyKCBoZGMsICZyYywgaEJydXNoICk7CiAJYnJlYWs7CiAgICAgY2FzZSBTU19XSElURVJFQ1Q6CiAJaEJydXNoID0gQ3JlYXRlU29saWRCcnVzaDMyKGNvbG9yX3dpbmRvdyk7Ci0gICAgICAgIEZpbGxSZWN0MTYoIGhkYywgJnJjLCBoQnJ1c2ggKTsKKyAgICAgICAgRmlsbFJlY3QzMiggaGRjLCAmcmMsIGhCcnVzaCApOwogCWJyZWFrOwogICAgIGNhc2UgU1NfQkxBQ0tGUkFNRToKIAloQnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNoMzIoY29sb3Jfd2luZG93ZnJhbWUpOwotICAgICAgICBGcmFtZVJlY3QxNiggaGRjLCAmcmMsIGhCcnVzaCApOworICAgICAgICBGcmFtZVJlY3QzMiggaGRjLCAmcmMsIGhCcnVzaCApOwogCWJyZWFrOwogICAgIGNhc2UgU1NfR1JBWUZSQU1FOgogCWhCcnVzaCA9IENyZWF0ZVNvbGlkQnJ1c2gzMihjb2xvcl9iYWNrZ3JvdW5kKTsKLSAgICAgICAgRnJhbWVSZWN0MTYoIGhkYywgJnJjLCBoQnJ1c2ggKTsKKyAgICAgICAgRnJhbWVSZWN0MzIoIGhkYywgJnJjLCBoQnJ1c2ggKTsKIAlicmVhazsKICAgICBjYXNlIFNTX1dISVRFRlJBTUU6CiAJaEJydXNoID0gQ3JlYXRlU29saWRCcnVzaDMyKGNvbG9yX3dpbmRvdyk7Ci0gICAgICAgIEZyYW1lUmVjdDE2KCBoZGMsICZyYywgaEJydXNoICk7CisgICAgICAgIEZyYW1lUmVjdDMyKCBoZGMsICZyYywgaEJydXNoICk7CiAJYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvY29udHJvbHMvd2lkZ2V0cy5jIGIvY29udHJvbHMvd2lkZ2V0cy5jCmluZGV4IDdlZmM3NjUuLjIwZmU1YTUgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL3dpZGdldHMuYworKysgYi9jb250cm9scy93aWRnZXRzLmMKQEAgLTQ4LDggKzQ4LDYgQEAKIAogc3RhdGljIGNvbnN0IEJVSUxUSU5fQ0xBU1NfSU5GTzE2IFdJREdFVFNfQnVpbHRpbkNsYXNzZXMxNltdID0KIHsKLSAgICB7IENTX0dMT0JBTENMQVNTIHwgQ1NfUEFSRU5UREMsCi0gICAgICAgc2l6ZW9mKFNUQVRJQ0lORk8pLCAwLCAiU3RhdGljV25kUHJvYyIsICJTdGF0aWMiIH0sCiAgICAgeyBDU19HTE9CQUxDTEFTUywgc2l6ZW9mKE1ESUNMSUVOVElORk8pLAogICAgICAgU1RPQ0tfTFRHUkFZX0JSVVNILCAiTURJQ2xpZW50V25kUHJvYyIsICJNRElDbGllbnQiIH0KIH07CkBAIC03Nyw4ICs3NSwxMSBAQAogICAgIHsgQ1NfR0xPQkFMQ0xBU1MgfCBDU19EQkxDTEtTIHwgQ1NfU0FWRUJJVFMsCiAgICAgICBDb21ib0xCV25kUHJvYywgMCwgc2l6ZW9mKHZvaWQgKiksIDAsIDAsIElEQ19BUlJPVywgMCwgMCwgIkNvbWJvTEJveCIgfSwKICAgICAvKiBCSUMzMl9QT1BVUE1FTlUgKi8KLSAgICB7IENTX0dMT0JBTENMQVNTIHwgQ1NfU0FWRUJJVFMsIFBvcHVwTWVudVduZFByb2MsCi0gICAgICAwLCBzaXplb2YoSE1FTlUzMiksIDAsIDAsIElEQ19BUlJPVywgTlVMTF9CUlVTSCwgMCwgUE9QVVBNRU5VX0NMQVNTX05BTUUgfSwKKyAgICB7IENTX0dMT0JBTENMQVNTIHwgQ1NfU0FWRUJJVFMsIFBvcHVwTWVudVduZFByb2MsIDAsCisgICAgICBzaXplb2YoSE1FTlUzMiksIDAsIDAsIElEQ19BUlJPVywgTlVMTF9CUlVTSCwgMCwgUE9QVVBNRU5VX0NMQVNTX05BTUUgfSwKKyAgICAvKiBCSUMzMl9TVEFUSUMgKi8KKyAgICB7IENTX0dMT0JBTENMQVNTIHwgQ1NfUEFSRU5UREMsIFN0YXRpY1duZFByb2MsCisgICAgICAwLCBzaXplb2YoU1RBVElDSU5GTyksIDAsIDAsIElEQ19BUlJPVywgMCwgMCwgIlN0YXRpYyIgfSwKICAgICAvKiBCSUMzMl9TQ1JPTEwgKi8KICAgICB7IENTX0dMT0JBTENMQVNTIHwgQ1NfREJMQ0xLUyB8IENTX1ZSRURSQVcgfCBDU19IUkVEUkFXIHwgQ1NfUEFSRU5UREMsCiAgICAgICBTY3JvbGxCYXJXbmRQcm9jLCAwLCBzaXplb2YoU0NST0xMQkFSX0lORk8pLCAwLCAwLCBJRENfQVJST1csIDAsIDAsICJTY3JvbGxCYXIifSwKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vTWFrZWZpbGUuaW4gYi9kb2N1bWVudGF0aW9uL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNmM0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2N1bWVudGF0aW9uL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsMjcgQEAKK1RPUFNSQ0RJUiA9IEB0b3Bfc3JjZGlyQAorVE9QT0JKRElSID0gLi4KK1NSQ0RJUiAgICA9IEBzcmNkaXJACitWUEFUSCAgICAgPSBAc3JjZGlyQAorTU9EVUxFICAgID0gbm9uZQorCitTT1VSQ0VTID0gXAorCXdpbmUudGV4aW5mbyBcCisJJChUT1BTUkNESVIpL0FVVEhPUlMgXAorCSQoVE9QU1JDRElSKS9MSUNFTlNFIFwKKwkkKFRPUFNSQ0RJUikvV0FSUkFOVFkKKworYWxsOiB3aW5lLmluZm8KKworQE1BS0VfUlVMRVNACisKK3dpbmUuaW5mbzogJChTT1VSQ0VTKQorCW1ha2VpbmZvIC1JJChUT1BTUkNESVIpICQoU1JDRElSKS93aW5lLnRleGluZm8KKword2luZS5kdmk6ICQoU09VUkNFUykKKwl0ZXhpMmR2aSAkKFNSQ0RJUikvd2luZS50ZXhpbmZvCisKK2NsZWFuOjoKKwkkKFJNKSB3aW5lLmF1eCB3aW5lLmNwIHdpbmUuY3BzIHdpbmUuZHZpIHdpbmUuZm4gd2luZS5mbnMgd2luZS5pbmZvIFwKKwkJd2luZS5reSB3aW5lLmxvZyB3aW5lLnBnIHdpbmUudG9jIHdpbmUudHAgd2luZS50cHMgd2luZS52cgorCisjIyMgRGVwZW5kZW5jaWVzOgpkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi93aW45NWxvb2sgYi9kb2N1bWVudGF0aW9uL3dpbjk1bG9vawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTdlN2FlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jdW1lbnRhdGlvbi93aW45NWxvb2sKQEAgLTAsMCArMSw1MCBAQAorV2luOTUgaW50ZXJmYWNlIGNvZGUgaXMgYmVpbmcgaW50cm9kdWNlZC4KKworSW5zdGVhZCBvZiBjb21waWxpbmcgV2luZSBmb3IgV2luMy4xIHZzLiBXaW45NSB1c2luZyAjZGVmaW5lIHN3aXRjaGVzLAordGhlIGNvZGUgbm93IGxvb2tzIGluIGEgc3BlY2lhbCBbVHdlYWtzLkxheW91dF0gc2VjdGlvbiBvZiB3aW5lLmNvbmYKK2ZvciBhICJXaW45NUxvb2s9dHJ1ZSIgZW50cnkuCisKK0EgZmV3IG5ldyBzZWN0aW9ucyBhbmQgYSBudW1iZXIgb2YgZW50cmllcyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlCit3aW5lLmNvbmYgZmlsZSAtLSB0aGVzZSBhcmUgZm9yIGRlYnVnZ2luZyB0aGUgV2luOTUgdHdlYWtzIG9ubHkgYW5kIG1heQorYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlISAgVGhlc2UgZW50cmllcy9zZWN0aW9ucyBhcmU6CisKK1tUd2Vhay5Gb250c10KK1N5c3RlbS5IZWlnaHQ9PHBvaW50IHNpemU+ICAgICMgU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBzeXN0ZW0gdHlwZWZhY2UKK1N5c3RlbS5Cb2xkPVt0cnVlfGZhbHNlXSAgICAgICMgV2hldGhlciB0aGUgc3lzdGVtIGZvbnQgc2hvdWxkIGJlIGJvbGRmYWNlZAorU3lzdGVtLkl0YWxpYz1bdHJ1ZXxmYWxzZV0gICAgIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgaXRhbGljaXplZAorU3lzdGVtLlVuZGVybGluZT1bdHJ1ZXxmYWxzZV0gIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgdW5kZXJsaW5lZAorU3lzdGVtLlN0cmlrZU91dD1bdHJ1ZXxmYWxzZV0gIyBXaGV0aGVyIHRoZSBzeXN0ZW0gZm9udCBzaG91bGQgYmUgc3RydWNrIG91dAorT0VNRml4ZWQueHh4ICAgICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBPRU0gZml4ZWQgdHlwZWZhY2UKK0Fuc2lGaXhlZC54eHggICAgICAgICAgICAgICAgICMgU2FtZSBwYXJhbWV0ZXJzIGZvciB0aGUgQW5zaSBmaXhlZCB0eXBlZmFjZQorQW5zaVZhci54eHggICAgICAgICAgICAgICAgICAgIyBTYW1lIHBhcmFtZXRlcnMgZm9yIHRoZSBBbnNpIHZhcmlhYmxlIHR5cGVmYWNlCitTeXN0ZW1GaXhlZC54eHggICAgICAgICAgICAgICAjIFNhbWUgcGFyYW1ldGVycyBmb3IgdGhlIFN5c3RlbSBmaXhlZCB0eXBlZmFjZQorCitbVHdlYWsuTGF5b3V0XQorV2luOTVMb29rPVt0cnVlfGZhbHNlXSAgICAgICAgIyBFbmFibGVzL2Rpc2FibGVzIHRoZSBXaW45NSBsb29rIGFuZCBmZWVsCitNZW51SGVpZ2h0PTxwaXhlbHM+ICAgICAgICAgICAjIFNldHMgdGhlIGhlaWdodCBvZiB0aGUgbWVudSBiYXIKK01lbnVCYXJJdGVtVG9wTnVkZ2U9PHBpeGVscz4gICMgTnVkZ2VzIHRoZSBtZW51IGJhciBpdGVtcyBkb3duL3VwCitNZW51QmFySXRlbUxlZnROdWRnZT08cGl4ZWxzPiAjIE51ZGdlcyB0aGUgbWVudSBiYXIgaXRlbXMgbGVmdC9yaWdodAorTWVudUl0ZW1Ub3BOdWRnZT08cGl4ZWxzPiAgICAgIyBOdWRnZXMgdGhlIG1lbnUgaXRlbXMgZG93bi91cAorTWVudUl0ZW1MZWZ0TnVkZ2U9PHBpeGVscz4gICAgIyBOdWRnZXMgdGhlIG1lbnUgaXRlbXMgbGVmdC9yaWdodAorTWVudUhpZ2hsaWdodFRvcE51ZGdlPTxwaXhlbHM+ICMgTnVkZ2VzIHRoZSB0b3Agb2YgdGhlIGhpZ2hsaWdodCBiYXIKK01lbnVIaWdobGlnaHRMZWZ0TnVkZ2U9PHBpeGVscz4gIyBOdWRnZXMgdGhlIGxlZnQgc2lkZSBvZiB0aGUgaGlnaGxpZ2h0IGJhcgorTWVudUhpZ2hsaWdodFJpZ2h0TnVkZ2U9PHBpeGVscz4gIyBOdWRnZXMgdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGhpZ2hsaWdodCBiYXIKK01lbnVIaWdobGlnaHRCb3R0b21OdWRnZT08cGl4ZWxzPiAjIE51ZGdlcyB0aGUgYm90dG9tIG9mIHRoZSBoaWdobGlnaHQgYmFyCitDYXB0aW9uSGVpZ2h0PTxwaXhlbHM+ICAgICAgICAjIFNldHMgdGhlIGhlaWdodCBvZiB3aW5kb3cgY2FwdGlvbnMKK0NhcHRpb25MZWZ0TnVkZ2U9PHBpeGVscz4gICAgICMgTnVkZ2VzIHRoZSBjYXB0aW9uIHRleHQgb2Ygd2luZG93cyBkb3duL3VwCitDYXB0aW9uVG9wTnVkZ2U9PHBpeGVscz4gICAgICAjIE51ZGdlcyB0aGUgY2FwdGlvbiB0ZXh0IG9mIHdpbmRvd3MgbGVmdC9yaWdodAorQ2FwdGlvbkFsaWdubWVudD1bbGVmdHxyaWdodHxjZW50ZXJdICMgU2V0cyB0aGUgYWxpZ25tZW50IG9mIGNhcHRpb24gdGV4dAorU3lzQ29udHJvbE51ZGdlPTxwaXhlbHM+ICAgICAgIyBOdWRnZXMgdGhlIHN5c3RlbSBtZW51IGxlZnQvcmlnaHQKK01heENvbnRyb2xOdWRnZT08cGl4ZWxzPiAgICAgICMgTnVkZ2VzIHRoZSBtYXhpbWl6ZSBjb250cm9sIGxlZnQvcmlnaHQKK01pbkNvbnRyb2xOdWRnZT08cGl4ZWxzPiAgICAgICMgTnVkZ2VzIHRoZSBtaW5pbWl6ZSBjb250cm9sIGxlZnQvcmlnaHQKK1Njcm9sbEJhcldpZHRoPTxwaXhlbHM+ICAgICAgICMgU2V0cyBzY3JvbGwgYmFyIHNpemVzCitEaWFsb2dGcmFtZVdpZHRoPTxwaXhlbHM+ICAgICAjIFNldHMgdGhlIGZyYW1lIHdpZHRoIG9mIGRpYWxvZyBib3hlcworCitbVHdlYWsuQ29sb3JzXQorUGVuRkY5NS5SZWQ9PDAtMjU1PiAgICAgICAgICAgIyBTZXRzIHRoZSByZWQgdmFsdWUgb2YgdGhlIFdpbjk1IHdoaXRlIHBlbgorUGVuRkY5NS5Hcm49PDAtMjU1PiAgICAgICAgICAgIyBTZXRzIHRoZSBncmVlbiB2YWx1ZSBvZiB0aGUgV2luOTUgd2hpdGUgcGVuCitQZW5GRjk1LkJsdT08MC0yNTU+ICAgICAgICAgICAjIFNldHMgdGhlIGJsdWUgdmFsdWUgb2YgdGhlIFdpbjk1IHdoaXRlIHBlbgorUGVuRTA5NS54eHggICAgICAgICAgICAgICAgICAgIyBTZXRzIHRoZSBSR0IgdmFsdWVzIG9mIHRoZSBXaW45NSBncmV5LTg4IHBlbgorUGVuQzA5NS54eHggICAgICAgICAgICAgICAgICAgIyBTZXRzIHRoZSBSR0IgdmFsdWVzIG9mIHRoZSBXaW45NSBncmV5LTc1IHBlbgorUGVuODA5NS54eHggICAgICAgICAgICAgICAgICAgIyBTZXRzIHRoZSBSR0IgdmFsdWVzIG9mIHRoZSBXaW45NSBncmV5LTUwIHBlbgorUGVuMDA5NS54eHggICAgICAgICAgICAgICAgICAgIyBTZXRzIHRoZSBSR0IgdmFsdWVzIG9mIHRoZSBXaW45NSBibGFjayBwZW4KZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vd2luZS50ZXhpbmZvIGIvZG9jdW1lbnRhdGlvbi93aW5lLnRleGluZm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5OWNmMwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3VtZW50YXRpb24vd2luZS50ZXhpbmZvCkBAIC0wLDAgKzEsNzgwIEBACitcaW5wdXQgdGV4aW5mbyAgIEBjIC0qLXRleGluZm8tKi0KK0BjICUqKnN0YXJ0IG9mIGhlYWRlcgorQHNldGZpbGVuYW1lIHdpbmUuaW5mbworQHNldHRpdGxlIFdpbmUgUmVmZXJlbmNlIE1hbnVhbAorQGlmdGV4CitAYWZvdXJwYXBlcgorQGVuZCBpZnRleAorQGMgJSoqZW5kIG9mIGhlYWRlcgorCitAaWZpbmZvCitAZm9ybWF0CitTVEFSVC1JTkZPLURJUi1FTlRSWQorKiB3aW5lOiAod2luZS5pbmZvKS4gICAgICAgICAgICAgVGhlIFdpbmRvd3MgRW11bGF0b3IuCitFTkQtSU5GTy1ESVItRU5UUlkKK0BlbmQgZm9ybWF0CitAZW5kIGlmaW5mbworCitAaWZ0ZXgKK0BjIEBmaW5hbG91dAorQGVuZCBpZnRleAorCitAaWZpbmZvCitUaGlzIGZpbGUgZG9jdW1lbnRzIFdpbmUsIHRoZSBXaW5kb3dzIEVtdWxhdG9yLgorCitAYyAKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMTk5NyBUaGUgV2luZSBhdXRob3JzLiBAKgorQHhyZWZ7QXV0aG9yc30sIGZvciBhIGxpc3Qgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbQorY29waWVzIG9mIHRoaXMgbWFudWFsIHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZAordGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcmUgcHJlc2VydmVkIG9uIGFsbCBjb3BpZXMuCisKK0BpZ25vcmUKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBwcm9jZXNzIHRoaXMgZmlsZSB0aHJvdWdoIFRlWAorYW5kIHByaW50IHRoZSByZXN1bHRzLCBwcm92aWRlZCB0aGUgcHJpbnRlZCBkb2N1bWVudAorY2FycmllcyBhIGNvcHlpbmcgcGVybWlzc2lvbiBub3RpY2UgaWRlbnRpY2FsIHRvIHRoaXMKK29uZSBleGNlcHQgZm9yIHRoZSByZW1vdmFsIG9mIHRoaXMgcGFyYWdyYXBoICh0aGlzCitwYXJhZ3JhcGggbm90IGJlaW5nIHJlbGV2YW50IHRvIHRoZSBwcmludGVkIG1hbnVhbCkuCisKK0BlbmQgaWdub3JlCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZAordmVyc2lvbnMgb2YgdGhpcyBtYW51YWwgdW5kZXIgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluCit0aGUgc2VjdGlvbiBlbnRpdGxlZCBgYExpY2Vuc2UsIFdhcnJhbnR5LCBhbmQgQXV0aG9ycyBvZiBXaW5lJycuCisKK0BzcCA0CitGSVhNRTogVU5JWCBhbmQgUE9TSVggdHJhZGVtYXJrcy4gQCoKK01TLVdpbmRvd3MsIFdpbmRvd3MtTlQsIFdpbmRvd3MgOTUgYXJlIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZgorTWljcm9zb2Z0IENvcnAuIFBvc3RzY3JpcHQgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBBZG9iZSBTeXN0ZW1zCitJbmMuIEFsbCBvdGhlciBwcm9kdWN0IG5hbWVzIG1lbnRpb25lZCBoZXJlaW4gYXJlIHRoZSB0cmFkZW1hcmtzIG9mCit0aGVpciByZXNwZWN0aXZlIG93bmVycy4KK0BlbmQgaWZpbmZvCisKK0BjIGJlZ2luIGNoYXB0ZXJzIG9uIHJpZ2h0IHBhZ2VzCitAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2RkCisKK0B0aXRsZXBhZ2UKK0BzcCAxMAorCitAY2VudGVyIEB0aXRsZWZvbnR7VGhlIFdpbmUgUmVmZXJlbmNlIE1hbnVhbH0KK0BjZW50ZXIgRWRpdGlvbiAwLjAuMSwgNiBKdWx5IDE5OTcKKworCitAYyBUaGUgZm9sbG93aW5nIHR3byBjb21tYW5kcyBzdGFydCB0aGUgY29weXJpZ2h0IHBhZ2UuCitAcGFnZQorQHZza2lwIDBwdCBwbHVzIDFmaWxsbAorCitDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDE5OTcgVGhlIFdpbmUgYXV0aG9ycy4gQCoKK0B4cmVme0F1dGhvcnN9LCBmb3IgYSBsaXN0IG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0KK2NvcGllcyBvZiB0aGlzIG1hbnVhbCBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQKK3RoaXMgcGVybWlzc2lvbiBub3RpY2UgYXJlIHByZXNlcnZlZCBvbiBhbGwgY29waWVzLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZAordmVyc2lvbnMgb2YgdGhpcyBtYW51YWwgdW5kZXIgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluCit0aGUgc2VjdGlvbiBlbnRpdGxlZCBgYExpY2Vuc2UsIFdhcnJhbnR5LCBhbmQgQXV0aG9ycyBvZiBXaW5lJycuCisKK0BzcCA0CitGSVhNRTogVU5JWCBhbmQgUE9TSVggdHJhZGVtYXJrcy4gQCoKK01TLVdpbmRvd3MsIFdpbmRvd3MtTlQsIFdpbmRvd3MgOTUgYXJlIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZgorTWljcm9zb2Z0IENvcnAuIFBvc3RzY3JpcHQgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBBZG9iZSBTeXN0ZW1zCitJbmMuIEFsbCBvdGhlciBwcm9kdWN0IG5hbWVzIG1lbnRpb25lZCBoZXJlaW4gYXJlIHRoZSB0cmFkZW1hcmtzIG9mCit0aGVpciByZXNwZWN0aXZlIG93bmVycy4KK0BlbmQgdGl0bGVwYWdlCisKKworCitAYworQGMgU0VUVElOR1MsIERFRklORVMsIE1BQ1JPUworQGMKKworQGMgRWRpdCB0aGlzIG1hY3JvIG1hbnVhbGx5IGluIHRoZSBhYm92ZSBwYXJ0cyBvZiB0aGUgZG9jdW1lbnQKK0BtYWNybyB3aW5lbWFudWFsdmVyc2lvbgorMC4wLjEKK0BlbmQgbWFjcm8KKworQGMgRWRpdCB0aGlzIG1hY3JvIG1hbnVhbGx5IGluIHRoZSBhYm92ZSBwYXJ0cyBvZiB0aGUgZG9jdW1lbnQKK0BtYWNybyB3aW5lbWFudWFsZGF0ZQorNiBKdWx5IDE5OTcKK0BlbmQgbWFjcm8KKworQGMgRWRpdCB0aGlzIG1hY3JvIG1hbnVhbGx5IGludG8gdGhlIFRlWCB0aXRsZXBhZ2UKK0BtYWNybyB3aW5lbWFudWFsdGl0bGUge30KK1RoZSBXaW5lIFJlZmVyZW5jZSBNYW51YWwKK0BlbmQgbWFjcm8KKworQGMKK0BjIE1JQ1JPU09GVAorQGMKKworQGMgRklYTUU6IGF1dG9tYXRpY2FsIHRyYWRlbWFyayByZWZlcmVuY2UKK0BtYWNybyBtc3dpbmRvd3MKK01TLVdpbmRvd3MKK0BlbmQgbWFjcm8KKworQGMgRklYTUU6IGF1dG9tYXRpY2FsIHRyYWRlbWFyayByZWZlcmVuY2UKK0BjIHNwZWxsIGl0IGFsd2F5cyB0aGUgc2FtZQorQG1hY3JvIFdJTjMyCitXSU4zMgorQGVuZCBtYWNybworCitAYyBGSVhNRTogYXV0b21hdGljYWwgdHJhZGVtYXJrIHJlZmVyZW5jZQorQG1hY3JvIFdJTk5UCitXaW5kb3dzIE5UCitAZW5kIG1hY3JvCisKK0BjIEZJWE1FOiBhdXRvbWF0aWNhbCB0cmFkZW1hcmsgcmVmZXJlbmNlCitAbWFjcm8gV0lOOTUKK1dpbmRvd3MgOTUKK0BlbmQgbWFjcm8KKworCitAYworQGMgVEhFIE9USEVSUworQGMKK0BjIEZJWE1FOiBhdXRvbWF0aWNhbCB0cmFkZW1hcmsgcmVmZXJlbmNlCitAbWFjcm8gdW5peAorVU5JWAorQGVuZCBtYWNybworCitAYyBGSVhNRTogYXV0b21hdGljYWwgdHJhZGVtYXJrIHJlZmVyZW5jZQorQG1hY3JvIHBvc2l4CitQT1NJWAorQGVuZCBtYWNybworQGMKK0BjIFRISVMgTUFOVUFMCitAYworCitAYyBmbGFnIG91dCBkaWZmZXJlbmNlcyB0byBNUy1XaW5kb3dzCitAbWFjcm8gd2luZGlmZgorQGVtcGh7RGlmZmVyZW5jZXMgdG8gQG1zd2luZG93c3t9On0gQCoKK0BlbmQgbWFjcm8KKworQG1hY3JvIHdpbmRpZmZub25lCitAd2luZGlmZnt9CitObyBkaWZmZXJlbmNlcyBrbm93bi4KK0BlbmQgbWFjcm8KKworQGMgdGVsbCB3aGV0aGVyIGZ1bmN0aW9uIGlzIHByZXNlbnQgaW4gV2luZG93cyA5NSBhbmQvb3IgTlQKK0BtYWNybyB3aW5jb25mCitAZW1waHtDb25mb3JtYW5jZSB0byBAbXN3aW5kb3dze306fSBAKgorQGVuZCBtYWNybworCitAbWFjcm8gd2luY29uZmFsbAorQHdpbmNvbmZ7fQorUHJlc2VudCBpbiBAV0lOOTV7fSBhbmQgQFdJTk5Ue30uCitAZW5kIG1hY3JvCisKK0BjIGdpdmUgaW5mb3JtYXRpb24gYWJvdXQgY29tcGxldGlvbgorQG1hY3JvIGNvbXBsZXRpb24KK0BlbXBoe0NvbXBsZXRpb24gc3RhdHVzOn0gQCoKK0BlbmQgbWFjcm8KKworQG1hY3JvIGNvbXBsZXRpb25ub25lCitAY29tcGxldGlvbnt9CitOb3QgeWV0IGltcGxlbWVudGVkLgorQGVuZCBtYWNybworCisKKworCisKKworCitAYworQGMgVE9QIE5PREUKK0BjCitAaWZpbmZvCitAbm9kZSBUb3AsIENvcHlpbmcsIChkaXIpLCAoZGlyKQorQHRvcCBXaW5lCisKK1RoaXMgaXMgZWRpdGlvbiBAd2luZW1hbnVhbHZlcnNpb257fSwgbGFzdCB1cGRhdGVkIEB3aW5lbWFudWFsZGF0ZXt9LAorb2YgQHdpbmVtYW51YWx0aXRsZXt9LgorCitXaW5lIChXaW5lIElzIE5vdCBhbiBFbXVsYXRvciwgb3IgdGhlIFdJTmRvd3MgRW11bGF0b3IpCitpcyBib3RoIGFuIGVtdWxhdG9yIHRoYXQgcnVucyBAbXN3aW5kb3dze30gZXhlY3V0YWJsZXMgYW5kIGEgbGlicmFyeQordGhhdCBjYW4gYmUgdXNlZCB0byBjb21waWxlIEBtc3dpbmRvd3N7fSBzb3VyY2UgY29kZS4KKworV2luZSBpcyBmcmVlIHNvZnR3YXJlLiBXaW5lIGlzIHN0aWxsIGluIGRldmVsb3BtZW50LW9ubHkgc3RhdGUuCitAZW5kIGlmaW5mbworCitAbWVudQorKiBDb3B5aW5nOjogICAgICAgICAgICAgICAgICAgICBMaWNlbnNlLCBXYXJyYW50eSwgYW5kIEF1dGhvcnMgb2YgV2luZS4KKyogSW50cm9kdWN0aW9uOjogICAgICAgICAgICAgICAgQSBzaG9ydCBvdmVydmlldy4KKyogUmVmZXJlbmNlIE1hbnVhbDo6ICAgICAgICAgICAgVGhlIFdpbmUgcmVmZXJlbmNlIG1hbnVhbC4KKyogSW5zdGFsbGF0aW9uOjogICAgICAgICAgICAgICAgSW5zdGFsbGluZyBXaW5lLgorKiBUaGUgV2luZSBQcm9qZWN0OjogICAgICAgICAgICBIb3cgdG8gY29udHJpYnV0ZSB0byBXaW5lLgorKiBDb25jZXB0IEluZGV4OjogICAgICAgICAgICAgICBJbmRleCBvZiBjb25jZXB0cyBhbmQgbmFtZXMuCisqIFR5cGUgSW5kZXg6OiAgICAgICAgICAgICAgICAgIEluZGV4IG9mIHR5cGVzIGFuZCB0eXBlIHF1YWxpZmllcnMuCisqIEZ1bmN0aW9uIEluZGV4OjogICAgICAgICAgICAgIEluZGV4IG9mIGZ1bmN0aW9ucyBhbmQgZnVuY3Rpb24tbGlrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyb3MuCisqIFZhcmlhYmxlIEluZGV4OjogICAgICAgICAgICAgIEluZGV4IG9mIHZhcmlhYmxlcyBhbmQgdmFyaWFibGUtbGlrZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyb3MuCisqIEZpbGUgSW5kZXg6OiAgICAgICAgICAgICAgICAgIEluZGV4IG9mIHByb2dyYW1zIGFuZCBmaWxlcy4KK0BlbmQgbWVudQorCitAbm9kZSBDb3B5aW5nLCBJbnRyb2R1Y3Rpb24sIFRvcCwgVG9wCisKK0B1bm51bWJlcmVkIExpY2Vuc2UsIFdhcnJhbnR5LCBhbmQgQXV0aG9ycyBvZiBXaW5lLgorQGNpbmRleCBjb3B5aW5nIGNvbmRpdGlvbnMgZm9yIFdpbmUKK0BjaW5kZXggY29uZGl0aW9ucyBmb3IgY29weWluZyBXaW5lCitAY2luZGV4IFdpbmUgY29weWluZyBjb25kaXRpb25zCisKK1RoZSBXaW5lIGxpY2Vuc2UsIHdhcnJhbnR5LCBhbmQgbGlzdCBvZiBhdXRob3JzIHRvZ2V0aGVyIGZvcm0gdGhlCitjb3B5cmlnaHQgZm9yIFdpbmUuIFJlYWQgdGhlc2Ugc2VjdGlvbnMgY2FyZWZ1bGx5LgorCitAbWVudQorKiBMaWNlbnNlOjogICAgICAgICAgICAgICAgICAgICBUaGUgV2luZSBsaWNlbnNlLgorKiBXYXJyYW50eTo6ICAgICAgICAgICAgICAgICAgICBXaW5lIGNvbWVzIHdpdGggbm8gd2FycmFudHkuCisqIEF1dGhvcnM6OiAgICAgICAgICAgICAgICAgICAgIFRoZSBwZXJzb25zIHRoYXQgY29udHJpYnV0ZWQgdG8gV2luZS4KK0BlbmQgbWVudQorCitAbm9kZSBMaWNlbnNlLCBXYXJyYW50eSwgLCBDb3B5aW5nCitAY2luZGV4IFdpbmUgbGljZW5zZQorQGNpbmRleCBsaWNlbnNlIG9mIFdpbmUKKworQHVubnVtYmVyZWRzZWMgVGhlIFdpbmUgTGljZW5zZQorV2luZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4KKworQHF1b3RhdGlvbgorQGluY2x1ZGUgTElDRU5TRQorQGVuZCBxdW90YXRpb24KKworQG5vZGUgV2FycmFudHksIEF1dGhvcnMsIExpY2Vuc2UsIENvcHlpbmcKK0BjaW5kZXggV2luZSB3YXJyYW50eQorQGNpbmRleCB3YXJyYW50eSBvZiBXaW5lCisKK0B1bm51bWJlcmVkc2VjIFRoZSBXaW5lIFdhcnJhbnR5CisKK0BxdW90YXRpb24KK0BpbmNsdWRlIFdBUlJBTlRZCitAZW5kIHF1b3RhdGlvbgorCitAbm9kZSBBdXRob3JzLCAsIFdhcnJhbnR5LCBDb3B5aW5nCitAY2luZGV4IFdpbmUgYXV0aG9ycworQGNpbmRleCBhdXRob3JzIG9mIFdpbmUKK0BjaW5kZXggY29weXJpZ2h0IGhvbGRlcnMgb2YgV2luZQorQGNpbmRleCBXaW5lIGNvcHlyaWdodCBob2xkZXJzCisKK0B1bm51bWJlcmVkc2VjIFRoZSBXaW5lIEF1dGhvcnMKKworQHF1b3RhdGlvbgorQGluY2x1ZGUgQVVUSE9SUworQGVuZCBxdW90YXRpb24KKworVGhlc2UgcGVyc29ucyBhbHNvIGhvbGQgdGhlIGNvcHlyaWdodCBvbiBXaW5lLgorCitUaGUgb3ZlcmFsbCBjb29yZGluYXRpb24gaXMgZG9uZSBieSBAKgorQWxleGFuZHJlIEp1bGxpYXJkIEAqCitAZW1haWx7anVsbGlhcmRAQGxyYy5lcGZsLmNofQorCisKKworQG5vZGUgSW50cm9kdWN0aW9uLCBSZWZlcmVuY2UgTWFudWFsLCBDb3B5aW5nLCBUb3AKK0BjaGFwdGVyIEludHJvZHVjdGlvbgorCitGSVhNRTogU29tZWJvZHkgc2hvdWxkIHNheSBzb21lIHNvbGVtbiB3b3Jkcy4KKworQHhyZWZ7VGhlIFdpbmUgUHJvamVjdH0sIGlmIHlvdSBjb25zaWRlciBjb250cmlidXRpbmcgc29tZSB3b3JrLgorCisKK0Bub2RlIFJlZmVyZW5jZSBNYW51YWwsIEluc3RhbGxhdGlvbiwgSW50cm9kdWN0aW9uLCBUb3AKKworQG1lbnUKKyogQFdJTjMye30gUmVmZXJlbmNlIE1hbnVhbDo6ICAgICAgVGhlIEBXSU4zMnt9IGZ1bmN0aW9uIGNhbGxzIGFuZCBkYXRhIHR5cGVzLgorKiBSZXNvdXJjZXMgYW5kIElOSSBmaWxlczo6ICAgICBIb3cgdG8gZGV0ZXJtaW5lIHRoZSBhcHBlYXJhbmNlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWhhdmlvdXIgb2YgV2luZSBwcm9ncmFtcy4KKyogTWV0YWZpbGVzLS1JY29ucy0tQml0bWFwczo6ICAgICBGSVhNRSBtaXNzaW5nLgorKiBEZWJ1Z2dpbmc6OiAgICAgICAgICAgICAgICAgICBEZWJ1Z2dpbmcgV2luZS4KKyogUHJvZ3JhbXM6OiAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbXMgd3JpdHRlbiB0byBydW4gaW4vd2l0aCBXaW5lLgorKiBUb29sczo6ICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtcyB0byBzdXBwb3J0IFdpbmUuCitAZW5kIG1lbnUKKworQG5vZGUgQFdJTjMye30gUmVmZXJlbmNlIE1hbnVhbCwgUmVzb3VyY2VzIGFuZCBJTkkgZmlsZXMsICwgUmVmZXJlbmNlIE1hbnVhbAorQGNoYXB0ZXIgVGhlIEBXSU4zMnt9IFJlZmVyZW5jZSBNYW51YWwKKworQG1lbnUKKyogS2VybmVsIE9iamVjdHM6OiAgICAgICAgICAgICAgSG93IHRoZSBXaW5lIGtlcm5lbCBrZWVwcyBpbmZvcm1hdGlvbi4KKyogUHJvY2Vzc2VzIGFuZCBUaHJlYWRzOjogICAgICAgSm9iIGNvbnRyb2wgYW5kIG1hbmFnZW1lbnQgaW4gV2luZS4KKyogVXNlcnMgYW5kIEdyb3Vwczo6ICAgICAgICAgICAgU2VjdXJpdHkgaW4gV2luZS4KKyogRGF0ZSBhbmQgVGltZTo6ICAgICAgICAgICAgICAgRnVuY3Rpb25zIGZvciBnZXR0aW5nIHRoZSBkYXRlIGFuZCB0aW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBmb3IgY29udmVyc2lvbiBiZXR3ZWVuIGZvcm1hdHMuCisqIFN5c3RlbSBJbmZvcm1hdGlvbjo6ICAgICAgICAgIEdldHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhcmR3YXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzb2Z0d2FyZSB0aGUgc3lzdGVtIHJ1bnMgb24uCisqIE1lbW9yeSBNYW5hZ2VtZW50OjogICAgICAgICAgIEhvdyB5b3VyIHByb2dyYW1zIGdldCBtZW1vcnkgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaW5lLgorKiBJL08gRmFjaWxpdGllczo6ICAgICAgICAgICAgICBJbnB1dC9PdXRwdXQgaW4gV2luZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmV2ZXJ5dGhpbmcgZXhjZXB0IGNvbW11bmljYXRpb24gYW5kIHdpbmRvd3MKKyogQ29tbXVuaWNhdGlvbjo6ICAgICAgICAgICAgICAgSG93IHByb2Nlc3NlcyBjYW4gY29tbXVuaWNhdGUuCisqIFdpbmRvd3MgYW5kIEdyYXBoaWNzOjogICAgICAgIEdVSSBmdW5jdGlvbnMgb2YgQFdJTjMye30uCisqIEVycm9ycyBhbmQgRXhjZXB0aW9uczo6ICAgICAgIEhvdyB5b3VyIHByb2dyYW0gY2FuIHJlcG9ydCBlcnJvcnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gbWVzc2FnaW5nCisqIFJlc291cmNlczo6ICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoIHJlc291cmNlcy4KKyogVGhlIFJlZ2lzdHJ5OjogICAgICAgICAgICAgICAgRklYTUUgbWlzc2luZy4KKyogRHluYW1pYyBMaW5rIExpYnJhcmllczo6ICAgICAgRnVuY3Rpb25zIGZvciBkZWFsaW5nIHdpdGggRExMJ3MuCitAZW5kIG1lbnUKKworQG5vZGUgS2VybmVsIE9iamVjdHMsIFByb2Nlc3NlcyBhbmQgVGhyZWFkcywgLCBAV0lOMzJ7fSBSZWZlcmVuY2UgTWFudWFsCitAc2VjdGlvbiBLZXJuZWwgT2JqZWN0cworCisKK0Bub2RlIFByb2Nlc3NlcyBhbmQgVGhyZWFkcywgVXNlcnMgYW5kIEdyb3VwcywgS2VybmVsIE9iamVjdHMsIEBXSU4zMnt9IFJlZmVyZW5jZSBNYW51YWwKK0BzZWN0aW9uIFByb2Nlc3NlcyBhbmQgVGhyZWFkcworCitAbm9kZSBVc2VycyBhbmQgR3JvdXBzLCBEYXRlIGFuZCBUaW1lLCBQcm9jZXNzZXMgYW5kIFRocmVhZHMsIEBXSU4zMnt9IFJlZmVyZW5jZSBNYW51YWwKK0BzZWN0aW9uIFVzZXJzIGFuZCBHcm91cHMKKworQG5vZGUgRGF0ZSBhbmQgVGltZSwgU3lzdGVtIEluZm9ybWF0aW9uLCBVc2VycyBhbmQgR3JvdXBzLCBAV0lOMzJ7fSBSZWZlcmVuY2UgTWFudWFsCitAc2VjdGlvbiBEYXRlIGFuZCBUaW1lCisKK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgZGF0ZXMgYW5kIHRpbWVzLiBUaGlzCitpbmNsdWRlcyB0aGUgY3VycmVudCB0aW1lLCB0aGUgY3JlYXRpb24gb3IgbWFuaXB1bGF0aW9uIHRpbWVzIG9mIGZpbGVzCithbmQgb3RoZXIgb2JqZWN0cywgYW5kIGNvbnZlcnNpb24gYmV0d2VlbiBkaWZmZXJlbnQgdGltZQorcmVwcmVzZW50YXRpb25zLgorCitAbWVudQorKiBGaWxlIFRpbWVzOjogICAgICAgICAgICAgICAgICBDcmVhdGlvbiBhbmQgbWFuaXB1bGF0aW9uIHRpbWVzIG9mIGZpbGVzLgorQGVuZCBtZW51CisKK0Bub2RlIEZpbGUgVGltZXMsICwgLCBEYXRlIGFuZCBUaW1lCitAc3Vic2VjdGlvbiBGaWxlIFRpbWVzCisKK0BtZW51CisqIFR5cGUgRklMRVRJTUU6OiAgICAgICAgICAgICAgIFRoZSBkYXRhIHN0cnVjdHVyZSB1c2VkIGZvciBzcGVjaWZ5aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgdGltZXMuCisqIENvbXBhcmUgRmlsZSBUaW1lczo6ICAgICAgICAgIENvbXBhcmUgdHdvIGZpbGUgdGltZXMuCisqIEdldCBGaWxlIFRpbWVzOjogICAgICAgICAgICAgIEdldCB0aGUgdGltZSBhdHRyaWJ1dGVzIG9mIGEgZmlsZS4KK0BlbmQgbWVudQorCitAYworQGMgKioqIHN0cnVjdCBGSUxFVElNRSAqKioKK0BjCitAbm9kZSBUeXBlIEZJTEVUSU1FLCBDb21wYXJlIEZpbGUgVGltZXMsICwgRmlsZSBUaW1lcworCitAbm9pbmRlbnQKK0ZpbGUgdGltZXMgaW4gV2luZSBhcmUgc3BlY2lmaWVkIGJ5IHRoZSBkYXRhIHR5cGUgQGNvZGV7RklMRVRJTUV9LAorZGVmaW5lZCBpbiBAZmlsZXt3aW5kb3dzLmh9LgorCitAZGVmdHAge0RhdGEgdHlwZX0gRklMRVRJTUUKK1RoaXMgaXMgdGhlIGRhdGEgdHlwZSBmb3Igc3BlY2lmeWluZyBmaWxlIHRpbWVzLiBUaGUgZmlsZSB0aW1lcyBhcmUKK3N0b3JlZCB3aXRoIDY0IGJpdCBwcmVjaXNpb24uIFRoZSBhY3R1YWwgZGF0YSB0eXBlIGlzIGEgc3RydWN0dXJlIHdpdGgKK3R3byAzMiBiaXQgdmFsdWVzIHdoaWNoIGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgbG93IGFuZCBoaWdoIHBhcnRzIG9mIGEKKzY0LWJpdCB2YWx1ZS4gVGhpcyB2YWx1ZSBnaXZlcyBhIHRpbWUgbWVhc3VyZWQgaW4gYSBncmFudWxhcml0eSBvZiAxMDAKK25hbm9zZWNvbmRzLCBzbyAxLjUgc2Vjb25kcyBhcmUgc3BlY2lmaWVkIGJ5IGEgdmFsdWUgb2YgMTUsMDAwLDAwMC4gIEluCitXaW5lLCB0aGlzIDY0LWJpdCB2YWx1ZSBpcyBzaWduZWQsIHdpdGggdGhlIHNpZ24gdGFrZW4gZnJvbSB0aGUgaGlnaAorcGFydC4gVGhlIGxvd2VyIHBhcnQgaXMgdXNlZCBhcyB1bnNpZ25lZC4KKworVGhlIGRlZmluaXRpb24gb2YgQGNvZGV7RklMRVRJTUV9IHJlYWRzOgorQGV4YW1wbGUKK3R5cGVkZWYgc3RydWN0IF9GSUxFVElNRQorQHsKKyAgICBJTlQzMiBkd0xvd0RhdGVUaW1lOworICAgIElOVDMyIGR3SGlnaERhdGVUaW1lOworQH0gRklMRVRJTUU7CitAZW5kIGV4YW1wbGUKKworQGNpbmRleCBlcG9jaCBpbiBmaWxlIHRpbWUKK1RoZSBAY29kZXtGSUxFVElNRX0gc3RydWN0dXJlIG1heSBiZSB1c2VkIHRvIGhvbGQgYWJzb2x1dGUgb3IgcmVsYXRpdmUKK3RpbWVzLiBBYnNvbHV0ZSB0aW1lcyBhcmUgZ2l2ZW4gYXMgdGhlIG51bWJlciBvZiAxMDAgbmFub3NlY29uZHMKK2ludGVydmFscyBlbGFwc2VkIHNpbmNlIDEgSmFudWFyeSAxNjAxLCAwMDowMDowMCBVVEMgKENvb3JkaW5hdGVkCitVbml2ZXJzYWwgVGltZSwgd2hpY2ggaXMgR01ULCBHcmVlbndpY2ggTWVhbiBUaW1lKS4gVGhpcyBtaWdodCBiZQorY2FsbGVkIHRoZSBAZGZue2Vwb2NofSBmb3IgZmlsZSB0aW1lcy4gV2l0aCBhIHNpZ25lZCA2NC1iaXQgdmFsdWUsIHRoaXMKK3JlcHJlc2VudGF0aW9uIGNvdmVycyBhYnNvbHV0ZSB0aW1lcyBvZiAyOTI0NyB5ZWFycyBhcm91bmQgdGhlIGVwb2NoLgorCitAd2luZGlmZnt9CitJbiBAbXN3aW5kb3dze30sIHRoZSBlbGVtZW50cyBvZiB0aGUgc3RydWN0dXJlIGFyZSBhcHBhcmVudGx5IG9mIHR5cGUKK0Bjb2Rle0RXT1JEfS4gV2hldGhlciB0aGUgZnVsbCA2NCBiaXQgdmFsdWUgaXMgaW50ZXJwcmV0ZWQgYXMgc2lnbmVkIG9yCit1bnNpZ25lZCBJIGRvIG5vdCBrbm93LgorQGVuZCBkZWZ0cAorCitAYworQGMgKioqIENvbXBhcmVGaWxlVGltZSAqKioKK0BjCitAbm9kZSBDb21wYXJlIEZpbGUgVGltZXMsIEdldCBGaWxlIFRpbWVzLCBUeXBlIEZJTEVUSU1FLCBGaWxlIFRpbWVzCisKK0Bub2luZGVudAorVGhlIFdpbmUgZnVuY3Rpb24gQGNvZGV7Q29tcGFyZUZpbGVUaW1lfSBjb21wYXJlcyB0d28gZmlsZSB0aW1lcywgYW5kCityZXR1cm5zIHdoZXRoZXIgdGhlIGZpcnN0IHRpbWUgaXMgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuCit0aGUgc2Vjb25kIGZpbGUgdGltZS4gSXQgaXMgZGVmaW5lZCBpbiBAZmlsZXt3aW5kb3dzLmh9LgorCitAZGVmdHlwZWZuIHtXSU4zMiBmdW5jdGlvbn0gTE9ORyBDb21wYXJlRmlsZVRpbWUgKEB3e0NPTlNUIEZJTEVUSU1FKiBAdmFye3RpbWVfMX0sfSBAd3tDT05TVCBGSUxFVElNRSogQHZhcnt0aW1lXzJ9KX0KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyBAY29kZXsxfSwgaWYgQHZhcnt0aW1lXzF9IGlzIGdyZWF0ZXIgdGhhbgorQHZhcnt0aW1lXzJ9LCBAY29kZXstMX0gaWYgaXQgaXMgbGVzcywgYW5kIEBjb2RlezB9IGlmIGJvdGggdGltZXMgYXJlCitlcXVhbC4gCisKK0B3aW5jb25mYWxse30KKworQHdpbmRpZmZub25le30KKworQGNvbXBsZXRpb25ub25le30KK0BlbmQgZGVmdHlwZWZuCisKK0BjCitAYyAqKipHZXRGaWxlVGltZSAqKioKK0BjCitAbm9kZSBHZXQgRmlsZSBUaW1lcywgLCBDb21wYXJlIEZpbGUgVGltZXMsIEZpbGUgVGltZXMKK0Bub2luZGVudAorRklYTUU6IG1vdmUgdGhpcyBmdW5jdGlvbiB0byB0aGUgZmlsZSBJTyBzZWN0aW9uLiBAKgorVGhlIFdpbmUgZnVuY3Rpb24gQGNvZGV7R2V0RmlsZVRpbWV9IHJldHVybnMgdGhlIGNyZWF0aW9uIHRpbWUgYW5kCit0aGUgdGltZXMgb2YgbGFzdCB0aGUgcmVhZCBhbmQgbW9kaWZpY2F0aW9uIGFjY2VzcyB0byBhIGZpbGUuIEl0IGlzCitkZWZpbmVkIGluIEBmaWxle3dpbmRvd3MuaH0uCisKK0BkZWZ0eXBlZm4ge1dJTjMyIGZ1bmN0aW9ufSBCT09MIEdldEZpbGVUaW1lIChAd3tIQU5ETEUgQHZhcntmaWxlfSx9IEB3e0xQRklMRVRJTUUgQHZhcntjdGltZX0sfSBAd3tMUEZJTEVUSU1FIEB2YXJ7YXRpbWV9LH0gQHd7TFBGSUxFVElNRSBAdmFye210aW1lfSl9CitUaGlzIGZ1bmN0aW9uIG9idGFpbnMgZm9yIHRoZSBzcGVjaWZpZWQgQHZhcntmaWxlfSB0aGUgY3JlYXRpb24gdGltZQorQHZhcntjdGltZX0sIHRoZSB0aW1lIG9mIHRoZSBsYXN0IGFjY2VzcyB0byB0aGUgZmlsZSBAdmFye2F0aW1lfSwgYW5kCit0aGUgdGltZSBvZiB0aGUgbGFzdCBtb2RpZmljYXRpb24gKHdyaXRlKSB0byB0aGUgZmlsZSwgQHZhcnttdGltZX0uCitUaGUgQHZhcntmaWxlfSBoYW5kbGUgbXVzdCBoYXZlIGJlZW4gb2J0YWluZWQgYnkgb3BlbmluZyB0aGUgZmlsZSB3aXRoCitAY29kZXtHRU5FUklDX1JFQUR9IGFjY2Vzcy4gVGhlIGZpbGUgdGltZSBhcmd1bWVudHMgb2YgdGhpcyBmdW5jdGlvbiBhcmUKK3BvaW50ZXJzIHRvIEBjb2Rle0ZJTEVUSU1FfSB2YXJpYWJsZXMsIHdoaWNoIGFyZSBmaWxsZWQgd2l0aCBhIHZhbHVlIHRoYXQKK2luZGljYXRlcyBhbiBhYnNvbHV0ZSB0aW1lIGluIFVUQy4gVG8gY29udmVydCB0aGVzZSB2YWx1ZXMgdG8gbG9jYWwKK3RpbWVzLCB1c2UgdGhlIGZ1bmN0aW9uIEBjb2Rle0ZpbGVUaW1lVG9Mb2NhbEZpbGVUaW1lfS4gSWYgeW91IGRvIG5vdAorbmVlZCBzb21lIG9mIHRoZSB0aW1lcywgeW91IGNhbiBwYXNzIGEgQGNvZGV7TlVMTH0gcG9pbnRlci4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIEBjb2Rle1RSVUV9IG9uIHN1Y2Nlc3MsIEBjb2Rle0ZBTFNFfSBvbiBmYWlsdXJlLgorCitAd2luY29uZmFsbHt9CisKK0B3aW5kaWZmbm9uZXt9CitAZW5kIGRlZnR5cGVmbgorCisKK0Bub2RlIFN5c3RlbSBJbmZvcm1hdGlvbiwgTWVtb3J5IE1hbmFnZW1lbnQsIERhdGUgYW5kIFRpbWUsIEBXSU4zMnt9IFJlZmVyZW5jZSBNYW51YWwKK0BzZWN0aW9uIFN5c3RlbSBJbmZvcm1hdGlvbgorCitAbm9kZSBNZW1vcnkgTWFuYWdlbWVudCwgSS9PIEZhY2lsaXRpZXMsIFN5c3RlbSBJbmZvcm1hdGlvbiwgQFdJTjMye30gUmVmZXJlbmNlIE1hbnVhbAorQHNlY3Rpb24gTWVtb3J5IE1hbmFnZW1lbnQKKworQG5vZGUgSS9PIEZhY2lsaXRpZXMsIENvbW11bmljYXRpb24sIE1lbW9yeSBNYW5hZ2VtZW50LCBAV0lOMzJ7fSBSZWZlcmVuY2UgTWFudWFsCitAc2VjdGlvbiBJL08gRmFjaWxpdGllcworCitAbm9kZSBDb21tdW5pY2F0aW9uLCBXaW5kb3dzIGFuZCBHcmFwaGljcywgSS9PIEZhY2lsaXRpZXMsIEBXSU4zMnt9IFJlZmVyZW5jZSBNYW51YWwKK0BzZWN0aW9uIENvbW11bmljYXRpb24KKworQG5vZGUgV2luZG93cyBhbmQgR3JhcGhpY3MsIEVycm9ycyBhbmQgRXhjZXB0aW9ucywgQ29tbXVuaWNhdGlvbiwgQFdJTjMye30gUmVmZXJlbmNlIE1hbnVhbAorQHNlY3Rpb24gV2luZG93cyBhbmQgR3JhcGhpY3MKKworQG5vZGUgRXJyb3JzIGFuZCBFeGNlcHRpb25zLCBSZXNvdXJjZXMsIFdpbmRvd3MgYW5kIEdyYXBoaWNzLCBAV0lOMzJ7fSBSZWZlcmVuY2UgTWFudWFsCitAc2VjdGlvbiBFcnJvcnMgYW5kIEV4Y2VwdGlvbnMKKworQG5vZGUgUmVzb3VyY2VzLCBUaGUgUmVnaXN0cnksIEVycm9ycyBhbmQgRXhjZXB0aW9ucywgQFdJTjMye30gUmVmZXJlbmNlIE1hbnVhbAorQHNlY3Rpb24gUmVzb3VyY2VzCisKK0Bub2RlIFRoZSBSZWdpc3RyeSwgRHluYW1pYyBMaW5rIExpYnJhcmllcywgUmVzb3VyY2VzLCBAV0lOMzJ7fSBSZWZlcmVuY2UgTWFudWFsCitAc2VjdGlvbiBUaGUgUmVnaXN0cnkKKworQG5vZGUgRHluYW1pYyBMaW5rIExpYnJhcmllcywgLCBUaGUgUmVnaXN0cnksIEBXSU4zMnt9IFJlZmVyZW5jZSBNYW51YWwKK0BzZWN0aW9uIER5bmFtaWMgTGluayBMaWJyYXJpZXMgKERMTCdzKQorCisKKworCitAbm9kZSBSZXNvdXJjZXMgYW5kIElOSSBmaWxlcywgTWV0YWZpbGVzLS1JY29ucy0tQml0bWFwcywgQFdJTjMye30gUmVmZXJlbmNlIE1hbnVhbCwgUmVmZXJlbmNlIE1hbnVhbAorQGNoYXB0ZXIgUmVzb3VyY2VzIGFuZCBAZmlsZXtJTkl9IEZpbGVzCisKK0Bub2RlIE1ldGFmaWxlcy0tSWNvbnMtLUJpdG1hcHMsIERlYnVnZ2luZywgUmVzb3VyY2VzIGFuZCBJTkkgZmlsZXMsIFJlZmVyZW5jZSBNYW51YWwKK0BjaGFwdGVyIE1ldGFmaWxlcyAtLS0gSWNvbnMgLS0tIEJpdG1hcHMKKworQG5vZGUgRGVidWdnaW5nLCBQcm9ncmFtcywgTWV0YWZpbGVzLS1JY29ucy0tQml0bWFwcywgUmVmZXJlbmNlIE1hbnVhbAorQGNoYXB0ZXIgRGVidWdnaW5nCisKK0Bub2RlIFByb2dyYW1zLCBUb29scywgRGVidWdnaW5nLCBSZWZlcmVuY2UgTWFudWFsCitAY2hhcHRlciBQcm9ncmFtcworCitAbm9kZSBUb29scywgLCBQcm9ncmFtcywgUmVmZXJlbmNlIE1hbnVhbAorQGNoYXB0ZXIgVG9vbHMKKworQG5vZGUgSW5zdGFsbGF0aW9uLCBUaGUgV2luZSBQcm9qZWN0LCBSZWZlcmVuY2UgTWFudWFsLCBUb3AKK0BjaGFwdGVyIFdpbmUgSW5zdGFsbGF0aW9uCitGSVhNRTogd3JpdGUgaW5zdGFsbGF0aW9uIGd1aWRlCisKK0BtZW51CisqIEFwcGx5aW5nIHBhdGNoZXM6OiAgICAgICAgICAgIEhvdyB0byB1cGRhdGUgV2luZSB0byBhIG5ld2VyIHZlcnNpb24uCitAZW5kIG1lbnUKKworQG5vZGUgQXBwbHlpbmcgcGF0Y2hlcywgLCAsIEluc3RhbGxhdGlvbgorQHNlY3Rpb24gQXBwbHlpbmcgcGF0Y2hlcworQHhyZWZ7Q3JlYXRpbmcgcGF0Y2hlc30sIGZvciBpbnN0cnVjdGlvbnMgb24gY3JlYXRpbmcgcGF0Y2hlcy4KKworRklYTUU6IHdyaXRlIHBhdGNoIGluc3RydWN0aW9ucworCisKK0Bub2RlIFRoZSBXaW5lIFByb2plY3QsICwgSW5zdGFsbGF0aW9uLCBUb3AKK0BjaGFwdGVyIFRoZSBXaW5lIHByb2plY3QKK0BjaW5kZXggV2luZSBwcm9qZWN0IGNvbnRyaWJ1dGlvbnMKK0BjaW5kZXggcHJvamVjdCBjb250cmlidXRpb25zIHRvIFdpbmUKKworSWYgeW91IGFyZSBuZXcgdG8gV2luZSBhbmQgd2FudCB0byBzdXBwb3J0IHRoaXMgcHJvamVjdCwgaGVyZSBhcmUKK3NvbWUgc3VnZ2VzdGlvbnMuIAorCitAbWVudQorKiBDcmVhdGluZyBwYXRjaGVzOjogICAgICAgICAgICBIb3cgdG8gY3JlYXRlIHBhdGNoZXMgZm9yIFdpbmUuCisqIEFkZGluZyBEb2N1bWVudGF0aW9uOjogICAgICAgIFRlbXBsYXRlcyBmb3IgdGhlIGRvY3VtZW50YXRpb24uCitAZW5kIG1lbnUKKworQHhyZWZ7RGVidWdnaW5nfSwgZm9yIGFkdmljZSBvbiBob3cgdG8gZGVidWcgV2luZS4KK0B4cmVme0FwcGx5aW5nIHBhdGNoZXN9LCBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGFwcGx5aW5nIHBhdGNoZXMuCisKK0ZJWE1FOiB3aGF0IGlzIG1vc3QgdXJnZW50bHkgbmVlZGVkCisKK0Bub2RlIENyZWF0aW5nIHBhdGNoZXMsIEFkZGluZyBEb2N1bWVudGF0aW9uLCAsIFRoZSBXaW5lIFByb2plY3QKK0BzZWN0aW9uIENyZWF0aW5nIHBhdGNoZXMKK0B4cmVme0FwcGx5aW5nIHBhdGNoZXN9LCBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGFwcGx5aW5nIHBhdGNoZXMuCisKK0ZJWE1FOiBob3cgdG8gY3JlYXRlIHBhdGNoZXMKKworQG5vZGUgQWRkaW5nIERvY3VtZW50YXRpb24sICwgQ3JlYXRpbmcgcGF0Y2hlcywgVGhlIFdpbmUgUHJvamVjdAorQHNlY3Rpb24gQWRkaW5nIERvY3VtZW50YXRpb24KKworQGlmaW5mbworSGVyZSBhcmUgc29tZSB0ZW1wbGF0ZXMgd2hpY2ggc2hvdWxkIGhlbHAgeW91IGNvbGxhYm9yYXRlIG9uIHRoaXMKK2RvY3VtZW50YXRpb24uIFJlYWQgdGhlIHRleHQgYmVsb3cgYmVmb3JlIGV4YW1pbmluZyB0aGVtLgorQGVuZCBpZmluZm8KKworRklYTUUgdGhleSBhcmUgbm90IGhlcmUgaW4gZHZpCisKK0BtZW51CisqIFR5cGUgVGVtcGxhdGU6OiAgICAgICAgICAgICAgIEhvdyB0byBkb2N1bWVudCBkYXRhIHR5cGVzIGluIFdpbmUncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIGZpbGVzLgorKiBGdW5jdGlvbiBUZW1wbGF0ZTo6ICAgICAgICAgICBIb3cgdG8gZG9jdW1lbnQgYW4gKEFQSSkgZnVuY3Rpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZS4gCitAZW5kIG1lbnUKKworCitUaGVzZSBhcmUgbXkgdGlwcyBmb3IgYWRkaW5nIGRvY3VtZW50YXRpb24uCisKK0RvIG5vdCBzaW1wbHkgY29weSBkb2N1bWVudGF0aW9uIGZyb20gQG1zd2luZG93c3t9IHJlbGF0ZWQKK21hdGVyaWFsLiBFeGNlcHQgZnJvbSByaXNraW5nIGNvcHlyaWdodCB2aW9sYXRpb25zLCB3aGljaCB5b3Ugd291bGQgbm90Cit3YW50IHRvIGRvLCB0aGVyZSBpcyBhbm90aGVyIGFzcGVjdCB0byB0aGF0OgorQXMgV2luZSBpcyBhIHByb2R1Y3QgdG8gcnVuIG9uIEB1bml4e30gYW5kIEB1bml4e30tbGlrZSB3b3Jrc3RhdGlvbnMsCitpdCBzZWVtcyBhIGdvb2QgaWRlYSB0byBtZSB0byBvcmdhbml6ZSB0aGlzIGRvY3VtZW50YXRpb24gcHJpbWFyaWx5IGZvcgordGhlIHdlbGwtdHJhaW5lZCBAdW5peHt9IHJlYWRlci4gUGxlYXNlIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4geW91IGFkZAorc29tZSBkb2N1bWVudGF0aW9uLgorCitGaW5hbGx5LCByZWFkIHRoZSBpbmZvIHBhZ2VzIGZvciBAY29kZXt0ZXhpbmZvfS4KKworQHN1YnNlY3Rpb24gVGVtcGxhdGUgaW50cm9kdWN0aW9uCitAaWZ0ZXgKK09uIHRoZSBmb2xsb3dpbmcgcGFnZXMgeW91IHdpbGwgZmluZCBzb21lIEBjb2Rle3RleGluZm99IHRlbXBsYXRlcywgd2hpY2gKK3Nob3VsZCBoZWxwIHlvdSBjb2xsYWJvcmF0ZSBvbiB0aGlzIGRvY3VtZW50YXRpb24uCitAZW5kIGlmdGV4CisKK1RoZXNlIHRlbXBsYXRlcyBnaXZlIGhpbnRzIG9uIGhvdyB0byBkb2N1bWVudCBkYXRhIHR5cGVzLCBmdW5jdGlvbnMsCit2YXJpYWJsZXMsIGNvbnN0YW50cyBldGMuIGluIFdpbmUuCitBcyBkb2N1bWVudGF0aW9uIGV2b2x2ZXMsIHlvdSB3aWxsIGZpbmQgY29tbW9uIGZlYXR1cmVzIG9mIGRhdGEgdHlwZXMKK3RoYXQgc2hvdWxkIGJlIGRlc2NyaWJlZCBpbiBhIHVuaWZpZWQgZmFzaGlvbi4gSW4gc3VjaCBhIGNhc2UsIHBsZWFzZQorYWRkIGEgY29ycmVzcG9uZGluZyBzdHlsZSBndWlkZS1saW5lIGhlcmUsIGluIHRoaXMgdmVyeSBwbGFjZSwgdG8gaGVscAora2VlcGluZyBkb2N1bWVudGF0aW9uIG9mIGRhdGEgdHlwZXMgdW5pZmllZC4KKworCitTdGFydCBvdXQgdGhlIHR5cGUgb3IgZnVuY3Rpb24gd2l0aCBhIG5ldyBub2RlLiBXcml0ZSBhIGNvbW1lbnQgYmVmb3JlCit0aGUgbm9kZSwgbGlzdGluZyBhbGwgZGF0YSB0eXBlcyAoYW5kIGZ1bmN0aW9ucykgZGVzY3JpYmVkIGluIHRoZSBub2RlLAorbGlrZSB0aGlzOgorQGV4YW1wbGUKK0BAYworQEBjICoqKiBzdHJ1Y3QgRklMRVRJTUUgKioqCitAQGMKK0BAbm9kZSBUeXBlIEZJTEVUSU1FLCBOZXh0Tm9kZU5hbWUsIFByZXZpb3VzTm9kZU5hbWUsIFBhcmVudE5vZGVOYW1lCitAZW5kIGV4YW1wbGUKKworVGhlIG5vZGUgY29tbWFuZCBkZXNjcmliZXMgdGhlIG5vZGUgbmFtZSBhbmQgdGhlIG5hbWVzIG9mIHRoZSBuZXh0IG5vZGUsCit0aGUgcHJldmlvdXMgbm9kZSwgYW5kIHRoZSBwYXJlbnQgbm9kZS4gVGhlIHBhcmVudCBub2RlIHNob3VsZCBjb250YWluCithIG1lbnUgZW50cnkgZm9yIHRoaXMgbm9kZS4gVGhlIHByZXZpb3VzIG5vZGUgaXMgdGhlIG5vZGUgdGhhdCBhcHBlYXJzCitiZWZvcmUgdGhpcyBub2RlIGluIHRoZSBwYXJlbnQgbm9kZSBtZW51LiBUaGUgbmV4dCBub2RlIGlzIHRoZSBub2RlCitzdWNjZWVkaW5nIHRoaXMgb25lIGluIHRoZSBwYXJlbnQgbm9kZSBtZW51LiBJZiB0aGVyZSBpcyBubyBwcmV2aW91cyBvcgorbmV4dCBub2RlLCBvbWl0IHRoZSBuYW1lIChwdXR0aW5nIGp1c3QgYSBzaW5nbGUgc3BhY2UgYmV0d2VlbiB0aGUgdHdvCitjb21tYXRhKS4KKworVGhlIG5vZGUgbmFtZSBtdXN0IGJlIGEgdW5pcXVlIHNlcXVlbmNlIG9mIHdvcmRzLiBDYXNlIGlzIGltcG9ydGFudCwgc28KK0BlbXBoe1R5cGV9IGFuZCBAZW1waHt0eXBlfSBhcmUgZGlzdGluY3QuIFRoZSBub2RlIG5hbWUgbXVzdCBub3QgY29udGFpbgorc3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgQHNhbXB7QEAsIEB7LCBAfX0gb3IgdGhlIGNvbW1hLiBJZiB5b3UgbmVlZCB0bworZ2l2ZSBhIG5vZGUgdGhlIHNhbWUgbmFtZSBhcyBhIGZ1bmN0aW9uLCBkYXRhIHR5cGUsIGV0Yy4sIHVzZSB0aGUgd29yZHMKK0BzYW1we1R5cGV9LCBAc2FtcHtGdW5jdGlvbn0sIGV0Yy4gYmVmb3JlIHRoZSBpZGVudGlmaWVyLgorCitBbHdheXMgcHV0IHRoZSBuYW1lcyBvZiB0aGUgbm9kZSBhbmQgaXRzIGxpbmtzIG9uIHRoZSBzYW1lIGxpbmUsIGV2ZW4gaWYKK2l0IGdldHMgcmF0aGVyIGxvbmcuCisKK0lmIHRoZXJlIGFyZSB0d28gb3IgbW9yZSBkYXRhIHR5cGVzIG9yIGZ1bmN0aW9ucyBkZXNjcmliZWQgaW4gdGhlIG5vZGUsCithZGFwdCB0aGUgY29tbWVudCBsaWtlIHRoaXM6CitAZXhhbXBsZQorQEBjCitAQGMgKioqIGludCAgWCAgICoqKgorQEBjICoqKiBsb25nIFkoKSAqKioKK0BAYworQEBub2RlIEludHMgYW5kIExvbmdzLCBOZXh0Tm9kZU5hbWUsIFByZXZpb3VzTm9kZU5hbWUsIFBhcmVudE5vZGVOYW1lCitAZW5kIGV4YW1wbGUKKworU3RhcnQgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB0eXBlKHMpIG9yIGZ1bmN0aW9uKHMpIHdpdGggYSBzaW5nbGUKK25vbi1pbmRlbnRlZCBwYXJhZ3JhcGggdGhhdCBnaXZlcyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSB0eXBlKHMpCitvciBmdW5jdGlvbihzKSBhbmQgc3RhdGVzIHRoZSBpbmNsdWRlIGZpbGVzIHRoYXQgYXJlIHJlcXVpcmVkLgorQGV4YW1wbGUKK0BAbm9pbmRlbnQKK0ZpbGUgdGltZXMgaW4gV2luZSBhcmUgc3BlY2lmaWVkIGJ5IHRoZSBkYXRhIHR5cGUgQEBjb2RlQHtGSUxFVElNRUB9LAorZGVmaW5lZCBpbiBAQGZpbGVAe3dpbmRvd3MuaEB9LgorQGVuZCBleGFtcGxlCitJZiBzZXZlcmFsIHR5cGVzIG9yIGZ1bmN0aW9ucyBhcmUgY2xvc2VseSBjb25uZWN0ZWQsIHVzZSBvbmUgcGFyYWdyYXBoCithcyBhIGNvbW1vbiBkZXNjcmlwdGlvbi4gSWYgbW9yZSBwYXJhZ3JhcGhzIGFyZSByZXF1aXJlZCBmb3IgYSBwcm9wZXIKK2Rlc2NyaXB0aW9uLCBpbmRlbnQgYWxsIGJ1dCB0aGUgZmlyc3Qgb2YgdGhlbS4KKworVGhlbiBzdGFydCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YSB0eXBlIG9yIGZ1bmN0aW9uLiBVc2UgdGhlIHByb3BlcgorbWFjcm8gYW5kIHNwZWNpZnkgYSBjYXRlZ29yeSBhbmQgdGhlICBmb3JtYWwgZGVmaW5pdGlvbiBvbiB0aGUgc2FtZQorbGluZS4gRm9yIHByb3BlciBjYXRlZ29yaWVzLCB0YWtlIGEgbG9vayBhdCB0aGUgc3BlY2lhbGl6ZWQgdGVtcGxhdGVzLgorQWdhaW4sIHB1dCBldmVyeXRoaW5nIHRoYXQgYmVsb25ncyB0byB0aGUgaGVhZGVyIGludG8gYSBzaW5nbGUgbGluZS4KK0BleGFtcGxlCitAQGRlZnRwIEB7RGF0YSB0eXBlQH0gRklMRVRJTUUKK0BlbmQgZXhhbXBsZQorCitJbiB0aGUgZGVmaW5pdGlvbiwgZ2l2ZSBhIHZlcmJhbCBleHBsYW5hdGlvbiBvZiB0aGUgZGF0YSB0eXBlIG9yCitmdW5jdGlvbi4gVGhlIGV4cGxhbmF0aW9uIHNob3VsZCBiZSByYXRoZXIgY29tcGxldGUsIGV4YWN0LCBhbmQKK2NvbXByZWhlbnNpYmxlLCB0aGFuIHdlbGwtc3RydWN0dXJlZC4gVGhpcyBpcyB0aGUgcG9pbnQgd2hlcmUgeW91IGNhbgordGVsbCBldmVyeXRoaW5nIHlvdSB3YW50LiBEbyBub3QgYmUgYWZyYWlkIG9mIHdhc3Rpbmcgc3BhY2UuCitEbyBub3QgZGVzY3JpYmUgdGhlIEBtc3dpbmRvd3N7fSBzaXR1YXRpb24gYnV0IG9ubHkgc2F5IHdoYXQgV2luZQorZG9lcy4gVGhhdCBpcyBpbXBvcnRhbnQuIChTb21ldGltZXMgdGhleSBtaWdodCBldmVuIGRvIHRoZSBzYW1lLikKK0BleGFtcGxlCitUaGlzIGlzIHRoZSBkYXRhIHR5cGUgZm9yIHNwZWNpZnlpbmcgZmlsZSB0aW1lcy4gVGhlIGZpbGUgdGltZXMgYXJlCitzdG9yZWQgd2l0aCA2NCBiaXQgcHJlY2lzaW9uLiBUaGUgYWN0dWFsIGRhdGEgdHlwZSBpcyBhIHN0cnVjdHVyZSB3aXRoCit0d28gMzIgYml0IHZhbHVlcyB3aGljaCBhcmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGxvdyBhbmQgaGlnaCBwYXJ0cyBvZiBhCis2NC1iaXQgdmFsdWUuIFRoaXMgdmFsdWUgZ2l2ZXMgYSB0aW1lIG1lYXN1cmVkIGluIGEgZ3JhbnVsYXJpdHkgb2YgMTAwCituYW5vc2Vjb25kcywgc28gMS41IHNlY29uZHMgYXJlIHNwZWNpZmllZCBieSBhIHZhbHVlIG9mIDE1LDAwMCwwMDAuICBJbgorV2luZSwgdGhpcyA2NC1iaXQgdmFsdWUgaXMgc2lnbmVkLCB3aXRoIHRoZSBzaWduIHRha2VuIGZyb20gdGhlIGhpZ2gKK3BhcnQuIFRoZSBsb3dlciBwYXJ0IGlzIHVzZWQgYXMgdW5zaWduZWQuCitAZW5kIGV4YW1wbGUKKworRm9yIGRhdGEgdHlwZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHF1b3RlIHRoZSBkZWZpbml0aW9uIGZyb20gdGhlCitoZWFkZXIgZmlsZS4gRm9yIGEgZnVuY3Rpb24sIHlvdSBtaWdodCBnaXZlIGEgc2hvcnQgZXhhbXBsZSBvZiBpdHMKK3VzYWdlLiBZb3UgbWF5IGFsc28gcHV0IG9uZSBleGFtcGxlIGluIHRoZSBlbmQgb2YgYSBub2RlIHRoYXQgZXhwbGFpbnMKK3NldmVyYWwgb2YgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgbm9kZS4gUmVtZW1iZXIgdGhhdCBjdXQtYW5kLXBhc3RlIGZyb20gYQord2VsbCBwcmVwYXJlZCBleGFtcGxlIHdpbGwgaGVscCB0aGUgcmVhZGVycyB3cml0ZSB0aGVpciBjb2RlLgorQGV4YW1wbGUKK1RoZSBkZWZpbml0aW9uIG9mIEBAY29kZUB7RklMRVRJTUVAfSByZWFkczoKK0BAZXhhbXBsZQordHlwZWRlZiBzdHJ1Y3QgX0ZJTEVUSU1FCitAQEB7CisgICAgSU5UMzIgZHdMb3dEYXRlVGltZTsKKyAgICBJTlQzMiBkd0hpZ2hEYXRlVGltZTsKK0BAQH0gRklMRVRJTUU7CitAQGVuZCBleGFtcGxlCitAZW5kIGV4YW1wbGUKKworWW91IGNvdWxkIGFsc28gdXNlIHRoZSBAY29kZXtjaW5kZXh9IGNvbW1hbmQgd2hpY2ggY3JlYXRlcyBhbiBlbnRyeSBpbgordGhlIGNvbmNlcHQgaW5kZXguIFRoZSBAY29kZXt0ZXhpbmZvfSBtYW51YWwgcmVjb21tZW5kcyB0byBrZWVwIGNvbmNlcHQKK2VudHJpZXMgZGlzdGluY3QsIHNvIHRoYXQgYSBzaW5nbGUgY29uY2VwdCBpbmRleCBlbnRyeSBwdXRzIHRvIG9uZQord2VsbC1kZWZpbmVkIHBsYWNlIGluIHRoZSBkb2N1bWVudC4gVXNlIGxvd2VyIGNhc2UgbGV0dGVycyBmb3IgaW5kZXgKK2VudHJpZXMsIHVubGVzcyB0aGV5IGFyZSBwcm9wZXIgbmFtZXMgb3IgcXVvdGVzIGZyb20gYWN0dWFsIGNvZGUuCitAZXhhbXBsZQorQEBjaW5kZXggZXBvY2ggaW4gZmlsZSB0aW1lCitUaGUgQEBjb2RlQHtGSUxFVElNRUB9IHN0cnVjdHVyZSBtYXkgYmUgdXNlZCB0byBob2xkIGFic29sdXRlIG9yIHJlbGF0aXZlCit0aW1lcy4gQWJzb2x1dGUgdGltZXMgYXJlIGdpdmVuIGFzIHRoZSBudW1iZXIgb2YgMTAwIG5hbm9zZWNvbmRzCitpbnRlcnZhbHMgZWxhcHNlZCBzaW5jZSAxIEphbnVhcnkgMTYwMSwgMDA6MDA6MDAgVVRDIChDb29yZGluYXRlZAorVW5pdmVyc2FsIFRpbWUsIHdoaWNoIGlzIEdNVCwgR3JlZW53aWNoIE1lYW4gVGltZSkuIFRoaXMgbWlnaHQgYmUKK2NhbGxlZCB0aGUgQEBkZm5Ae2Vwb2NoQH0gZm9yIGZpbGUgdGltZXMuIFdpdGggYSBzaWduZWQgNjQtYml0IHZhbHVlLCB0aGlzCityZXByZXNlbnRhdGlvbiBjb3ZlcnMgYWJzb2x1dGUgdGltZXMgb2YgMjkyNDcgeWVhcnMgYXJvdW5kIHRoZSBlcG9jaC4KK0BlbmQgZXhhbXBsZQorCitBZnRlciB0aGUgdmVyYmFsIGRvY3VtZW50YXRpb24sIHlvdSBjYW4gYWRkIHNvbWUgc3BlY2lhbCBmaWVsZHMKK2Rlc2NyaWJpbmcgYnVncywgaW1wbGVtZW50YXRpb24gZGVwZW5kZW5jaWVzIGV0Yy4gVHdvIG9mIHRoZXNlIGFyZQorcmVjb21tZW5kZWQgdG8gYXR0YWNoIHRvIGFsbCBkZXNjcmlwdGlvbnMuIE9uZSBkZXNjcmliZXMgdGhlCitjb25mb3JtYW5jZSBvZiB0aGUgZGF0YSB0eXBlIG9yIGZ1bmN0aW9uIHRvIEBtc3dpbmRvd3N7fSBwcm9kdWN0cywKK2kuZS4gd2hldGhlciB0aGUgaXRlbSBpcyBhbHNvIHByZXNlbnQgaW4gQFdJTk5Ue30gYW5kIEBXSU45NXt9LiBUaGUKK290aGVyIG9uZSBkZXNjcmliZXMga25vd24gZGlmZmVyZW5jZXMgb2YgdGhlIFdpbmUgaXRlbSB0byBpdHMKK0Btc3dpbmRvd3N7fSBjb3VudGVycGFydC4gQm90aCB3aWxsIGdyZWF0bHkgaGVscCBpbiBwb3J0aW5nIHNvZnR3YXJlCitmcm9tIEBtc3dpbmRvd3N7fSB0byBXaW5lIGFuZCB2aWNlIHZlcnNhLgorQGV4YW1wbGUKK0BAd2luY29uZmFsbEB7QH0KKworQEB3aW5kaWZmQHtAfQorSW4gQEBtc3dpbmRvd3NAe0B9LCB0aGUgZWxlbWVudHMgb2YgdGhlIHN0cnVjdHVyZSBhcmUgYXBwYXJlbnRseSBvZiB0eXBlCitAQGNvZGVAe0RXT1JEQH0uIFdoZXRoZXIgdGhlIGZ1bGwgNjQgYml0IHZhbHVlIGlzIGludGVycHJldGVkIGFzIHNpZ25lZCBvcgordW5zaWduZWQgSSBkbyBub3Qga25vdy4KK0BlbmQgZXhhbXBsZQorCitJZiB5b3UgZmluZCB0aGF0IG1vcmUgb2YgdGhlc2UgcHJvcGVydHkgYXR0cmlidXRlcyBhcmUgbmVjZXNzYXJ5LCBmZWVsCitmcmVlIHRvIGNyZWF0ZSB5b3VyIG93biBvbmVzLiBCdXQga2VlcCBpbiBtaW5kIHRoYXQgdGhleSBzaG91bGQgYmUKK2FwcGxpY2FibGUgbW9yZSBvciBsZXNzIHRvIGFsbCBkZXNjcmliZWQgaXRlbXMuIFZlcnkgc3BlY2lhbCBwcm9wZXJ0aWVzCit3aWxsIGJldHRlciBiZSBwdXQgaW50byB0aGUgdmVyYmFsIHRleHQuCisKK0ZpbmFsbHkgZW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBkYXRhIHR5cGUgb3IgZnVuY3Rpb246CitAZXhhbXBsZQorQEBlbmQgZGVmdHAKK0BlbmQgZXhhbXBsZQorCitEbyBub3QgZm9yZ2V0IHRvIGVudGVyIHRoZSBub2RlIGluIHRoZSBtZW51IG9mIGl0cyB0b3Agbm9kZSwgYW5kIGRvCitwcm9wZXJseSBsaW5rIHRoZSBub2RlIHRvIGl0cyBzdWNjZXNzb3IgYW5kIHByZWRlY2Vzc29yLgorCisKKworCisKKworQG5vZGUgVHlwZSBUZW1wbGF0ZSwgRnVuY3Rpb24gVGVtcGxhdGUsICwgQWRkaW5nIERvY3VtZW50YXRpb24KK0BzdWJzZWN0aW9uIERhdGEgdHlwZSB0ZW1wbGF0ZQorCitDYXRlZ29yeTogRGF0YSB0eXBlCisKK0Bub2RlIEZ1bmN0aW9uIFRlbXBsYXRlLCAsIFR5cGUgVGVtcGxhdGUsIEFkZGluZyBEb2N1bWVudGF0aW9uCitAc3Vic2VjdGlvbiBBUEkgZnVuY3Rpb24gdGVtcGxhdGUKKworRnVuY3Rpb25zIHNob3VsZCBiZSBnaXZlbiBjYXRlZ29yeSBuYW1lcywgdG8gaW5kaWNhdGUgd2hpY2ggQVBJIHRoZXkKK2JlbG9uZyB0by4gUGxlYXNlIGFkZCBpdGVtcyB0byB0aGUgbGlzdCBvZiBjYXRlZ29yaWVzIHBvc3NpYmxlLgorCitDYXRlZ29yeTogV0lOMzIgZnVuY3Rpb24KKworQGV4YW1wbGUKK0BAYworQEBjICoqKkdldEZpbGVUaW1lKCkgKioqCitAQGMKK0BAbm9kZSBHZXQgRmlsZSBUaW1lcywgLCBDb21wYXJlIEZpbGUgVGltZXMsIEZpbGUgVGltZXMKK0BAbm9pbmRlbnQKK1RoZSBXaW5lIGZ1bmN0aW9uIEBAY29kZUB7R2V0RmlsZVRpbWVAfSByZXR1cm5zIHRoZSBjcmVhdGlvbiB0aW1lIGFuZAordGhlIHRpbWVzIG9mIGxhc3QgdGhlIHJlYWQgYW5kIG1vZGlmaWNhdGlvbiBhY2Nlc3MgdG8gYSBmaWxlLiBJdCBpcworZGVmaW5lZCBpbiBAQGZpbGVAe3dpbmRvd3MuaEB9LgorCitAQGRlZnR5cGVmbiBAe1dJTjMyIGZ1bmN0aW9uQH0gQk9PTCBHZXRGaWxlVGltZSAoQEB3QHtIQU5ETEUgQEB2YXJAe2ZpbGVAfSxAfSBAQHdAe0xQRklMRVRJTUUgQEB2YXJAe2N0aW1lQH0sQH0gQEB3QHtMUEZJTEVUSU1FIEBAdmFyQHthdGltZUB9LEB9IEBAd0B7TFBGSUxFVElNRSBAQHZhckB7bXRpbWVAfSlAfQorVGhpcyBmdW5jdGlvbiBvYnRhaW5zIGZvciB0aGUgc3BlY2lmaWVkIEBAdmFyQHtmaWxlQH0gdGhlIGNyZWF0aW9uIHRpbWUKK0BAdmFyQHtjdGltZUB9LCB0aGUgdGltZSBvZiB0aGUgbGFzdCBhY2Nlc3MgdG8gdGhlIGZpbGUgQEB2YXJAe2F0aW1lQH0sIGFuZAordGhlIHRpbWUgb2YgdGhlIGxhc3QgbW9kaWZpY2F0aW9uICh3cml0ZSkgdG8gdGhlIGZpbGUsIEBAdmFyQHttdGltZUB9LgorVGhlIEBAdmFyQHtmaWxlQH0gaGFuZGxlIG11c3QgaGF2ZSBiZWVuIG9idGFpbmVkIGJ5IG9wZW5pbmcgdGhlIGZpbGUgd2l0aAorQEBjb2RlQHtHRU5FUklDX1JFQURAfSBhY2Nlc3MuIFRoZSBmaWxlIHRpbWUgYXJndW1lbnRzIG9mIHRoaXMgZnVuY3Rpb24gYXJlCitwb2ludGVycyB0byBAQGNvZGVAe0ZJTEVUSU1FQH0gdmFyaWFibGVzLCB3aGljaCBhcmUgZmlsbGVkIHdpdGggYSB2YWx1ZSB0aGF0CitpbmRpY2F0ZXMgYW4gYWJzb2x1dGUgdGltZSBpbiBVVEMuIFRvIGNvbnZlcnQgdGhlc2UgdmFsdWVzIHRvIGxvY2FsCit0aW1lcywgdXNlIHRoZSBmdW5jdGlvbiBAQGNvZGVAe0ZpbGVUaW1lVG9Mb2NhbEZpbGVUaW1lQH0uIElmIHlvdSBkbyBub3QKK25lZWQgc29tZSBvZiB0aGUgdGltZXMsIHlvdSBjYW4gcGFzcyBhIEBAY29kZUB7TlVMTEB9IHBvaW50ZXIuCitUaGUgZnVuY3Rpb24gcmV0dXJucyBAQGNvZGVAe1RSVUVAfSBvbiBzdWNjZXNzLCBAQGNvZGVAe0ZBTFNFQH0gb24gZmFpbHVyZS4KKworQEB3aW5jb25mYWxsQHtAfQorCitAQHdpbmRpZmZub25lQHtAfQorQEBlbmQgZGVmdHlwZWZuCitAZW5kIGV4YW1wbGUKKworCisKKworCitAbm9kZSBDb25jZXB0IEluZGV4LCAsICwgVG9wCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0B1bm51bWJlcmVkIENvbmNlcHQgSW5kZXgKK0BwcmludGluZGV4IGNwCisKK0Bub2RlIFR5cGUgSW5kZXgsICwgLCBUb3AKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHVubnVtYmVyZWQgVHlwZSBJbmRleAorQHByaW50aW5kZXggdHAKKworQG5vZGUgRnVuY3Rpb24gSW5kZXgsICwgLCBUb3AKK0Bjb21tZW50ICBub2RlLW5hbWUsICBuZXh0LCAgcHJldmlvdXMsICB1cAorQHVubnVtYmVyZWQgRnVuY3Rpb24gSW5kZXgKK0BwcmludGluZGV4IGZuCisKK0Bub2RlIFZhcmlhYmxlIEluZGV4LCAsICwgVG9wCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0B1bm51bWJlcmVkIFZhcmlhYmxlIEluZGV4CitAcHJpbnRpbmRleCB2cgorCitAbm9kZSBGaWxlIEluZGV4LCAsICwgVG9wCitAY29tbWVudCAgbm9kZS1uYW1lLCAgbmV4dCwgIHByZXZpb3VzLCAgdXAKK0B1bm51bWJlcmVkIEZpbGUgYW5kIFByb2dyYW0gSW5kZXgKK0BwcmludGluZGV4IHBnCisKKworQGNvbnRlbnRzCitAYnllCmRpZmYgLS1naXQgYS9maWxlcy9kb3NfZnMuYyBiL2ZpbGVzL2Rvc19mcy5jCmluZGV4IDViYjhiMzUuLjAxNGI0MWUgMTAwNjQ0Ci0tLSBhL2ZpbGVzL2Rvc19mcy5jCisrKyBiL2ZpbGVzL2Rvc19mcy5jCkBAIC0xMjAyLDE2ICsxMjAyLDEyMSBAQAogICoKICAqIENvbnZlcnQgYSBVbml4IHRpbWUgdG8gRklMRVRJTUUgZm9ybWF0LgogICogVGhlIEZJTEVUSU1FIHN0cnVjdHVyZSBpcyBhIDY0LWJpdCB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZgotICogMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIHNpbmNlIEphbnVhcnkgMSwgMTYwMS4KLSAqICdyZW1haW5kZXInIGlzIHRoZSBmcmFjdGlvbiBvZiAxMDAtbnMgaW50ZXJ2YWxzIHNtYWxsZXIgdGhhbiAxIHNlY29uZAotICogdGhhdCBjb3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIHRpbWVfdCB2YWx1ZS4KKyAqIDEwMC1uYW5vc2Vjb25kIGludGVydmFscyBzaW5jZSBKYW51YXJ5IDEsIDE2MDEsIDA6MDAuCisgKiAncmVtYWluZGVyJyBpcyB0aGUgbm9ubmVnYXRpdmUgbnVtYmVyIG9mIDEwMC1ucyBpbnRlcnZhbHMKKyAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRpbWUgZnJhY3Rpb24gc21hbGxlciB0aGFuIDEgc2Vjb25kIHRoYXQKKyAqIGNvdWxkbid0IGJlIHN0b3JlZCBpbiB0aGUgdGltZV90IHZhbHVlLgogICovCiB2b2lkIERPU0ZTX1VuaXhUaW1lVG9GaWxlVGltZSggdGltZV90IHVuaXhfdGltZSwgRklMRVRJTUUgKmZpbGV0aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIHJlbWFpbmRlciApCiB7Ci0gICAgLyogRklYTUUgOi0pICovCi0gICAgZmlsZXRpbWUtPmR3TG93RGF0ZVRpbWUgID0gdW5peF90aW1lOwotICAgIGZpbGV0aW1lLT5kd0hpZ2hEYXRlVGltZSA9IDA7CisgICAgLyogTk9URVM6CisKKyAgICAgICBDT05TVEFOVFM6IAorICAgICAgIFRoZSB0aW1lIGRpZmZlcmVuY2UgYmV0d2VlbiAxIEphbnVhcnkgMTYwMSwgMDA6MDA6MDAgYW5kCisgICAgICAgMSBKYW51YXJ5IDE5NzAsIDAwOjAwOjAwIGlzIDM2OSB5ZWFycywgcGx1cyB0aGUgbGVhcCB5ZWFycworICAgICAgIGZyb20gMTYwNCB0byAxOTY4LCBleGNsdWRpbmcgMTcwMCwgMTgwMCwgMTkwMC4KKyAgICAgICBUaGlzIG1ha2VzICgxOTY4IC0gMTYwMCkgLyA0IC0gMyA9IDg5IGxlYXAgZGF5cywgYW5kIGEgdG90YWwKKyAgICAgICBvZiAxMzQ3NzQgZGF5cy4KKworICAgICAgIEFueSBkYXkgaW4gdGhhdCBwZXJpb2QgaGFkIDI0ICogNjAgKiA2MCA9IDg2NDAwIHNlY29uZHMuCisKKyAgICAgICBUaGUgdGltZSBkaWZmZXJlbmNlIGlzIDEzNDc3NCAqIDg2NDAwICogMTAwMDAwMDAsIHdoaWNoIGNhbiBiZSB3cml0dGVuCisgICAgICAgMTE2NDQ0NzM2MDAwMDAwMDAwCisgICAgICAgMjcxMTE5MDIgKiAyXjMyICsgMzU3NzY0MzAwOAorICAgICAgIDQxMyAqIDJeNDggKyA0NTUzNCAqIDJeMzIgKyA1NDU5MCAqIDJeMTYgKyAzMjc2OAorCisgICAgICAgSWYgeW91IGZpbmQgdGhhdCB0aGVzZSBjb25zdGFudHMgYXJlIGJ1Z2d5LCBwbGVhc2UgY2hhbmdlIHRoZW0gaW4gYWxsCisgICAgICAgaW5zdGFuY2VzIGluIGJvdGggY29udmVyc2lvbiBmdW5jdGlvbnMuCisKKyAgICAgICBWRVJTSU9OUzoKKyAgICAgICBUaGVyZSBhcmUgdHdvIHZlcnNpb25zLCBvbmUgb2YgdGhlbSB1c2VzIGxvbmcgbG9uZyB2YXJpYWJsZXMgYW5kCisgICAgICAgaXMgcHJlc3VtYWJseSBmYXN0ZXIgYnV0IG5vdCBJU08gQy4gVGhlIG90aGVyIG9uZSB1c2VzIHN0YW5kYXJkIEMKKyAgICAgICBkYXRhIHR5cGVzIGFuZCBvcGVyYXRpb25zIGJ1dCByZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBuZWdhdGl2ZQorICAgICAgIG51bWJlcnMgYXJlIHN0b3JlZCBhcyAyJ3MgY29tcGxlbWVudCAoLTEgaXMgMHhmZmZmLi4uLikuIElmIHRoaXMKKyAgICAgICBhc3N1bXB0aW9uIGlzIHZpb2xhdGVkLCBkYXRlcyBiZWZvcmUgMTk3MCB3aWxsIG5vdCBjb252ZXJ0IGNvcnJlY3RseS4KKyAgICAgICBUaGlzIHNob3VsZCBob3dldmVyIHdvcmsgb24gYW55IHJlYXNvbmFibGUgYXJjaGl0ZWN0dXJlIHdoZXJlIFdJTkUKKyAgICAgICB3aWxsIHJ1bi4KKworICAgICAgIERFVEFJTFM6CisgICAgICAgCisgICAgICAgVGFrZSBjYXJlIG5vdCB0byByZW1vdmUgdGhlIGNhc3RzLiBJIGhhdmUgdGVzdGVkIHRoZXNlIGZ1bmN0aW9ucworICAgICAgIChpbiBib3RoIHZlcnNpb25zKSBmb3IgYSBsb3Qgb2YgbnVtYmVycy4gSSB3b3VsZCBiZSBpbnRlcmVzdGVkIGluCisgICAgICAgcmVzdWx0cyBvbiBvdGhlciBjb21waWxlcnMgdGhhbiBHQ0MuCisKKyAgICAgICBUaGUgb3BlcmF0aW9ucyBoYXZlIGJlZW4gZGVzaWduZWQgdG8gYWNjb3VudCBmb3IgdGhlIHBvc3NpYmlsaXR5CisgICAgICAgb2YgNjQtYml0IHRpbWVfdCBpbiBmdXR1cmUgVU5JQ0VTLiBFdmVuIHRoZSB2ZXJzaW9ucyB3aXRob3V0CisgICAgICAgaW50ZXJuYWwgbG9uZyBsb25nIG51bWJlcnMgd2lsbCB3b3JrIGlmIHRpbWVfdCBvbmx5IGlzIDY0IGJpdC4KKyAgICAgICBBIDMyLWJpdCBzaGlmdCwgd2hpY2ggd2FzIG5lY2Vzc2FyeSBmb3IgdGhhdCBvcGVyYXRpb24sIHR1cm5lZCBvdXQKKyAgICAgICBub3QgdG8gd29yayBjb3JyZWN0bHkgaW4gR0NDLCBiZXNpZGVzIGdpdmluZyB0aGUgd2FybmluZy4gU28gSQorICAgICAgIHVzZWQgYSBkb3VibGUgMTYtYml0IHNoaWZ0IGluc3RlYWQuIE51bWJlcnMgYXJlIGluIHRoZSBJU08gdmVyc2lvbgorICAgICAgIHJlcHJlc2VudGVkIGJ5IHRocmVlIGxpbWJzLCB0aGUgbW9zdCBzaWduaWZpY2FudCB3aXRoIDMyIGJpdCwgdGhlCisgICAgICAgb3RoZXIgdHdvIHdpdGggMTYgYml0IGVhY2guCisKKyAgICAgICBBcyB0aGUgbW9kdWxvLW9wZXJhdG9yICUgaXMgbm90IHdlbGwtZGVmaW5lZCBmb3IgbmVnYXRpdmUgbnVtYmVycywKKyAgICAgICBuZWdhdGl2ZSBkaXZpc29ycyBoYXZlIGJlZW4gYXZvaWRlZCBpbiBET1NGU19GaWxlVGltZVRvVW5peFRpbWUuCisKKyAgICAgICBUaGVyZSBtaWdodCBiZSBxdWlja2VyIHdheXMgdG8gZG8gdGhpcyBpbiBDLiBDZXJ0YWlubHkgc28gaW4KKyAgICAgICBhc3NlbWJsZXIuCisKKyAgICAgICBDbGF1cyBGaXNjaGVyLCBmaXNjaGVyQGl1ZS50dXdpZW4uYWMuYXQKKyAgICAgICAqLworCisjaWYgX19HTlVDX18KKyMgIGRlZmluZSBVU0VfTE9OR19MT05HIDEKKyNlbHNlCisjICBkZWZpbmUgVVNFX0xPTkdfTE9ORyAwCisjZW5kaWYKKworI2lmIFVTRV9MT05HX0xPTkcJCS8qIGdjYyBzdXBwb3J0cyBsb25nIGxvbmcgdHlwZSAqLworCisgICAgbG9uZyBsb25nIGludCB0ID0gdW5peF90aW1lOworICAgIHQgKj0gMTAwMDAwMDA7CisgICAgdCArPSAxMTY0NDQ3MzYwMDAwMDAwMDBMTDsKKyAgICB0ICs9IHJlbWFpbmRlcjsKKyAgICBmaWxldGltZS0+ZHdMb3dEYXRlVGltZSAgPSAoVUlOVDMyKXQ7CisgICAgZmlsZXRpbWUtPmR3SGlnaERhdGVUaW1lID0gKFVJTlQzMikodCA+PiAzMik7CisKKyNlbHNlICAvKiBJU08gdmVyc2lvbiAqLworCisgICAgVUlOVDMyIGEwOwkJCS8qIDE2IGJpdCwgbG93ICAgIGJpdHMgKi8KKyAgICBVSU5UMzIgYTE7CQkJLyogMTYgYml0LCBtZWRpdW0gYml0cyAqLworICAgIFVJTlQzMiBhMjsJCQkvKiAzMiBiaXQsIGhpZ2ggICBiaXRzICovCisKKyAgICAvKiBDb3B5IHRoZSB1bml4IHRpbWUgdG8gYTIvYTEvYTAgKi8KKyAgICBhMCA9ICB1bml4X3RpbWUgJiAweGZmZmY7CisgICAgYTEgPSAodW5peF90aW1lID4+IDE2KSAmIDB4ZmZmZjsKKyAgICAvKiBUaGlzIGlzIG9ic29sZXRlIGlmIHVuaXhfdGltZSBpcyBvbmx5IDMyIGJpdHMsIGJ1dCBpdCBkb2VzIG5vdCBodXJ0LgorICAgICAgIERvIG5vdCByZXBsYWNlIHRoaXMgYnkgPj4gMzIsIGl0IGdpdmVzIGEgY29tcGlsZXIgd2FybmluZyBhbmQgaXQgZG9lcworICAgICAgIG5vdCB3b3JrLiAqLworICAgIGEyID0gKHVuaXhfdGltZSA+PSAwID8gKHVuaXhfdGltZSA+PiAxNikgPj4gMTYgOgorCSAgfigofnVuaXhfdGltZSA+PiAxNikgPj4gMTYpKTsKKworICAgIC8qIE11bHRpcGx5IGEgYnkgMTAwMDAwMDAgKGEgPSBhMi9hMS9hMCkKKyAgICAgICBTcGxpdCB0aGUgZmFjdG9yIGludG8gMTAwMDAgKiAxMDAwIHdoaWNoIGFyZSBib3RoIGxlc3MgdGhhbiAweGZmZmYuICovCisgICAgYTAgKj0gMTAwMDA7CisgICAgYTEgPSBhMSAqIDEwMDAwICsgKGEwID4+IDE2KTsKKyAgICBhMiA9IGEyICogMTAwMDAgKyAoYTEgPj4gMTYpOworICAgIGEwICY9IDB4ZmZmZjsKKyAgICBhMSAmPSAweGZmZmY7CisKKyAgICBhMCAqPSAxMDAwOworICAgIGExID0gYTEgKiAxMDAwICsgKGEwID4+IDE2KTsKKyAgICBhMiA9IGEyICogMTAwMCArIChhMSA+PiAxNik7CisgICAgYTAgJj0gMHhmZmZmOworICAgIGExICY9IDB4ZmZmZjsKKworICAgIC8qIEFkZCB0aGUgdGltZSBkaWZmZXJlbmNlIGFuZCB0aGUgcmVtYWluZGVyICovCisgICAgYTAgKz0gMzI3NjggKyAocmVtYWluZGVyICYgMHhmZmZmKTsKKyAgICBhMSArPSA1NDU5MCArIChyZW1haW5kZXIgPj4gMTYgICApICsgKGEwID4+IDE2KTsKKyAgICBhMiArPSAyNzExMTkwMiAgICAgICAgICAgICAgICAgICAgICsgKGExID4+IDE2KTsKKyAgICBhMCAmPSAweGZmZmY7CisgICAgYTEgJj0gMHhmZmZmOworCisgICAgLyogU2V0IGZpbGV0aW1lICovCisgICAgZmlsZXRpbWUtPmR3TG93RGF0ZVRpbWUgID0gKGExIDw8IDE2KSArIGEwOworICAgIGZpbGV0aW1lLT5kd0hpZ2hEYXRlVGltZSA9IGEyOworI2VuZGlmCiB9CiAKIApAQCAtMTIxOSwxMyArMTMyNCw5NSBAQAogICogICAgICAgICAgIERPU0ZTX0ZpbGVUaW1lVG9Vbml4VGltZQogICoKICAqIENvbnZlcnQgYSBGSUxFVElNRSBmb3JtYXQgdG8gVW5peCB0aW1lLgotICogSWYgbm90IE5VTEwsICdyZW1haW5kZXInIGNvbnRhaW5zIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIGZpbGV0aW1lLgorICogSWYgbm90IE5VTEwsICdyZW1haW5kZXInIGNvbnRhaW5zIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIGZpbGV0aW1lLAorICogaW4gdGhlIHJhbmdlIG9mIFswLi45OTk5OTk5XSAoZXZlbiBpZiB0aW1lX3QgaXMgbmVnYXRpdmUpLgogICovCiB0aW1lX3QgRE9TRlNfRmlsZVRpbWVUb1VuaXhUaW1lKCBjb25zdCBGSUxFVElNRSAqZmlsZXRpbWUsIERXT1JEICpyZW1haW5kZXIgKQogewotICAgIC8qIEZJWE1FIDotKSAqLwotICAgIGlmIChyZW1haW5kZXIpICpyZW1haW5kZXIgPSAwOwotICAgIHJldHVybiBmaWxldGltZS0+ZHdMb3dEYXRlVGltZTsKKyAgICAvKiBSZWFkIHRoZSBjb21tZW50IGluIHRoZSBmdW5jdGlvbiBET1NGU19Vbml4VGltZVRvRmlsZVRpbWUuICovCisjaWYgVVNFX0xPTkdfTE9ORworCisgICAgbG9uZyBsb25nIGludCB0ID0gZmlsZXRpbWUtPmR3SGlnaERhdGVUaW1lOworICAgIHQgPDw9IDMyOworICAgIHQgKz0gKFVJTlQzMilmaWxldGltZS0+ZHdMb3dEYXRlVGltZTsKKyAgICB0IC09IDExNjQ0NDczNjAwMDAwMDAwMExMOworICAgIGlmICh0IDwgMCkKKyAgICB7CisJaWYgKHJlbWFpbmRlcikgKnJlbWFpbmRlciA9IDk5OTk5OTkgLSAoLXQgLSAxKSAlIDEwMDAwMDAwOworCXJldHVybiAtMSAtICgoLXQgLSAxKSAvIDEwMDAwMDAwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwlpZiAocmVtYWluZGVyKSAqcmVtYWluZGVyID0gdCAlIDEwMDAwMDAwOworCXJldHVybiB0IC8gMTAwMDAwMDA7CisgICAgfQorCisjZWxzZSAgLyogSVNPIHZlcnNpb24gKi8KKworICAgIFVJTlQzMiBhMDsJCQkvKiAxNiBiaXQsIGxvdyAgICBiaXRzICovCisgICAgVUlOVDMyIGExOwkJCS8qIDE2IGJpdCwgbWVkaXVtIGJpdHMgKi8KKyAgICBVSU5UMzIgYTI7CQkJLyogMzIgYml0LCBoaWdoICAgYml0cyAqLworICAgIFVJTlQzMiByOwkJCS8qIHJlbWFpbmRlciBvZiBkaXZpc2lvbiAqLworICAgIHVuc2lnbmVkIGludCBjYXJyeTsJCS8qIGNhcnJ5IGJpdCBmb3Igc3VidHJhY3Rpb24gKi8KKyAgICBpbnQgbmVnYXRpdmU7CQkvKiB3aGV0aGVyIGEgcmVwcmVzZW50cyBhIG5lZ2F0aXZlIHZhbHVlICovCisKKyAgICAvKiBDb3B5IHRoZSB0aW1lIHZhbHVlcyB0byBhMi9hMS9hMCAqLworICAgIGEyID0gIChVSU5UMzIpZmlsZXRpbWUtPmR3SGlnaERhdGVUaW1lOworICAgIGExID0gKChVSU5UMzIpZmlsZXRpbWUtPmR3TG93RGF0ZVRpbWUgKSA+PiAxNjsKKyAgICBhMCA9ICgoVUlOVDMyKWZpbGV0aW1lLT5kd0xvd0RhdGVUaW1lICkgJiAweGZmZmY7CisKKyAgICAvKiBTdWJ0cmFjdCB0aGUgdGltZSBkaWZmZXJlbmNlICovCisgICAgaWYgKGEwID49IDMyNzY4ICAgICAgICAgICApIGEwIC09ICAgICAgICAgICAgIDMyNzY4ICAgICAgICAsIGNhcnJ5ID0gMDsKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgYTAgKz0gKDEgPDwgMTYpIC0gMzI3NjggICAgICAgICwgY2FycnkgPSAxOworCisgICAgaWYgKGExID49IDU0NTkwICAgICsgY2FycnkpIGExIC09ICAgICAgICAgICAgIDU0NTkwICsgY2FycnksIGNhcnJ5ID0gMDsKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgYTEgKz0gKDEgPDwgMTYpIC0gNTQ1OTAgLSBjYXJyeSwgY2FycnkgPSAxOworCisgICAgYTIgLT0gMjcxMTE5MDIgKyBjYXJyeTsKKyAgICAKKyAgICAvKiBJZiBhIGlzIG5lZ2F0aXZlLCByZXBsYWNlIGEgYnkgKC0xLWEpICovCisgICAgbmVnYXRpdmUgPSAoYTIgPj0gKChVSU5UMzIpMSkgPDwgMzEpOworICAgIGlmIChuZWdhdGl2ZSkKKyAgICB7CisJLyogU2V0IGEgdG8gLWEgLSAxIChhIGlzIGEyL2ExL2EwKSAqLworCWEwID0gMHhmZmZmIC0gYTA7CisJYTEgPSAweGZmZmYgLSBhMTsKKwlhMiA9IH5hMjsKKyAgICB9CisKKyAgICAvKiBEaXZpZGUgYSBieSAxMDAwMDAwMCAoYSA9IGEyL2ExL2EwKSwgcHV0IHRoZSByZXN0IGludG8gci4KKyAgICAgICBTcGxpdCB0aGUgZGl2aXNvciBpbnRvIDEwMDAwICogMTAwMCB3aGljaCBhcmUgYm90aCBsZXNzIHRoYW4gMHhmZmZmLiAqLworICAgIGExICs9IChhMiAlIDEwMDAwKSA8PCAxNjsKKyAgICBhMiAvPSAgICAgICAxMDAwMDsKKyAgICBhMCArPSAoYTEgJSAxMDAwMCkgPDwgMTY7CisgICAgYTEgLz0gICAgICAgMTAwMDA7CisgICAgciAgID0gIGEwICUgMTAwMDA7CisgICAgYTAgLz0gICAgICAgMTAwMDA7CisKKyAgICBhMSArPSAoYTIgJSAxMDAwKSA8PCAxNjsKKyAgICBhMiAvPSAgICAgICAxMDAwOworICAgIGEwICs9IChhMSAlIDEwMDApIDw8IDE2OworICAgIGExIC89ICAgICAgIDEwMDA7CisgICAgciAgKz0gKGEwICUgMTAwMCkgKiAxMDAwMDsKKyAgICBhMCAvPSAgICAgICAxMDAwOworCisgICAgLyogSWYgYSB3YXMgbmVnYXRpdmUsIHJlcGxhY2UgYSBieSAoLTEtYSkgYW5kIHIgYnkgKDk5OTk5OTkgLSByKSAqLworICAgIGlmIChuZWdhdGl2ZSkKKyAgICB7CisJLyogU2V0IGEgdG8gLWEgLSAxIChhIGlzIGEyL2ExL2EwKSAqLworCWEwID0gMHhmZmZmIC0gYTA7CisJYTEgPSAweGZmZmYgLSBhMTsKKwlhMiA9IH5hMjsKKworICAgICAgICByICA9IDk5OTk5OTkgLSByOworICAgIH0KKworICAgIGlmIChyZW1haW5kZXIpICpyZW1haW5kZXIgPSByOworCisgICAgLyogRG8gbm90IHJlcGxhY2UgdGhpcyBieSA8PCAzMiwgaXQgZ2l2ZXMgYSBjb21waWxlciB3YXJuaW5nIGFuZCBpdCBkb2VzCisgICAgICAgbm90IHdvcmsuICovCisgICAgcmV0dXJuICgoKCh0aW1lX3QpYTIpIDw8IDE2KSA8PCAxNikgKyAoYTEgPDwgMTYpICsgYTA7CisjZW5kaWYKIH0KIAogCmRpZmYgLS1naXQgYS9maWxlcy9kcml2ZS5jIGIvZmlsZXMvZHJpdmUuYwppbmRleCAzZmI0M2MxLi5jNGE4OGRlIDEwMDY0NAotLS0gYS9maWxlcy9kcml2ZS5jCisrKyBiL2ZpbGVzL2RyaXZlLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChzdW4pIHx8IGRlZmluZWQoaHB1eCkKICNpbmNsdWRlIDxzeXMvdmZzLmg+CiAjZW5kaWYKLSNpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pCisjaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPHN5cy9tb3VudC5oPgogI2luY2x1ZGUgPHN5cy9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZmlsZXMvZmlsZS5jIGIvZmlsZXMvZmlsZS5jCmluZGV4IDE2MjVmMzkuLjhiMWMzMWUgMTAwNjQ0Ci0tLSBhL2ZpbGVzL2ZpbGUuYworKysgYi9maWxlcy9maWxlLmMKQEAgLTM4LDYgKzM4LDE5IEBACiAjZGVmaW5lIE1BUF9BTk9OIE1BUF9BTk9OWU1PVVMKICNlbmRpZgogCitzdHJ1Y3QgRE9TX0ZJTEVfTE9DSyB7CisgIHN0cnVjdCBET1NfRklMRV9MT0NLICoJbmV4dDsKKyAgRFdPUkQJCQkJYmFzZTsKKyAgRFdPUkQJCQkJbGVuOworICBEV09SRAkJCQlwcm9jZXNzSWQ7CisgIEZJTEVfT0JKRUNUICoJCQlkb3NfZmlsZTsKKyAgY2hhciAqCQkJdW5peF9uYW1lOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgRE9TX0ZJTEVfTE9DSyBET1NfRklMRV9MT0NLOworCitzdGF0aWMgRE9TX0ZJTEVfTE9DSyAqbG9ja3MgPSBOVUxMOworc3RhdGljIHZvaWQgRE9TX1JlbW92ZUZpbGVMb2NrcyhGSUxFX09CSkVDVCAqZmlsZSk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEZJTEVfQWxsb2MKQEAgLTc1LDYgKzg4LDggQEAKICAgICBGSUxFX09CSkVDVCAqZmlsZSA9IChGSUxFX09CSkVDVCAqKXB0cjsKICAgICBhc3NlcnQoIHB0ci0+dHlwZSA9PSBLMzJPQkpfRklMRSApOwogCisgICAgRE9TX1JlbW92ZUZpbGVMb2NrcyhmaWxlKTsKKwogICAgIGlmIChmaWxlLT51bml4X2hhbmRsZSAhPSAtMSkgY2xvc2UoIGZpbGUtPnVuaXhfaGFuZGxlICk7CiAgICAgaWYgKGZpbGUtPnVuaXhfbmFtZSkgSGVhcEZyZWUoIFN5c3RlbUhlYXAsIDAsIGZpbGUtPnVuaXhfbmFtZSApOwogICAgIHB0ci0+dHlwZSA9IEszMk9CSl9VTktOT1dOOwpAQCAtNjIxLDE2ICs2MzYsMTkgQEAKICAgICBjaGFyICpwOwogICAgIGludCB1bml4TW9kZTsKIAotICAgIGlmICghbmFtZSB8fCAhb2ZzKSByZXR1cm4gSEZJTEVfRVJST1IzMjsKKyAgICBpZiAoIW9mcykgcmV0dXJuIEhGSUxFX0VSUk9SMzI7CisKKworICAgIG9mcy0+Y0J5dGVzID0gc2l6ZW9mKE9GU1RSVUNUKTsKKyAgICBvZnMtPm5FcnJDb2RlID0gMDsKKyAgICBpZiAobW9kZSAmIE9GX1JFT1BFTikgbmFtZSA9IG9mcy0+c3pQYXRoTmFtZTsKIAogICAgIGlmICghbmFtZSkgewogCWZwcmludGYoc3RkZXJyLCAiRVJST1I6IEZJTEVfRG9PcGVuRmlsZSgpIGNhbGxlZCB3aXRoIGBuYW1lJyBzZXQgdG8gTlVMTCAhIFBsZWFzZSBkZWJ1Zy5cbiIpOwogIAogCXJldHVybiBIRklMRV9FUlJPUjMyOwogICAgIH0KLSAgICBvZnMtPmNCeXRlcyA9IHNpemVvZihPRlNUUlVDVCk7Ci0gICAgb2ZzLT5uRXJyQ29kZSA9IDA7Ci0gICAgaWYgKG1vZGUgJiBPRl9SRU9QRU4pIG5hbWUgPSBvZnMtPnN6UGF0aE5hbWU7CisKICAgICBkcHJpbnRmX2ZpbGUoIHN0ZGRlYiwgIk9wZW5GaWxlOiAlcyAlMDR4XG4iLCBuYW1lLCBtb2RlICk7CiAKICAgICAvKiB0aGUgd2F0Y29tIDEwLjYgSURFIHJlbGllcyBvbiBhIHZhbGlkIHBhdGggcmV0dXJuZWQgaW4gb2ZzLT5zelBhdGhOYW1lCkBAIC0xMjAxLDggKzEyMTksMTIgQEAKICAgICBpZiAoIWZpbGUpCiAgICAgewogCS8qIExpbnV4IEVJTlZBTCdzIG9uIHVzIGlmIHdlIGRvbid0IHBhc3MgTUFQX1BSSVZBVEUgdG8gYW4gYW5vbiBtbWFwICovCisjaWZkZWYgTUFQX1NIQVJFRAogCWZsYWdzICY9IH5NQVBfU0hBUkVEOworI2VuZGlmCisjaWZkZWYgTUFQX1BSSVZBVEUKIAlmbGFncyB8PSBNQVBfUFJJVkFURTsKKyNlbmRpZgogI2lmZGVmIE1BUF9BTk9OCiAgICAgICAgIGZsYWdzIHw9IE1BUF9BTk9OOwogI2Vsc2UKQEAgLTEyMzgsMjQgKzEyNjAsMTQ4IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgTW92ZUZpbGVFeDMyQSAgIChLRVJORUwzMi4/Pz8pCisgKgorICogCisgKi8KK0JPT0wzMiBNb3ZlRmlsZUV4MzJBKCBMUENTVFIgZm4xLCBMUENTVFIgZm4yLCBEV09SRCBmbGFnICkKK3sKKyAgICBET1NfRlVMTF9OQU1FIGZ1bGxfbmFtZTEsIGZ1bGxfbmFtZTI7CisgICAgaW50IG1vZGU9MDsgLyogbW9kZSA9PSAxOiB1c2UgY29weSAqLworCisgICAgZHByaW50Zl9maWxlKCBzdGRkZWIsICJNb3ZlRmlsZUV4MzJBKCVzLCVzLCUwNGx4KVxuIiwgZm4xLCBmbjIsIGZsYWcpOworCisgICAgaWYgKCFET1NGU19HZXRGdWxsTmFtZSggZm4xLCBUUlVFLCAmZnVsbF9uYW1lMSApKSByZXR1cm4gRkFMU0U7CisgICAgaWYgKGZuMikgeyAvKiAhZm4yIG1lYW5zIGRlbGV0ZSBmbjEgKi8KKyAgICAgIGlmICghRE9TRlNfR2V0RnVsbE5hbWUoIGZuMiwgRkFMU0UsICZmdWxsX25hbWUyICkpIHJldHVybiBGQUxTRTsKKyAgICAgIC8qIFNvdXJjZSBuYW1lIGFuZCB0YXJnZXQgcGF0aCBhcmUgdmFsaWQgKi8KKyAgICAgIGlmICggZnVsbF9uYW1lMS5kcml2ZSAhPSBmdWxsX25hbWUyLmRyaXZlKQorCS8qIHVzZSBjb3B5LCBpZiBhbGxvd2VkICovCisJaWYgKCEoZmxhZyAmIE1PVkVGSUxFX0NPUFlfQUxMT1dFRCkpIHsKKwkgIC8qIEZJWE1FOiBVc2UgcmlnaHQgZXJyb3IgY29kZSAqLworCSAgRE9TX0VSUk9SKCBFUl9GaWxlRXhpc3RzLCBFQ19FeGlzdHMsIFNBX0Fib3J0LCBFTF9EaXNrICk7CisJICByZXR1cm4gRkFMU0U7CisJfQorCWVsc2UgbW9kZSA9MTsKKyAgICAgIGlmIChET1NGU19HZXRGdWxsTmFtZSggZm4yLCBUUlVFLCAmZnVsbF9uYW1lMiApKSAKKwkvKiB0YXJnZXQgZXhpc3RzLCBjaGVjayBpZiB3ZSBtYXkgb3ZlcndyaXRlICovCisJaWYgKCEoZmxhZyAmIE1PVkVGSUxFX1JFUExBQ0VfRVhJU1RJTkcpKSB7CisJICAvKiBGSVhNRTogVXNlIHJpZ2h0IGVycm9yIGNvZGUgKi8KKwkgIERPU19FUlJPUiggRVJfQWNjZXNzRGVuaWVkLCBFQ19BY2Nlc3NEZW5pZWQsIFNBX0Fib3J0LCBFTF9EaXNrICk7CisJICByZXR1cm4gRkFMU0U7CisJfQorICAgIH0KKyAgICBlbHNlIC8qIGZuMiA9PSBOVUxMIG1lYW5zIGRlbGV0ZSBzb3VyY2UgKi8KKyAgICAgIGlmIChmbGFnICYgTU9WRUZJTEVfREVMQVlfVU5USUxfUkVCT09UKSB7CisJaWYgKGZsYWcgJiBNT1ZFRklMRV9DT1BZX0FMTE9XRUQpIHsgIAorCSAgZnByaW50Ziggc3RkZXJyLAorCQkgICAiTW92ZUZpbGVFeDMyQTogSWxsZWdhbCBmbGFnXG4iKTsKKwkgIERPU19FUlJPUiggRVJfR2VuZXJhbEZhaWx1cmUsIEVDX1N5c3RlbUZhaWx1cmUsIFNBX0Fib3J0LAorCQkgICAgIEVMX1Vua25vd24gKTsKKwkgIHJldHVybiBGQUxTRTsKKwl9CisJLyogRklYTUU6IChib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGUgOTcwNzA2KQorCSAgIFBlcmhhcHMgd2Ugc2hvdWxkIHF1ZXVlIHRoZXNlIGNvbW1hbmQgYW5kIGV4ZWN1dGUgaXQgCisJICAgd2hlbiBleGl0aW5nLi4uIFdoYXQgYWJvdXQgdXNpbmcgb25fZXhpdCgyKQorCSAgICovCisJZnByaW50Ziggc3RkZXJyLCJNb3ZlRmlsZUV4MzJBOiBQbGVhc2UgZGVsZXRlIGZpbGUgJXNcbiIsCisJCSBmdWxsX25hbWUxLmxvbmdfbmFtZSk7CisJZnByaW50Ziggc3RkZXJyLCIgICAgICAgICAgICAgICB3aGVuIFdpbmUgaGFzIGZpbmlzaGVkXG4iKTsKKwlmcHJpbnRmKCBzdGRlcnIsIiAgICAgICAgICAgICAgIGxpa2UgXCJybSAlc1wiXG4iLAorCQkgZnVsbF9uYW1lMS5sb25nX25hbWUpOworCXJldHVybiBUUlVFOworICAgICAgfQorICAgICAgZWxzZSBpZiAodW5saW5rKCBmdWxsX25hbWUxLmxvbmdfbmFtZSApID09IC0xKQorICAgICAgeworICAgICAgICBGSUxFX1NldERvc0Vycm9yKCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKyAgICAgIGVsc2UgIHJldHVybiBUUlVFOyAvKiBzdWNjZXNzZnVsbHkgZGVsZXRlZCAqLworCisgICAgaWYgKGZsYWcgJiBNT1ZFRklMRV9ERUxBWV9VTlRJTF9SRUJPT1QpIHsKKwkvKiBGSVhNRTogKGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZSA5NzA3MDYpCisJICAgUGVyaGFwcyB3ZSBzaG91bGQgcXVldWUgdGhlc2UgY29tbWFuZCBhbmQgZXhlY3V0ZSBpdCAKKwkgICB3aGVuIGV4aXRpbmcuLi4gV2hhdCBhYm91dCB1c2luZyBvbl9leGl0KDIpCisJICAgKi8KKwlmcHJpbnRmKCBzdGRlcnIsIk1vdmVGaWxlRXgzMkE6IFBsZWFzZSBtb3ZlIGV4aXN0aW5nIGZpbGUgJXNcbiIKKwkJICxmdWxsX25hbWUxLmxvbmdfbmFtZSk7CisJZnByaW50Ziggc3RkZXJyLCIgICAgICAgICAgICAgICB0byBmaWxlICVzXG4iCisJCSAsZnVsbF9uYW1lMi5sb25nX25hbWUpOworCWZwcmludGYoIHN0ZGVyciwiICAgICAgICAgICAgICAgd2hlbiBXaW5lIGhhcyBmaW5pc2hlZFxuIik7CisJZnByaW50Ziggc3RkZXJyLCIgICAgICAgICAgICAgICBsaWtlIFwiIG12ICVzICVzXCJcbiIsCisJCSBmdWxsX25hbWUxLmxvbmdfbmFtZSxmdWxsX25hbWUyLmxvbmdfbmFtZSk7CisJcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgaWYgKCFtb2RlKSAvKiBtb3ZlIHRoZSBmaWxlICovCisgICAgICBpZiAocmVuYW1lKCBmdWxsX25hbWUxLmxvbmdfbmFtZSwgZnVsbF9uYW1lMi5sb25nX25hbWUgKSA9PSAtMSkKKwl7CisJICBGSUxFX1NldERvc0Vycm9yKCk7CisJICByZXR1cm4gRkFMU0U7CisJfQorICAgICAgZWxzZSByZXR1cm4gVFJVRTsKKyAgICBlbHNlIC8qIGNvcHkgRmlsZSAqLworICAgICAgcmV0dXJuIENvcHlGaWxlMzJBKGZuMSwgZm4yLCAoIShmbGFnICYgTU9WRUZJTEVfUkVQTEFDRV9FWElTVElORykpKTsgCisgICAgCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIE1vdmVGaWxlRXgzMlcgICAoS0VSTkVMMzIuPz8/KQorICovCitCT09MMzIgTW92ZUZpbGVFeDMyVyggTFBDV1NUUiBmbjEsIExQQ1dTVFIgZm4yLCBEV09SRCBmbGFnICkKK3sKKyAgICBMUFNUUiBhZm4xID0gSEVBUF9zdHJkdXBXdG9BKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBmbjEgKTsKKyAgICBMUFNUUiBhZm4yID0gSEVBUF9zdHJkdXBXdG9BKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBmbjIgKTsKKyAgICBCT09MMzIgcmVzID0gTW92ZUZpbGVFeDMyQSggYWZuMSwgYWZuMiwgZmxhZyApOworICAgIEhlYXBGcmVlKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBhZm4xICk7CisgICAgSGVhcEZyZWUoIEdldFByb2Nlc3NIZWFwKCksIDAsIGFmbjIgKTsKKyAgICByZXR1cm4gcmVzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIE1vdmVGaWxlMzJBICAgKEtFUk5FTDMyLjM4NykKKyAqCisgKiAgTW92ZSBmaWxlIG9yIGRpcmVjdG9yeQogICovCiBCT09MMzIgTW92ZUZpbGUzMkEoIExQQ1NUUiBmbjEsIExQQ1NUUiBmbjIgKQogewogICAgIERPU19GVUxMX05BTUUgZnVsbF9uYW1lMSwgZnVsbF9uYW1lMjsKKyAgICBzdHJ1Y3Qgc3RhdCBmc3RhdDsKIAogICAgIGRwcmludGZfZmlsZSggc3RkZGViLCAiTW92ZUZpbGUzMkEoJXMsJXMpXG4iLCBmbjEsIGZuMiApOwogCiAgICAgaWYgKCFET1NGU19HZXRGdWxsTmFtZSggZm4xLCBUUlVFLCAmZnVsbF9uYW1lMSApKSByZXR1cm4gRkFMU0U7CisgICAgaWYgKERPU0ZTX0dldEZ1bGxOYW1lKCBmbjIsIFRSVUUsICZmdWxsX25hbWUyICkpIAorICAgICAgLyogVGhlIG5ldyBuYW1lIG11c3Qgbm90IGFscmVhZHkgZXhpc3QgKi8gCisgICAgICByZXR1cm4gRkFMU0U7CiAgICAgaWYgKCFET1NGU19HZXRGdWxsTmFtZSggZm4yLCBGQUxTRSwgJmZ1bGxfbmFtZTIgKSkgcmV0dXJuIEZBTFNFOwotICAgIC8qIEZJWE1FOiBzaG91bGQgbm90IHJlcGxhY2UgYW4gZXhpc3RpbmcgZmlsZSAqLwotICAgIC8qIEZJWE1FOiBzaG91bGQgaGFuZGxlIHJlbmFtaW5nIGFjcm9zcyBkZXZpY2VzICovCisKKyAgICBpZiAoZnVsbF9uYW1lMS5kcml2ZSA9PSBmdWxsX25hbWUyLmRyaXZlKSAvKiBtb3ZlICovCiAgICAgaWYgKHJlbmFtZSggZnVsbF9uYW1lMS5sb25nX25hbWUsIGZ1bGxfbmFtZTIubG9uZ19uYW1lICkgPT0gLTEpCiAgICAgewogICAgICAgICBGSUxFX1NldERvc0Vycm9yKCk7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9Ci0gICAgcmV0dXJuIFRSVUU7CisgICAgICBlbHNlIHJldHVybiBUUlVFOworICAgIGVsc2UgLypjb3B5ICovIHsKKyAgICAgIGlmIChzdGF0KCAgZnVsbF9uYW1lMS5sb25nX25hbWUsICZmc3RhdCApKQorCXsKKwkgIGRwcmludGZfZmlsZSggc3RkZGViLCAiSW52YWxpZCBzb3VyY2UgZmlsZSAlc1xuIiwKKwkJCWZ1bGxfbmFtZTEubG9uZ19uYW1lKTsKKwkgIEZJTEVfU2V0RG9zRXJyb3IoKTsKKwkgIHJldHVybiBGQUxTRTsKKwl9CisgICAgICBpZiAoU19JU0RJUihmc3RhdC5zdF9tb2RlKSkgeworCS8qIE5vIE1vdmUgZm9yIGRpcmVjdG9yaWVzIGFjcm9zcyBmaWxlIHN5c3RlbXMgKi8KKwkvKiBGSVhNRTogVXNlIHJpZ2h0IGVycm9yIGNvZGUgKi8KKwlET1NfRVJST1IoIEVSX0dlbmVyYWxGYWlsdXJlLCBFQ19TeXN0ZW1GYWlsdXJlLCBTQV9BYm9ydCwKKwkJICAgRUxfVW5rbm93biApOworCXJldHVybiBGQUxTRTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKwlyZXR1cm4gQ29weUZpbGUzMkEoZm4xLCBmbjIsIFRSVUUpOyAvKmZhaWwsIGlmIGV4aXN0ICovIAorICAgIH0KIH0KIAogCkBAIC0xMzY1LDMgKzE1MTEsMTc1IEBACiAgICAgRklMRV9SZWxlYXNlRmlsZSggZmlsZSApOwogICAgIHJldHVybiBUUlVFOwogfQorCisvKiBMb2NrcyBuZWVkIHRvIGJlIG1pcnJvcmVkIGJlY2F1c2UgdW5peCBmaWxlIGxvY2tpbmcgaXMgYmFzZWQKKyAqIG9uIHRoZSBwaWQuIEluc2lkZSBvZiB3aW5lIHRoZXJlIGNhbiBiZSBtdWx0aXBsZSBXSU5FIHByb2Nlc3NlcworICogdGhhdCBzaGFyZSB0aGUgc2FtZSB1bml4IHBpZC4KKyAqIFJlYWQncyBhbmQgd3JpdGVzIHNob3VsZCBjaGVjayB0aGVzZSBsb2NrcyBhbHNvIC0gbm90IHN1cmUKKyAqIGhvdyBjcml0aWNhbCB0aGF0IGlzIGF0IHRoaXMgcG9pbnQgKEZJWE1FKS4KKyAqLworCitzdGF0aWMgQk9PTDMyIERPU19BZGRMb2NrKEZJTEVfT0JKRUNUICpmaWxlLCBzdHJ1Y3QgZmxvY2sgKmYpCit7CisgIERPU19GSUxFX0xPQ0sgKmN1cnI7CisgIERXT1JECQlwcm9jZXNzSWQ7CisKKyAgcHJvY2Vzc0lkID0gR2V0Q3VycmVudFByb2Nlc3NJZCgpOworCisgIC8qIGNoZWNrIGlmIGxvY2sgb3ZlcmxhcHMgYSBjdXJyZW50IGxvY2sgZm9yIHRoZSBzYW1lIGZpbGUgKi8KKyAgZm9yIChjdXJyID0gbG9ja3M7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0KSB7CisgICAgaWYgKHN0cmNtcChjdXJyLT51bml4X25hbWUsIGZpbGUtPnVuaXhfbmFtZSkgPT0gMCkgeworICAgICAgaWYgKChmLT5sX3N0YXJ0IDwgKGN1cnItPmJhc2UgKyBjdXJyLT5sZW4pKSAmJgorCSAgKChmLT5sX3N0YXJ0ICsgZi0+bF9sZW4pID4gY3Vyci0+YmFzZSkpIHsKKwkvKiByZWdpb24gb3ZlcmxhcHMgKi8KKwlyZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgfQorICB9CisKKyAgY3VyciA9IEhlYXBBbGxvYyggU3lzdGVtSGVhcCwgMCwgc2l6ZW9mKERPU19GSUxFX0xPQ0spICk7CisgIGN1cnItPnByb2Nlc3NJZCA9IEdldEN1cnJlbnRQcm9jZXNzSWQoKTsKKyAgY3Vyci0+YmFzZSA9IGYtPmxfc3RhcnQ7CisgIGN1cnItPmxlbiA9IGYtPmxfbGVuOworICBjdXJyLT51bml4X25hbWUgPSBIRUFQX3N0cmR1cEEoIFN5c3RlbUhlYXAsIDAsIGZpbGUtPnVuaXhfbmFtZSk7CisgIGN1cnItPm5leHQgPSBsb2NrczsKKyAgY3Vyci0+ZG9zX2ZpbGUgPSBmaWxlOworICBsb2NrcyA9IGN1cnI7CisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBET1NfUmVtb3ZlRmlsZUxvY2tzKEZJTEVfT0JKRUNUICpmaWxlKQoreworICBEV09SRAkJcHJvY2Vzc0lkOworICBET1NfRklMRV9MT0NLICoqY3VycjsKKyAgRE9TX0ZJTEVfTE9DSyAqcmVtOworCisgIHByb2Nlc3NJZCA9IEdldEN1cnJlbnRQcm9jZXNzSWQoKTsKKyAgY3VyciA9ICZsb2NrczsKKyAgd2hpbGUgKCpjdXJyKSB7CisgICAgaWYgKCgqY3VyciktPmRvc19maWxlID09IGZpbGUpIHsKKyAgICAgIHJlbSA9ICpjdXJyOworICAgICAgKmN1cnIgPSAoKmN1cnIpLT5uZXh0OworICAgICAgSGVhcEZyZWUoIFN5c3RlbUhlYXAsIDAsIHJlbS0+dW5peF9uYW1lICk7CisgICAgICBIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgcmVtICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGN1cnIgPSAmKCpjdXJyKS0+bmV4dDsKKyAgfQorfQorCitzdGF0aWMgQk9PTDMyIERPU19SZW1vdmVMb2NrKEZJTEVfT0JKRUNUICpmaWxlLCBzdHJ1Y3QgZmxvY2sgKmYpCit7CisgIERXT1JECQlwcm9jZXNzSWQ7CisgIERPU19GSUxFX0xPQ0sgKipjdXJyOworICBET1NfRklMRV9MT0NLICpyZW07CisKKyAgcHJvY2Vzc0lkID0gR2V0Q3VycmVudFByb2Nlc3NJZCgpOworICBmb3IgKGN1cnIgPSAmbG9ja3M7ICpjdXJyOyBjdXJyID0gJigqY3VyciktPm5leHQpIHsKKyAgICBpZiAoKCpjdXJyKS0+cHJvY2Vzc0lkID09IHByb2Nlc3NJZCAmJgorCSgqY3VyciktPmRvc19maWxlID09IGZpbGUgJiYKKwkoKmN1cnIpLT5iYXNlID09IGYtPmxfc3RhcnQgJiYKKwkoKmN1cnIpLT5sZW4gPT0gZi0+bF9sZW4pIHsKKyAgICAgIC8qIHRoaXMgaXMgdGhlIHNhbWUgbG9jayAqLworICAgICAgcmVtID0gKmN1cnI7CisgICAgICAqY3VyciA9ICgqY3VyciktPm5leHQ7CisgICAgICBIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgcmVtLT51bml4X25hbWUgKTsKKyAgICAgIEhlYXBGcmVlKCBTeXN0ZW1IZWFwLCAwLCByZW0gKTsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgfQorICAvKiBubyBtYXRjaGluZyBsb2NrIGZvdW5kICovCisgIHJldHVybiBGQUxTRTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBMb2NrRmlsZSAgIChLRVJORUwzMi41MTEpCisgKi8KK0JPT0wzMiBMb2NrRmlsZSgKKwlIRklMRTMyIGhGaWxlLERXT1JEIGR3RmlsZU9mZnNldExvdyxEV09SRCBkd0ZpbGVPZmZzZXRIaWdoLAorCURXT1JEIG5OdW1iZXJPZkJ5dGVzVG9Mb2NrTG93LERXT1JEIG5OdW1iZXJPZkJ5dGVzVG9Mb2NrSGlnaCApCit7CisgIHN0cnVjdCBmbG9jayBmOworICBGSUxFX09CSkVDVCAqZmlsZTsKKworICBkcHJpbnRmX2ZpbGUoc3RkZGViLCAiTG9ja0ZpbGUzMjogaGFuZGxlICVkIG9mZnNldGxvdz0lbGQgb2Zmc2V0aGlnaD0lbGQgbmJ5dGVzbG93PSVsZCBuYnl0ZXNoaWdoPSVsZFxuIiwKKwkgICAgICAgaEZpbGUsIGR3RmlsZU9mZnNldExvdywgZHdGaWxlT2Zmc2V0SGlnaCwKKwkgICAgICAgbk51bWJlck9mQnl0ZXNUb0xvY2tMb3csIG5OdW1iZXJPZkJ5dGVzVG9Mb2NrSGlnaCk7CisKKyAgaWYgKGR3RmlsZU9mZnNldEhpZ2ggfHwgbk51bWJlck9mQnl0ZXNUb0xvY2tIaWdoKSB7CisgICAgZHByaW50Zl9maWxlKHN0ZGRlYiwgIkxvY2tGaWxlMzI6IFVuaW1wbGVtZW50ZWQgYnl0ZXMgPiAzMmJpdHNcbiIpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorCisgIGYubF9zdGFydCA9IGR3RmlsZU9mZnNldExvdzsKKyAgZi5sX2xlbiA9IG5OdW1iZXJPZkJ5dGVzVG9Mb2NrTG93OworICBmLmxfd2hlbmNlID0gU0VFS19TRVQ7CisgIGYubF9waWQgPSAwOworICBmLmxfdHlwZSA9IEZfV1JMQ0s7CisKKyAgaWYgKCEoZmlsZSA9IEZJTEVfR2V0RmlsZShoRmlsZSkpKSByZXR1cm4gRkFMU0U7CisKKyAgLyogc2hhZG93IGxvY2tzIGludGVybmFsbHkgKi8KKyAgaWYgKCFET1NfQWRkTG9jayhmaWxlLCAmZikpIHsKKyAgICBET1NfRVJST1IoIEVSX0xvY2tWaW9sYXRpb24sIEVDX0FjY2Vzc0RlbmllZCwgU0FfSWdub3JlLCBFTF9EaXNrICk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgLyogRklYTUU6IFVuaXggbG9ja2luZyBjb21tZW50ZWQgb3V0IGZvciBub3csIGRvZXNuJ3Qgd29yayB3aXRoIEV4Y2VsICovCisjaWZkZWYgVVNFX1VOSVhfTE9DS1MKKyAgaWYgKGZjbnRsKGZpbGUtPnVuaXhfaGFuZGxlLCBGX1NFVExLLCAmZikgPT0gLTEpIHsKKyAgICBpZiAoZXJybm8gPT0gRUFDQ0VTIHx8IGVycm5vID09IEVBR0FJTikgeworICAgICAgRE9TX0VSUk9SKCBFUl9Mb2NrVmlvbGF0aW9uLCBFQ19BY2Nlc3NEZW5pZWQsIFNBX0lnbm9yZSwgRUxfRGlzayApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIEZJTEVfU2V0RG9zRXJyb3IoKTsKKyAgICB9CisgICAgLyogcmVtb3ZlIG91ciBpbnRlcm5hbCBjb3B5IG9mIHRoZSBsb2NrICovCisgICAgRE9TX1JlbW92ZUxvY2soZmlsZSwgJmYpOworICAgIHJldHVybiBGQUxTRTsKKyAgfQorI2VuZGlmCisgIHJldHVybiBUUlVFOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIFVubG9ja0ZpbGUgICAoS0VSTkVMMzIuNzAzKQorICovCitCT09MMzIgVW5sb2NrRmlsZSgKKwlIRklMRTMyIGhGaWxlLERXT1JEIGR3RmlsZU9mZnNldExvdyxEV09SRCBkd0ZpbGVPZmZzZXRIaWdoLAorCURXT1JEIG5OdW1iZXJPZkJ5dGVzVG9VbmxvY2tMb3csRFdPUkQgbk51bWJlck9mQnl0ZXNUb1VubG9ja0hpZ2ggKQoreworICBGSUxFX09CSkVDVCAqZmlsZTsKKyAgc3RydWN0IGZsb2NrIGY7CisKKyAgZHByaW50Zl9maWxlKHN0ZGRlYiwgIlVubG9ja0ZpbGUzMjogaGFuZGxlICVkIG9mZnNldGxvdz0lbGQgb2Zmc2V0aGlnaD0lbGQgbmJ5dGVzbG93PSVsZCBuYnl0ZXNoaWdoPSVsZFxuIiwKKwkgICAgICAgaEZpbGUsIGR3RmlsZU9mZnNldExvdywgZHdGaWxlT2Zmc2V0SGlnaCwKKwkgICAgICAgbk51bWJlck9mQnl0ZXNUb1VubG9ja0xvdywgbk51bWJlck9mQnl0ZXNUb1VubG9ja0hpZ2gpOworCisgIGlmIChkd0ZpbGVPZmZzZXRIaWdoIHx8IG5OdW1iZXJPZkJ5dGVzVG9VbmxvY2tIaWdoKSB7CisgICAgZHByaW50Zl9maWxlKHN0ZGRlYiwgIlVubG9ja0ZpbGUzMjogVW5pbXBsZW1lbnRlZCBieXRlcyA+IDMyYml0c1xuIik7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgZi5sX3N0YXJ0ID0gZHdGaWxlT2Zmc2V0TG93OworICBmLmxfbGVuID0gbk51bWJlck9mQnl0ZXNUb1VubG9ja0xvdzsKKyAgZi5sX3doZW5jZSA9IFNFRUtfU0VUOworICBmLmxfcGlkID0gMDsKKyAgZi5sX3R5cGUgPSBGX1VOTENLOworCisgIGlmICghKGZpbGUgPSBGSUxFX0dldEZpbGUoaEZpbGUpKSkgcmV0dXJuIEZBTFNFOworCisgIERPU19SZW1vdmVMb2NrKGZpbGUsICZmKTsJLyogb2sgaWYgZmFpbHMgLSBtYXkgYmUgYW5vdGhlciB3aW5lICovCisKKyAgLyogRklYTUU6IFVuaXggbG9ja2luZyBjb21tZW50ZWQgb3V0IGZvciBub3csIGRvZXNuJ3Qgd29yayB3aXRoIEV4Y2VsICovCisjaWZkZWYgVVNFX1VOSVhfTE9DS1MKKyAgaWYgKGZjbnRsKGZpbGUtPnVuaXhfaGFuZGxlLCBGX1NFVExLLCAmZikgPT0gLTEpIHsKKyAgICBGSUxFX1NldERvc0Vycm9yKCk7CisgICAgcmV0dXJuIEZBTFNFOworICB9CisjZW5kaWYKKyAgcmV0dXJuIFRSVUU7Cit9CisKZGlmZiAtLWdpdCBhL2ZpbGVzL3Byb2ZpbGUuYyBiL2ZpbGVzL3Byb2ZpbGUuYwppbmRleCBkNTM3YThlLi42ZmFjOGViIDEwMDY0NAotLS0gYS9maWxlcy9wcm9maWxlLmMKKysrIGIvZmlsZXMvcHJvZmlsZS5jCkBAIC02MDQsNiArNjA0LDExOCBAQAogfQogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgIGludCAgUFJPRklMRV9FbnVtZXJhdGVXaW5lSW5pU2VjdGlvbigKKyAqICAgICBjaGFyIGNvbnN0ICAqc2VjdGlvbiwgIC8vIE5hbWUgb2YgdGhlIHNlY3Rpb24gdG8gZW51bWVyYXRlCisgKiAgICAgdm9pZCAgKCpjYmZuKShjaGFyIGNvbnN0ICprZXksIGNoYXIgY29uc3QgKnZhbHVlLCB2b2lkICp1c2VyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZHJlc3Mgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiAgICAgdm9pZCAgKnVzZXIgKSAgICAgICAgICAvLyBVc2VyLXNwZWNpZmllZCBwb2ludGVyLgorICoKKyAqICAgRm9yIGVhY2ggZW50cnkgaW4gYSBzZWN0aW9uIGluIHRoZSB3aW5lLmNvbmYgZmlsZSwgdGhpcyBmdW5jdGlvbiB3aWxsCisgKiAgIGNhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmdW5jdGlvbiwgaW5mb3JtaW5nIGl0IG9mIGVhY2gga2V5IGFuZAorICogICB2YWx1ZS4gIEFuIG9wdGlvbmFsIHVzZXIgcG9pbnRlciBtYXkgYmUgcGFzc2VkIHRvIGl0IChpZiB0aGlzIGlzIG5vdAorICogICBuZWVkZWQsIHBhc3MgTlVMTCB0aHJvdWdoIGl0IGFuZCBpZ25vcmUgdGhlIHZhbHVlIGluIHRoZSBjYWxsYmFjaworICogICBmdW5jdGlvbikuCisgKgorICogICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gbXVzdCBhY2NlcHQgdGhyZWUgcGFyYW1ldGVyczoKKyAqICAgICAgVGhlIG5hbWUgb2YgdGhlIGtleSAoY2hhciBjb25zdCAqKQorICogICAgICBUaGUgdmFsdWUgb2YgdGhlIGtleSAoY2hhciBjb25zdCAqKQorICogICAgICBBIHVzZXItc3BlY2lmaWVkIHBhcmFtZXRlciAodm9pZCAqKQorICogICBOb3RlIHRoYXQgdGhlIGZpcnN0IHR3byBhcmUgY2hhciBDT05TVCAqJ3MsIG5vdCBjaGFyIConcyEgIFRoZSBjYWxsYmFjaworICogICBNVVNUIG5vdCBtb2RpZnkgdGhlc2Ugc3RyaW5ncyEKKyAqCisgKiAgIFRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiAgIHdhcyBjYWxsZWQuCisgKi8KK2ludCAgUFJPRklMRV9FbnVtZXJhdGVXaW5lSW5pU2VjdGlvbigKKyAgICBjaGFyIGNvbnN0ICAqc2VjdGlvbiwKKyAgICB2b2lkICAoKmNiZm4pKGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCAqLCB2b2lkICopLAorICAgIHZvaWQgICp1c2VycHRyICkKK3sKKyAgICBQUk9GSUxFU0VDVElPTiAgKnNjYW5zZWN0OworICAgIFBST0ZJTEVLRVkgICpzY2Fua2V5OworICAgIGludCAgY2FsbHMgPSAwOworCisgICAgLyogU2VhcmNoIGZvciB0aGUgY29ycmVjdCBzZWN0aW9uICovCisgICAgZm9yKHNjYW5zZWN0ID0gV2luZVByb2ZpbGU7IHNjYW5zZWN0OyBzY2Fuc2VjdCA9IHNjYW5zZWN0LT5uZXh0KSB7CisJaWYoc2NhbnNlY3QtPm5hbWUgJiYgIWxzdHJjbXBpMzJBKHNjYW5zZWN0LT5uYW1lLCBzZWN0aW9uKSkgeworCisJICAgIC8qIEVudW1lcmF0ZSBlYWNoIGtleSB3aXRoIHRoZSBjYWxsYmFjayAqLworCSAgICBmb3Ioc2NhbmtleSA9IHNjYW5zZWN0LT5rZXk7IHNjYW5rZXk7IHNjYW5rZXkgPSBzY2Fua2V5LT5uZXh0KSB7CisKKwkJLyogSWdub3JlIGJsYW5rIGVudHJpZXMgLS0gdGhlc2Ugc2hvdWxkbid0IGV4aXN0LCBidXQgbGV0J3MKKwkJICAgYmUgZXh0cmEgY2FyZWZ1bCAqLworCQlpZihzY2Fua2V5LT5uYW1lWzBdKSB7CisJCSAgICBjYmZuKHNjYW5rZXktPm5hbWUsIHNjYW5rZXktPnZhbHVlLCB1c2VycHRyKTsKKwkJICAgICsrY2FsbHM7CisJCX0KKwkgICAgfQorCQorCSAgICBicmVhazsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIGNhbGxzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgIGludCAgUFJPRklMRV9HZXRXaW5lSW5pQm9vbCgKKyAqICAgICAgY2hhciBjb25zdCAgKnNlY3Rpb24sCisgKiAgICAgIGNoYXIgY29uc3QgICprZXlfbmFtZSwKKyAqICAgICAgaW50ICBkZWYgKQorICoKKyAqICAgUmVhZHMgYSBib29sZWFuIHZhbHVlIGZyb20gdGhlIHdpbmUuaW5pIGZpbGUuICBUaGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvCisgKiAgIGJlIHVzZXItZnJpZW5kbHkgYnkgYWNjZXB0aW5nICduJywgJ04nIChubyksICdmJywgJ0YnIChmYWxzZSksIG9yICcwJworICogICAoemVybykgZm9yIGZhbHNlLCAneScsICdZJyAoeWVzKSwgJ3QnLCAnVCcgKHRydWUpLCBvciAnMScgKG9uZSkgZm9yCisgKiAgIHRydWUuICBBbnl0aGluZyBlbHNlIHJlc3VsdHMgaW4gdGhlIHJldHVybiBvZiB0aGUgZGVmYXVsdCB2YWx1ZS4KKyAqCisgKiAgIFRoaXMgZnVuY3Rpb24gdXNlcyAxIHRvIGluZGljYXRlIHRydWUsIGFuZCAwIGZvciBmYWxzZS4gIFlvdSBjYW4gY2hlY2sKKyAqICAgZm9yIGV4aXN0ZW5jZSBieSBzZXR0aW5nIGRlZiB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiAwIG9yIDEgYW5kCisgKiAgIGV4YW1pbmluZyB0aGUgcmV0dXJuIHZhbHVlLgorICovCitpbnQgIFBST0ZJTEVfR2V0V2luZUluaUJvb2woCisgICAgY2hhciBjb25zdCAgKnNlY3Rpb24sCisgICAgY2hhciBjb25zdCAgKmtleV9uYW1lLAorICAgIGludCAgZGVmICkKK3sKKyAgICBjaGFyICBrZXlfdmFsdWVbMl07CisgICAgaW50ICByZXR2YWw7CisKKyAgICBQUk9GSUxFX0dldFdpbmVJbmlTdHJpbmcoc2VjdGlvbiwga2V5X25hbWUsICJ+Iiwga2V5X3ZhbHVlLCAyKTsKKworICAgIHN3aXRjaChrZXlfdmFsdWVbMF0pIHsKKyAgICBjYXNlICduJzoKKyAgICBjYXNlICdOJzoKKyAgICBjYXNlICdmJzoKKyAgICBjYXNlICdGJzoKKyAgICBjYXNlICcwJzoKKwlyZXR2YWwgPSAwOworCWJyZWFrOworCisgICAgY2FzZSAneSc6CisgICAgY2FzZSAnWSc6CisgICAgY2FzZSAndCc6CisgICAgY2FzZSAnVCc6CisgICAgY2FzZSAnMSc6CisJcmV0dmFsID0gMTsKKwlicmVhazsKKworICAgIGRlZmF1bHQ6CisJcmV0dmFsID0gZGVmOworICAgIH0KKworICAgIGRwcmludGZfcHJvZmlsZShzdGRkZWIsICJQUk9GSUxFX0dldFdpbmVJbmlCb29sKFwiJXNcIiwgXCIlc1wiLCAlcyksICIKKwkJICAgICJbJWNdLCByZXQgJXMuXG4iLCBzZWN0aW9uLCBrZXlfbmFtZSwKKwkJICAgIGRlZiA/ICJUUlVFIiA6ICJGQUxTRSIsIGtleV92YWx1ZVswXSwKKwkJICAgIHJldHZhbCA/ICJUUlVFIiA6ICJGQUxTRSIpOworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBQUk9GSUxFX0xvYWRXaW5lSW5pCiAgKgpkaWZmIC0tZ2l0IGEvaWYxNjMyL2tlcm5lbC5zcGVjIGIvaWYxNjMyL2tlcm5lbC5zcGVjCmluZGV4IDZjNGM5YTkuLjcxNTM4ODAgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9rZXJuZWwuc3BlYworKysgYi9pZjE2MzIva2VybmVsLnNwZWMKQEAgLTQzLDEwICs0MywxMCBAQAogNDIgIHJldHVybiBEaXNhYmxlRG9zIDAgMAogNDUgIHBhc2NhbDE2IExvYWRNb2R1bGUoc3RyIHB0cikgTG9hZE1vZHVsZTE2CiA0NiAgcGFzY2FsMTYgRnJlZU1vZHVsZSh3b3JkKSBGcmVlTW9kdWxlMTYKLTQ3ICBwYXNjYWwxNiBHZXRNb2R1bGVIYW5kbGUoc2VncHRyKSBXSU4xNl9HZXRNb2R1bGVIYW5kbGUKKzQ3ICBwYXNjYWwxNiBHZXRNb2R1bGVIYW5kbGUoc2Vnc3RyKSBXSU4xNl9HZXRNb2R1bGVIYW5kbGUKIDQ4ICBwYXNjYWwxNiBHZXRNb2R1bGVVc2FnZSh3b3JkKSBHZXRNb2R1bGVVc2FnZQogNDkgIHBhc2NhbDE2IEdldE1vZHVsZUZpbGVOYW1lKHdvcmQgcHRyIHNfd29yZCkgR2V0TW9kdWxlRmlsZU5hbWUxNgotNTAgIHBhc2NhbCBHZXRQcm9jQWRkcmVzcyh3b3JkIHNlZ3B0cikgR2V0UHJvY0FkZHJlc3MxNgorNTAgIHBhc2NhbCBHZXRQcm9jQWRkcmVzcyh3b3JkIHNlZ3N0cikgR2V0UHJvY0FkZHJlc3MxNgogNTEgIHBhc2NhbCBNYWtlUHJvY0luc3RhbmNlKHNlZ3B0ciB3b3JkKSBNYWtlUHJvY0luc3RhbmNlMTYKIDUyICBwYXNjYWwxNiBGcmVlUHJvY0luc3RhbmNlKHNlZ3B0cikgRnJlZVByb2NJbnN0YW5jZTE2CiA1MyAgc3R1YiBDYWxsUHJvY0luc3RhbmNlCkBAIC01NiwxNyArNTYsMTcgQEAKIDU3ICBwYXNjYWwxNiBHZXRQcm9maWxlSW50KHN0ciBzdHIgc193b3JkKSBHZXRQcm9maWxlSW50MTYKIDU4ICBwYXNjYWwxNiBHZXRQcm9maWxlU3RyaW5nKHN0ciBzdHIgc3RyIHB0ciB3b3JkKSBHZXRQcm9maWxlU3RyaW5nMTYKIDU5ICBwYXNjYWwxNiBXcml0ZVByb2ZpbGVTdHJpbmcoc3RyIHN0ciBzdHIpIFdyaXRlUHJvZmlsZVN0cmluZzE2Ci02MCAgcGFzY2FsMTYgRmluZFJlc291cmNlKHdvcmQgc2VncHRyIHNlZ3B0cikgRmluZFJlc291cmNlMTYKKzYwICBwYXNjYWwxNiBGaW5kUmVzb3VyY2Uod29yZCBzZWdzdHIgc2Vnc3RyKSBGaW5kUmVzb3VyY2UxNgogNjEgIHBhc2NhbDE2IExvYWRSZXNvdXJjZSh3b3JkIHdvcmQpIExvYWRSZXNvdXJjZTE2CiA2MiAgcGFzY2FsIExvY2tSZXNvdXJjZSh3b3JkKSBXSU4xNl9Mb2NrUmVzb3VyY2UxNgogNjMgIHBhc2NhbDE2IEZyZWVSZXNvdXJjZSh3b3JkKSBGcmVlUmVzb3VyY2UxNgogNjQgIHBhc2NhbDE2IEFjY2Vzc1Jlc291cmNlKHdvcmQgd29yZCkgQWNjZXNzUmVzb3VyY2UxNgogNjUgIHBhc2NhbCBTaXplb2ZSZXNvdXJjZSh3b3JkIHdvcmQpIFNpemVvZlJlc291cmNlMTYKIDY2ICBwYXNjYWwxNiBBbGxvY1Jlc291cmNlKHdvcmQgd29yZCBsb25nKSBBbGxvY1Jlc291cmNlMTYKLTY3ICBwYXNjYWwgU2V0UmVzb3VyY2VIYW5kbGVyKHdvcmQgc2VncHRyIHB0cikgU2V0UmVzb3VyY2VIYW5kbGVyCis2NyAgcGFzY2FsIFNldFJlc291cmNlSGFuZGxlcih3b3JkIHNlZ3N0ciBwdHIpIFNldFJlc291cmNlSGFuZGxlcgogNjggIHBhc2NhbDE2IEluaXRBdG9tVGFibGUod29yZCkgSW5pdEF0b21UYWJsZTE2Ci02OSAgcGFzY2FsMTYgRmluZEF0b20oc2VncHRyKSBGaW5kQXRvbTE2Ci03MCAgcGFzY2FsMTYgQWRkQXRvbShzZWdwdHIpIEFkZEF0b20xNgorNjkgIHBhc2NhbDE2IEZpbmRBdG9tKHNlZ3N0cikgRmluZEF0b20xNgorNzAgIHBhc2NhbDE2IEFkZEF0b20oc2Vnc3RyKSBBZGRBdG9tMTYKIDcxICBwYXNjYWwxNiBEZWxldGVBdG9tKHdvcmQpIERlbGV0ZUF0b20xNgogNzIgIHBhc2NhbDE2IEdldEF0b21OYW1lKHdvcmQgcHRyIHdvcmQpIEdldEF0b21OYW1lMTYKIDczICBwYXNjYWwxNiBHZXRBdG9tSGFuZGxlKHdvcmQpIEdldEF0b21IYW5kbGUKQEAgLTg1LDcgKzg1LDcgQEAKIDg2ICBwYXNjYWwxNiBfbHdyaXRlKHdvcmQgcHRyIHdvcmQpIF9sd3JpdGUxNgogODcgIHBhc2NhbDE2IFJFU0VSVkVENShzdHIgc3RyKSBsc3RyY21wMTYKIDg4ICBwYXNjYWwgICBsc3RyY3B5KHNlZ3B0ciBzdHIpIGxzdHJjcHkxNgotODkgIHBhc2NhbCAgIGxzdHJjYXQoc2VncHRyIHN0cikgbHN0cmNhdDE2Cis4OSAgcGFzY2FsICAgbHN0cmNhdChzZWdzdHIgc3RyKSBsc3RyY2F0MTYKIDkwICBwYXNjYWwxNiBsc3RybGVuKHN0cikgbHN0cmxlbjE2CiA5MSAgcmVnaXN0ZXIgSW5pdFRhc2soKSBJbml0VGFzawogOTIgIHBhc2NhbCAgIEdldFRlbXBEcml2ZShieXRlKSBXSU4xNl9HZXRUZW1wRHJpdmUKQEAgLTI2OCw3ICsyNjgsNyBAQAogMzQ5IHBhc2NhbCAgIF9ocmVhZCh3b3JkIHNlZ3B0ciBsb25nKSBXSU4xNl9ocmVhZAogMzUwIHBhc2NhbCAgIF9od3JpdGUod29yZCBwdHIgbG9uZykgX2h3cml0ZTE2CiAjMzUxIEJVTk5ZXzM1MQotMzUyIHBhc2NhbCAgIGxzdHJjYXRuKHNlZ3B0ciBzdHIgd29yZCkgbHN0cmNhdG4xNgorMzUyIHBhc2NhbCAgIGxzdHJjYXRuKHNlZ3N0ciBzdHIgd29yZCkgbHN0cmNhdG4xNgogMzUzIHBhc2NhbCAgIGxzdHJjcHluKHNlZ3B0ciBzdHIgd29yZCkgbHN0cmNweW4xNgogMzU0IHBhc2NhbCAgIEdldEFwcENvbXBhdEZsYWdzKHdvcmQpIEdldEFwcENvbXBhdEZsYWdzMTYKIDM1NSBwYXNjYWwxNiBHZXRXaW5EZWJ1Z0luZm8ocHRyIHdvcmQpIEdldFdpbkRlYnVnSW5mbwpkaWZmIC0tZ2l0IGEvaWYxNjMyL2tlcm5lbDMyLnNwZWMgYi9pZjE2MzIva2VybmVsMzIuc3BlYwppbmRleCBhMDgwNjcwLi5mODI0ZGMxIDEwMDY0NAotLS0gYS9pZjE2MzIva2VybmVsMzIuc3BlYworKysgYi9pZjE2MzIva2VybmVsMzIuc3BlYwpAQCAtMzI1LDcgKzMyNSw3IEBACiAzMzggICBzdGRjYWxsIEdldExhcmdlc3RDb25zb2xlV2luZG93U2l6ZShsb25nKSBHZXRMYXJnZXN0Q29uc29sZVdpbmRvd1NpemUKIDMzOSAgIHN0ZGNhbGwgR2V0TGFzdEVycm9yKCkgR2V0TGFzdEVycm9yCiAzNDAgICBzdGRjYWxsIEdldExvY2FsVGltZShwdHIpIEdldExvY2FsVGltZQotMzQxICAgc3RkY2FsbCBHZXRMb2NhbGVJbmZvQShsb25nIGxvbmcgcHRyIGxvbmcpIEdldExvY2FsZUluZm9BCiszNDEgICBzdGRjYWxsIEdldExvY2FsZUluZm9BKGxvbmcgbG9uZyBwdHIgbG9uZykgR2V0TG9jYWxlSW5mbzMyQQogMzQyICAgc3RkY2FsbCBHZXRMb2NhbGVJbmZvVyhsb25nIGxvbmcgcHRyIGxvbmcpIEdldExvY2FsZUluZm8zMlcKIDM0MyAgIHN0ZGNhbGwgR2V0TG9naWNhbERyaXZlU3RyaW5nc0EobG9uZyBwdHIpIEdldExvZ2ljYWxEcml2ZVN0cmluZ3MzMkEKIDM0NCAgIHN0ZGNhbGwgR2V0TG9naWNhbERyaXZlU3RyaW5nc1cobG9uZyBwdHIpIEdldExvZ2ljYWxEcml2ZVN0cmluZ3MzMlcKQEAgLTUxMyw4ICs1MTMsOCBAQAogNTI2ICAgc3R1YiBNb2R1bGUzMkZpcnN0CiA1MjcgICBzdHViIE1vZHVsZTMyTmV4dAogNTI4ICAgc3RkY2FsbCBNb3ZlRmlsZUEocHRyIHB0cikgTW92ZUZpbGUzMkEKLTUyOSAgIHN0dWIgTW92ZUZpbGVFeEEKLTUzMCAgIHN0dWIgTW92ZUZpbGVFeFcKKzUyOSAgIHN0ZGNhbGwgTW92ZUZpbGVFeEEocHRyIHB0ciBsb25nKSBNb3ZlRmlsZUV4MzJBCis1MzAgICBzdGRjYWxsIE1vdmVGaWxlRXhXKHB0ciBwdHIgbG9uZykgTW92ZUZpbGVFeDMyVwogNTMxICAgc3RkY2FsbCBNb3ZlRmlsZVcocHRyIHB0cikgTW92ZUZpbGUzMlcKIDUzMiAgIHN0ZGNhbGwgTXVsRGl2KGxvbmcgbG9uZyBsb25nKSBNdWxEaXYzMgogNTMzICAgc3RkY2FsbCBNdWx0aUJ5dGVUb1dpZGVDaGFyKGxvbmcgbG9uZyBwdHIgbG9uZyBwdHIgbG9uZykgTXVsdGlCeXRlVG9XaWRlQ2hhcgpkaWZmIC0tZ2l0IGEvaWYxNjMyL2tleWJvYXJkLnNwZWMgYi9pZjE2MzIva2V5Ym9hcmQuc3BlYwppbmRleCA1ZDBjYjkxLi5iNGIyYzU2IDEwMDY0NAotLS0gYS9pZjE2MzIva2V5Ym9hcmQuc3BlYworKysgYi9pZjE2MzIva2V5Ym9hcmQuc3BlYwpAQCAtNSw4ICs1LDggQEAKICMyCXBhc2NhbAlFbmFibGUKICMzCXBhc2NhbAlEaXNhYmxlCiA0ICAgcGFzY2FsMTYgVG9Bc2NpaSh3b3JkIHdvcmQgcHRyIHB0ciB3b3JkKSBUb0FzY2lpMTYKLTUgICBwYXNjYWwxNiBBbnNpVG9PZW0ocHRyIHB0cikgQW5zaVRvT2VtMTYKLTYgICBwYXNjYWwxNiBPZW1Ub0Fuc2kocHRyIHB0cikgT2VtVG9BbnNpMTYKKzUgICBwYXNjYWwxNiBBbnNpVG9PZW0oc3RyIHB0cikgQW5zaVRvT2VtMTYKKzYgICBwYXNjYWwxNiBPZW1Ub0Fuc2koc3RyIHB0cikgT2VtVG9BbnNpMTYKIDcgICByZXR1cm4gICBTZXRTcGVlZCAyIDY1NTM1CiAjMTAwCXBhc2NhbAlTY3JlZW5Td2l0Y2hFbmFibGUKICMxMjYJcGFzY2FsCUdldFRhYmxlU2VnCmRpZmYgLS1naXQgYS9pZjE2MzIvbW1zeXN0ZW0uc3BlYyBiL2lmMTYzMi9tbXN5c3RlbS5zcGVjCmluZGV4IGMwZjc1ZDEuLjkxMGYyNDYgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9tbXN5c3RlbS5zcGVjCisrKyBiL2lmMTYzMi9tbXN5c3RlbS5zcGVjCkBAIC05NSw3ICs5NSw3IEBACiA2MDYgICAgcGFzY2FsICB0aW1lRW5kUGVyaW9kKHdvcmQpIHRpbWVFbmRQZXJpb2QKIDYwNyAgICBwYXNjYWwgIHRpbWVHZXRUaW1lKCkgdGltZUdldFRpbWUKIDcwMSAgICBwYXNjYWwgIE1DSVNFTkRDT01NQU5EKHdvcmQgd29yZCBsb25nIGxvbmcpIG1jaVNlbmRDb21tYW5kCi03MDIgICAgcGFzY2FsICBNQ0lTRU5EU1RSSU5HKHB0ciBwdHIgd29yZCB3b3JkKSBtY2lTZW5kU3RyaW5nCis3MDIgICAgcGFzY2FsICBNQ0lTRU5EU1RSSU5HKHN0ciBwdHIgd29yZCB3b3JkKSBtY2lTZW5kU3RyaW5nCiA3MDMgICAgcGFzY2FsICBNQ0lHRVRERVZJQ0VJRChwdHIpIG1jaUdldERldmljZUlECiA3MDYgICAgcGFzY2FsICBNQ0lHRVRFUlJPUlNUUklORyhsb25nIHB0ciB3b3JkKSBtY2lHZXRFcnJvclN0cmluZwogIzkwMCAgIHBhc2NhbCAgTU1UQVNLQ1JFQVRFCkBAIC0xMDMsNyArMTAzLDcgQEAKICM5MDMgICBwYXNjYWwgIE1NVEFTS1NJR05BTAogIzkwNCAgIHBhc2NhbCAgTU1HRVRDVVJSRU5UVEFTSwogIzkwNSAgIHBhc2NhbCAgTU1UQVNLWUlFTEQKLTExMDAgICBwYXNjYWwgIERSVk9QRU4ocHRyIHB0ciBsb25nKSBEcnZPcGVuCisxMTAwICAgcGFzY2FsICBEUlZPUEVOKHN0ciBzdHIgbG9uZykgRHJ2T3BlbgogMTEwMSAgIHBhc2NhbCAgRFJWQ0xPU0Uod29yZCBsb25nIGxvbmcpIERydkNsb3NlCiAxMTAyICAgcGFzY2FsICBEUlZTRU5ETUVTU0FHRSh3b3JkIHdvcmQgbG9uZyBsb25nKSBEcnZTZW5kTWVzc2FnZQogMTEwMyAgIHBhc2NhbCAgRFJWR0VUTU9EVUxFSEFORExFKHdvcmQpIERydkdldE1vZHVsZUhhbmRsZQpkaWZmIC0tZ2l0IGEvaWYxNjMyL29sZTJubHMuc3BlYyBiL2lmMTYzMi9vbGUybmxzLnNwZWMKaW5kZXggMWZiNWJjMy4uY2EwZmViYyAxMDA2NDQKLS0tIGEvaWYxNjMyL29sZTJubHMuc3BlYworKysgYi9pZjE2MzIvb2xlMm5scy5zcGVjCkBAIC01LDcgKzUsNyBAQAogMiBwYXNjYWwgR2V0U3lzdGVtRGVmYXVsdExDSUQoKSAgICBHZXRTeXN0ZW1EZWZhdWx0TENJRAogMyBwYXNjYWwgR2V0VXNlckRlZmF1bHRMYW5nSUQoKSAgICBHZXRVc2VyRGVmYXVsdExhbmdJRAogNCBwYXNjYWwgR2V0U3lzdGVtRGVmYXVsdExhbmdJRCgpICBHZXRTeXN0ZW1EZWZhdWx0TGFuZ0lECi01IHBhc2NhbCBHZXRMb2NhbGVJbmZvQShsb25nIGxvbmcgcHRyIHdvcmQpIEdldExvY2FsZUluZm9BCis1IHBhc2NhbCBHZXRMb2NhbGVJbmZvQShsb25nIGxvbmcgcHRyIHdvcmQpIEdldExvY2FsZUluZm8xNgogNiBzdHViIExDTUFQU1RSSU5HQQogNyBwYXNjYWwxNiBHZXRTdHJpbmdUeXBlQShsb25nIGxvbmcgcHRyIHdvcmQgcHRyKSBHZXRTdHJpbmdUeXBlMTYKIDggcGFzY2FsMTYgQ29tcGFyZVN0cmluZ0EobG9uZyBsb25nIHB0ciB3b3JkIHB0ciB3b3JkKSBDb21wYXJlU3RyaW5nMTYKZGlmZiAtLWdpdCBhL2lmMTYzMi9yZWxheS5jIGIvaWYxNjMyL3JlbGF5LmMKaW5kZXggNjQyZjBlNy4uMDZiZjAzNiAxMDA2NDQKLS0tIGEvaWYxNjMyL3JlbGF5LmMKKysrIGIvaWYxNjMyL3JlbGF5LmMKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSAid2luZG93cy5oIgogI2luY2x1ZGUgIndpbm50LmgiCiAjaW5jbHVkZSAiZ2xvYmFsLmgiCkBAIC04Myw2ICs4NCw3IEBACiAgICAgICAgIGNhc2UgJ2wnOgogICAgICAgICBjYXNlICdwJzoKICAgICAgICAgY2FzZSAndCc6CisgICAgICAgIGNhc2UgJ1QnOgogICAgICAgICAgICAgYXJnczE2ICs9IDQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTAzLDE2ICsxMDUsMjAgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICd0JzoKICAgICAgICAgICAgIGFyZ3MxNiAtPSA0OworCSAgICBwcmludGYoICIweCUwOHgiLCAqKGludCAqKWFyZ3MxNiApOwogICAgICAgICAgICAgaWYgKEhJV09SRCgqKGludCAqKWFyZ3MxNikpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCAiMHglMDh4IFwiJXNcIiIsICooaW50ICopYXJnczE2LAotICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilQVFJfU0VHX1RPX0xJTigqKGludCAqKWFyZ3MxNikgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcmludGYoICIweCUwOHgiLCAqKGludCAqKWFyZ3MxNiApOworICAgICAgICAgICAgICAgIHByaW50ZiggIiBcIiVzXCIiLCAoY2hhciAqKVBUUl9TRUdfVE9fTElOKCooaW50ICopYXJnczE2KSApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgJ3AnOgogICAgICAgICAgICAgYXJnczE2IC09IDQ7CiAgICAgICAgICAgICBwcmludGYoICIlMDR4OiUwNHgiLCAqKFdPUkQgKikoYXJnczE2KzIpLCAqKFdPUkQgKilhcmdzMTYgKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdUJzoKKyAgICAgICAgICAgIGFyZ3MxNiAtPSA0OworICAgICAgICAgICAgcHJpbnRmKCAiJTA0eDolMDR4IiwgKihXT1JEICopKGFyZ3MxNisyKSwgKihXT1JEICopYXJnczE2ICk7CisgICAgICAgICAgICBpZiAoSElXT1JEKCooaW50ICopYXJnczE2KSkKKyAgICAgICAgICAgICAgICBwcmludGYoICIgXCIlc1wiIiwgKGNoYXIgKilQVFJfU0VHX1RPX0xJTigqKGludCAqKWFyZ3MxNikgKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGFyZ3MrKzsKICAgICAgICAgaWYgKCphcmdzKSBwcmludGYoICIsIiApOwpAQCAtMzQxLDExICszNDcsMTEgQEAKICAgICAgKi8KICAgICAvKiBGSVhNRTogd2UgbmVlZCB0byBzYXZlICVzaSBhbmQgJWRpICovCiAKLSAgICBscGJ1ZlswXSA9IElGMTYzMl9TYXZlZDE2X3NwOworICAgIGxwYnVmWzBdID0gT0ZGU0VUT0YoSUYxNjMyX1NhdmVkMTZfc3Nfc3ApOwogICAgIGxwYnVmWzFdID0gTE9XT1JEKElGMTYzMl9TYXZlZDMyX2VzcCk7CiAgICAgbHBidWZbMl0gPSBISVdPUkQoSUYxNjMyX1NhdmVkMzJfZXNwKTsKLSAgICBscGJ1ZlszXSA9IHBGcmFtZS0+c2F2ZWRfc3M7Ci0gICAgbHBidWZbNF0gPSBwRnJhbWUtPnNhdmVkX3NwOworICAgIGxwYnVmWzNdID0gTE9XT1JEKHBGcmFtZS0+c2F2ZWRfc3Nfc3ApOworICAgIGxwYnVmWzRdID0gSElXT1JEKHBGcmFtZS0+c2F2ZWRfc3Nfc3ApOwogICAgIGxwYnVmWzVdID0gcEZyYW1lLT5kczsKICAgICBscGJ1Zls2XSA9IHBGcmFtZS0+YnA7CiAgICAgbHBidWZbN10gPSBwRnJhbWUtPmlwOwpAQCAtMzYyLDE2ICszNjgsMTYgQEAKICAgICBTVEFDSzE2RlJBTUUgKnBGcmFtZTsKICAgICBXT1JEIGVzID0gQ1VSUkVOVF9TVEFDSzE2LT5lczsKIAotICAgIElGMTYzMl9TYXZlZDE2X3NwICA9IGxwYnVmWzBdIC0gc2l6ZW9mKFdPUkQpOworICAgIElGMTYzMl9TYXZlZDE2X3NzX3NwID0gTUFLRUxPTkcoIGxwYnVmWzBdIC0gc2l6ZW9mKFdPUkQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhJV09SRChJRjE2MzJfU2F2ZWQxNl9zc19zcCkgKTsKICAgICBJRjE2MzJfU2F2ZWQzMl9lc3AgPSBNQUtFTE9ORyggbHBidWZbMV0sIGxwYnVmWzJdICk7CiAgICAgcEZyYW1lID0gQ1VSUkVOVF9TVEFDSzE2OwotICAgIHBGcmFtZS0+c2F2ZWRfc3MgICA9IGxwYnVmWzNdOwotICAgIHBGcmFtZS0+c2F2ZWRfc3AgICA9IGxwYnVmWzRdOwotICAgIHBGcmFtZS0+ZHMgICAgICAgICA9IGxwYnVmWzVdOwotICAgIHBGcmFtZS0+YnAgICAgICAgICA9IGxwYnVmWzZdOwotICAgIHBGcmFtZS0+aXAgICAgICAgICA9IGxwYnVmWzddOwotICAgIHBGcmFtZS0+Y3MgICAgICAgICA9IGxwYnVmWzhdOwotICAgIHBGcmFtZS0+ZXMgICAgICAgICA9IGVzOworICAgIHBGcmFtZS0+c2F2ZWRfc3Nfc3AgPSBNQUtFTE9ORyggbHBidWZbM10sIGxwYnVmWzRdICk7CisgICAgcEZyYW1lLT5kcyAgICAgICAgICA9IGxwYnVmWzVdOworICAgIHBGcmFtZS0+YnAgICAgICAgICAgPSBscGJ1Zls2XTsKKyAgICBwRnJhbWUtPmlwICAgICAgICAgID0gbHBidWZbN107CisgICAgcEZyYW1lLT5jcyAgICAgICAgICA9IGxwYnVmWzhdOworICAgIHBGcmFtZS0+ZXMgICAgICAgICAgPSBlczsKICAgICBpZiAoZGVidWdnaW5nX3JlbGF5KSAgLyogTWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCBlbnRyeSBwb2ludCBhZGRyZXNzICovCiAgICAgewogICAgICAgICBzdGF0aWMgRkFSUFJPQzE2IGVudHJ5UG9pbnQgPSBOVUxMOwpAQCAtNDAyLDEwICs0MDgsMTAgQEAKIAlhcmdzID0gKERXT1JEKil4bWFsbG9jKHNpemVvZihEV09SRCkqbnJvZmFyZ3MpOwogCWZvciAoaT1ucm9mYXJncztpLS07KSB7CiAJCWlmIChhcmdjb252bWFzayAmICgxPDxpKSkgewotCQkJYXJnc1tucm9mYXJncy1pXSA9IChEV09SRClQVFJfU0VHX1RPX0xJTih3aW5fc3RhY2tbMytpXSk7CisJCQlhcmdzW25yb2ZhcmdzLWktMV0gPSAoRFdPUkQpUFRSX1NFR19UT19MSU4od2luX3N0YWNrWzMraV0pOwogCQkJZnByaW50ZihzdGRlcnIsIiUwOGx4KCVwKSwiLHdpbl9zdGFja1szK2ldLFBUUl9TRUdfVE9fTElOKHdpbl9zdGFja1szK2ldKSk7CiAJCX0gZWxzZSB7Ci0JCQlhcmdzW25yb2ZhcmdzLWldID0gd2luX3N0YWNrWzMraV07CisJCQlhcmdzW25yb2ZhcmdzLWktMV0gPSB3aW5fc3RhY2tbMytpXTsKIAkJCWZwcmludGYoc3RkZXJyLCIlbGQsIix3aW5fc3RhY2tbMytpXSk7CiAJCX0KIAl9CkBAIC00MzYsNyArNDQyLDcgQEAKIAkgKiBvdmVyd3JpdGUgdGhlIHRvcCBXT1JEIG9uIHRoZSByZXR1cm4gc3RhY2spCiAJICovCiAJbWVtY3B5KCZzdGYxNixDVVJSRU5UX1NUQUNLMTYsc2l6ZW9mKHN0ZjE2KS0yKTsKLQlJRjE2MzJfU2F2ZWQxNl9zcCArPSAoMytucm9mYXJncykqc2l6ZW9mKERXT1JEKTsKKwlJRjE2MzJfU2F2ZWQxNl9zc19zcCArPSAoMytucm9mYXJncykqc2l6ZW9mKERXT1JEKTsKIAltZW1jcHkoQ1VSUkVOVF9TVEFDSzE2LCZzdGYxNixzaXplb2Yoc3RmMTYpLTIpOwogCiAJZnByaW50ZihzdGRlcnIsInJldHVybnMgJTA4bHhcbiIscmV0KTsKZGlmZiAtLWdpdCBhL2lmMTYzMi9zaGVsbDMyLnNwZWMgYi9pZjE2MzIvc2hlbGwzMi5zcGVjCmluZGV4IGJlZjcwNzMuLjQ0OTgyNzEgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9zaGVsbDMyLnNwZWMKKysrIGIvaWYxNjMyL3NoZWxsMzIuc3BlYwpAQCAtMiwxMjUgKzIsMTMyIEBACiB0eXBlCXdpbjMyCiBiYXNlCTEKIAotMDAwMCBzdHViIENoZWNrRXNjYXBlc0EKLTAwMDEgc3R1YiBDaGVja0VzY2FwZXNXCi0wMDAyIHN0ZGNhbGwgQ29tbWFuZExpbmVUb0FyZ3ZXKHB0ciBwdHIpIENvbW1hbmRMaW5lVG9Bcmd2VwotMDAwMyBzdHViIENvbnRyb2xfRmlsbENhY2hlX1J1bkRMTAotMDAwNCBzdHViIENvbnRyb2xfUnVuRExMCi0wMDA1IHN0dWIgRGxsR2V0Q2xhc3NPYmplY3QKLTAwMDYgc3R1YiBEb0Vudmlyb25tZW50U3Vic3RBCi0wMDA3IHN0dWIgRG9FbnZpcm9ubWVudFN1YnN0VwotMDAwOCBzdGRjYWxsIERyYWdBY2NlcHRGaWxlcyhsb25nIGxvbmcpIERyYWdBY2NlcHRGaWxlcwotMDAwOSBzdHViIERyYWdGaW5pc2gKLTAwMTAgc3R1YiBEcmFnUXVlcnlGaWxlCi0wMDExIHN0dWIgRHJhZ1F1ZXJ5RmlsZUEKLTAwMTIgc3R1YiBEcmFnUXVlcnlGaWxlQW9yVwotMDAxMyBzdHViIERyYWdRdWVyeUZpbGVXCi0wMDE0IHN0dWIgRHJhZ1F1ZXJ5UG9pbnQKLTAwMTUgc3R1YiBEdXBsaWNhdGVJY29uCi0wMDE2IHN0dWIgRXh0cmFjdEFzc29jaWF0ZWRJY29uQQotMDAxNyBzdHViIEV4dHJhY3RBc3NvY2lhdGVkSWNvbkV4QQotMDAxOCBzdHViIEV4dHJhY3RBc3NvY2lhdGVkSWNvbkV4VwotMDAxOSBzdHViIEV4dHJhY3RBc3NvY2lhdGVkSWNvblcKLTAwMjAgc3R1YiBFeHRyYWN0SWNvbkEKLTAwMjEgc3R1YiBFeHRyYWN0SWNvbkV4Ci0wMDIyIHN0dWIgRXh0cmFjdEljb25FeEEKLTAwMjMgc3R1YiBFeHRyYWN0SWNvbkV4VwotMDAyNCBzdHViIEV4dHJhY3RJY29uUmVzSW5mb0EKLTAwMjUgc3R1YiBFeHRyYWN0SWNvblJlc0luZm9XCi0wMDI2IHN0dWIgRXh0cmFjdEljb25XCi0wMDI3IHN0dWIgRXh0cmFjdFZlcnNpb25SZXNvdXJjZTE2VwotMDAyOCBzdHViIEZpbmRFeGVEbGdQcm9jCi0wMDI5IHN0dWIgRmluZEV4ZWN1dGFibGVBCi0wMDMwIHN0dWIgRmluZEV4ZWN1dGFibGVXCi0wMDMxIHJldHVybiBGcmVlSWNvbkxpc3QgNCAwCi0wMDMyIHN0dWIgSW50ZXJuYWxFeHRyYWN0SWNvbkxpc3RBCi0wMDMzIHN0dWIgSW50ZXJuYWxFeHRyYWN0SWNvbkxpc3RXCi0wMDM0IHN0dWIgT3BlbkFzX1J1bkRMTAotMDAzNSBzdHViIFByaW50ZXJzR2V0Q29tbWFuZF9SdW5ETEwKLTAwMzYgc3R1YiBSZWFsU2hlbGxFeGVjdXRlQQotMDAzNyBzdHViIFJlYWxTaGVsbEV4ZWN1dGVFeEEKLTAwMzggc3R1YiBSZWFsU2hlbGxFeGVjdXRlRXhXCi0wMDM5IHN0dWIgUmVhbFNoZWxsRXhlY3V0ZVcKLTAwNDAgc3R1YiBSZWdlbmVyYXRlVXNlckVudmlyb25tZW50Ci0wMDQxIHN0dWIgUmVnaXN0ZXJTaGVsbEhvb2sKLTAwNDIgc3R1YiBTSEFkZFRvUmVjZW50RG9jcwotMDA0MyBzdHViIFNIQXBwQmFyTWVzc2FnZQotMDA0NCBzdHViIFNIQnJvd3NlRm9yRm9sZGVyCi0wMDQ1IHN0dWIgU0hCcm93c2VGb3JGb2xkZXJBCi0wMDQ2IHN0dWIgU0hCcm93c2VGb3JGb2xkZXJXCi0wMDQ3IHN0dWIgU0hDaGFuZ2VOb3RpZnkKLTAwNDggc3R1YiBTSEZpbGVPcGVyYXRpb24KLTAwNDkgc3R1YiBTSEZpbGVPcGVyYXRpb25BCi0wMDUwIHN0dWIgU0hGaWxlT3BlcmF0aW9uVwotMDA1MSBzdHViIFNIRm9ybWF0RHJpdmUKLTAwNTIgc3R1YiBTSEZyZWVOYW1lTWFwcGluZ3MKLTAwNTMgc3R1YiBTSEdldERlc2t0b3BGb2xkZXIKLTAwNTQgc3RkY2FsbCBTSEdldEZpbGVJbmZvKHB0ciBsb25nIHB0ciBsb25nIGxvbmcpIFNIR2V0RmlsZUluZm8zMkEKLTAwNTUgc3RkY2FsbCBTSEdldEZpbGVJbmZvQShwdHIgbG9uZyBwdHIgbG9uZyBsb25nKSBTSEdldEZpbGVJbmZvMzJBCi0wMDU2IHN0dWIgU0hHZXRGaWxlSW5mb1cKLTAwNTcgc3R1YiBTSEdldEluc3RhbmNlRXhwbG9yZXIKLTAwNTggc3R1YiBTSEdldE1hbGxvYwotMDA1OSBzdHViIFNIR2V0UGF0aEZyb21JRExpc3QKLTAwNjAgc3R1YiBTSEdldFBhdGhGcm9tSURMaXN0QQotMDA2MSBzdHViIFNIR2V0UGF0aEZyb21JRExpc3RXCi0wMDYyIHN0dWIgU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24KLTAwNjMgc3R1YiBTSEhlbHBTaG9ydGN1dHNfUnVuRExMCi0wMDY0IHN0dWIgU0hMb2FkSW5Qcm9jCi0wMDY1IHN0dWIgU2hlQ2hhbmdlRGlyQQotMDA2NiBzdHViIFNoZUNoYW5nZURpckV4QQotMDA2NyBzdHViIFNoZUNoYW5nZURpckV4VwotMDA2OCBzdHViIFNoZUNoYW5nZURpclcKLTAwNjkgc3R1YiBTaGVDb252ZXJ0UGF0aFcKLTAwNzAgc3R1YiBTaGVGdWxsUGF0aEEKLTAwNzEgc3R1YiBTaGVGdWxsUGF0aFcKLTAwNzIgc3R1YiBTaGVHZXRDdXJEcml2ZQotMDA3MyBzdHViIFNoZUdldERpckEKLTAwNzQgc3R1YiBTaGVHZXREaXJFeFcKLTAwNzUgc3R1YiBTaGVHZXREaXJXCi0wMDc2IHN0dWIgU2hlR2V0UGF0aE9mZnNldFcKLTAwNzcgc3R1YiBTaGVSZW1vdmVRdW90ZXNBCi0wMDc4IHN0dWIgU2hlUmVtb3ZlUXVvdGVzVwotMDA3OSBzdHViIFNoZVNldEN1ckRyaXZlCi0wMDgwIHN0dWIgU2hlU2hvcnRlblBhdGhBCi0wMDgxIHN0dWIgU2hlU2hvcnRlblBhdGhXCi0wMDgyIHN0ZGNhbGwgU2hlbGxBYm91dEEobG9uZyBwdHIgcHRyIGxvbmcpIFNoZWxsQWJvdXQzMkEKLTAwODMgc3RkY2FsbCBTaGVsbEFib3V0Vyhsb25nIHB0ciBwdHIgbG9uZykgU2hlbGxBYm91dDMyVwotMDA4NCBzdGRjYWxsIFNoZWxsRXhlY3V0ZUEobG9uZyBwdHIgcHRyIHB0ciBwdHIgbG9uZykgU2hlbGxFeGVjdXRlMzJBCi0wMDg1IHN0dWIgU2hlbGxFeGVjdXRlRXgKLTAwODYgc3R1YiBTaGVsbEV4ZWN1dGVFeEEKLTAwODcgc3R1YiBTaGVsbEV4ZWN1dGVFeFcKLTAwODggc3R1YiBTaGVsbEV4ZWN1dGVXCi0wMDg5IHN0dWIgU2hlbGxIb29rUHJvYwotMDA5MCBzdHViIFNoZWxsX05vdGlmeUljb24KLTAwOTEgc3R1YiBTaGVsbF9Ob3RpZnlJY29uQQotMDA5MiBzdHViIFNoZWxsX05vdGlmeUljb25XCi0wMDkzIHN0dWIgU3RyQ2hyQQotMDA5NCBzdHViIFN0ckNocklBCi0wMDk1IHN0dWIgU3RyQ2hySVcKLTAwOTYgc3R1YiBTdHJDaHJXCi0wMDk3IHN0dWIgU3RyQ21wTkEKLTAwOTggc3R1YiBTdHJDbXBOSUEKLTAwOTkgc3R1YiBTdHJDbXBOSVcKLTAxMDAgc3R1YiBTdHJDbXBOVwotMDEwMSBzdHViIFN0ckNweU5BCi0wMTAyIHN0dWIgU3RyQ3B5TlcKLTAxMDMgc3R1YiBTdHJOQ21wQQotMDEwNCBzdHViIFN0ck5DbXBJQQotMDEwNSBzdHViIFN0ck5DbXBJVwotMDEwNiBzdHViIFN0ck5DbXBXCi0wMTA3IHN0dWIgU3RyTkNweUEKLTAxMDggc3R1YiBTdHJOQ3B5VwotMDEwOSBzdHViIFN0clJDaHJBCi0wMTEwIHN0dWIgU3RyUkNocklBCi0wMTExIHN0dWIgU3RyUkNocklXCi0wMTEyIHN0dWIgU3RyUkNoclcKLTAxMTMgc3R1YiBTdHJSU3RyQQotMDExNCBzdHViIFN0clJTdHJJQQotMDExNSBzdHViIFN0clJTdHJJVwotMDExNiBzdHViIFN0clJTdHJXCi0wMTE3IHN0dWIgU3RyU3RyQQotMDExOCBzdHViIFN0clN0cklBCi0wMTE5IHN0dWIgU3RyU3RySVcKLTAxMjAgc3R1YiBTdHJTdHJXCi0wMTIxIHN0dWIgV09XU2hlbGxFeGVjdXRlCisjIEZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGUgV2luOTUgc2hlbGwzMi5kbGwgCisjICh0aGVzZSBuZWVkIHRvIGhhdmUgdGhlc2UgZXhhY3Qgb3JkaW5hbHMsIGZvciBzb21lIHdpbjk1IGRsbHMgCisjICBpbXBvcnQgc2hlbGwzMi5kbGwgYnkgb3JkaW5hbCkKKworICAgMSBzdHViIENoZWNrRXNjYXBlc0EKKyAgIDQgc3R1YiBDaGVja0VzY2FwZXNXCisgICA1IHN0ZGNhbGwgQ29tbWFuZExpbmVUb0FyZ3ZXKHB0ciBwdHIpIENvbW1hbmRMaW5lVG9Bcmd2VworICAgNiBzdHViIENvbnRyb2xfRmlsbENhY2hlX1J1bkRMTAorICAxMCBzdHViIENvbnRyb2xfUnVuRExMCisgIDEyIHN0dWIgRGxsR2V0Q2xhc3NPYmplY3QKKyAgMjAgc3R1YiBEb0Vudmlyb25tZW50U3Vic3RBCisgIDM2IHN0dWIgRG9FbnZpcm9ubWVudFN1YnN0VworICAzOSBzdGRjYWxsIERyYWdBY2NlcHRGaWxlcyhsb25nIGxvbmcpIERyYWdBY2NlcHRGaWxlcworICA0MCBzdHViIERyYWdGaW5pc2gKKyAgNDIgc3R1YiBEcmFnUXVlcnlGaWxlCisgIDQ4IHN0dWIgRHJhZ1F1ZXJ5RmlsZUEKKyAgNTEgc3R1YiBEcmFnUXVlcnlGaWxlQW9yVworICA1MiBzdHViIERyYWdRdWVyeUZpbGVXCisgIDc0IHN0dWIgRHJhZ1F1ZXJ5UG9pbnQKKyAgNzggc3R1YiBEdXBsaWNhdGVJY29uCisgIDgwIHN0dWIgRXh0cmFjdEFzc29jaWF0ZWRJY29uQQorICA5OSBzdHViIEV4dHJhY3RBc3NvY2lhdGVkSWNvbkV4QQorIDEyMiBzdHViIEV4dHJhY3RBc3NvY2lhdGVkSWNvbkV4VworIDEyMyBzdHViIEV4dHJhY3RBc3NvY2lhdGVkSWNvblcKKyAxMzEgc3R1YiBFeHRyYWN0SWNvbkEKKyAxMzMgc3R1YiBFeHRyYWN0SWNvbkV4CisgMTM2IHN0dWIgRXh0cmFjdEljb25FeEEKKyAxNDYgc3R1YiBFeHRyYWN0SWNvblJlc0luZm9BCisgMTQ4IHN0dWIgRXh0cmFjdEljb25SZXNJbmZvVworIDE3OCBzdHViIEV4dHJhY3RJY29uVworIDE4MCBzdHViIEV4dHJhY3RWZXJzaW9uUmVzb3VyY2UxNlcKKyAxODQgc3R1YiBGaW5kRXhlY3V0YWJsZUEKKyAxODUgc3R1YiBGaW5kRXhlY3V0YWJsZVcKKyAxODYgcmV0dXJuIEZyZWVJY29uTGlzdCA0IDAKKyAxODcgc3R1YiBJbnRlcm5hbEV4dHJhY3RJY29uTGlzdEEKKyAxODggc3R1YiBJbnRlcm5hbEV4dHJhY3RJY29uTGlzdFcKKyAxODkgc3R1YiBPcGVuQXNfUnVuRExMCisgMTkwIHN0dWIgUHJpbnRlcnNHZXRDb21tYW5kX1J1bkRMTAorIDE5MSBzdHViIFJlYWxTaGVsbEV4ZWN1dGVBCisgMTkyIHN0dWIgUmVhbFNoZWxsRXhlY3V0ZUV4QQorIDIwMSBzdHViIFJlYWxTaGVsbEV4ZWN1dGVFeFcKKyAyMDIgc3R1YiBSZWFsU2hlbGxFeGVjdXRlVworIDIwMyBzdHViIFJlZ2VuZXJhdGVVc2VyRW52aXJvbm1lbnQKKyAyMDQgc3R1YiBTSEFkZFRvUmVjZW50RG9jcworIDIwNSBzdHViIFNIQXBwQmFyTWVzc2FnZQorIDIwNiBzdHViIFNIQnJvd3NlRm9yRm9sZGVyCisgMjA3IHN0dWIgU0hCcm93c2VGb3JGb2xkZXJBCisgMjA4IHN0dWIgU0hDaGFuZ2VOb3RpZnkKKyAyMDkgc3R1YiBTSEZpbGVPcGVyYXRpb24KKyAyMTAgc3R1YiBTSEZpbGVPcGVyYXRpb25BCisgMjExIHN0dWIgU0hGb3JtYXREcml2ZQorIDIxMiBzdHViIFNIRnJlZU5hbWVNYXBwaW5ncworIDIxMyBzdHViIFNIR2V0RGF0YUZyb21JRExpc3RBCisgMjE0IHN0dWIgU0hHZXREZXNrdG9wRm9sZGVyCisgMjE1IHN0ZGNhbGwgU0hHZXRGaWxlSW5mbyhwdHIgbG9uZyBwdHIgbG9uZyBsb25nKSBTSEdldEZpbGVJbmZvMzJBCisgMjE2IHN0ZGNhbGwgU0hHZXRGaWxlSW5mb0EocHRyIGxvbmcgcHRyIGxvbmcgbG9uZykgU0hHZXRGaWxlSW5mbzMyQQorIDIxNyBzdHViIFNIR2V0SW5zdGFuY2VFeHBsb3JlcgorIDIxOCBzdHViIFNIR2V0TWFsbG9jCisgMjE5IHN0dWIgU0hHZXRQYXRoRnJvbUlETGlzdAorIDIyMCBzdHViIFNIR2V0UGF0aEZyb21JRExpc3RBCisgMjIxIHN0dWIgU0hHZXRTcGVjaWFsRm9sZGVyTG9jYXRpb24KKyAyMjIgc3R1YiBTSEhlbHBTaG9ydGN1dHNfUnVuRExMCisgMjIzIHN0dWIgU0hMb2FkSW5Qcm9jCisgMjI0IHN0dWIgU2hlQ2hhbmdlRGlyQQorIDIyNSBzdHViIFNoZUNoYW5nZURpckV4QQorIDIyNiBzdHViIFNoZUNoYW5nZURpckV4VworIDIyNyBzdHViIFNoZUNoYW5nZURpclcKKyAyMjggc3R1YiBTaGVDb252ZXJ0UGF0aFcKKyAyMjkgc3R1YiBTaGVGdWxsUGF0aEEKKyAyMzAgc3R1YiBTaGVGdWxsUGF0aFcKKyAyMzEgc3R1YiBTaGVHZXRDdXJEcml2ZQorIDIzMiBzdHViIFNoZUdldERpckEKKyAyMzMgc3R1YiBTaGVHZXREaXJFeFcKKyAyMzQgc3R1YiBTaGVHZXREaXJXCisgMjM1IHN0dWIgU2hlR2V0UGF0aE9mZnNldFcKKyAyMzYgc3R1YiBTaGVSZW1vdmVRdW90ZXNBCisgMjM3IHN0dWIgU2hlUmVtb3ZlUXVvdGVzVworIDIzOCBzdHViIFNoZVNldEN1ckRyaXZlCisgMjM5IHN0dWIgU2hlU2hvcnRlblBhdGhBCisgMjQwIHN0dWIgU2hlU2hvcnRlblBhdGhXCisgMjQxIHN0ZGNhbGwgU2hlbGxBYm91dEEobG9uZyBwdHIgcHRyIGxvbmcpIFNoZWxsQWJvdXQzMkEKKyAyNDIgc3RkY2FsbCBTaGVsbEFib3V0Vyhsb25nIHB0ciBwdHIgbG9uZykgU2hlbGxBYm91dDMyVworIDI0MyBzdGRjYWxsIFNoZWxsRXhlY3V0ZUEobG9uZyBwdHIgcHRyIHB0ciBwdHIgbG9uZykgU2hlbGxFeGVjdXRlMzJBCisgMjQ0IHN0dWIgU2hlbGxFeGVjdXRlRXgKKyAyNDUgc3R1YiBTaGVsbEV4ZWN1dGVFeEEKKyAyNDYgc3R1YiBTaGVsbEV4ZWN1dGVXCisgMjQ3IHN0dWIgU2hlbGxfTm90aWZ5SWNvbgorIDI0OCBzdHViIFNoZWxsX05vdGlmeUljb25BCisgMjQ5IHN0dWIgU2hsMTYzMl9UaHVua0RhdGEzMgorIDI1MCBzdHViIFNobDMyMTZfVGh1bmtEYXRhMzIKKzEwMjMgc3R1YiBFeHRyYWN0SWNvbkV4VyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzEwMjggc3R1YiBGaW5kRXhlRGxnUHJvYyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzEwNDEgc3R1YiBSZWdpc3RlclNoZWxsSG9vayAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzEwNDYgc3R1YiBTSEJyb3dzZUZvckZvbGRlclcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisxMDUwIHN0dWIgU0hGaWxlT3BlcmF0aW9uVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzEwNTYgc3R1YiBTSEdldEZpbGVJbmZvVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzEwNjEgc3R1YiBTSEdldFBhdGhGcm9tSURMaXN0VyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzEwODcgc3R1YiBTaGVsbEV4ZWN1dGVFeFcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisxMDg5IHN0dWIgU2hlbGxIb29rUHJvYyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzEwOTIgc3R1YiBTaGVsbF9Ob3RpZnlJY29uVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzEwOTMgc3R1YiBTdHJDaHJBICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorMTA5NCBzdHViIFN0ckNocklBICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorMTA5NSBzdHViIFN0ckNocklXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorMTA5NiBzdHViIFN0ckNoclcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisxMDk3IHN0dWIgU3RyQ21wTkEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisxMDk4IHN0dWIgU3RyQ21wTklBICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorMTA5OSBzdHViIFN0ckNtcE5JVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzExMDAgc3R1YiBTdHJDbXBOVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzExMDEgc3R1YiBTdHJDcHlOQSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzExMDIgc3R1YiBTdHJDcHlOVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzExMDMgc3R1YiBTdHJOQ21wQSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzExMDQgc3R1YiBTdHJOQ21wSUEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisxMTA1IHN0dWIgU3RyTkNtcElXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorMTEwNiBzdHViIFN0ck5DbXBXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorMTEwNyBzdHViIFN0ck5DcHlBICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorMTEwOCBzdHViIFN0ck5DcHlXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorMTEwOSBzdHViIFN0clJDaHJBICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorMTExMCBzdHViIFN0clJDaHJJQSAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzExMTEgc3R1YiBTdHJSQ2hySVcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisxMTEyIHN0dWIgU3RyUkNoclcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisxMTEzIHN0dWIgU3RyUlN0ckEgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisxMTE0IHN0dWIgU3RyUlN0cklBICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorMTExNSBzdHViIFN0clJTdHJJVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzExMTYgc3R1YiBTdHJSU3RyVyAjIHByb3BlciBvcmRpbmFsIHVua25vd24KKzExMTcgc3R1YiBTdHJTdHJBICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorMTExOCBzdHViIFN0clN0cklBICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorMTExOSBzdHViIFN0clN0cklXICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgorMTEyMCBzdHViIFN0clN0clcgIyBwcm9wZXIgb3JkaW5hbCB1bmtub3duCisxMTIxIHN0dWIgV09XU2hlbGxFeGVjdXRlICMgcHJvcGVyIG9yZGluYWwgdW5rbm93bgpkaWZmIC0tZ2l0IGEvaWYxNjMyL3RodW5rLmMgYi9pZjE2MzIvdGh1bmsuYwppbmRleCAyMGYwNWNkLi41NzE0MDk2IDEwMDY0NAotLS0gYS9pZjE2MzIvdGh1bmsuYworKysgYi9pZjE2MzIvdGh1bmsuYwpAQCAtMTI1LDggKzEyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxPTkcoIGNzLT55LCBjcy0+eCApLCBNQUtFTE9ORyggY3MtPmN5LCBjcy0+Y3ggKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBNQUtFTE9ORyggY3MtPmhNZW51LCBjcy0+aHduZFBhcmVudCApLCBjcy0+aEluc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIChMT05HKWNzLT5scENyZWF0ZVBhcmFtcywgaHduZCwgbXNnLCB3UGFyYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxPTkcoIElGMTYzMl9TYXZlZDE2X3NwLXNpemVvZihDUkVBVEVTVFJVQ1QxNiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElGMTYzMl9TYXZlZDE2X3NzICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBJRjE2MzJfU2F2ZWQxNl9zc19zcCAtIHNpemVvZihDUkVBVEVTVFJVQ1QxNikgKTsKICAgICB9CiAgICAgcmV0dXJuIENhbGxUbzE2X2xvbmdfd3d3bCggKEZBUlBST0MxNilwcm9jLCBod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtICk7CiB9CmRpZmYgLS1naXQgYS9pZjE2MzIvdXNlci5zcGVjIGIvaWYxNjMyL3VzZXIuc3BlYwppbmRleCAyOTc3ZjRhLi5hZWYwZTViIDEwMDY0NAotLS0gYS9pZjE2MzIvdXNlci5zcGVjCisrKyBiL2lmMTYzMi91c2VyLnNwZWMKQEAgLTM2LDcgKzM2LDcgQEAKIDM0ICBwYXNjYWwxNiBFbmFibGVXaW5kb3cod29yZCB3b3JkKSBFbmFibGVXaW5kb3cxNgogMzUgIHBhc2NhbDE2IElzV2luZG93RW5hYmxlZCh3b3JkKSBJc1dpbmRvd0VuYWJsZWQxNgogMzYgIHBhc2NhbDE2IEdldFdpbmRvd1RleHQod29yZCBzZWdwdHIgd29yZCkgR2V0V2luZG93VGV4dDE2Ci0zNyAgcGFzY2FsMTYgU2V0V2luZG93VGV4dCh3b3JkIHNlZ3B0cikgU2V0V2luZG93VGV4dDE2CiszNyAgcGFzY2FsMTYgU2V0V2luZG93VGV4dCh3b3JkIHNlZ3N0cikgU2V0V2luZG93VGV4dDE2CiAzOCAgcGFzY2FsMTYgR2V0V2luZG93VGV4dExlbmd0aCh3b3JkKSBHZXRXaW5kb3dUZXh0TGVuZ3RoMTYKIDM5ICBwYXNjYWwxNiBCZWdpblBhaW50KHdvcmQgcHRyKSBCZWdpblBhaW50MTYKIDQwICBwYXNjYWwxNiBFbmRQYWludCh3b3JkIHB0cikgRW5kUGFpbnQxNgpAQCAtNTAsNyArNTAsNyBAQAogNDcgIHBhc2NhbDE2IElzV2luZG93KHdvcmQpIElzV2luZG93MTYKIDQ4ICBwYXNjYWwxNiBJc0NoaWxkKHdvcmQgd29yZCkgSXNDaGlsZDE2CiA0OSAgcGFzY2FsMTYgSXNXaW5kb3dWaXNpYmxlKHdvcmQpIElzV2luZG93VmlzaWJsZTE2Ci01MCAgcGFzY2FsMTYgRmluZFdpbmRvdyhzZWdwdHIgc3RyKSBGaW5kV2luZG93MTYKKzUwICBwYXNjYWwxNiBGaW5kV2luZG93KHNlZ3N0ciBzdHIpIEZpbmRXaW5kb3cxNgogIzUxIEJFQVI1MQogNTIgIHBhc2NhbDE2IEFueVBvcHVwKCkgQW55UG9wdXAxNgogNTMgIHBhc2NhbDE2IERlc3Ryb3lXaW5kb3cod29yZCkgRGVzdHJveVdpbmRvdzE2CkBAIC04NiwxMiArODYsMTIgQEAKIDgzICBwYXNjYWwxNiBGcmFtZVJlY3Qod29yZCBwdHIgd29yZCkgRnJhbWVSZWN0MTYKIDg0ICBwYXNjYWwxNiBEcmF3SWNvbih3b3JkIHNfd29yZCBzX3dvcmQgd29yZCkgRHJhd0ljb24xNgogODUgIHBhc2NhbDE2IERyYXdUZXh0KHdvcmQgcHRyIHNfd29yZCBwdHIgd29yZCkgRHJhd1RleHQxNgotODcgIHBhc2NhbDE2IERpYWxvZ0JveCh3b3JkIHNlZ3B0ciB3b3JkIHNlZ3B0cikgRGlhbG9nQm94MTYKKzg3ICBwYXNjYWwxNiBEaWFsb2dCb3god29yZCBzZWdzdHIgd29yZCBzZWdwdHIpIERpYWxvZ0JveDE2CiA4OCAgcGFzY2FsMTYgRW5kRGlhbG9nKHdvcmQgc193b3JkKSBFbmREaWFsb2cxNgotODkgIHBhc2NhbDE2IENyZWF0ZURpYWxvZyh3b3JkIHNlZ3B0ciB3b3JkIHNlZ3B0cikgQ3JlYXRlRGlhbG9nMTYKKzg5ICBwYXNjYWwxNiBDcmVhdGVEaWFsb2cod29yZCBzZWdzdHIgd29yZCBzZWdwdHIpIENyZWF0ZURpYWxvZzE2CiA5MCAgcGFzY2FsMTYgSXNEaWFsb2dNZXNzYWdlKHdvcmQgcHRyKSBJc0RpYWxvZ01lc3NhZ2UxNgogOTEgIHBhc2NhbDE2IEdldERsZ0l0ZW0od29yZCB3b3JkKSBHZXREbGdJdGVtMTYKLTkyICBwYXNjYWwxNiBTZXREbGdJdGVtVGV4dCh3b3JkIHdvcmQgc2VncHRyKSBTZXREbGdJdGVtVGV4dDE2Cis5MiAgcGFzY2FsMTYgU2V0RGxnSXRlbVRleHQod29yZCB3b3JkIHNlZ3N0cikgU2V0RGxnSXRlbVRleHQxNgogOTMgIHBhc2NhbDE2IEdldERsZ0l0ZW1UZXh0KHdvcmQgd29yZCBzZWdwdHIgd29yZCkgR2V0RGxnSXRlbVRleHQxNgogOTQgIHBhc2NhbDE2IFNldERsZ0l0ZW1JbnQod29yZCB3b3JkIHdvcmQgd29yZCkgU2V0RGxnSXRlbUludDE2CiA5NSAgcGFzY2FsMTYgR2V0RGxnSXRlbUludCh3b3JkIHNfd29yZCBwdHIgd29yZCkgR2V0RGxnSXRlbUludDE2CkBAIC0xMTYsNyArMTE2LDcgQEAKIDExNCBwYXNjYWwgICBEaXNwYXRjaE1lc3NhZ2UocHRyKSBEaXNwYXRjaE1lc3NhZ2UxNgogMTE1IHBhc2NhbDE2IFJlcGx5TWVzc2FnZShsb25nKSBSZXBseU1lc3NhZ2UxNgogMTE2IHBhc2NhbDE2IFBvc3RBcHBNZXNzYWdlKHdvcmQgd29yZCB3b3JkIGxvbmcpIFBvc3RBcHBNZXNzYWdlMTYKLTExOCBwYXNjYWwxNiBSZWdpc3RlcldpbmRvd01lc3NhZ2Uoc2VncHRyKSBSZWdpc3RlcldpbmRvd01lc3NhZ2UxNgorMTE4IHBhc2NhbDE2IFJlZ2lzdGVyV2luZG93TWVzc2FnZShzZWdzdHIpIFJlZ2lzdGVyV2luZG93TWVzc2FnZTE2CiAxMTcgcGFzY2FsMTYgV2luZG93RnJvbURDKHdvcmQpIFdpbmRvd0Zyb21EQzE2CiAxMTkgcGFzY2FsICAgR2V0TWVzc2FnZVBvcygpIEdldE1lc3NhZ2VQb3MKIDEyMCBwYXNjYWwgICBHZXRNZXNzYWdlVGltZSgpIEdldE1lc3NhZ2VUaW1lCkBAIC0xNDksMTAgKzE0OSwxMCBAQAogMTQ3IHBhc2NhbDE2IFNldENsaXBib2FyZFZpZXdlcih3b3JkKSBTZXRDbGlwYm9hcmRWaWV3ZXIxNgogMTQ4IHBhc2NhbDE2IEdldENsaXBib2FyZFZpZXdlcigpIEdldENsaXBib2FyZFZpZXdlcjE2CiAxNDkgcGFzY2FsMTYgQ2hhbmdlQ2xpcGJvYXJkQ2hhaW4od29yZCBwdHIpIENoYW5nZUNsaXBib2FyZENoYWluMTYKLTE1MCBwYXNjYWwxNiBMb2FkTWVudSh3b3JkIHNlZ3B0cikgTG9hZE1lbnUxNgorMTUwIHBhc2NhbDE2IExvYWRNZW51KHdvcmQgc2Vnc3RyKSBMb2FkTWVudTE2CiAxNTEgcGFzY2FsMTYgQ3JlYXRlTWVudSgpIENyZWF0ZU1lbnUxNgogMTUyIHBhc2NhbDE2IERlc3Ryb3lNZW51KHdvcmQpIERlc3Ryb3lNZW51MTYKLTE1MyBwYXNjYWwxNiBDaGFuZ2VNZW51KHdvcmQgd29yZCBzZWdwdHIgd29yZCB3b3JkKSBDaGFuZ2VNZW51MTYKKzE1MyBwYXNjYWwxNiBDaGFuZ2VNZW51KHdvcmQgd29yZCBzZWdzdHIgd29yZCB3b3JkKSBDaGFuZ2VNZW51MTYKIDE1NCBwYXNjYWwxNiBDaGVja01lbnVJdGVtKHdvcmQgd29yZCB3b3JkKSBDaGVja01lbnVJdGVtMTYKIDE1NSBwYXNjYWwxNiBFbmFibGVNZW51SXRlbSh3b3JkIHdvcmQgd29yZCkgRW5hYmxlTWVudUl0ZW0xNgogMTU2IHBhc2NhbDE2IEdldFN5c3RlbU1lbnUod29yZCB3b3JkKSBHZXRTeXN0ZW1NZW51MTYKQEAgLTE3MiwxMSArMTcyLDExIEBACiAxNzAgcGFzY2FsMTYgQXJyYW5nZUljb25pY1dpbmRvd3Mod29yZCkgQXJyYW5nZUljb25pY1dpbmRvd3MxNgogMTcxIHBhc2NhbDE2IFdpbkhlbHAod29yZCBzdHIgd29yZCBsb25nKSBXaW5IZWxwMTYKIDE3MiBwYXNjYWwxNiBTd2l0Y2hUb1RoaXNXaW5kb3cod29yZCB3b3JkKSBTd2l0Y2hUb1RoaXNXaW5kb3cxNgotMTczIHBhc2NhbDE2IExvYWRDdXJzb3Iod29yZCBzZWdwdHIpIExvYWRDdXJzb3IxNgotMTc0IHBhc2NhbDE2IExvYWRJY29uKHdvcmQgc2VncHRyKSBMb2FkSWNvbjE2Ci0xNzUgcGFzY2FsMTYgTG9hZEJpdG1hcCh3b3JkIHNlZ3B0cikgTG9hZEJpdG1hcDE2CisxNzMgcGFzY2FsMTYgTG9hZEN1cnNvcih3b3JkIHNlZ3N0cikgTG9hZEN1cnNvcjE2CisxNzQgcGFzY2FsMTYgTG9hZEljb24od29yZCBzZWdzdHIpIExvYWRJY29uMTYKKzE3NSBwYXNjYWwxNiBMb2FkQml0bWFwKHdvcmQgc2Vnc3RyKSBMb2FkQml0bWFwMTYKIDE3NiBwYXNjYWwxNiBMb2FkU3RyaW5nKHdvcmQgd29yZCBwdHIgc193b3JkKSBMb2FkU3RyaW5nMTYKLTE3NyBwYXNjYWwxNiBMb2FkQWNjZWxlcmF0b3JzKHdvcmQgc2VncHRyKSBMb2FkQWNjZWxlcmF0b3JzMTYKKzE3NyBwYXNjYWwxNiBMb2FkQWNjZWxlcmF0b3JzKHdvcmQgc2Vnc3RyKSBMb2FkQWNjZWxlcmF0b3JzMTYKIDE3OCBwYXNjYWwxNiBUcmFuc2xhdGVBY2NlbGVyYXRvcih3b3JkIHdvcmQgcHRyKSBUcmFuc2xhdGVBY2NlbGVyYXRvcjE2CiAxNzkgcGFzY2FsMTYgR2V0U3lzdGVtTWV0cmljcyhzX3dvcmQpIEdldFN5c3RlbU1ldHJpY3MxNgogMTgwIHBhc2NhbCAgIEdldFN5c0NvbG9yKHdvcmQpIEdldFN5c0NvbG9yMTYKQEAgLTIzOSwxNiArMjM5LDE2IEBACiAyMzYgcGFzY2FsMTYgR2V0Q2FwdHVyZSgpIEdldENhcHR1cmUxNgogMjM3IHBhc2NhbDE2IEdldFVwZGF0ZVJnbih3b3JkIHdvcmQgd29yZCkgR2V0VXBkYXRlUmduMTYKIDIzOCBwYXNjYWwxNiBFeGNsdWRlVXBkYXRlUmduKHdvcmQgd29yZCkgRXhjbHVkZVVwZGF0ZVJnbjE2Ci0yMzkgcGFzY2FsMTYgRGlhbG9nQm94UGFyYW0od29yZCBzZWdwdHIgd29yZCBzZWdwdHIgbG9uZykgRGlhbG9nQm94UGFyYW0xNgorMjM5IHBhc2NhbDE2IERpYWxvZ0JveFBhcmFtKHdvcmQgc2Vnc3RyIHdvcmQgc2VncHRyIGxvbmcpIERpYWxvZ0JveFBhcmFtMTYKIDI0MCBwYXNjYWwxNiBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtKHdvcmQgd29yZCB3b3JkIHNlZ3B0ciBsb25nKQogICAgICAgICAgICAgIERpYWxvZ0JveEluZGlyZWN0UGFyYW0xNgotMjQxIHBhc2NhbDE2IENyZWF0ZURpYWxvZ1BhcmFtKHdvcmQgc2VncHRyIHdvcmQgc2VncHRyIGxvbmcpIENyZWF0ZURpYWxvZ1BhcmFtMTYKKzI0MSBwYXNjYWwxNiBDcmVhdGVEaWFsb2dQYXJhbSh3b3JkIHNlZ3N0ciB3b3JkIHNlZ3B0ciBsb25nKSBDcmVhdGVEaWFsb2dQYXJhbTE2CiAyNDIgcGFzY2FsMTYgQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbSh3b3JkIHB0ciB3b3JkIHNlZ3B0ciBsb25nKQogICAgICAgICAgICAgIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW0xNgogMjQzIHBhc2NhbCAgIEdldERpYWxvZ0Jhc2VVbml0cygpIEdldERpYWxvZ0Jhc2VVbml0cwogMjQ0IHBhc2NhbDE2IEVxdWFsUmVjdChwdHIgcHRyKSBFcXVhbFJlY3QxNgogMjQ1IHN0dWIgRW5hYmxlQ29tbU5vdGlmaWNhdGlvbgotMjQ2IHN0dWIgRXhpdFdpbmRvd3NFeGVjCisyNDYgcGFzY2FsMTYgRXhpdFdpbmRvd3NFeGVjKHN0ciBzdHIpIEV4aXRXaW5kb3dzRXhlYzE2CiAyNDcgcGFzY2FsMTYgR2V0Q3Vyc29yKCkgR2V0Q3Vyc29yMTYKIDI0OCBwYXNjYWwxNiBHZXRPcGVuQ2xpcGJvYXJkV2luZG93KCkgR2V0T3BlbkNsaXBib2FyZFdpbmRvdzE2CiAyNDkgcGFzY2FsMTYgR2V0QXN5bmNLZXlTdGF0ZSh3b3JkKSBHZXRBc3luY0tleVN0YXRlMTYKQEAgLTI3MSw5ICsyNzEsOSBAQAogMjY1IHBhc2NhbDE2IFNob3dPd25lZFBvcHVwcyh3b3JkIHdvcmQpIFNob3dPd25lZFBvcHVwczE2CiAyNjYgcGFzY2FsMTYgU2V0TWVzc2FnZVF1ZXVlKHdvcmQpIFNldE1lc3NhZ2VRdWV1ZTE2CiAyNjcgcGFzY2FsMTYgU2hvd1Njcm9sbEJhcih3b3JkIHdvcmQgd29yZCkgU2hvd1Njcm9sbEJhcjE2Ci0yNjggcGFzY2FsMTYgR2xvYmFsQWRkQXRvbShzZWdwdHIpIEdsb2JhbEFkZEF0b20xNgorMjY4IHBhc2NhbDE2IEdsb2JhbEFkZEF0b20oc2Vnc3RyKSBHbG9iYWxBZGRBdG9tMTYKIDI2OSBwYXNjYWwxNiBHbG9iYWxEZWxldGVBdG9tKHdvcmQpIEdsb2JhbERlbGV0ZUF0b20KLTI3MCBwYXNjYWwxNiBHbG9iYWxGaW5kQXRvbShzZWdwdHIpIEdsb2JhbEZpbmRBdG9tMTYKKzI3MCBwYXNjYWwxNiBHbG9iYWxGaW5kQXRvbShzZWdzdHIpIEdsb2JhbEZpbmRBdG9tMTYKIDI3MSBwYXNjYWwxNiBHbG9iYWxHZXRBdG9tTmFtZSh3b3JkIHB0ciBzX3dvcmQpIEdsb2JhbEdldEF0b21OYW1lMTYKIDI3MiBwYXNjYWwxNiBJc1pvb21lZCh3b3JkKSBJc1pvb21lZDE2CiAyNzMgc3R1YiBDb250cm9sUGFuZWxJbmZvCkBAIC0zNTAsMTIgKzM1MCwxMiBAQAogMzk0IHN0dWIgRHJhd0ljb25FeAogMzk1IHN0dWIgR2V0SWNvbkluZm8KIDM5NyBwYXNjYWwxNiBSZWdpc3RlckNsYXNzRXgocHRyKSBSZWdpc3RlckNsYXNzRXgxNgotMzk4IHBhc2NhbDE2IEdldENsYXNzSW5mb0V4KHdvcmQgc2VncHRyIHB0cikgR2V0Q2xhc3NJbmZvRXgxNgorMzk4IHBhc2NhbDE2IEdldENsYXNzSW5mb0V4KHdvcmQgc2Vnc3RyIHB0cikgR2V0Q2xhc3NJbmZvRXgxNgogMzk5IHN0dWIgQ2hpbGRXaW5kb3dGcm9tUG9pbnRFeAogNDAwIHN0dWIgRmluYWxVc2VySW5pdAogNDAyIHBhc2NhbDE2IEdldFByaW9yaXR5Q2xpcGJvYXJkRm9ybWF0KHdvcmQgcHRyIHNfd29yZCkgR2V0UHJpb3JpdHlDbGlwYm9hcmRGb3JtYXQxNgotNDAzIHBhc2NhbDE2IFVucmVnaXN0ZXJDbGFzcyhzZWdwdHIgd29yZCkgVW5yZWdpc3RlckNsYXNzMTYKLTQwNCBwYXNjYWwxNiBHZXRDbGFzc0luZm8od29yZCBzZWdwdHIgcHRyKSBHZXRDbGFzc0luZm8xNgorNDAzIHBhc2NhbDE2IFVucmVnaXN0ZXJDbGFzcyhzZWdzdHIgd29yZCkgVW5yZWdpc3RlckNsYXNzMTYKKzQwNCBwYXNjYWwxNiBHZXRDbGFzc0luZm8od29yZCBzZWdzdHIgcHRyKSBHZXRDbGFzc0luZm8xNgogNDA2IHBhc2NhbDE2IENyZWF0ZUN1cnNvcih3b3JkIHdvcmQgd29yZCB3b3JkIHdvcmQgcHRyIHB0cikgQ3JlYXRlQ3Vyc29yMTYKIDQwNyBwYXNjYWwxNiBDcmVhdGVJY29uKHdvcmQgd29yZCB3b3JkIHdvcmQgd29yZCBwdHIgcHRyKSBDcmVhdGVJY29uMTYKIDQwOCBwYXNjYWwxNiBDcmVhdGVDdXJzb3JJY29uSW5kaXJlY3Qod29yZCBwdHIgcHRyIHB0cikKQEAgLTM3NCwxOCArMzc0LDE4IEBACiA0MjEgcGFzY2FsMTYgd3ZzcHJpbnRmKHB0ciBwdHIgcHRyKSB3dnNwcmludGYxNgogNDIyIHBhc2NhbDE2IERsZ0RpclNlbGVjdEV4KHdvcmQgcHRyIHdvcmQgd29yZCkgRGxnRGlyU2VsZWN0RXgxNgogNDIzIHBhc2NhbDE2IERsZ0RpclNlbGVjdENvbWJvQm94RXgod29yZCBwdHIgd29yZCB3b3JkKSBEbGdEaXJTZWxlY3RDb21ib0JveEV4MTYKLTQyNyBwYXNjYWwxNiBGaW5kV2luZG93RXgod29yZCB3b3JkIHNlZ3B0ciBwdHIpIEZpbmRXaW5kb3dFeDE2Cis0MjcgcGFzY2FsMTYgRmluZFdpbmRvd0V4KHdvcmQgd29yZCBzZWdzdHIgc3RyKSBGaW5kV2luZG93RXgxNgogNDI4IHN0dWIgVGlsZVdpbmRvd3MKIDQyOSBzdHViIENhc2NhZGVXaW5kb3dzCiA0MzAgcGFzY2FsMTYgbHN0cmNtcChzdHIgc3RyKSBsc3RyY21wMTYKLTQzMSBwYXNjYWwgICBBbnNpVXBwZXIoc2VncHRyKSBBbnNpVXBwZXIxNgotNDMyIHBhc2NhbCAgIEFuc2lMb3dlcihzZWdwdHIpIEFuc2lMb3dlcjE2Cis0MzEgcGFzY2FsICAgQW5zaVVwcGVyKHNlZ3N0cikgQW5zaVVwcGVyMTYKKzQzMiBwYXNjYWwgICBBbnNpTG93ZXIoc2Vnc3RyKSBBbnNpTG93ZXIxNgogNDMzIHBhc2NhbDE2IElzQ2hhckFscGhhKGJ5dGUpIElzQ2hhckFscGhhMTYKIDQzNCBwYXNjYWwxNiBJc0NoYXJBbHBoYW51bWVyaWMoYnl0ZSkgSXNDaGFyQWxwaGFudW1lcmljMTYKIDQzNSBwYXNjYWwxNiBJc0NoYXJVcHBlcihieXRlKSBJc0NoYXJVcHBlcjE2CiA0MzYgcGFzY2FsMTYgSXNDaGFyTG93ZXIoYnl0ZSkgSXNDaGFyTG93ZXIxNgotNDM3IHBhc2NhbDE2IEFuc2lVcHBlckJ1ZmYoc3RyIHdvcmQpIEFuc2lVcHBlckJ1ZmYxNgotNDM4IHBhc2NhbDE2IEFuc2lMb3dlckJ1ZmYoc3RyIHdvcmQpIEFuc2lMb3dlckJ1ZmYxNgorNDM3IHBhc2NhbDE2IEFuc2lVcHBlckJ1ZmYocHRyIHdvcmQpIEFuc2lVcHBlckJ1ZmYxNgorNDM4IHBhc2NhbDE2IEFuc2lMb3dlckJ1ZmYocHRyIHdvcmQpIEFuc2lMb3dlckJ1ZmYxNgogNDQxIHN0dWIgSW5zZXJ0TWVudUl0ZW0KIDQ0MyBzdHViIEdldE1lbnVJdGVtSW5mbwogNDQ1IHBhc2NhbCAgIERlZkZyYW1lUHJvYyh3b3JkIHdvcmQgd29yZCB3b3JkIGxvbmcpIERlZkZyYW1lUHJvYzE2CmRpZmYgLS1naXQgYS9pZjE2MzIvdXNlcjMyLnNwZWMgYi9pZjE2MzIvdXNlcjMyLnNwZWMKaW5kZXggMDI1NmNiMC4uOTliY2Q4ZSAxMDA2NDQKLS0tIGEvaWYxNjMyL3VzZXIzMi5zcGVjCisrKyBiL2lmMTYzMi91c2VyMzIuc3BlYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAwMDk2IHJldHVybiBEZGVEaXNjb25uZWN0IDQgMAogMDA5NyBzdHViIERkZURpc2Nvbm5lY3RMaXN0CiAwMDk4IHN0dWIgRGRlRW5hYmxlQ2FsbGJhY2sKLTAwOTkgc3R1YiBEZGVGcmVlRGF0YUhhbmRsZQorMDA5OSByZXR1cm4gRGRlRnJlZURhdGFIYW5kbGUgNCAxCiAwMTAwIHJldHVybiBEZGVGcmVlU3RyaW5nSGFuZGxlIDggMAogMDEwMSBzdHViIERkZUdldERhdGEKIDAxMDIgcmV0dXJuIERkZUdldExhc3RFcnJvciA0IDAKZGlmZiAtLWdpdCBhL2lmMTYzMi93cHJvY3Muc3BlYyBiL2lmMTYzMi93cHJvY3Muc3BlYwppbmRleCBiYzY3NmFjLi4yMTcyZmU3IDEwMDY0NAotLS0gYS9pZjE2MzIvd3Byb2NzLnNwZWMKKysrIGIvaWYxNjMyL3dwcm9jcy5zcGVjCkBAIC0yLDggKzIsNiBAQAogdHlwZQl3aW4xNgogCiAxICBwYXNjYWwgV0lOUFJPQ19DYWxsUHJvYzE2VG8zMkEod29yZCB3b3JkIHdvcmQgbG9uZyBsb25nKSBXSU5QUk9DX0NhbGxQcm9jMTZUbzMyQQotMiAgcGFzY2FsIFN0YXRpY1duZFByb2Mod29yZCB3b3JkIHdvcmQgbG9uZykgU3RhdGljV25kUHJvYwotMyAgcGFzY2FsIFNjcm9sbEJhclduZFByb2Mod29yZCB3b3JkIHdvcmQgbG9uZykgU2Nyb2xsQmFyV25kUHJvYwogMTAgcGFzY2FsIE1ESUNsaWVudFduZFByb2Mod29yZCB3b3JkIHdvcmQgbG9uZykgTURJQ2xpZW50V25kUHJvYwogMTQgcGFzY2FsIEZpbGVPcGVuRGxnUHJvYyh3b3JkIHdvcmQgd29yZCBsb25nKSBGaWxlT3BlbkRsZ1Byb2MKIDE1IHBhc2NhbCBGaWxlU2F2ZURsZ1Byb2Mod29yZCB3b3JkIHdvcmQgbG9uZykgRmlsZVNhdmVEbGdQcm9jCmRpZmYgLS1naXQgYS9pZjE2MzIvd3NvY2szMi5zcGVjIGIvaWYxNjMyL3dzb2NrMzIuc3BlYwppbmRleCA3OThlMDFjLi4zNjg5M2MyIDEwMDY0NAotLS0gYS9pZjE2MzIvd3NvY2szMi5zcGVjCisrKyBiL2lmMTYzMi93c29jazMyLnNwZWMKQEAgLTIsMTIgKzIsMTIgQEAKIHR5cGUJd2luMzIKIGJhc2UJMAogCi0wMDEgc3R1YiBhY2NlcHQKLTAwMiBzdHViIGJpbmQKLTAwMyBzdHViIGNsb3Nlc29ja2V0Ci0wMDQgc3R1YiBjb25uZWN0CiswMDEgc3RkY2FsbCBhY2NlcHQobG9uZyBwdHIgcHRyKSBXSU5TT0NLX2FjY2VwdAorMDAyIHN0ZGNhbGwgYmluZChsb25nIHB0ciBsb25nKSBXSU5TT0NLX2JpbmQKKzAwMyBzdGRjYWxsIGNsb3Nlc29ja2V0KGxvbmcpIFdJTlNPQ0tfY2xvc2Vzb2NrZXQKKzAwNCBzdGRjYWxsIGNvbm5lY3QobG9uZyBwdHIgbG9uZykgV0lOU09DS19jb25uZWN0CiAwMDUgc3R1YiBnZXRwZWVybmFtZQotMDA2IHN0dWIgZ2V0c29ja25hbWUKKzAwNiBzdGRjYWxsIGdldHNvY2tuYW1lKGxvbmcgcHRyIHB0cikgV0lOU09DS19nZXRzb2NrbmFtZQogMDA3IHN0dWIgZ2V0c29ja29wdAogMDA4IHN0ZGNhbGwgaHRvbmwobG9uZykgV0lOU09DS19odG9ubAogMDA5IHN0ZGNhbGwgaHRvbnMobG9uZykgV0lOU09DS19odG9ucwpAQCAtMjUsNyArMjUsNyBAQAogMDIxIHN0dWIgc2V0c29ja29wdAogMDIyIHN0dWIgc2h1dGRvd24KIDAyMyBzdGRjYWxsIHNvY2tldChsb25nIGxvbmcgbG9uZykgV0lOU09DS19zb2NrZXQKLTA1MSBzdGRjYWxsIGdldGhvc3RieWFkZHIocHRyIGxvbmcgbG9uZykgZ2V0aG9zdGJ5YWRkcgorMDUxIHN0ZGNhbGwgZ2V0aG9zdGJ5YWRkcihwdHIgbG9uZyBsb25nKSBXSU5TT0NLX2dldGhvc3RieWFkZHIKIDA1MiBzdGRjYWxsIGdldGhvc3RieW5hbWUocHRyKSBnZXRob3N0YnluYW1lCiAwNTMgc3R1YiBnZXRwcm90b2J5bmFtZQogMDU0IHN0dWIgZ2V0cHJvdG9ieW51bWJlcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9iaXRtYXAuaCBiL2luY2x1ZGUvYml0bWFwLmgKaW5kZXggM2I4YmZlMi4uYjZjNjU0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9iaXRtYXAuaAorKysgYi9pbmNsdWRlL2JpdG1hcC5oCkBAIC02MCw2ICs2MCw3IEBACiBleHRlcm4gaW50IERJQl9CaXRtYXBJbmZvU2l6ZSggQklUTUFQSU5GTyAqIGluZm8sIFdPUkQgY29sb3J1c2UgKTsKIAogICAvKiBvYmplY3RzL29lbWJpdG1hcC5jICovCitleHRlcm4gQk9PTDMyIE9CTV9Jbml0KHZvaWQpOwogZXh0ZXJuIEhCSVRNQVAxNiBPQk1fTG9hZEJpdG1hcCggV09SRCBpZCApOwogZXh0ZXJuIEhHTE9CQUwxNiBPQk1fTG9hZEN1cnNvckljb24oIFdPUkQgaWQsIEJPT0wzMiBmQ3Vyc29yICk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZGNlLmggYi9pbmNsdWRlL2RjZS5oCmluZGV4IDM2ODE3NGMuLjRmZDEwOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZGNlLmgKKysrIGIvaW5jbHVkZS9kY2UuaApAQCAtNDksNSArNDksNyBAQAogZXh0ZXJuIERDRSogIERDRV9BbGxvY0RDRSggSFdORDMyIGhXbmQsIERDRV9UWVBFIHR5cGUgKTsKIGV4dGVybiB2b2lkICBEQ0VfRnJlZURDRSggRENFICpkY2UgKTsKIGV4dGVybiBJTlQxNiBEQ0VfRXhjbHVkZVJnbiggSERDMzIsIFdORCosIEhSR04zMiApOworZXh0ZXJuIEhSR04zMiBEQ0VfR2V0VmlzUmduKCBIV05EMzIsIFdPUkQgKTsKK2V4dGVybiBCT09MMzIgRENFX0ludmFsaWRhdGVEQ0UoIFdORCosIFJFQ1QzMiogKTsKIAogI2VuZGlmICAvKiBfX1dJTkVfRENFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZGVidWcuaCBiL2luY2x1ZGUvZGVidWcuaAppbmRleCA1NWEwMWVhLi4zMzA4YTU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RlYnVnLmgKKysrIGIvaW5jbHVkZS9kZWJ1Zy5oCkBAIC03OSw2ICs3OSw3IEBACiAjdW5kZWYgREVCVUdfVEVYVAogI3VuZGVmIERFQlVHX1RJTUVSCiAjdW5kZWYgREVCVUdfVE9PTEhFTFAKKyN1bmRlZiBERUJVR19UV0VBSwogI3VuZGVmIERFQlVHX1ZFUgogI3VuZGVmIERFQlVHX1ZJUlRVQUwKICN1bmRlZiBERUJVR19WWEQKQEAgLTE2Miw2ICsxNjMsNyBAQAogI2RlZmluZSBERUJVR19URVhUCiAjZGVmaW5lIERFQlVHX1RJTUVSCiAjZGVmaW5lIERFQlVHX1RPT0xIRUxQCisjZGVmaW5lIERFQlVHX1RXRUFLCiAjZGVmaW5lIERFQlVHX1ZFUgogI2RlZmluZSBERUJVR19WSVJUVUFMCiAjZGVmaW5lIERFQlVHX1ZYRApAQCAtNTM5LDYgKzU0MSwxMSBAQAogI2Vsc2UKICAgICAwLAogI2VuZGlmCisjaWZkZWYgREVCVUdfVFdFQUsKKyAgICAxLAorI2Vsc2UKKyAgICAwLAorI2VuZGlmCiAjaWZkZWYgREVCVUdfVkVSCiAgICAgMSwKICNlbHNlCkBAIC0xNTMxLDggKzE1MzgsMjEgQEAKICNlbmRpZgogCiAjaWZkZWYgREVCVUdfUlVOVElNRQotI2RlZmluZSBkcHJpbnRmX3ZlciBpZighZGVidWdfbXNnX2VuYWJsZWRbNzNdKSA7IGVsc2UgZnByaW50ZgotI2RlZmluZSBkZWJ1Z2dpbmdfdmVyIGRlYnVnX21zZ19lbmFibGVkWzczXQorI2RlZmluZSBkcHJpbnRmX3R3ZWFrIGlmKCFkZWJ1Z19tc2dfZW5hYmxlZFs3M10pIDsgZWxzZSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ190d2VhayBkZWJ1Z19tc2dfZW5hYmxlZFs3M10KKyNlbHNlCisjaWZkZWYgREVCVUdfVFdFQUsKKyNkZWZpbmUgZHByaW50Zl90d2VhayBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ190d2VhayAxCisjZWxzZQorI2RlZmluZSBkcHJpbnRmX3R3ZWFrIHdoaWxlKDApIGZwcmludGYKKyNkZWZpbmUgZGVidWdnaW5nX3R3ZWFrIDAKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBERUJVR19SVU5USU1FCisjZGVmaW5lIGRwcmludGZfdmVyIGlmKCFkZWJ1Z19tc2dfZW5hYmxlZFs3NF0pIDsgZWxzZSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ192ZXIgZGVidWdfbXNnX2VuYWJsZWRbNzRdCiAjZWxzZQogI2lmZGVmIERFQlVHX1ZFUgogI2RlZmluZSBkcHJpbnRmX3ZlciBmcHJpbnRmCkBAIC0xNTQ0LDggKzE1NjQsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCi0jZGVmaW5lIGRwcmludGZfdmlydHVhbCBpZighZGVidWdfbXNnX2VuYWJsZWRbNzRdKSA7IGVsc2UgZnByaW50ZgotI2RlZmluZSBkZWJ1Z2dpbmdfdmlydHVhbCBkZWJ1Z19tc2dfZW5hYmxlZFs3NF0KKyNkZWZpbmUgZHByaW50Zl92aXJ0dWFsIGlmKCFkZWJ1Z19tc2dfZW5hYmxlZFs3NV0pIDsgZWxzZSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ192aXJ0dWFsIGRlYnVnX21zZ19lbmFibGVkWzc1XQogI2Vsc2UKICNpZmRlZiBERUJVR19WSVJUVUFMCiAjZGVmaW5lIGRwcmludGZfdmlydHVhbCBmcHJpbnRmCkBAIC0xNTU3LDggKzE1NzcsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCi0jZGVmaW5lIGRwcmludGZfdnhkIGlmKCFkZWJ1Z19tc2dfZW5hYmxlZFs3NV0pIDsgZWxzZSBmcHJpbnRmCi0jZGVmaW5lIGRlYnVnZ2luZ192eGQgZGVidWdfbXNnX2VuYWJsZWRbNzVdCisjZGVmaW5lIGRwcmludGZfdnhkIGlmKCFkZWJ1Z19tc2dfZW5hYmxlZFs3Nl0pIDsgZWxzZSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ192eGQgZGVidWdfbXNnX2VuYWJsZWRbNzZdCiAjZWxzZQogI2lmZGVmIERFQlVHX1ZYRAogI2RlZmluZSBkcHJpbnRmX3Z4ZCBmcHJpbnRmCkBAIC0xNTcwLDggKzE1OTAsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCi0jZGVmaW5lIGRwcmludGZfd2luIGlmKCFkZWJ1Z19tc2dfZW5hYmxlZFs3Nl0pIDsgZWxzZSBmcHJpbnRmCi0jZGVmaW5lIGRlYnVnZ2luZ193aW4gZGVidWdfbXNnX2VuYWJsZWRbNzZdCisjZGVmaW5lIGRwcmludGZfd2luIGlmKCFkZWJ1Z19tc2dfZW5hYmxlZFs3N10pIDsgZWxzZSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ193aW4gZGVidWdfbXNnX2VuYWJsZWRbNzddCiAjZWxzZQogI2lmZGVmIERFQlVHX1dJTgogI2RlZmluZSBkcHJpbnRmX3dpbiBmcHJpbnRmCkBAIC0xNTgzLDggKzE2MDMsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCi0jZGVmaW5lIGRwcmludGZfd2luMTZkcnYgaWYoIWRlYnVnX21zZ19lbmFibGVkWzc3XSkgOyBlbHNlIGZwcmludGYKLSNkZWZpbmUgZGVidWdnaW5nX3dpbjE2ZHJ2IGRlYnVnX21zZ19lbmFibGVkWzc3XQorI2RlZmluZSBkcHJpbnRmX3dpbjE2ZHJ2IGlmKCFkZWJ1Z19tc2dfZW5hYmxlZFs3OF0pIDsgZWxzZSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ193aW4xNmRydiBkZWJ1Z19tc2dfZW5hYmxlZFs3OF0KICNlbHNlCiAjaWZkZWYgREVCVUdfV0lOMTZEUlYKICNkZWZpbmUgZHByaW50Zl93aW4xNmRydiBmcHJpbnRmCkBAIC0xNTk2LDggKzE2MTYsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCi0jZGVmaW5lIGRwcmludGZfd2luMzIgaWYoIWRlYnVnX21zZ19lbmFibGVkWzc4XSkgOyBlbHNlIGZwcmludGYKLSNkZWZpbmUgZGVidWdnaW5nX3dpbjMyIGRlYnVnX21zZ19lbmFibGVkWzc4XQorI2RlZmluZSBkcHJpbnRmX3dpbjMyIGlmKCFkZWJ1Z19tc2dfZW5hYmxlZFs3OV0pIDsgZWxzZSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ193aW4zMiBkZWJ1Z19tc2dfZW5hYmxlZFs3OV0KICNlbHNlCiAjaWZkZWYgREVCVUdfV0lOMzIKICNkZWZpbmUgZHByaW50Zl93aW4zMiBmcHJpbnRmCkBAIC0xNjA5LDggKzE2MjksOCBAQAogI2VuZGlmCiAKICNpZmRlZiBERUJVR19SVU5USU1FCi0jZGVmaW5lIGRwcmludGZfd2luc29jayBpZighZGVidWdfbXNnX2VuYWJsZWRbNzldKSA7IGVsc2UgZnByaW50ZgotI2RlZmluZSBkZWJ1Z2dpbmdfd2luc29jayBkZWJ1Z19tc2dfZW5hYmxlZFs3OV0KKyNkZWZpbmUgZHByaW50Zl93aW5zb2NrIGlmKCFkZWJ1Z19tc2dfZW5hYmxlZFs4MF0pIDsgZWxzZSBmcHJpbnRmCisjZGVmaW5lIGRlYnVnZ2luZ193aW5zb2NrIGRlYnVnX21zZ19lbmFibGVkWzgwXQogI2Vsc2UKICNpZmRlZiBERUJVR19XSU5TT0NLCiAjZGVmaW5lIGRwcmludGZfd2luc29jayBmcHJpbnRmCkBAIC0xNjk4LDYgKzE3MTgsNyBAQAogICAgICJ0ZXh0IiwKICAgICAidGltZXIiLAogICAgICJ0b29saGVscCIsCisgICAgInR3ZWFrIiwKICAgICAidmVyIiwKICAgICAidmlydHVhbCIsCiAgICAgInZ4ZCIsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dyYXBoaWNzLmggYi9pbmNsdWRlL2dyYXBoaWNzLmgKaW5kZXggMDBkOTYzYS4uNzJjMWRhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ncmFwaGljcy5oCisrKyBiL2luY2x1ZGUvZ3JhcGhpY3MuaApAQCAtMTMsNiArMTMsMTAgQEAKIGV4dGVybiB2b2lkIEdSQVBIX0RyYXdSZWxpZWZSZWN0KCBIREMzMiBoZGMsIGNvbnN0IFJFQ1QzMiAqcmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQzMiBoaWdobGlnaHRfc2l6ZSwgSU5UMzIgc2hhZG93X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTDMyIHByZXNzZWQgKTsKK2V4dGVybiB2b2lkIEdSQVBIX0RyYXdHZW5lcmljUmVsaWVmUmVjdCggSERDMzIgaGRjLCBjb25zdCAgUkVDVDMyICpyZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQzMiBoaWdobGlnaHRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UMzIgc2hhZG93X3NpemUsIEhCUlVTSDMyIGhpZ2hsaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEJSVVNIMzIgc2hhZG93ICk7CiBleHRlcm4gQk9PTDMyIEdSQVBIX0RyYXdMaW5lcyggSERDMzIgaGRjLCBMUFBPSU5UMzIgcFhZLCBJTlQzMiBOLCBIUEVOMzIgaFBlbik7CiBleHRlcm4gdm9pZCBHUkFQSF9EcmF3UmVjdGFuZ2xlKCBIREMzMiBoZGMsIElOVDMyIHgsIElOVDMyIHksIAogCQkJCSBJTlQzMiB3aWR0aCwgSU5UMzIgaGVpZ2h0LCBIUEVOMzIgaFBlbik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2luc3RhbmNlLmggYi9pbmNsdWRlL2luc3RhbmNlLmgKaW5kZXggOTVkZGUwZS4uOGVkYTcyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnN0YW5jZS5oCisrKyBiL2luY2x1ZGUvaW5zdGFuY2UuaApAQCAtMTQsOCArMTQsNyBAQAogdHlwZWRlZiBzdHJ1Y3QKIHsKICAgICBXT1JEIG51bGw7ICAgICAgICAvKiBBbHdheXMgMCAqLwotICAgIFdPUkQgb2xkX3NwOyAgICAgIC8qIFN0YWNrIHBvaW50ZXI7IHVzZWQgYnkgU3dpdGNoVGFza1RvKCkgKi8KLSAgICBXT1JEIG9sZF9zczsgICAgICAvKiBTdGFjayBzZWdtZW50OyB1c2VkIGJ5IFN3aXRjaFRhc2tUbygpICovCisgICAgRFdPUkQgb2xkX3NzX3NwIFdJTkVfUEFDS0VEOyAgLyogU3RhY2sgcG9pbnRlcjsgdXNlZCBieSBTd2l0Y2hUYXNrVG8oKSAqLwogICAgIFdPUkQgaGVhcDsgICAgICAgIC8qIFBvaW50ZXIgdG8gdGhlIGxvY2FsIGhlYXAgaW5mb3JtYXRpb24gKGlmIGFueSkgKi8KICAgICBXT1JEIGF0b210YWJsZTsgICAvKiBQb2ludGVyIHRvIHRoZSBsb2NhbCBhdG9tIHRhYmxlIChpZiBhbnkpICovIAogICAgIFdPUkQgc3RhY2t0b3A7ICAgIC8qIFRvcCBvZiB0aGUgc3RhY2sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbm9uY2xpZW50LmggYi9pbmNsdWRlL25vbmNsaWVudC5oCmluZGV4IDYzZmUxMTkuLjhiNWI2MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbm9uY2xpZW50LmgKKysrIGIvaW5jbHVkZS9ub25jbGllbnQuaApAQCAtMTEsNyArMTEsNyBAQAogCiBleHRlcm4gTE9ORyBOQ19IYW5kbGVOQ1BhaW50KCBIV05EMzIgaHduZCAsIEhSR04zMiBjbGlwKTsKIGV4dGVybiBMT05HIE5DX0hhbmRsZU5DQWN0aXZhdGUoIFdORCAqcHduZCwgV1BBUkFNMTYgd1BhcmFtICk7Ci1leHRlcm4gTE9ORyBOQ19IYW5kbGVOQ0NhbGNTaXplKCBXTkQgKnBXbmQsIFJFQ1QxNiAqd2luUmVjdCApOworZXh0ZXJuIExPTkcgTkNfSGFuZGxlTkNDYWxjU2l6ZSggV05EICpwV25kLCBSRUNUMzIgKndpblJlY3QgKTsKIGV4dGVybiBMT05HIE5DX0hhbmRsZU5DSGl0VGVzdCggSFdORDMyIGh3bmQsIFBPSU5UMTYgcHQgKTsKIGV4dGVybiBMT05HIE5DX0hhbmRsZU5DTEJ1dHRvbkRvd24oIEhXTkQzMiBod25kLCBXUEFSQU0xNiB3UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUEFSQU0gbFBhcmFtICk7CkBAIC0xOSw2ICsxOSw3IEBACiBleHRlcm4gTE9ORyBOQ19IYW5kbGVTeXNDb21tYW5kKCBIV05EMzIgaHduZCwgV1BBUkFNMTYgd1BhcmFtLCBQT0lOVDE2IHB0ICk7CiBleHRlcm4gTE9ORyBOQ19IYW5kbGVTZXRDdXJzb3IoIEhXTkQzMiBod25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0gKTsKIGV4dGVybiB2b2lkIE5DX0RyYXdTeXNCdXR0b24oIEhXTkQzMiBod25kLCBIREMzMiBoZGMsIEJPT0wzMiBkb3duICk7CitleHRlcm4gdm9pZCBOQ19EcmF3U3lzQnV0dG9uOTUoIEhXTkQzMiBod25kLCBIREMzMiBoZGMsIEJPT0wzMiBkb3duICk7CiBleHRlcm4gQk9PTDMyIE5DX0dldFN5c1BvcHVwUG9zKCBXTkQqIHduZFB0ciwgUkVDVDMyKiByZWN0ICk7CiAKICNlbmRpZiAvKiBfX1dJTkVfTk9OQ0xJRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3B0aW9ucy5oIGIvaW5jbHVkZS9vcHRpb25zLmgKaW5kZXggMjFmOWQ3YS4uNTQyNjEzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9vcHRpb25zLmgKKysrIGIvaW5jbHVkZS9vcHRpb25zLmgKQEAgLTcyLDYgKzcyLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVmLCBjaGFyICpidWZmZXIsIGludCBsZW4gKTsKIGV4dGVybiBpbnQgUFJPRklMRV9HZXRXaW5lSW5pSW50KCBjb25zdCBjaGFyICpzZWN0aW9uLCBjb25zdCBjaGFyICprZXlfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVmICk7CitleHRlcm4gaW50IFBST0ZJTEVfRW51bWVyYXRlV2luZUluaVNlY3Rpb24oCisgICAgY2hhciBjb25zdCAqc2VjdGlvbiwKKyAgICB2b2lkICgqY2FsbGJhY2spKGNoYXIgY29uc3QgKmtleSwgY2hhciBjb25zdCAqbmFtZSwgdm9pZCAqdXNlciksCisgICAgdm9pZCAqdXNlcnB0ciApOwkJICAgICAKK2V4dGVybiBpbnQgUFJPRklMRV9HZXRXaW5lSW5pQm9vbCggY2hhciBjb25zdCAqc2VjdGlvbiwgY2hhciBjb25zdCAqa2V5X25hbWUsCisJCQkJICAgaW50IGRlZiApOwogZXh0ZXJuIGNoYXIqIFBST0ZJTEVfR2V0U3RyaW5nSXRlbSggY2hhciogKTsKIAogI2VuZGlmICAvKiBfX1dJTkVfT1BUSU9OU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3F1ZXVlLmggYi9pbmNsdWRlL3F1ZXVlLmgKaW5kZXggZGU4OGJlMS4uMTQzNTRlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9xdWV1ZS5oCisrKyBiL2luY2x1ZGUvcXVldWUuaApAQCAtMzcsNyArMzcsNyBAQAogICBEV09SRCAgICAgR2V0TWVzc2FnZVBvc1ZhbCBXSU5FX1BBQ0tFRDsgICAvKiAxMiBWYWx1ZSBmb3IgR2V0TWVzc2FnZVBvcyAqLwogICBIUVVFVUUxNiAgc2VsZjsgICAgICAgICAgICAgICAgICAgLyogMTYgSGFuZGxlIHRvIHNlbGYgKHdhczogcmVzZXJ2ZWQpICovCiAgIERXT1JEICAgICBHZXRNZXNzYWdlRXh0cmFJbmZvVmFsOyAvKiAxOCBWYWx1ZSBmb3IgR2V0TWVzc2FnZUV4dHJhSW5mbyAqLwotICBXT1JEICAgICAgcmVzZXJ2ZWQyOyAgICAgICAgICAgICAgLyogMWMgVW5rbm93biAqLworICBXT1JEICAgICAgd1BhcmFtSGlnaDsgICAgICAgICAgICAgLyogMWMgSGlnaCB3b3JkIG9mIHdQYXJhbSAod2FzOiByZXNlcnZlZCkqLwogICBMUEFSQU0gICAgbFBhcmFtIFdJTkVfUEFDS0VEOyAgICAgLyogMWUgTmV4dCA0IHZhbHVlcyBzZXQgYnkgU2VuZE1lc3NhZ2UgKi8KICAgV1BBUkFNMTYgIHdQYXJhbTsgICAgICAgICAgICAgICAgIC8qIDIyICovCiAgIFVJTlQxNiAgICBtc2c7ICAgICAgICAgICAgICAgICAgICAvKiAyNCAqLwpAQCAtNzIsNiArNzIsOCBAQAogCiAvKiBRdWV1ZSBmbGFncyAqLwogI2RlZmluZSBRVUVVRV9GTEFHX1hFVkVOVCAgMHgwMDAxCisjZGVmaW5lIFFVRVVFX1NNX1dJTjMyICAgICAweDAwMDIgIC8qIEN1cnJlbnRseSBzZW50IG1lc3NhZ2UgaXMgV2luMzIgKi8KKyNkZWZpbmUgUVVFVUVfU01fVU5JQ09ERSAgIDB4MDAwNCAgLyogQ3VycmVudGx5IHNlbnQgbWVzc2FnZSBpcyBVbmljb2RlICovCiAKIGV4dGVybiB2b2lkIFFVRVVFX0R1bXBRdWV1ZSggSFFVRVVFMTYgaFF1ZXVlICk7CiBleHRlcm4gdm9pZCBRVUVVRV9XYWxrUXVldWVzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zZWxlY3RvcnMuaCBiL2luY2x1ZGUvc2VsZWN0b3JzLmgKaW5kZXggY2JiMDBlZS4uN2ZjZGU1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zZWxlY3RvcnMuaAorKysgYi9pbmNsdWRlL3NlbGVjdG9ycy5oCkBAIC0yMSw3ICsyMSw3IEBACiAjaWYgZGVmaW5lZChsaW51eCkKICMgZGVmaW5lIFdJTkVfREFUQV9TRUxFQ1RPUiAweDJiCiAjIGRlZmluZSBXSU5FX0NPREVfU0VMRUNUT1IgMHgyMwotI2VsaWYgZGVmaW5lZChfX05ldEJTRF9fKQorI2VsaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQogIyBkZWZpbmUgV0lORV9EQVRBX1NFTEVDVE9SIDB4MWYKICMgZGVmaW5lIFdJTkVfQ09ERV9TRUxFQ1RPUiAweDE3CiAjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zaWdjb250ZXh0LmggYi9pbmNsdWRlL3NpZ2NvbnRleHQuaAppbmRleCAyYjRjMzNlLi5kNDdiODM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NpZ2NvbnRleHQuaAorKysgYi9pbmNsdWRlL3NpZ2NvbnRleHQuaApAQCAtOTEsNyArOTEsOCBAQAogI2VuZGlmICAvKiBfX0VNWF9fICovCiAKIAotI2lmIGRlZmluZWQobGludXgpIHx8IGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBkZWZpbmVkKGxpbnV4KSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIFwKKyB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQogCiAjZGVmaW5lIEVBWF9zaWcoY29udGV4dCkgICAgICgoY29udGV4dCktPnNjX2VheCkKICNkZWZpbmUgRUJYX3NpZyhjb250ZXh0KSAgICAgKChjb250ZXh0KS0+c2NfZWJ4KQpAQCAtMTIxLDcgKzEyMiw3IEBACiAjZGVmaW5lIEVJUF9zaWcoY29udGV4dCkgICAgICgqKCh1bnNpZ25lZCBsb25nKikmKGNvbnRleHQpLT5zY19laXApKQogI2RlZmluZSBFU1Bfc2lnKGNvbnRleHQpICAgICAoKigodW5zaWduZWQgbG9uZyopJihjb250ZXh0KS0+c2NfZXNwKSkKIAotI2VuZGlmICAvKiBsaW51eCB8fCBfX05ldEJTRF9fIHx8IF9fRnJlZUJTRF9fICovCisjZW5kaWYgIC8qIGxpbnV4IHx8IF9fTmV0QlNEX18gfHwgX19GcmVlQlNEX18gfHwgX19PcGVuQlNEX18gKi8KIAogI2lmIGRlZmluZWQoX19zdnI0X18pIHx8IGRlZmluZWQoX1NDT19EUykKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdGFja2ZyYW1lLmggYi9pbmNsdWRlL3N0YWNrZnJhbWUuaAppbmRleCA3MzZlMTA0Li4xZTM3MTFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3N0YWNrZnJhbWUuaAorKysgYi9pbmNsdWRlL3N0YWNrZnJhbWUuaApAQCAtMTUsOCArMTUsOCBAQAogICAvKiAxNi1iaXQgc3RhY2sgbGF5b3V0IGFmdGVyIENhbGxGcm9tMTYoKSAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKLSAgICBXT1JEICAgIHNhdmVkX3NzOyAgICAgICAgICAgICAgICAvKiBzYXZlZCBwcmV2aW91cyAxNi1iaXQgc3RhY2sgKi8KLSAgICBXT1JEICAgIHNhdmVkX3NwOworICAgIERXT1JEICAgc2F2ZWRfc3Nfc3A7ICAgICAgICAgICAgIC8qIHNhdmVkIHByZXZpb3VzIDE2LWJpdCBzdGFjayAqLworICAgIERXT1JEICAgZWJwOyAgICAgICAgICAgICAgICAgICAgIC8qIGZ1bGwgMzItYml0IGNvbnRlbnQgb2YgZWJwICovCiAgICAgV09SRCAgICBlbnRyeV9pcDsgICAgICAgICAgICAgICAgLyogaXAgb2YgZW50cnkgcG9pbnQgKi8KICAgICBXT1JEICAgIGRzOyAgICAgICAgICAgICAgICAgICAgICAvKiBkcyAqLwogICAgIFdPUkQgICAgZW50cnlfY3M7ICAgICAgICAgICAgICAgIC8qIGNzIG9mIGVudHJ5IHBvaW50ICovCkBAIC00Niw4ICs0Niw3IEBACiAjcHJhZ21hIHBhY2soNCkKIAogICAvKiBTYXZlZCAxNi1iaXQgc3RhY2sgZm9yIGN1cnJlbnQgcHJvY2VzcyAoV2luMTYgb25seSkgKi8KLWV4dGVybiBXT1JEIElGMTYzMl9TYXZlZDE2X3NzOwotZXh0ZXJuIFdPUkQgSUYxNjMyX1NhdmVkMTZfc3A7CitleHRlcm4gRFdPUkQgSUYxNjMyX1NhdmVkMTZfc3Nfc3A7CiAKICAgLyogU2F2ZWQgMzItYml0IHN0YWNrIGZvciBjdXJyZW50IHByb2Nlc3MgKFdpbjE2IG9ubHkpICovCiBleHRlcm4gRFdPUkQgSUYxNjMyX1NhdmVkMzJfZXNwOwpAQCAtNTUsOCArNTQsNyBAQAogICAvKiBPcmlnaW5hbCBVbml4IHN0YWNrICovCiBleHRlcm4gRFdPUkQgSUYxNjMyX09yaWdpbmFsMzJfZXNwOwogCi0jZGVmaW5lIENVUlJFTlRfU1RBQ0sxNiBcCi0gICAgKChTVEFDSzE2RlJBTUUgKilQVFJfU0VHX09GRl9UT19MSU4oSUYxNjMyX1NhdmVkMTZfc3MsSUYxNjMyX1NhdmVkMTZfc3ApKQorI2RlZmluZSBDVVJSRU5UX1NUQUNLMTYgICgoU1RBQ0sxNkZSQU1FICopUFRSX1NFR19UT19MSU4oSUYxNjMyX1NhdmVkMTZfc3Nfc3ApKQogCiAjZGVmaW5lIENVUlJFTlRfRFMgICAoQ1VSUkVOVF9TVEFDSzE2LT5kcykKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdGF0aWMuaCBiL2luY2x1ZGUvc3RhdGljLmgKaW5kZXggNDVhOGZmZi4uMzU1MzU5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zdGF0aWMuaAorKysgYi9pbmNsdWRlL3N0YXRpYy5oCkBAIC0xNyw3ICsxNyw3IEBACiAgICAgSElDT04xNiAgaEljb247ICAgLyogSWNvbiBoYW5kbGUgZm9yIFNTX0lDT04gY29udHJvbHMgKi8gCiB9IFNUQVRJQ0lORk87CiAKLWV4dGVybiBMUkVTVUxUIFN0YXRpY1duZFByb2MoIEhXTkQxNiBoV25kLCBVSU5UMTYgdU1zZywgV1BBUkFNMTYgd1BhcmFtLAorZXh0ZXJuIExSRVNVTFQgU3RhdGljV25kUHJvYyggSFdORDMyIGhXbmQsIFVJTlQzMiB1TXNnLCBXUEFSQU0zMiB3UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUEFSQU0gbFBhcmFtICk7CiAKICNlbmRpZiAgLyogX19XSU5FX1NUQVRJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3N0ZGRlYnVnLmggYi9pbmNsdWRlL3N0ZGRlYnVnLmgKaW5kZXggZTA1MTEyZC4uNzFiMDE1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zdGRkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvc3RkZGVidWcuaApAQCAtMTQ5LDYgKzE0OSw3IEBACiAjdW5kZWYgREVCVUdfVEVYVAogI3VuZGVmIERFQlVHX1RJTUVSCiAjdW5kZWYgREVCVUdfVE9PTEhFTFAKKyN1bmRlZiBERUJVR19UV0VBSwogI3VuZGVmIERFQlVHX1ZFUgogI3VuZGVmIERFQlVHX1ZJUlRVQUwKICN1bmRlZiBERUJVR19WWEQKQEAgLTIzMiw2ICsyMzMsNyBAQAogI2RlZmluZSBERUJVR19URVhUCiAjZGVmaW5lIERFQlVHX1RJTUVSCiAjZGVmaW5lIERFQlVHX1RPT0xIRUxQCisjZGVmaW5lIERFQlVHX1RXRUFLCiAjZGVmaW5lIERFQlVHX1ZFUgogI2RlZmluZSBERUJVR19WSVJUVUFMCiAjZGVmaW5lIERFQlVHX1ZYRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zeXNtZXRyaWNzLmggYi9pbmNsdWRlL3N5c21ldHJpY3MuaAppbmRleCAzNzFkMDVmLi5iMmY3ZTM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3N5c21ldHJpY3MuaAorKysgYi9pbmNsdWRlL3N5c21ldHJpY3MuaApAQCAtMTEsMTYgKzExLDcgQEAKIAogCiAgIC8qIENvbnN0YW50IHN5c3RlbSBtZXRyaWNzICovCi0jaWZkZWYgV0lOXzk1X0xPT0sKLSNkZWZpbmUgU1lTTUVUUklDU19DWFZTQ1JPTEwgICAgICAgICAxNAotI2RlZmluZSBTWVNNRVRSSUNTX0NZSFNDUk9MTCAgICAgICAgIDE0Ci0jZWxzZQotI2RlZmluZSBTWVNNRVRSSUNTX0NYVlNDUk9MTCAgICAgICAgIDE2Ci0jZGVmaW5lIFNZU01FVFJJQ1NfQ1lIU0NST0xMICAgICAgICAgMTYKLSNlbmRpZgotI2RlZmluZSBTWVNNRVRSSUNTX0NZQ0FQVElPTiAgICAgICAgIDIwCi0jZGVmaW5lIFNZU01FVFJJQ1NfQ1hCT1JERVIgICAgICAgICAgIDEKLSNkZWZpbmUgU1lTTUVUUklDU19DWUJPUkRFUiAgICAgICAgICAgMQorI2lmIDAKICNpZmRlZiBXSU5fOTVfTE9PSwogI2RlZmluZSBTWVNNRVRSSUNTX0NYRExHRlJBTUUgICAgICAgICAyCiAjZGVmaW5lIFNZU01FVFJJQ1NfQ1lETEdGUkFNRSAgICAgICAgIDIKQEAgLTM2LDcgKzI3LDYgQEAKICNkZWZpbmUgU1lTTUVUUklDU19DWUlDT04gICAgICAgICAgICAzMgogI2RlZmluZSBTWVNNRVRSSUNTX0NYQ1VSU09SICAgICAgICAgIDMyCiAjZGVmaW5lIFNZU01FVFJJQ1NfQ1lDVVJTT1IgICAgICAgICAgMzIKLSNkZWZpbmUgU1lTTUVUUklDU19DWU1FTlUgICAgICAgICAgICAxOAogI2lmZGVmIFdJTl85NV9MT09LCiAjZGVmaW5lIFNZU01FVFJJQ1NfQ1lWU0NST0xMICAgICAgICAgMTQKICNkZWZpbmUgU1lTTUVUUklDU19DWEhTQ1JPTEwgICAgICAgICAxNApAQCAtNDgsOCArMzgsNiBAQAogI2RlZmluZSBTWVNNRVRSSUNTX0NYTUlOICAgICAgICAgICAgMTAwCiAjZGVmaW5lIFNZU01FVFJJQ1NfQ1lNSU4gICAgICAgICAgICAgMjgKICNlbmRpZgotI2RlZmluZSBTWVNNRVRSSUNTX0NYU0laRSAgICAgICAgICAgIDE4Ci0jZGVmaW5lIFNZU01FVFJJQ1NfQ1lTSVpFICAgICAgICAgICAgMTgKICNpZmRlZiBXSU5fOTVfTE9PSwogI2RlZmluZSBTWVNNRVRSSUNTX0NYTUlOVFJBQ0sgICAgICAgMTEyCiAjZGVmaW5lIFNZU01FVFJJQ1NfQ1lNSU5UUkFDSyAgICAgICAgMjcKQEAgLTU3LDIwICs0NSw4OSBAQAogI2RlZmluZSBTWVNNRVRSSUNTX0NYTUlOVFJBQ0sgICAgICAgMTAwCiAjZGVmaW5lIFNZU01FVFJJQ1NfQ1lNSU5UUkFDSyAgICAgICAgMjgKICNlbmRpZgorI2VuZGlmIDAKIAotICAvKiBTb21lIG5vbi1jb25zdGFudCBzeXN0ZW0gbWV0cmljcyAqLwotI2RlZmluZSBTWVNNRVRSSUNTX0NYU0NSRUVOICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWFNDUkVFTl0KLSNkZWZpbmUgU1lTTUVUUklDU19DWVNDUkVFTiAgICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1lTQ1JFRU5dCi0jZGVmaW5lIFNZU01FVFJJQ1NfQ1hGVUxMU0NSRUVOICAgICAgICBzeXNNZXRyaWNzW1NNX0NYRlVMTFNDUkVFTl0KLSNkZWZpbmUgU1lTTUVUUklDU19DWUZVTExTQ1JFRU4gICAgICAgIHN5c01ldHJpY3NbU01fQ1lGVUxMU0NSRUVOXQotI2RlZmluZSBTWVNNRVRSSUNTX1NXQVBCVVRUT04gICAgICAgICAgc3lzTWV0cmljc1tTTV9TV0FQQlVUVE9OXQotI2RlZmluZSBTWVNNRVRSSUNTX0NYRlJBTUUgICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWEZSQU1FXQotI2RlZmluZSBTWVNNRVRSSUNTX0NZRlJBTUUgICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWUZSQU1FXQotI2RlZmluZSBTWVNNRVRSSUNTX0NYRE9VQkxFQ0xLICAgICAgICAgc3lzTWV0cmljc1tTTV9DWERPVUJMRUNMS10KLSNkZWZpbmUgU1lTTUVUUklDU19DWURPVUJMRUNMSyAgICAgICAgIHN5c01ldHJpY3NbU01fQ1lET1VCTEVDTEtdCi0jZGVmaW5lIFNZU01FVFJJQ1NfTUVOVURST1BBTElHTk1FTlQgICBzeXNNZXRyaWNzW1NNX01FTlVEUk9QQUxJR05NRU5UXQotI2RlZmluZSBTWVNNRVRSSUNTX0NYSUNPTlNQQUNJTkcgICAgICAgc3lzTWV0cmljc1tTTV9DWElDT05TUEFDSU5HXQotI2RlZmluZSBTWVNNRVRSSUNTX0NZSUNPTlNQQUNJTkcgICAgICAgc3lzTWV0cmljc1tTTV9DWUlDT05TUEFDSU5HXQorLyogU29tZSBub24tY29uc3RhbnQgc3lzdGVtIG1ldHJpY3MgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWFNDUkVFTiAgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NYU0NSRUVOXSAgICAgICAgICAgICAvKiAwICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1lTQ1JFRU4gICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWVNDUkVFTl0gICAgICAgICAgICAgLyogMSAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NYVlNDUk9MTCAgICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1hWU0NST0xMXSAgICAgICAgICAgIC8qIDIgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWUhTQ1JPTEwgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NZSFNDUk9MTF0gICAgICAgICAgICAvKiAzICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1lDQVBUSU9OICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWUNBUFRJT05dICAgICAgICAgICAgLyogNCAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NYQk9SREVSICAgICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1hCT1JERVJdICAgICAgICAgICAgIC8qIDUgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWUJPUkRFUiAgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NZQk9SREVSXSAgICAgICAgICAgICAvKiA2ICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1hETEdGUkFNRSAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWERMR0ZSQU1FXSAgICAgICAgICAgLyogNyAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NZRExHRlJBTUUgICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1lETEdGUkFNRV0gICAgICAgICAgIC8qIDggKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWVZUSFVNQiAgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NZVlRIVU1CXSAgICAgICAgICAgICAvKiA5ICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1hIVEhVTUIgICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWEhUSFVNQl0gICAgICAgICAgICAgLyogMTAgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWElDT04gICAgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NYSUNPTl0gICAgICAgICAgICAgICAvKiAxMSAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NZSUNPTiAgICAgICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1lJQ09OXSAgICAgICAgICAgICAgIC8qIDEyICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1hDVVJTT1IgICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWENVUlNPUl0gICAgICAgICAgICAgLyogMTMgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWUNVUlNPUiAgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NZQ1VSU09SXSAgICAgICAgICAgICAvKiAxNCAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NZTUVOVSAgICAgICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1lNRU5VXSAgICAgICAgICAgICAgIC8qIDE1ICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1hGVUxMU0NSRUVOICAgICAgICAgc3lzTWV0cmljc1tTTV9DWEZVTExTQ1JFRU5dICAgICAgICAgLyogMTYgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWUZVTExTQ1JFRU4gICAgICAgICBzeXNNZXRyaWNzW1NNX0NZRlVMTFNDUkVFTl0gICAgICAgICAvKiAxNyAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NZS0FOSklXSU5ET1cgICAgICAgIHN5c01ldHJpY3NbU01fQ1lLQU5KSVdJTkRPV10gICAgICAgIC8qIDE4ICovCisjZGVmaW5lIFNZU01FVFJJQ1NfTU9VU0VQUkVTRU5UICAgICAgICAgc3lzTWV0cmljc1tTTV9NT1VTRVBSRVNFTlRdICAgICAgICAgLyogMTkgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWVZTQ1JPTEwgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NZVlNDUk9MTF0gICAgICAgICAgICAvKiAyMCAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NYSFNDUk9MTCAgICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1hIU0NST0xMXSAgICAgICAgICAgIC8qIDIxICovCisjZGVmaW5lIFNZU01FVFJJQ1NfREVCVUcgICAgICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9ERUJVR10gICAgICAgICAgICAgICAgLyogMjIgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19TV0FQQlVUVE9OICAgICAgICAgICBzeXNNZXRyaWNzW1NNX1NXQVBCVVRUT05dICAgICAgICAgICAvKiAyMyAqLworI2RlZmluZSBTWVNNRVRSSUNTX1JFU0VSVkVEMSAgICAgICAgICAgIHN5c01ldHJpY3NbU01fUkVTRVJWRUQxXSAgICAgICAgICAgIC8qIDI0ICovCisjZGVmaW5lIFNZU01FVFJJQ1NfUkVTRVJWRUQyICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9SRVNFUlZFRDJdICAgICAgICAgICAgLyogMjUgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19SRVNFUlZFRDMgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX1JFU0VSVkVEM10gICAgICAgICAgICAvKiAyNiAqLworI2RlZmluZSBTWVNNRVRSSUNTX1JFU0VSVkVENCAgICAgICAgICAgIHN5c01ldHJpY3NbU01fUkVTRVJWRUQ0XSAgICAgICAgICAgIC8qIDI3ICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1hNSU4gICAgICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWE1JTl0gICAgICAgICAgICAgICAgLyogMjggKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWU1JTiAgICAgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NZTUlOXSAgICAgICAgICAgICAgICAvKiAyOSAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NYU0laRSAgICAgICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1hTSVpFXSAgICAgICAgICAgICAgIC8qIDMwICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1lTSVpFICAgICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWVNJWkVdICAgICAgICAgICAgICAgLyogMzEgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWEZSQU1FICAgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NYRlJBTUVdICAgICAgICAgICAgICAvKiAzMiAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NZRlJBTUUgICAgICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1lGUkFNRV0gICAgICAgICAgICAgIC8qIDMzICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1hNSU5UUkFDSyAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWE1JTlRSQUNLXSAgICAgICAgICAgLyogMzQgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWU1JTlRSQUNLICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NZTUlOVFJBQ0tdICAgICAgICAgICAvKiAzNSAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NYRE9VQkxFQ0xLICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1hET1VCTEVDTEtdICAgICAgICAgIC8qIDM2ICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1lET1VCTEVDTEsgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWURPVUJMRUNMS10gICAgICAgICAgLyogMzcgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWElDT05TUEFDSU5HICAgICAgICBzeXNNZXRyaWNzW1NNX0NYSUNPTlNQQUNJTkddICAgICAgICAvKiAzOCAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NZSUNPTlNQQUNJTkcgICAgICAgIHN5c01ldHJpY3NbU01fQ1lJQ09OU1BBQ0lOR10gICAgICAgIC8qIDM5ICovCisjZGVmaW5lIFNZU01FVFJJQ1NfTUVOVURST1BBTElHTk1FTlQgICAgc3lzTWV0cmljc1tTTV9NRU5VRFJPUEFMSUdOTUVOVF0gICAgLyogNDAgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19QRU5XSU5ET1dTICAgICAgICAgICBzeXNNZXRyaWNzW1NNX1BFTldJTkRPV1NdICAgICAgICAgICAvKiA0MSAqLworI2RlZmluZSBTWVNNRVRSSUNTX0RCQ1NFTkFCTEVEICAgICAgICAgIHN5c01ldHJpY3NbU01fREJDU0VOQUJMRURdICAgICAgICAgIC8qIDQyICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ01PVVNFQlVUVE9OUyAgICAgICAgc3lzTWV0cmljc1tTTV9DTU9VU0VCVVRUT05TXSAgICAgICAgLyogNDMgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWEZJWEVERlJBTUUgICAgICAgICBzeXNNZXRyaWNzW1NNX0NYRExHRlJBTUVdICAgICAgICAgICAvKiB3aW40MCBuYW1lIGNoYW5nZSAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NZRklYRURGUkFNRSAgICAgICAgIHN5c01ldHJpY3NbU01fQ1lETEdGUkFNRV0gICAgICAgICAgIC8qIHdpbjQwIG5hbWUgY2hhbmdlICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1hTSVpFRlJBTUUgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWEZSQU1FXSAgICAgICAgICAgICAgLyogd2luNDAgbmFtZSBjaGFuZ2UgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWVNJWkVGUkFNRSAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NZRlJBTUVdICAgICAgICAgICAgICAvKiB3aW40MCBuYW1lIGNoYW5nZSAqLworI2RlZmluZSBTWVNNRVRSSUNTX1NFQ1VSRSAgICAgICAgICAgICAgIHN5c01ldHJpY3NbU01fU0VDVVJFXSAgICAgICAgICAgICAgIC8qIDQ0ICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1hFREdFICAgICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWEVER0VdICAgICAgICAgICAgICAgLyogNDUgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWUVER0UgICAgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NZRURHRV0gICAgICAgICAgICAgICAvKiA0NiAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NYTUlOU1BBQ0lORyAgICAgICAgIHN5c01ldHJpY3NbU01fQ1hNSU5TUEFDSU5HXSAgICAgICAgIC8qIDQ3ICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1lNSU5TUEFDSU5HICAgICAgICAgc3lzTWV0cmljc1tTTV9DWU1JTlNQQUNJTkddICAgICAgICAgLyogNDggKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWFNNSUNPTiAgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NYU01JQ09OXSAgICAgICAgICAgICAvKiA0OSAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NZU01JQ09OICAgICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1lTTUlDT05dICAgICAgICAgICAgIC8qIDUwICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1lTTUNBUFRJT04gICAgICAgICAgc3lzTWV0cmljc1tTTV9DWVNNQ0FQVElPTl0gICAgICAgICAgLyogNTEgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWFNNU0laRSAgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NYU01TSVpFXSAgICAgICAgICAgICAvKiA1MiAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NZU01TSVpFICAgICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1lTTVNJWkVdICAgICAgICAgICAgIC8qIDUzICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1hNRU5VU0laRSAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWE1FTlVTSVpFXSAgICAgICAgICAgLyogNTQgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWU1FTlVTSVpFICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NZTUVOVVNJWkVdICAgICAgICAgICAvKiA1NSAqLworI2RlZmluZSBTWVNNRVRSSUNTX0FSUkFOR0UgICAgICAgICAgICAgIHN5c01ldHJpY3NbU01fQVJSQU5HRV0gICAgICAgICAgICAgIC8qIDU2ICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1hNSU5JTUlaRUQgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWE1JTklNSVpFRF0gICAgICAgICAgLyogNTcgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWU1JTklNSVpFRCAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NZTUlOSU1JWkVEXSAgICAgICAgICAvKiA1OCAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NYTUFYVFJBQ0sgICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1hNQVhUUkFDS10gICAgICAgICAgIC8qIDU5ICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1lNQVhUUkFDSyAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWU1BWFRSQUNLXSAgICAgICAgICAgLyogNjAgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DWE1BWElNSVpFRCAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NYTUFYSU1JWkVEXSAgICAgICAgICAvKiA2MSAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NZTUFYSU1JWkVEICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1lNQVhJTUlaRURdICAgICAgICAgIC8qIDYyICovCisjZGVmaW5lIFNZU01FVFJJQ1NfTkVUV09SSyAgICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9ORVRXT1JLXSAgICAgICAgICAgICAgLyogNjMgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19DTEVBTkJPT1QgICAgICAgICAgICBzeXNNZXRyaWNzW1NNX0NMRUFOQk9PVF0gICAgICAgICAgICAvKiA2NyAqLworI2RlZmluZSBTWVNNRVRSSUNTX0NYRFJBRyAgICAgICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1hEUkFHXSAgICAgICAgICAgICAgIC8qIDY4ICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1lEUkFHICAgICAgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWURSQUddICAgICAgICAgICAgICAgLyogNjkgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19TSE9XU09VTkRTICAgICAgICAgICBzeXNNZXRyaWNzW1NNX1NIT1dTT1VORFNdICAgICAgICAgICAvKiA3MCAqLworCisvKiBVc2UgdGhlIGZvbGxvd2luZyBpbnN0ZWFkIG9mIHN5c01ldHJpY3NbU01fQ1hNRU5VQ0hFQ0tdIEdldE1lbnVDaGVja01hcmtEaW1lbnNpb25zKCkhICovCisjZGVmaW5lIFNZU01FVFJJQ1NfQ1hNRU5VQ0hFQ0sgICAgICAgICAgc3lzTWV0cmljc1tTTV9DWE1FTlVDSEVDS10gICAgICAgICAgLyogNzEgKi8KKworI2RlZmluZSBTWVNNRVRSSUNTX0NZTUVOVUNIRUNLICAgICAgICAgIHN5c01ldHJpY3NbU01fQ1lNRU5VQ0hFQ0tdICAgICAgICAgIC8qIDcyICovCisjZGVmaW5lIFNZU01FVFJJQ1NfU0xPV01BQ0hJTkUgICAgICAgICAgc3lzTWV0cmljc1tTTV9TTE9XTUFDSElORV0gICAgICAgICAgLyogNzMgKi8KKyNkZWZpbmUgU1lTTUVUUklDU19NSURFQVNURU5BQkxFRCAgICAgICBzeXNNZXRyaWNzW1NNX01JREVBU1RFTkFCTEVEXSAgICAgICAvKiA3NCAqLworI2RlZmluZSBTWVNNRVRSSUNTX01PVVNFV0hFRUxQUkVTRU5UICAgIHN5c01ldHJpY3NbU01fTU9VU0VXSEVFTFBSRVNFTlRdICAgIC8qIDc1ICovCiAKIGV4dGVybiB2b2lkIFNZU01FVFJJQ1NfSW5pdCh2b2lkKTsKIGV4dGVybiBzaG9ydCBzeXNNZXRyaWNzW1NNX0NNRVRSSUNTKzFdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90YXNrLmggYi9pbmNsdWRlL3Rhc2suaAppbmRleCA3MGY3OWJjLi42MmZjNTllIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Rhc2suaAorKysgYi9pbmNsdWRlL3Rhc2suaApAQCAtNTQsOCArNTQsNyBAQAogdHlwZWRlZiBzdHJ1Y3QKIHsKICAgICBIVEFTSzE2ICAgaE5leHQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDAwIFNlbGVjdG9yIG9mIG5leHQgVERCICovCi0gICAgV09SRCAgICAgIHNwOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwMiBTdGFjayBwb2ludGVyIG9mIHRhc2sgKi8KLSAgICBXT1JEICAgICAgc3M7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDA0IFN0YWNrIHNlZ21lbnQgb2YgdGFzayAqLworICAgIERXT1JEICAgICBzc19zcCBXSU5FX1BBQ0tFRDsgICAgICAgICAgLyogMDIgU3RhY2sgcG9pbnRlciBvZiB0YXNrICovCiAgICAgV09SRCAgICAgIG5FdmVudHM7ICAgICAgICAgICAgICAgICAgICAvKiAwNiBFdmVudHMgZm9yIHRoaXMgdGFzayAqLwogICAgIElOVDE2ICAgICBwcmlvcml0eTsgICAgICAgICAgICAgICAgICAgLyogMDggVGFzayBwcmlvcml0eSwgLTMyLi4xNSAqLwogICAgIFdPUkQgICAgICB1bnVzZWQxOyAgICAgICAgICAgICAgICAgICAgLyogMGEgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHdlYWsuaCBiL2luY2x1ZGUvdHdlYWsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmRjYmY2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90d2Vhay5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgIFdpbmUgV2luZG93cyA5NSBpbnRlcmZhY2UgdHdlYWtzCisgKgorICogICBDb3B5cmlnaHQgKGMpIDE5OTcgRGF2ZSBDdXRoYmVydCAoZGFjdXRAZWNlLmNtdS5lZHUpCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoX19XSU5FX1RXRUFLX0gpCisjZGVmaW5lIF9fV0lORV9UV0VBS19ICisKKyNpbmNsdWRlICJ3aW50eXBlcy5oIgorCitpbnQgIFRXRUFLX0luaXQoKTsKK2ludCAgVFdFQUtfQ2hlY2tDb25maWd1cmF0aW9uKCk7CitJTlQzMiAgVFdFQUtfUGFydHlNZXNzYWdlQm94KExQQ1NUUiwgTFBDU1RSLCBEV09SRCk7Cit2b2lkICBUV0VBS19EcmF3UmVsaWVmUmVjdDk1KEhEQzMyLCBSRUNUMzIgY29uc3QgKik7Cit2b2lkICBUV0VBS19EcmF3TWVudVNlcGFyYXRvcjk1KEhEQzMyLCBVSU5UMzIsIFVJTlQzMiwgVUlOVDMyKTsKK2V4dGVybiBpbnQgIFRXRUFLX1dpbjk1TG9vazsKK2V4dGVybiBpbnQgIFRXRUFLX1dpbmVJbml0aWFsaXplZDsKK2V4dGVybiBIUEVOMzIgIFRXRUFLX1BlbkZGOTU7CitleHRlcm4gSFBFTjMyICBUV0VBS19QZW5FMDk1OworZXh0ZXJuIEhQRU4zMiAgVFdFQUtfUGVuQzA5NTsKK2V4dGVybiBIUEVOMzIgIFRXRUFLX1BlbjgwOTU7CitleHRlcm4gSFBFTjMyICBUV0VBS19QZW4wMDk1OworCisjZW5kaWYgLyogX19XSU5FX1RXRUFLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvd2luLmggYi9pbmNsdWRlL3dpbi5oCmluZGV4IGVkOWUxYmMuLjEzOWU5MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvd2luLmgKKysrIGIvaW5jbHVkZS93aW4uaApAQCAtMzcsNiArMzcsNyBAQAogICAgIEJJQzMyX0NPTUJPLAogICAgIEJJQzMyX0NPTUJPTEIsCiAgICAgQklDMzJfUE9QVVBNRU5VLAorICAgIEJJQzMyX1NUQVRJQywKICAgICBCSUMzMl9TQ1JPTEwsCiAgICAgQklDMzJfREVTS1RPUCwKICAgICBCSUMzMl9ESUFMT0csCkBAIC02MSw4ICs2Miw4IEBACiAgICAgRFdPUkQgICAgICAgICAgZHdNYWdpYzsgICAgICAgLyogTWFnaWMgbnVtYmVyIChtdXN0IGJlIFdORF9NQUdJQykgKi8KICAgICBIV05EMzIgICAgICAgICBod25kU2VsZjsgICAgICAvKiBIYW5kbGUgb2YgdGhpcyB3aW5kb3cgKi8KICAgICBISU5TVEFOQ0UxNiAgICBoSW5zdGFuY2U7ICAgICAvKiBXaW5kb3cgaEluc3RhbmNlIChmcm9tIENyZWF0ZVdpbmRvdykgKi8KLSAgICBSRUNUMTYgICAgICAgICByZWN0Q2xpZW50OyAgICAvKiBDbGllbnQgYXJlYSByZWwuIHRvIHBhcmVudCBjbGllbnQgYXJlYSAqLwotICAgIFJFQ1QxNiAgICAgICAgIHJlY3RXaW5kb3c7ICAgIC8qIFdob2xlIHdpbmRvdyByZWwuIHRvIHBhcmVudCBjbGllbnQgYXJlYSAqLworICAgIFJFQ1QzMiAgICAgICAgIHJlY3RDbGllbnQ7ICAgIC8qIENsaWVudCBhcmVhIHJlbC4gdG8gcGFyZW50IGNsaWVudCBhcmVhICovCisgICAgUkVDVDMyICAgICAgICAgcmVjdFdpbmRvdzsgICAgLyogV2hvbGUgd2luZG93IHJlbC4gdG8gcGFyZW50IGNsaWVudCBhcmVhICovCiAgICAgTFBTVFIgICAgICAgICAgdGV4dDsgICAgICAgICAgLyogV2luZG93IHRleHQgKi8KICAgICB2b2lkICAgICAgICAgICpwVlNjcm9sbDsgICAgICAvKiBWZXJ0aWNhbCBzY3JvbGwtYmFyIGluZm8gKi8KICAgICB2b2lkICAgICAgICAgICpwSFNjcm9sbDsgICAgICAvKiBIb3Jpem9udGFsIHNjcm9sbC1iYXIgaW5mbyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW5iYXNlLmggYi9pbmNsdWRlL3dpbmJhc2UuaAppbmRleCA4MTM0YTE2Li5lODYwNDE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3dpbmJhc2UuaAorKysgYi9pbmNsdWRlL3dpbmJhc2UuaApAQCAtNDksNiArNDksMTAgQEAKICNkZWZpbmUgRklMRV9NQVBfUkVBRCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CiAjZGVmaW5lIEZJTEVfTUFQX0FMTF9BQ0NFU1MgICAgICAgICAgICAgMHgwMDBmMDAxZgogCisjZGVmaW5lIE1PVkVGSUxFX1JFUExBQ0VfRVhJU1RJTkcgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNT1ZFRklMRV9DT1BZX0FMTE9XRUQgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTU9WRUZJTEVfREVMQVlfVU5USUxfUkVCT09UICAgICAweDAwMDAwMDA0CisKICNkZWZpbmUgRlNfQ0FTRV9TRU5TSVRJVkUgICAgICAgICAgICAgICBGSUxFX0NBU0VfU0VOU0lUSVZFX1NFQVJDSAogI2RlZmluZSBGU19DQVNFX0lTX1BSRVNFUlZFRCAgICAgICAgICAgIEZJTEVfQ0FTRV9QUkVTRVJWRURfTkFNRVMKICNkZWZpbmUgRlNfVU5JQ09ERV9TVE9SRURfT05fRElTSyAgICAgICBGSUxFX1VOSUNPREVfT05fRElTSwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW5kb3dzLmggYi9pbmNsdWRlL3dpbmRvd3MuaAppbmRleCBmZTAwOTg0Li4yOGRkMzFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3dpbmRvd3MuaAorKysgYi9pbmNsdWRlL3dpbmRvd3MuaApAQCAtMTgwMiw4ICsxODAyLDkgQEAKICNkZWZpbmUgU01fQ1lNRU5VQ0hFQ0sJICAgICAgNzIKICNkZWZpbmUgU01fU0xPV01BQ0hJTkUJICAgICAgNzMKICNkZWZpbmUgU01fTUlERUFTVEVOQUJMRUQgICAgIDc0CisjZGVmaW5lIFNNX01PVVNFV0hFRUxQUkVTRU5UICA3NQogCi0jZGVmaW5lIFNNX0NNRVRSSUNTICAgICAgICAgICA3NQorI2RlZmluZSBTTV9DTUVUUklDUyAgICAgICAgICAgNzYKIAogICAvKiBEZXZpY2UtaW5kZXBlbmRlbnQgYml0bWFwcyAqLwogCkBAIC0xOTU5LDkgKzE5NjAsNiBAQAogfSBTRUNVUklUWV9BVFRSSUJVVEVTLCAqTFBTRUNVUklUWV9BVFRSSUJVVEVTOwogCiAvKiA2NCBiaXQgbnVtYmVyIG9mIDEwMCBuYW5vc2Vjb25kcyBpbnRlcnZhbHMgc2luY2UgSmFudWFyeSAxLCAxNjAxICovCi0vKiBGSVhNRTogY3VycmVudGx5IGR3TG93RGF0ZVRpbWUgaXMgZXF1aXZhbGVudCB0byB0aGUgVU5JWCB0aW1lKCksCi0gKiBhbmQgZHdIaWdoRGF0ZVRpbWUgMAotICovCiB0eXBlZGVmIHN0cnVjdAogewogICBJTlQzMiAgZHdMb3dEYXRlVGltZTsKQEAgLTUwMDIsNiArNTAwMCw2MyBAQAogCURXT1JECWR3T3B0RGF0YVNpemU7CiB9IE5FVENPTk5FQ1RJTkZPU1RSVUNULCpMUE5FVENPTk5FQ1RJTkZPU1RSVUNUOwogCit0eXBlZGVmIHN0cnVjdCB7CisJVUlOVDE2CQljYlNpemU7CisJSU5UMTYJCWlCb3JkZXJXaWR0aDsKKwlJTlQxNgkJaVNjcm9sbFdpZHRoOworCUlOVDE2CQlpU2Nyb2xsSGVpZ2h0OworCUlOVDE2CQlpQ2FwdGlvbldpZHRoOworCUlOVDE2CQlpQ2FwdGlvbkhlaWdodDsKKwlMT0dGT05UMTYJbGZDYXB0aW9uRm9udDsKKwlJTlQxNgkJaVNtQ2FwdGlvbldpZHRoOworCUlOVDE2CQlpU21DYXB0aW9uSGVpZ2h0OworCUxPR0ZPTlQxNglsZlNtQ2FwdGlvbkZvbnQ7CisJSU5UMTYJCWlNZW51V2lkdGg7CisJSU5UMTYJCWlNZW51SGVpZ2h0OworCUxPR0ZPTlQxNglsZk1lbnVGb250OworCUxPR0ZPTlQxNglsZlN0YXR1c0ZvbnQ7CisJTE9HRk9OVDE2CWxmTWVzc2FnZUZvbnQ7Cit9IE5PTkNMSUVOVE1FVFJJQ1MxNiwqTFBOT05DTElFTlRNRVRSSUNTMTY7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlVSU5UMzIJCWNiU2l6ZTsKKwlJTlQzMgkJaUJvcmRlcldpZHRoOworCUlOVDMyCQlpU2Nyb2xsV2lkdGg7CisJSU5UMzIJCWlTY3JvbGxIZWlnaHQ7CisJSU5UMzIJCWlDYXB0aW9uV2lkdGg7CisJSU5UMzIJCWlDYXB0aW9uSGVpZ2h0OworCUxPR0ZPTlQzMkEJbGZDYXB0aW9uRm9udDsKKwlJTlQzMgkJaVNtQ2FwdGlvbldpZHRoOworCUlOVDMyCQlpU21DYXB0aW9uSGVpZ2h0OworCUxPR0ZPTlQzMkEJbGZTbUNhcHRpb25Gb250OworCUlOVDMyCQlpTWVudVdpZHRoOworCUlOVDMyCQlpTWVudUhlaWdodDsKKwlMT0dGT05UMzJBCWxmTWVudUZvbnQ7CisJTE9HRk9OVDMyQQlsZlN0YXR1c0ZvbnQ7CisJTE9HRk9OVDMyQQlsZk1lc3NhZ2VGb250OworfSBOT05DTElFTlRNRVRSSUNTMzJBLCpMUE5PTkNMSUVOVE1FVFJJQ1MzMkE7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlVSU5UMzIJCWNiU2l6ZTsKKwlJTlQzMgkJaUJvcmRlcldpZHRoOworCUlOVDMyCQlpU2Nyb2xsV2lkdGg7CisJSU5UMzIJCWlTY3JvbGxIZWlnaHQ7CisJSU5UMzIJCWlDYXB0aW9uV2lkdGg7CisJSU5UMzIJCWlDYXB0aW9uSGVpZ2h0OworCUxPR0ZPTlQzMlcJbGZDYXB0aW9uRm9udDsKKwlJTlQzMgkJaVNtQ2FwdGlvbldpZHRoOworCUlOVDMyCQlpU21DYXB0aW9uSGVpZ2h0OworCUxPR0ZPTlQzMlcJbGZTbUNhcHRpb25Gb250OworCUlOVDMyCQlpTWVudVdpZHRoOworCUlOVDMyCQlpTWVudUhlaWdodDsKKwlMT0dGT05UMzJXCWxmTWVudUZvbnQ7CisJTE9HRk9OVDMyVwlsZlN0YXR1c0ZvbnQ7CisJTE9HRk9OVDMyVwlsZk1lc3NhZ2VGb250OworfSBOT05DTElFTlRNRVRSSUNTMzJXLCpMUE5PTkNMSUVOVE1FVFJJQ1MzMlc7CisKK0RFQ0xfV0lORUxJQl9UWVBFX0FXKE5PTkNMSUVOVE1FVFJJQ1MpOworREVDTF9XSU5FTElCX1RZUEVfQVcoTFBOT05DTElFTlRNRVRSSUNTKTsKKwogI3ByYWdtYSBwYWNrKDQpCiAKIC8qIERlY2xhcmF0aW9ucyBmb3IgZnVuY3Rpb25zIHRoYXQgZXhpc3Qgb25seSBpbiBXaW4xNiAqLwpAQCAtNTI1OSw2ICs1MzE0LDcgQEAKIEJPT0wzMiAgICAgSXNXaW5kb3dVbmljb2RlKEhXTkQzMik7CiBCT09MMzIgICAgIElzVmFsaWRMb2NhbGUoRFdPUkQsRFdPUkQpOwogQk9PTDMyICAgICBMb2NhbEZpbGVUaW1lVG9GaWxlVGltZShjb25zdCBGSUxFVElNRSosTFBGSUxFVElNRSk7CitCT09MMzIgICAgIExvY2tGaWxlKEhGSUxFMzIsRFdPUkQsRFdPUkQsRFdPUkQsRFdPUkQpOwogU0VHUFRSICAgICBNYXBMUyhMUFZPSUQpOwogTFBWT0lEICAgICBNYXBTTChTRUdQVFIpOwogTFBWT0lEICAgICBNYXBWaWV3T2ZGaWxlKEhBTkRMRTMyLERXT1JELERXT1JELERXT1JELERXT1JEKTsKQEAgLTUzMzksNiArNTM5NSw3IEBACiBMUFZPSUQgICAgIFRsc0dldFZhbHVlKERXT1JEKTsKIEJPT0wzMiAgICAgVGxzU2V0VmFsdWUoRFdPUkQsTFBWT0lEKTsKIFZPSUQgICAgICAgVW5NYXBMUyhTRUdQVFIpOworQk9PTDMyICAgICBVbmxvY2tGaWxlKEhGSUxFMzIsRFdPUkQsRFdPUkQsRFdPUkQsRFdPUkQpOwogQk9PTDMyICAgICBVbm1hcFZpZXdPZkZpbGUoTFBWT0lEKTsKIExQVk9JRCAgICAgVmlydHVhbEFsbG9jKExQVk9JRCxEV09SRCxEV09SRCxEV09SRCk7CiBCT09MMzIgICAgIFZpcnR1YWxGcmVlKExQVk9JRCxEV09SRCxEV09SRCk7CkBAIC02MjA2LDYgKzYyNjMsMTAgQEAKIFVJTlQzMiAgICAgR2V0TG9naWNhbERyaXZlU3RyaW5nczMyQShVSU5UMzIsTFBTVFIpOwogVUlOVDMyICAgICBHZXRMb2dpY2FsRHJpdmVTdHJpbmdzMzJXKFVJTlQzMixMUFdTVFIpOwogI2RlZmluZSAgICBHZXRMb2dpY2FsRHJpdmVTdHJpbmdzIFdJTkVMSUJfTkFNRV9BVyhHZXRMb2dpY2FsRHJpdmVTdHJpbmdzKQorSU5UMTYgICAgICBHZXRMb2NhbGVJbmZvMTYoTENJRCxMQ1RZUEUsTFBTVFIsSU5UMTYpOworSU5UMzIgICAgICBHZXRMb2NhbGVJbmZvMzJBKExDSUQsTENUWVBFLExQU1RSLElOVDMyKTsKK0lOVDMyICAgICAgR2V0TG9jYWxlSW5mbzMyVyhMQ0lELExDVFlQRSxMUFdTVFIsSU5UMzIpOworI2RlZmluZSAgICBHZXRMb2NhbGVJbmZvIFdJTkVMSUJfTkFNRV9BVyhHZXRMb2NhbGVJbmZvKQogSU5UMTYgICAgICBHZXRNYXBNb2RlMTYoSERDMTYpOwogSU5UMzIgICAgICBHZXRNYXBNb2RlMzIoSERDMzIpOwogI2RlZmluZSAgICBHZXRNYXBNb2RlIFdJTkVMSUJfTkFNRShHZXRNYXBNb2RlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW5lcnJvci5oIGIvaW5jbHVkZS93aW5lcnJvci5oCmluZGV4IDc1NzE2YmYuLmY4ZDc3MzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvd2luZXJyb3IuaAorKysgYi9pbmNsdWRlL3dpbmVycm9yLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgRVJST1JfT1VUT0ZNRU1PUlkgICAgICAgICAgIDE0CiAjZGVmaW5lIEVSUk9SX05PX01PUkVfRklMRVMgICAgICAgICAxOAogI2RlZmluZSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTiAgICAgMzIKKyNkZWZpbmUgRVJST1JfTE9DS19WSU9MQVRJT04gICAgICAgIDMzCiAjZGVmaW5lIEVSUk9SX0RVUF9OQU1FICAgICAgICAgICAgICA1MgogI2RlZmluZSBFUlJPUl9GSUxFX0VYSVNUUyAgICAgICAgICAgODAKICNkZWZpbmUgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIgICAgIDg3CmRpZmYgLS1naXQgYS9pbmNsdWRlL3dpbnBvcy5oIGIvaW5jbHVkZS93aW5wb3MuaAppbmRleCA0NGY5ZTg4Li5mMDc0MzFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3dpbnBvcy5oCisrKyBiL2luY2x1ZGUvd2lucG9zLmgKQEAgLTI3LDE2ICsyNywxNyBAQAogCiBleHRlcm4gQk9PTDMyIFdJTlBPU19SZWRyYXdJY29uVGl0bGUoIEhXTkQzMiBoV25kICk7CiBleHRlcm4gQk9PTDMyIFdJTlBPU19TaG93SWNvblRpdGxlKCBXTkQqIHBXbmQsIEJPT0wzMiBiU2hvdyApOwotZXh0ZXJuIHZvaWQgICBXSU5QT1NfR2V0TWluTWF4SW5mbyggV05EKiBwV25kLCBQT0lOVDE2ICptYXhTaXplLCBQT0lOVDE2ICptYXhQb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT0lOVDE2ICptaW5UcmFjaywgUE9JTlQxNiAqbWF4VHJhY2sgKTsKK2V4dGVybiB2b2lkICAgV0lOUE9TX0dldE1pbk1heEluZm8oIFdORCogcFduZCwgUE9JTlQzMiAqbWF4U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBPSU5UMzIgKm1heFBvcywgUE9JTlQzMiAqbWluVHJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT0lOVDMyICptYXhUcmFjayApOwogZXh0ZXJuIFVJTlQxNiBXSU5QT1NfTWluTWF4aW1pemUoIFdORCogcFduZCwgVUlOVDE2IGNtZCwgTFBSRUNUMTYgbHBQb3MpOwogZXh0ZXJuIEJPT0wzMiBXSU5QT1NfU2V0QWN0aXZlV2luZG93KCBIV05EMzIgaFduZCwgQk9PTDMyIGZNb3VzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTDMyIGZDaGFuZ2VGb2N1cyApOwogZXh0ZXJuIEJPT0wzMiBXSU5QT1NfQ2hhbmdlQWN0aXZlV2luZG93KCBIV05EMzIgaHduZCwgQk9PTDMyIG1vdXNlTXNnICk7Ci1leHRlcm4gTE9ORyBXSU5QT1NfU2VuZE5DQ2FsY1NpemUoIEhXTkQzMiBod25kLCBCT09MMzIgY2FsY1ZhbGlkUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUNUMTYgKm5ld1dpbmRvd1JlY3QsIFJFQ1QxNiAqb2xkV2luZG93UmVjdCwKLQkJCQkgIFJFQ1QxNiAqb2xkQ2xpZW50UmVjdCwgU0VHUFRSIHdpbnBvcywKLQkJCQkgIFJFQ1QxNiAqbmV3Q2xpZW50UmVjdCApOworZXh0ZXJuIExPTkcgV0lOUE9TX1NlbmROQ0NhbGNTaXplKEhXTkQzMiBod25kLCBCT09MMzIgY2FsY1ZhbGlkUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUNUMzIgKm5ld1dpbmRvd1JlY3QsIFJFQ1QzMiAqb2xkV2luZG93UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUNUMzIgKm9sZENsaWVudFJlY3QsIFdJTkRPV1BPUzMyICp3aW5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVDVDMyICpuZXdDbGllbnRSZWN0ICk7CiBleHRlcm4gTE9ORyBXSU5QT1NfSGFuZGxlV2luZG93UG9zQ2hhbmdpbmcxNihXTkQgKnduZFB0ciwgV0lORE9XUE9TMTYgKndpbnBvcyk7CiBleHRlcm4gTE9ORyBXSU5QT1NfSGFuZGxlV2luZG93UG9zQ2hhbmdpbmczMihXTkQgKnduZFB0ciwgV0lORE9XUE9TMzIgKndpbnBvcyk7CiBleHRlcm4gSU5UMTYgV0lOUE9TX1dpbmRvd0Zyb21Qb2ludCggV05EKiBzY29wZVduZCwgUE9JTlQxNiBwdCwgV05EICoqcHBXbmQgKTsKZGlmZiAtLWdpdCBhL2lwYy9iaXRfYXJyYXkuYyBiL2lwYy9iaXRfYXJyYXkuYwppbmRleCA2ODczYzgyLi41N2M5M2U1IDEwMDY0NAotLS0gYS9pcGMvYml0X2FycmF5LmMKKysrIGIvaXBjL2JpdF9hcnJheS5jCkBAIC0yMyw4ICsyMywxMSBAQAogLyogI2RlZmluZSBOREVCVUcgKi8KIAogI2lmIGRlZmluZWQobGludXgpICYmICFkZWZpbmVkKE5PX0FTTSkKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IDEzMTMyOCAvKiBMaW51eCAyLjEueCBkb2Vzbid0IHJldHVybiB2YWx1ZXMgd2l0aCBjbGVhcl9iaXQgYW5kIHNldF9iaXQgKi8KICNkZWZpbmUgSEFTX0JJVE9QUwogI2VuZGlmCisjZW5kaWYKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKZGlmZiAtLWdpdCBhL2lwYy9kZGVfcHJvYy5jIGIvaXBjL2RkZV9wcm9jLmMKaW5kZXggMTY3ZGRlMi4uZDlmYzI1NiAxMDA2NDQKLS0tIGEvaXBjL2RkZV9wcm9jLmMKKysrIGIvaXBjL2RkZV9wcm9jLmMKQEAgLTksNyArOSw3IEBACiAgKi8KICNpZmRlZiBDT05GSUdfSVBDCiAKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQogI2RlZmluZSBtc2didWYgbXltc2cKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pcGMvZGRlX3Byb2NfdGVzdC5jIGIvaXBjL2RkZV9wcm9jX3Rlc3QuYwppbmRleCAxMjkxZmQ4Li41NDExNzJhIDEwMDY0NAotLS0gYS9pcGMvZGRlX3Byb2NfdGVzdC5jCisrKyBiL2lwYy9kZGVfcHJvY190ZXN0LmMKQEAgLTksNyArOSw3IEBACiAgKiAgICAgICAgICAgIHdpdGhvdXQgKHdpdGggdGhlIGFyZ3VtZW50IGlzIHRoZSBzZXJ2ZXIpLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCi0jaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2lmIGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykKICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2Vsc2UKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAodm9pZCAoKikoKSkgKCgodW5zaWduZWQgaW50KShjc3RhY2spICsgc2l6ZW9mKGNzdGFjaykgLSA0KSAmIH4zKTsKICAgd2luZV9zaWdhY3Rpb24oU0lHVVNSMiwmdXNyMl9hY3QsTlVMTCk7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pCisjaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQogICB1c3IyX2FjdC5zYV9oYWRubGVyID0gKHZvaWQgKCopKSBzdG9wX3dhaXQ7CiAgIHVzcjJfYWN0LnNhX2ZsYWdzID0gU0FfT05TVEFDSzsKICAgdXNyMl9hY3Quc2FfbWFzayA9IHNpZ19tYXNrOwpkaWZmIC0tZ2l0IGEvaXBjL3NobV9tYWluX2Jsay5jIGIvaXBjL3NobV9tYWluX2Jsay5jCmluZGV4IGZkYzIzMDcuLjA5YTkxYjIgMTAwNjQ0Ci0tLSBhL2lwYy9zaG1fbWFpbl9ibGsuYworKysgYi9pcGMvc2htX21haW5fYmxrLmMKQEAgLTM5LDggKzM5LDEwIEBACiBzdGF0aWMgdm9pZCBwcmludF9wZXJtKHN0cnVjdCBpcGNfcGVybSAqcGVybSkKIHsKICAgcHJpbnRmKCJQZXJtaXNzaW9uOlxuIik7CisvKiBGSVhNRTogbm90IHBvcnRhYmxlCiAgIHByaW50ZigiXHRLZXk9JWQsICAgbW9kZT0lMDNvLCAgIHNlcXVlbmNlICM9JWRcbiIsCiAJIChpbnQpcGVybS0+a2V5LHBlcm0tPm1vZGUsIHBlcm0tPnNlcSk7CisqLwogICBwcmludGYoIlx0b3duZXI6IHVpZD0lZCwgZ2lkPSVkIDsiICAscGVybS0+dWlkLCBwZXJtLT5naWQpOwogICBwcmludGYoIiAgY3JlYXRvcjogdWlkPSVkLCBnaWQ9JWRcbiIscGVybS0+Y3VpZCxwZXJtLT5jZ2lkKTsKIH0KZGlmZiAtLWdpdCBhL2xpYnJhcnkvbWlzY3N0dWJzLmMgYi9saWJyYXJ5L21pc2NzdHVicy5jCmluZGV4IDM4MDk0YzEuLjgwOWUzZGEgMTAwNjQ0Ci0tLSBhL2xpYnJhcnkvbWlzY3N0dWJzLmMKKysrIGIvbGlicmFyeS9taXNjc3R1YnMuYwpAQCAtNTcsOCArNTcsNiBAQAogZXh0ZXJuIExSRVNVTFQgUHJpbnREbGdQcm9jKEhXTkQxNixVSU5UMTYsV1BBUkFNMTYsTFBBUkFNKTsKIGV4dGVybiBMUkVTVUxUIFByaW50U2V0dXBEbGdQcm9jKEhXTkQxNixVSU5UMTYsV1BBUkFNMTYsTFBBUkFNKTsKIGV4dGVybiBMUkVTVUxUIFJlcGxhY2VUZXh0RGxnUHJvYyhIV05EMTYsVUlOVDE2LFdQQVJBTTE2LExQQVJBTSk7Ci1leHRlcm4gTFJFU1VMVCBTY3JvbGxCYXJXbmRQcm9jKEhXTkQxNixVSU5UMTYsV1BBUkFNMTYsTFBBUkFNKTsKLWV4dGVybiBMUkVTVUxUIFN0YXRpY1duZFByb2MoSFdORDE2LFVJTlQxNixXUEFSQU0xNixMUEFSQU0pOwogZXh0ZXJuIExSRVNVTFQgVEFTS19SZXNjaGVkdWxlKHZvaWQpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc3LDggKzc1LDYgQEAKICAgTUFQX1NUUl9UT19QUk9DKCJQcmludERsZ1Byb2MiLFByaW50RGxnUHJvYyk7CiAgIE1BUF9TVFJfVE9fUFJPQygiUHJpbnRTZXR1cERsZ1Byb2MiLFByaW50U2V0dXBEbGdQcm9jKTsKICAgTUFQX1NUUl9UT19QUk9DKCJSZXBsYWNlVGV4dERsZ1Byb2MiLFJlcGxhY2VUZXh0RGxnUHJvYyk7Ci0gIE1BUF9TVFJfVE9fUFJPQygiU2Nyb2xsQmFyV25kUHJvYyIsU2Nyb2xsQmFyV25kUHJvYyk7Ci0gIE1BUF9TVFJfVE9fUFJPQygiU3RhdGljV25kUHJvYyIsU3RhdGljV25kUHJvYyk7CiAgIE1BUF9TVFJfVE9fUFJPQygiVEFTS19SZXNjaGVkdWxlIixUQVNLX1Jlc2NoZWR1bGUpOwogICBmcHJpbnRmKHN0ZGVyciwid2FybmluZzogTm8gbWFwcGluZyBmb3IgJXMoKSwgYWRkIG9uZSBpbiBsaWJyYXJ5L21pc2NzdHVicy5jXG4iLG5hbWUpOwogICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2xvYWRlci9tYWluLmMgYi9sb2FkZXIvbWFpbi5jCmluZGV4IDI0Yjk4YTMuLjRmYjNhYTMgMTAwNjQ0Ci0tLSBhL2xvYWRlci9tYWluLmMKKysrIGIvbG9hZGVyL21haW4uYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgIndpbmRvd3MuaCIKICNpbmNsdWRlICJtb2R1bGUuaCIKICNpbmNsdWRlICJzZWxlY3RvcnMuaCIKKyNpbmNsdWRlICJiaXRtYXAuaCIKICNpbmNsdWRlICJjb21tLmgiCiAjaW5jbHVkZSAid2luLmgiCiAjaW5jbHVkZSAibWVudS5oIgpAQCAtMzEsNiArMzIsNyBAQAogI2luY2x1ZGUgIm9wdGlvbnMuaCIKICNpbmNsdWRlICJzcHkuaCIKICNpbmNsdWRlICJ0YXNrLmgiCisjaW5jbHVkZSAidHdlYWsuaCIKICNpbmNsdWRlICJ1c2VyLmgiCiAjaW5jbHVkZSAiZGNlLmgiCiAjaW5jbHVkZSAic2hlbGwuaCIKQEAgLTk4LDM1ICsxMDAsNDEgQEAKICAgICBpZiAoIVdJTjE2RFJWX0luaXQoKSkgcmV0dXJuIDA7CiAjZW5kaWYgIC8qIFdJTkVMSUIgKi8KIAorICAgIC8qIEluaXRpYWxpemUgV2luZSB0d2Vha3MgKi8KKyAgICBpZiAoIVRXRUFLX0luaXQoKSkgcmV0dXJuIDA7CisKKyAgICAvKiBJbml0aWFsaXplIE9FTSBCaXRtYXBzICovCisgICAgaWYgKCFPQk1fSW5pdCgpKSByZXR1cm4gMDsKKwogICAgIC8qIEluaXRpYWxpc2UgRE9TIGRyaXZlcyAqLwogICAgIGlmICghRFJJVkVfSW5pdCgpKSByZXR1cm4gMDsKIAogICAgIC8qIEluaXRpYWxpc2UgRE9TIGRpcmVjdG9yaWVzICovCiAgICAgaWYgKCFESVJfSW5pdCgpKSByZXR1cm4gMDsKIAotICAgICAgLyogSW5pdGlhbGl6ZSB0YXNrcyAqLworICAgIC8qIEluaXRpYWxpemUgdGFza3MgKi8KICAgICBpZiAoIVRBU0tfSW5pdCgpKSByZXR1cm4gMDsKIAotICAgICAgLyogSW5pdGlhbGl6ZSBjb21tdW5pY2F0aW9ucyAqLworICAgIC8qIEluaXRpYWxpemUgY29tbXVuaWNhdGlvbnMgKi8KICAgICBDT01NX0luaXQoKTsKIAotICAgICAgLyogSW5pdGlhbGl6ZSBJTy1wb3J0IHBlcm1pc3Npb25zICovCisgICAgLyogSW5pdGlhbGl6ZSBJTy1wb3J0IHBlcm1pc3Npb25zICovCiAgICAgSU9fcG9ydF9pbml0KCk7CiAKLSAgICAgIC8qIHJlZ2lzdHJ5IGluaXRpYWxpc2F0aW9uICovCisgICAgLyogcmVnaXN0cnkgaW5pdGlhbGlzYXRpb24gKi8KICAgICBTSEVMTF9Mb2FkUmVnaXN0cnkoKTsKICAgICAKLSAgICAgIC8qIEdsb2JhbCBhdG9tIHRhYmxlIGluaXRpYWxpc2F0aW9uICovCisgICAgLyogR2xvYmFsIGF0b20gdGFibGUgaW5pdGlhbGlzYXRpb24gKi8KICAgICBpZiAoIUFUT01fSW5pdCgpKSByZXR1cm4gMDsKIAotICAgICAgLyogR0RJIGluaXRpYWxpc2F0aW9uICovCisgICAgLyogR0RJIGluaXRpYWxpc2F0aW9uICovCiAgICAgaWYgKCFHRElfSW5pdCgpKSByZXR1cm4gMDsKIAotICAgICAgLyogSW5pdGlhbGl6ZSBzeXN0ZW0gY29sb3JzIGFuZCBtZXRyaWNzKi8KKyAgICAvKiBJbml0aWFsaXplIHN5c3RlbSBjb2xvcnMgYW5kIG1ldHJpY3MqLwogICAgIFNZU01FVFJJQ1NfSW5pdCgpOwogICAgIFNZU0NPTE9SX0luaXQoKTsKIAotICAgICAgLyogQ3JlYXRlIHRoZSBEQ0VzICovCisgICAgLyogQ3JlYXRlIHRoZSBEQ0VzICovCiAgICAgRENFX0luaXQoKTsKIAogICAgIC8qIEluaXRpYWxpemUga2V5Ym9hcmQgKi8KQEAgLTEzOCwxMCArMTQ2LDEwIEBACiAgICAgLyogSW5pdGlhbGl6ZSBidWlsdC1pbiB3aW5kb3cgY2xhc3NlcyAqLwogICAgIGlmICghV0lER0VUU19Jbml0KCkpIHJldHVybiAwOwogCi0gICAgICAvKiBJbml0aWFsaXplIGRpYWxvZyBtYW5hZ2VyICovCisgICAgLyogSW5pdGlhbGl6ZSBkaWFsb2cgbWFuYWdlciAqLwogICAgIGlmICghRElBTE9HX0luaXQoKSkgcmV0dXJuIDA7CiAKLSAgICAgIC8qIEluaXRpYWxpemUgbWVudXMgKi8KKyAgICAvKiBJbml0aWFsaXplIG1lbnVzICovCiAgICAgaWYgKCFNRU5VX0luaXQoKSkgcmV0dXJuIDA7CiAKICAgICAvKiBDcmVhdGUgZGVza3RvcCB3aW5kb3cgKi8KQEAgLTE1MCw3ICsxNTgsMTAgQEAKICAgICAvKiBJbml0aWFsaXplIG1lc3NhZ2Ugc3B5aW5nICovCiAgICAgaWYgKCFTUFlfSW5pdCgpKSByZXR1cm4gMDsKIAotICAgICAgLyogQ3JlYXRlIHN5c3RlbSBtZXNzYWdlIHF1ZXVlICovCisgICAgLyogQ2hlY2sgd2luZS5jb25mIGZvciBvbGQvYmFkIGVudHJpZXMgKi8KKyAgICBpZiAoIVRXRUFLX0NoZWNrQ29uZmlndXJhdGlvbigpKSByZXR1cm4gMDsKKworICAgIC8qIENyZWF0ZSBzeXN0ZW0gbWVzc2FnZSBxdWV1ZSAqLwogICAgIHF1ZXVlU2l6ZSA9IEdldFByb2ZpbGVJbnQzMkEoICJ3aW5kb3dzIiwgIlR5cGVBaGVhZCIsIDEyMCApOwogICAgIGlmICghUVVFVUVfQ3JlYXRlU3lzTXNnUXVldWUoIHF1ZXVlU2l6ZSApKSByZXR1cm4gMDsKIApAQCAtMjA2LDYgKzIxNywxMiBAQAogCXJldHVybiAxOwogICAgIH0KIAorICAgIGlmICghR2V0TnVtVGFza3MoKSkKKyAgICB7CisgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIndpbmU6IG5vIGV4ZWN1dGFibGUgZmlsZSBmb3VuZC5cbiIgKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgaWYgKE9wdGlvbnMuZGVidWcpIERFQlVHX1NldEJyZWFrcG9pbnRzKCBUUlVFICk7ICAvKiBTZXR1cCBicmVha3BvaW50cyAqLwogCiAgICAgWWllbGQoKTsgIC8qIFN0YXJ0IHRoZSBmaXJzdCB0YXNrICovCmRpZmYgLS1naXQgYS9sb2FkZXIvbW9kdWxlLmMgYi9sb2FkZXIvbW9kdWxlLmMKaW5kZXggOGE1NGFhMi4uYTM1MjJjNiAxMDA2NDQKLS0tIGEvbG9hZGVyL21vZHVsZS5jCisrKyBiL2xvYWRlci9tb2R1bGUuYwpAQCAtMTE0Myw3ICsxMTQzLDggQEAKIAkJU0VMRkxPQURIRUFERVIgKnNlbGZsb2FkaGVhZGVyOwogICAgICAgICAgICAgICAgIFNUQUNLMTZGUkFNRSAqc3RhY2sxNlRvcDsKIAkJSE1PRFVMRTE2IGhzZWxmbG9hZCA9IEdldE1vZHVsZUhhbmRsZTE2KCJXUFJPQ1MiKTsKLQkJV09SRCBvbGRzcywgb2xkc3AsIHNhdmVkX2Rncm91cCA9IHBTZWdUYWJsZVtwTW9kdWxlLT5kZ3JvdXAgLSAxXS5zZWxlY3RvcjsKKyAgICAgICAgICAgICAgICBEV09SRCBvbGRzdGFjazsKKwkJV09SRCBzYXZlZF9kZ3JvdXAgPSBwU2VnVGFibGVbcE1vZHVsZS0+ZGdyb3VwIC0gMV0uc2VsZWN0b3I7CiAJCWZwcmludGYgKHN0ZGVyciwgIldhcm5pbmc6ICAlKi4qcyBpcyBhIHNlbGYtbG9hZGluZyBtb2R1bGVcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1cHBvcnQgZm9yIHNlbGYtbG9hZGluZyBtb2R1bGVzIGlzIHZlcnkgZXhwZXJpbWVudGFsXG4iLAogICAgICAgICAgICAgICAgICooKEJZVEUqKXBNb2R1bGUgKyBwTW9kdWxlLT5uYW1lX3RhYmxlKSwKQEAgLTExNjAsMTMgKzExNjEsMTIgQEAKIAkJCQkJR0xPQkFMX0FsbG9jIChHTUVNX1pFUk9JTklULAogCQkJCQkweEZGMDAsIGhNb2R1bGUsIEZBTFNFLCBGQUxTRSwgRkFMU0UpCiAJCQkJCSk7Ci0JCW9sZHNzID0gSUYxNjMyX1NhdmVkMTZfc3M7Ci0JCW9sZHNwID0gSUYxNjMyX1NhdmVkMTZfc3A7Ci0JCUlGMTYzMl9TYXZlZDE2X3NzID0gcE1vZHVsZS0+c2VsZl9sb2FkaW5nX3NlbDsKLQkJSUYxNjMyX1NhdmVkMTZfc3AgPSAweEZGMDAgLSBzaXplb2YoKnN0YWNrMTZUb3ApOworCQlvbGRzdGFjayA9IElGMTYzMl9TYXZlZDE2X3NzX3NwOworCQlJRjE2MzJfU2F2ZWQxNl9zc19zcCA9IE1BS0VMT05HKCAweEZGMDAgLSBzaXplb2YoKnN0YWNrMTZUb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNb2R1bGUtPnNlbGZfbG9hZGluZ19zZWwgKTsKICAgICAgICAgICAgICAgICBzdGFjazE2VG9wID0gQ1VSUkVOVF9TVEFDSzE2OwotICAgICAgICAgICAgICAgIHN0YWNrMTZUb3AtPnNhdmVkX3NzID0gMDsKLSAgICAgICAgICAgICAgICBzdGFjazE2VG9wLT5zYXZlZF9zcCA9IDA7CisgICAgICAgICAgICAgICAgc3RhY2sxNlRvcC0+c2F2ZWRfc3Nfc3AgPSAwOworICAgICAgICAgICAgICAgIHN0YWNrMTZUb3AtPmVicCA9IDA7CiAgICAgICAgICAgICAgICAgc3RhY2sxNlRvcC0+ZHMgPSBzdGFjazE2VG9wLT5lcyA9IHBNb2R1bGUtPnNlbGZfbG9hZGluZ19zZWw7CiAgICAgICAgICAgICAgICAgc3RhY2sxNlRvcC0+ZW50cnlfcG9pbnQgPSAwOwogICAgICAgICAgICAgICAgIHN0YWNrMTZUb3AtPmVudHJ5X2lwID0gMDsKQEAgLTEyMDUsOCArMTIwNSw3IEBACiAgICAgICAgICAgICAgICAgX2xjbG9zZTMyKGhmKTsKIAkJLyogc29tZSBCb290QXBwIHByb2NzIG92ZXJ3cml0ZSB0aGUgc2VsZWN0b3Igb2YgZGdyb3VwICovCiAJCXBTZWdUYWJsZVtwTW9kdWxlLT5kZ3JvdXAgLSAxXS5zZWxlY3RvciA9IHNhdmVkX2Rncm91cDsKLQkJSUYxNjMyX1NhdmVkMTZfc3MgPSBvbGRzczsKLQkJSUYxNjMyX1NhdmVkMTZfc3AgPSBvbGRzcDsKKwkJSUYxNjMyX1NhdmVkMTZfc3Nfc3AgPSBvbGRzdGFjazsKIAkJZm9yIChpID0gMjsgaSA8PSBwTW9kdWxlLT5zZWdfY291bnQ7IGkrKykgTkVfTG9hZFNlZ21lbnQoIGhNb2R1bGUsIGkgKTsKIAkJaWYgKGhJbml0aWFsU3RhY2szMikKICAgICAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9sb2FkZXIvbmVfaW1hZ2UuYyBiL2xvYWRlci9uZV9pbWFnZS5jCmluZGV4IDE5MzdmZGQuLmNhMjgxOWIgMTAwNjQ0Ci0tLSBhL2xvYWRlci9uZV9pbWFnZS5jCisrKyBiL2xvYWRlci9uZV9pbWFnZS5jCkBAIC02OSwxOSArNjksMTggQEAKICAJLyogSW1wbGVtZW50IHNlbGYgbG9hZGluZyBzZWdtZW50cyAqLwogIAlTRUxGTE9BREhFQURFUiAqc2VsZmxvYWRoZWFkZXI7CiAgICAgICAgIFNUQUNLMTZGUkFNRSAqc3RhY2sxNlRvcDsKLSAJV09SRCBvbGRzcywgb2xkc3AsIG9sZHNlbGVjdG9yLCBuZXdzZWxlY3RvcjsKKyAgICAgICAgRFdPUkQgb2xkc3RhY2s7CisgCVdPUkQgb2xkc2VsZWN0b3IsIG5ld3NlbGVjdG9yOwogICAgICAgICBIRklMRTMyIGhmID0gRklMRV9EdXBVbml4SGFuZGxlKCBmZCApOwogCiAgCXNlbGZsb2FkaGVhZGVyID0gKFNFTEZMT0FESEVBREVSICopCiAgCQlQVFJfU0VHX09GRl9UT19MSU4ocFNlZ1RhYmxlLT5zZWxlY3RvciwwKTsKLSAJb2xkc3MgPSBJRjE2MzJfU2F2ZWQxNl9zczsKLSAJb2xkc3AgPSBJRjE2MzJfU2F2ZWQxNl9zcDsKKyAJb2xkc3RhY2sgPSBJRjE2MzJfU2F2ZWQxNl9zc19zcDsKICAJb2xkc2VsZWN0b3IgPSBwU2VnLT5zZWxlY3RvcjsKLSAJSUYxNjMyX1NhdmVkMTZfc3MgPSBwTW9kdWxlLT5zZWxmX2xvYWRpbmdfc2VsOwotIAlJRjE2MzJfU2F2ZWQxNl9zcCA9IDB4RkYwMCAtIHNpemVvZigqc3RhY2sxNlRvcCk7CisgCUlGMTYzMl9TYXZlZDE2X3NzX3NwID0gTUFLRUxPTkcoIDB4RkYwMCAtIHNpemVvZigqc3RhY2sxNlRvcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBNb2R1bGUtPnNlbGZfbG9hZGluZ19zZWwgKTsKICAgICAgICAgc3RhY2sxNlRvcCA9IENVUlJFTlRfU1RBQ0sxNjsKLSAgICAgICAgc3RhY2sxNlRvcC0+c2F2ZWRfc3MgPSAwOwotICAgICAgICBzdGFjazE2VG9wLT5zYXZlZF9zcCA9IDA7CisgICAgICAgIHN0YWNrMTZUb3AtPnNhdmVkX3NzX3NwID0gMDsKICAgICAgICAgc3RhY2sxNlRvcC0+ZHMgPSBzdGFjazE2VG9wLT5lcyA9IHBNb2R1bGUtPnNlbGZfbG9hZGluZ19zZWw7CiAgICAgICAgIHN0YWNrMTZUb3AtPmVudHJ5X3BvaW50ID0gMDsKICAgICAgICAgc3RhY2sxNlRvcC0+ZW50cnlfaXAgPSAwOwpAQCAtMTEwLDggKzEwOSw3IEBACiAgCSAgfQogIAl9IAogIAkKLSAJSUYxNjMyX1NhdmVkMTZfc3MgPSBvbGRzczsKLSAJSUYxNjMyX1NhdmVkMTZfc3AgPSBvbGRzcDsKKyAJSUYxNjMyX1NhdmVkMTZfc3Nfc3AgPSBvbGRzdGFjazsKICAgICB9CiAgICAgZWxzZSBpZiAoIShwU2VnLT5mbGFncyAmIE5FX1NFR0ZMQUdTX0lURVJBVEVEKSkKICAgICAgIHJlYWQoZmQsIG1lbSwgc2l6ZSk7CkBAIC01MDEsNyArNDk5LDggQEAKIAogICAgIENTX3JlZygmY29udGV4dCkgID0gcFNlZ1RhYmxlW3BNb2R1bGUtPmNzLTFdLnNlbGVjdG9yOwogICAgIEVJUF9yZWcoJmNvbnRleHQpID0gcE1vZHVsZS0+aXA7Ci0gICAgRUJQX3JlZygmY29udGV4dCkgPSBJRjE2MzJfU2F2ZWQxNl9zcCArIChXT1JEKSYoKFNUQUNLMTZGUkFNRSopMCktPmJwOworICAgIEVCUF9yZWcoJmNvbnRleHQpID0gT0ZGU0VUT0YoSUYxNjMyX1NhdmVkMTZfc3Nfc3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICsgKFdPUkQpJigoU1RBQ0sxNkZSQU1FKikwKS0+YnA7CiAgICAgRURJX3JlZygmY29udGV4dCkgPSBEU19yZWcoJmNvbnRleHQpID8gRFNfcmVnKCZjb250ZXh0KSA6IGhNb2R1bGU7CiAKIApkaWZmIC0tZ2l0IGEvbG9hZGVyL3BlX2ltYWdlLmMgYi9sb2FkZXIvcGVfaW1hZ2UuYwppbmRleCAwNjE2ZTZmLi41Zjc2NjBiIDEwMDY0NAotLS0gYS9sb2FkZXIvcGVfaW1hZ2UuYworKysgYi9sb2FkZXIvcGVfaW1hZ2UuYwpAQCAtMzU5LDcgKzM1OSw3IEBACiAgKgkJCVBFX0xvYWRJbWFnZQogICogTG9hZCBvbmUgUEUgZm9ybWF0IGV4ZWN1dGFibGUgaW50byBtZW1vcnkKICAqLwotc3RhdGljIHZvaWQgUEVfTG9hZEltYWdlKCBzdHJ1Y3QgcHJfZGF0YSAqKnJldF9wZSwgaW50IGZkLCBITU9EVUxFMTYgaE1vZHVsZSwgV09SRCBvZmZzZXQsIE9GU1RSVUNUICpvZnMgKQorc3RhdGljIHZvaWQgUEVfTG9hZEltYWdlKCBzdHJ1Y3QgcGVfZGF0YSAqKnJldF9wZSwgaW50IGZkLCBITU9EVUxFMTYgaE1vZHVsZSwgV09SRCBvZmZzZXQsIE9GU1RSVUNUICpvZnMgKQogewogCXN0cnVjdCBwZV9kYXRhCQkqcGU7CiAJaW50CQkJaSwgcmVzdWx0OwpAQCAtNTc3LDcgKzU3Nyw3IEBACiAJZWxzZSB7CiAJCWNoYXIgKnM7CiAJCW1vZG5hbWUgPSBzID0gb2ZzLT5zelBhdGhOYW1lOwotCQl3aGlsZSAocz1zdHJjaHIobW9kbmFtZSwnXFwnKSkKKwkJd2hpbGUgKChzPXN0cmNocihtb2RuYW1lLCdcXCcpKSkKIAkJCW1vZG5hbWUgPSBzKzE7CiAJCWlmICgocz1zdHJjaHIobW9kbmFtZSwnLicpKSkKIAkJCSpzPSdcMCc7CmRpZmYgLS1naXQgYS9sb2FkZXIvc2lnbmFsLmMgYi9sb2FkZXIvc2lnbmFsLmMKaW5kZXggNTI5MGY3YzcuLjQzYWFlODIgMTAwNjQ0Ci0tLSBhL2xvYWRlci9zaWduYWwuYworKysgYi9sb2FkZXIvc2lnbmFsLmMKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvd2FpdC5oPgogCi0jaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fc3ZyNF9fKSB8fCBkZWZpbmVkKF9TQ09fRFMpIHx8IGRlZmluZWQoX19FTVhfXykKKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19zdnI0X18pIHx8IGRlZmluZWQoX1NDT19EUykgfHwgZGVmaW5lZChfX0VNWF9fKQogI2lmICFkZWZpbmVkKF9TQ09fRFMpICYmICFkZWZpbmVkKF9fRU1YX18pCiAjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KICNlbmRpZgpAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAgcmV0ID0gd2luZV9zaWdhY3Rpb24oIHNpZywgJnNpZ19hY3QsIE5VTEwgKTsKICNlbmRpZiAgLyogbGludXggKi8KIAotI2lmIGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNEX18pCiAgICAgc3RydWN0IHNpZ2FjdGlvbiBzaWdfYWN0OwogICAgIHNpZ3NldF90IHNpZ19tYXNrOwogICAgIHNpZ2VtcHR5c2V0KCZzaWdfbWFzayk7CkBAIC0xOTIsNyArMTkyLDcgQEAKICAgICBzaWdfYWN0LnNhX2ZsYWdzID0gU0FfT05TVEFDSzsKICAgICBzaWdfYWN0LnNhX21hc2sgPSBzaWdfbWFzazsKICAgICByZXQgPSBzaWdhY3Rpb24oIHNpZywgJnNpZ19hY3QsIE5VTEwgKTsKLSNlbmRpZiAgLyogX19GcmVlQlNEX18gfHwgX19OZXRCU0RfXyAqLworI2VuZGlmICAvKiBfX0ZyZWVCU0RfXyB8fCBfX05ldEJTRF9fIHx8IF9fT3BlbkJTRF9fICovCiAKICNpZiBkZWZpbmVkIChfX3N2cjRfXykgfHwgZGVmaW5lZChfU0NPX0RTKQogICAgIHN0cnVjdCBzaWdhY3Rpb24gc2lnX2FjdDsKQEAgLTIzMCw3ICsyMzAsNyBAQAogICovCiBCT09MMzIgU0lHTkFMX0luaXQodm9pZCkKIHsKLSNpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pCisjaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQogICAgIHN0cnVjdCBzaWdhbHRzdGFjayBzczsKICAgICAgICAgCiAgICAgaWYgKChzcy5zc19zcCA9IG1hbGxvYyhNSU5TSUdTVEtTWikpID09IE5VTEwpIHsKQEAgLTI0NCw3ICsyNDQsNyBAQAogICAgICAgICBwZXJyb3IoInNpZ3N0YWNrIik7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9Ci0jZW5kaWYgIC8qIF9fRnJlZUJTRF9fIHx8IF9fTmV0QlNEX18gKi8KKyNlbmRpZiAgLyogX19GcmVlQlNEX18gfHwgX19OZXRCU0RfXyB8fCBfX09wZW5CU0RfXyAqLwogCiAjaWYgZGVmaW5lZCAoX19zdnI0X18pIHx8IGRlZmluZWQoX1NDT19EUykKICAgICBzdHJ1Y3Qgc2lnYWx0c3RhY2sgc3M7CmRpZmYgLS1naXQgYS9sb2FkZXIvdGFzay5jIGIvbG9hZGVyL3Rhc2suYwppbmRleCA4OTllNTc3Li45Mzc1NmM4IDEwMDY0NAotLS0gYS9sb2FkZXIvdGFzay5jCisrKyBiL2xvYWRlci90YXNrLmMKQEAgLTQ0LDggKzQ0LDcgQEAKIGV4dGVybiB2b2lkIFBFX0luaXRUbHMoIFBFX01PRFVMRSAqbW9kdWxlICk7CiAKICAgLyogU2F2ZWQgMTYtYml0IHN0YWNrIGZvciBjdXJyZW50IHByb2Nlc3MgKFdpbjE2IG9ubHkpICovCi1XT1JEIElGMTYzMl9TYXZlZDE2X3NzID0gMDsKLVdPUkQgSUYxNjMyX1NhdmVkMTZfc3AgPSAwOworRFdPUkQgSUYxNjMyX1NhdmVkMTZfc3Nfc3AgPSAwOwogCiAgIC8qIFNhdmVkIDMyLWJpdCBzdGFjayBmb3IgY3VycmVudCBwcm9jZXNzIChXaW4xNiBvbmx5KSAqLwogRFdPUkQgSUYxNjMyX1NhdmVkMzJfZXNwID0gMDsKQEAgLTM2MCw5ICszNTksNyBAQAogICAgIE5FX01PRFVMRSAqcE1vZHVsZSA9IE1PRFVMRV9HZXRQdHIoIHBUYXNrLT5oTW9kdWxlICk7CiAgICAgU0VHVEFCTEVFTlRSWSAqcFNlZ1RhYmxlID0gTkVfU0VHX1RBQkxFKCBwTW9kdWxlICk7CiAKLSAgICBJRjE2MzJfU2F2ZWQxNl9zcyA9IHBUYXNrLT5zczsKLSAgICBJRjE2MzJfU2F2ZWQxNl9zcCA9IHBUYXNrLT5zcDsKLQorICAgIElGMTYzMl9TYXZlZDE2X3NzX3NwID0gcFRhc2stPnNzX3NwOwogICAgIGlmIChwTW9kdWxlLT5mbGFncyAmIE5FX0ZGTEFHU19XSU4zMikKICAgICB7CiAgICAgICAgIC8qIEZJWE1FOiBhbGwgdGhpcyBpcyBhbiB1Z2x5IGhhY2sgKi8KQEAgLTQwNCw3ICs0MDEsOCBAQAogCiAgICAgICAgIGRwcmludGZfdGFzayggc3RkZGViLCAiU3RhcnRpbmcgbWFpbiBwcm9ncmFtOiBjczppcD0lMDRseDolMDR4IGRzPSUwNGx4IHNzOnNwPSUwNHg6JTA0eFxuIiwKICAgICAgICAgICAgICAgICAgICAgICBDU19yZWcoJmNvbnRleHQpLCBJUF9yZWcoJmNvbnRleHQpLCBEU19yZWcoJmNvbnRleHQpLAotICAgICAgICAgICAgICAgICAgICAgIElGMTYzMl9TYXZlZDE2X3NzLCBJRjE2MzJfU2F2ZWQxNl9zcCApOworICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVE9ST0YoSUYxNjMyX1NhdmVkMTZfc3Nfc3ApLAorICAgICAgICAgICAgICAgICAgICAgIE9GRlNFVE9GKElGMTYzMl9TYXZlZDE2X3NzX3NwKSApOwogCiAgICAgICAgIENhbGxUbzE2X3JlZ3NfKCAmY29udGV4dCApOwogICAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciByZXR1cm4gKi8KQEAgLTU4MCwxMyArNTc4LDEzIEBACiAKICAgICAgIC8qIENyZWF0ZSB0aGUgMTYtYml0IHN0YWNrIGZyYW1lICovCiAKLSAgICBwVGFzay0+c3MgPSBoSW5zdGFuY2U7Ci0gICAgcFRhc2stPnNwID0gKChwTW9kdWxlLT5zcCAhPSAwKSA/IHBNb2R1bGUtPnNwIDoKLSAgICAgICAgICAgICAgICAgcFNlZ1RhYmxlW3BNb2R1bGUtPnNzLTFdLm1pbnNpemUgKyBwTW9kdWxlLT5zdGFja19zaXplKSAmIH4xOwotICAgIHN0YWNrMTZUb3AgPSAoY2hhciAqKVBUUl9TRUdfT0ZGX1RPX0xJTiggcFRhc2stPnNzLCBwVGFzay0+c3AgKTsKKyAgICBwVGFzay0+c3Nfc3AgPSBNQUtFTE9ORyggKChwTW9kdWxlLT5zcCAhPSAwKSA/IHBNb2R1bGUtPnNwIDoKKyAgICAgICAgICAgICAgICAgcFNlZ1RhYmxlW3BNb2R1bGUtPnNzLTFdLm1pbnNpemUgKyBwTW9kdWxlLT5zdGFja19zaXplKSAmIH4xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoSW5zdGFuY2UgKTsKKyAgICBzdGFjazE2VG9wID0gKGNoYXIgKilQVFJfU0VHX1RPX0xJTiggcFRhc2stPnNzX3NwICk7CiAgICAgZnJhbWUxNiA9IChTVEFDSzE2RlJBTUUgKilzdGFjazE2VG9wIC0gMTsKLSAgICBmcmFtZTE2LT5zYXZlZF9zcyA9IDA7Ci0gICAgZnJhbWUxNi0+c2F2ZWRfc3AgPSAwOworICAgIGZyYW1lMTYtPnNhdmVkX3NzX3NwID0gMDsKKyAgICBmcmFtZTE2LT5lYnAgPSAwOwogICAgIGZyYW1lMTYtPmRzID0gZnJhbWUxNi0+ZXMgPSBwVGFzay0+aEluc3RhbmNlOwogICAgIGZyYW1lMTYtPmVudHJ5X3BvaW50ID0gMDsKICAgICBmcmFtZTE2LT5lbnRyeV9pcCA9IE9GRlNFVE9GKFRBU0tfUmVzY2hlZHVsZVByb2MpICsgMTQ7CkBAIC01OTYsMTcgKzU5NCwxMyBAQAogICAgIGZyYW1lMTYtPmlwID0gTE9XT1JEKCBDQUxMVE8xNl9SZXRBZGRyX3dvcmQgKTsKICAgICBmcmFtZTE2LT5jcyA9IEhJV09SRCggQ0FMTFRPMTZfUmV0QWRkcl93b3JkICk7CiAjZW5kaWYgIC8qIFdJTkVMSUIgKi8KLSAgICBwVGFzay0+c3AgLT0gc2l6ZW9mKFNUQUNLMTZGUkFNRSk7CisgICAgcFRhc2stPnNzX3NwIC09IHNpemVvZihTVEFDSzE2RlJBTUUpOwogCiAgICAgICAvKiBJZiB0aGVyZSdzIG5vIDE2LWJpdCBzdGFjayB5ZXQsIHVzZSBhIHBhcnQgb2YgdGhlIG5ldyB0YXNrIHN0YWNrICovCiAgICAgICAvKiBUaGlzIGlzIG9ubHkgbmVlZGVkIHRvIGhhdmUgYSBzdGFjayB0byBzd2l0Y2ggZnJvbSBvbiB0aGUgZmlyc3QgICovCiAgICAgICAvKiBjYWxsIHRvIERpcmVjdGVkWWllbGQoKS4gKi8KIAotICAgIGlmICghSUYxNjMyX1NhdmVkMTZfc3MpCi0gICAgewotICAgICAgICBJRjE2MzJfU2F2ZWQxNl9zcyA9IHBUYXNrLT5zczsKLSAgICAgICAgSUYxNjMyX1NhdmVkMTZfc3AgPSBwVGFzay0+c3A7Ci0gICAgfQorICAgIGlmICghSUYxNjMyX1NhdmVkMTZfc3Nfc3ApIElGMTYzMl9TYXZlZDE2X3NzX3NwID0gcFRhc2stPnNzX3NwOwogCiAgICAgICAvKiBBZGQgYSBicmVha3BvaW50IGF0IHRoZSBzdGFydCBvZiB0aGUgdGFzayAqLwogCkBAIC04MTAsOSArODA0LDggQEAKIAogICAgIGlmIChwT2xkVGFzaykKICAgICB7Ci0gICAgICAgIHBPbGRUYXNrLT5zcyAgPSBJRjE2MzJfU2F2ZWQxNl9zczsKLSAgICAgICAgcE9sZFRhc2stPnNwICA9IElGMTYzMl9TYXZlZDE2X3NwOwotICAgICAgICBwT2xkVGFzay0+ZXNwID0gSUYxNjMyX1NhdmVkMzJfZXNwOworICAgICAgICBwT2xkVGFzay0+c3Nfc3AgPSBJRjE2MzJfU2F2ZWQxNl9zc19zcDsKKyAgICAgICAgcE9sZFRhc2stPmVzcCAgID0gSUYxNjMyX1NhdmVkMzJfZXNwOwogICAgIH0KICAgICBlbHNlIElGMTYzMl9PcmlnaW5hbDMyX2VzcCA9IElGMTYzMl9TYXZlZDMyX2VzcDsKIApAQCAtODI4LDkgKzgyMSw4IEBACiAgICAgaEN1cnJlbnRUYXNrID0gaFRhc2s7CiAgICAgcEN1cnJlbnRUaHJlYWQgPSBwTmV3VGFzay0+dGhkYjsKICAgICBwQ3VycmVudFByb2Nlc3MgPSBwQ3VycmVudFRocmVhZC0+cHJvY2VzczsKLSAgICBJRjE2MzJfU2F2ZWQxNl9zcyAgID0gcE5ld1Rhc2stPnNzOwotICAgIElGMTYzMl9TYXZlZDE2X3NwICAgPSBwTmV3VGFzay0+c3A7Ci0gICAgSUYxNjMyX1NhdmVkMzJfZXNwICA9IHBOZXdUYXNrLT5lc3A7CisgICAgSUYxNjMyX1NhdmVkMTZfc3Nfc3AgPSBwTmV3VGFzay0+c3Nfc3A7CisgICAgSUYxNjMyX1NhdmVkMzJfZXNwICAgPSBwTmV3VGFzay0+ZXNwOwogfQogCiAKQEAgLTkxMiw3ICs5MDQsNyBAQAogICAgIHBpbnN0YW5jZS0+c3RhY2tib3R0b20gPSBzdGFja2hpOyAvKiB5dXAsIHRoYXQncyByaWdodC4gQ29uZnVzZWQgbWUgdG9vLiAqLwogICAgIHBpbnN0YW5jZS0+c3RhY2t0b3AgICAgPSBzdGFja2xvdzsgCiAjaWZuZGVmIFdJTkVMSUIKLSAgICBwaW5zdGFuY2UtPnN0YWNrbWluICAgID0gSUYxNjMyX1NhdmVkMTZfc3A7CisgICAgcGluc3RhbmNlLT5zdGFja21pbiAgICA9IE9GRlNFVE9GKElGMTYzMl9TYXZlZDE2X3NzX3NwKTsKICNlbmRpZgogfQogCkBAIC0xMTU0LDI2ICsxMTQ2LDI2IEBACiAgICAgaWYgKCEocFRhc2sgPSAoVERCICopR2xvYmFsTG9jazE2KCBoQ3VycmVudFRhc2sgKSkpIHJldHVybjsKICAgICBpZiAoIShwRGF0YSA9IChJTlNUQU5DRURBVEEgKilHbG9iYWxMb2NrMTYoIHNlZyApKSkgcmV0dXJuOwogICAgIGRwcmludGZfdGFzayggc3RkZGViLCAiU3dpdGNoU3RhY2tUbzogb2xkPSUwNHg6JTA0eCBuZXc9JTA0eDolMDR4XG4iLAotICAgICAgICAgICAgICAgICAgSUYxNjMyX1NhdmVkMTZfc3MsIElGMTYzMl9TYXZlZDE2X3NwLCBzZWcsIHB0ciApOworICAgICAgICAgICAgICAgICAgU0VMRUNUT1JPRihJRjE2MzJfU2F2ZWQxNl9zc19zcCksCisgICAgICAgICAgICAgICAgICBPRkZTRVRPRihJRjE2MzJfU2F2ZWQxNl9zc19zcCksIHNlZywgcHRyICk7CiAKICAgICAvKiBTYXZlIHRoZSBvbGQgc3RhY2sgKi8KIAogICAgIG9sZEZyYW1lICAgICAgICAgICA9IENVUlJFTlRfU1RBQ0sxNjsKLSAgICBwRGF0YS0+b2xkX3NwICAgICAgPSBJRjE2MzJfU2F2ZWQxNl9zcDsKLSAgICBwRGF0YS0+b2xkX3NzICAgICAgPSBJRjE2MzJfU2F2ZWQxNl9zczsKKyAgICBwRGF0YS0+b2xkX3NzX3NwICAgPSBJRjE2MzJfU2F2ZWQxNl9zc19zcDsKICAgICBwRGF0YS0+c3RhY2t0b3AgICAgPSB0b3A7CiAgICAgcERhdGEtPnN0YWNrbWluICAgID0gcHRyOwogICAgIHBEYXRhLT5zdGFja2JvdHRvbSA9IHB0cjsKIAogICAgIC8qIFN3aXRjaCB0byB0aGUgbmV3IHN0YWNrICovCiAKLSAgICBJRjE2MzJfU2F2ZWQxNl9zcyA9IHBUYXNrLT5zcyA9IHNlZzsKLSAgICBJRjE2MzJfU2F2ZWQxNl9zcCA9IHBUYXNrLT5zcCA9IHB0ciAtIHNpemVvZihTVEFDSzE2RlJBTUUpOworICAgIElGMTYzMl9TYXZlZDE2X3NzX3NwID0gcFRhc2stPnNzX3NwID0gTUFLRUxPTkcoIHB0ciAtIHNpemVvZihTVEFDSzE2RlJBTUUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZyApOwogICAgIG5ld0ZyYW1lID0gQ1VSUkVOVF9TVEFDSzE2OwogCiAgICAgLyogQ29weSB0aGUgc3RhY2sgZnJhbWUgYW5kIHRoZSBsb2NhbCB2YXJpYWJsZXMgdG8gdGhlIG5ldyBzdGFjayAqLwogCi0gICAgY29weVNpemUgPSBvbGRGcmFtZS0+YnAgLSBwRGF0YS0+b2xkX3NwOworICAgIGNvcHlTaXplID0gb2xkRnJhbWUtPmJwIC0gT0ZGU0VUT0YocERhdGEtPm9sZF9zc19zcCk7CiAgICAgbWVtY3B5KCBuZXdGcmFtZSwgb2xkRnJhbWUsIE1BWCggY29weVNpemUsIHNpemVvZihTVEFDSzE2RlJBTUUpICkpOwogfQogCkBAIC0xMTkyLDMzICsxMTg0LDMyIEBACiAgICAgSU5TVEFOQ0VEQVRBICpwRGF0YTsKIAogICAgIGlmICghKHBUYXNrID0gKFREQiAqKUdsb2JhbExvY2sxNiggaEN1cnJlbnRUYXNrICkpKSByZXR1cm47Ci0gICAgaWYgKCEocERhdGEgPSAoSU5TVEFOQ0VEQVRBICopR2xvYmFsTG9jazE2KCBJRjE2MzJfU2F2ZWQxNl9zcyApKSkgcmV0dXJuOwotICAgIGlmICghcERhdGEtPm9sZF9zcykKKyAgICBpZiAoIShwRGF0YSA9IChJTlNUQU5DRURBVEEgKilHbG9iYWxMb2NrMTYoU0VMRUNUT1JPRihJRjE2MzJfU2F2ZWQxNl9zc19zcCkpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghcERhdGEtPm9sZF9zc19zcCkKICAgICB7CiAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlN3aXRjaFN0YWNrQmFjazogbm8gcHJldmlvdXMgU3dpdGNoU3RhY2tUb1xuIiApOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGRwcmludGZfdGFzayggc3RkZGViLCAiU3dpdGNoU3RhY2tCYWNrOiByZXN0b3Jpbmcgc3RhY2sgJTA0eDolMDR4XG4iLAotICAgICAgICAgICAgICAgICAgcERhdGEtPm9sZF9zcywgcERhdGEtPm9sZF9zcCApOworICAgICAgICAgICAgICAgICAgU0VMRUNUT1JPRihwRGF0YS0+b2xkX3NzX3NwKSwgT0ZGU0VUT0YocERhdGEtPm9sZF9zc19zcCkgKTsKIAogICAgIG9sZEZyYW1lID0gQ1VSUkVOVF9TVEFDSzE2OwogCiAgICAgLyogU3dpdGNoIGJhY2sgdG8gdGhlIG9sZCBzdGFjayAqLwogCi0gICAgSUYxNjMyX1NhdmVkMTZfc3MgPSBwVGFzay0+c3MgPSBwRGF0YS0+b2xkX3NzOwotICAgIElGMTYzMl9TYXZlZDE2X3NwID0gcFRhc2stPnNwID0gcERhdGEtPm9sZF9zcDsKLSAgICBwRGF0YS0+b2xkX3NzID0gcERhdGEtPm9sZF9zcCA9IDA7CisgICAgSUYxNjMyX1NhdmVkMTZfc3Nfc3AgPSBwVGFzay0+c3Nfc3AgPSBwRGF0YS0+b2xkX3NzX3NwOworICAgIHBEYXRhLT5vbGRfc3Nfc3AgPSAwOwogCiAgICAgLyogQnVpbGQgYSBzdGFjayBmcmFtZSBmb3IgdGhlIHJldHVybiAqLwogCiAgICAgbmV3RnJhbWUgPSBDVVJSRU5UX1NUQUNLMTY7Ci0gICAgbmV3RnJhbWUtPnNhdmVkX3NzID0gb2xkRnJhbWUtPnNhdmVkX3NzOwotICAgIG5ld0ZyYW1lLT5zYXZlZF9zcCA9IG9sZEZyYW1lLT5zYXZlZF9zcDsKLSAgICBuZXdGcmFtZS0+ZW50cnlfaXAgPSBvbGRGcmFtZS0+ZW50cnlfaXA7Ci0gICAgbmV3RnJhbWUtPmVudHJ5X2NzID0gb2xkRnJhbWUtPmVudHJ5X2NzOwotICAgIG5ld0ZyYW1lLT5icCAgICAgICA9IG9sZEZyYW1lLT5icDsKLSAgICBuZXdGcmFtZS0+aXAgICAgICAgPSBvbGRGcmFtZS0+aXA7Ci0gICAgbmV3RnJhbWUtPmNzICAgICAgID0gb2xkRnJhbWUtPmNzOworICAgIG5ld0ZyYW1lLT5zYXZlZF9zc19zcCA9IG9sZEZyYW1lLT5zYXZlZF9zc19zcDsKKyAgICBuZXdGcmFtZS0+ZW50cnlfaXAgICAgPSBvbGRGcmFtZS0+ZW50cnlfaXA7CisgICAgbmV3RnJhbWUtPmVudHJ5X2NzICAgID0gb2xkRnJhbWUtPmVudHJ5X2NzOworICAgIG5ld0ZyYW1lLT5icCAgICAgICAgICA9IG9sZEZyYW1lLT5icDsKKyAgICBuZXdGcmFtZS0+aXAgICAgICAgICAgPSBvbGRGcmFtZS0+aXA7CisgICAgbmV3RnJhbWUtPmNzICAgICAgICAgID0gb2xkRnJhbWUtPmNzOwogfQogCiAKQEAgLTE0OTEsOCArMTQ4Miw4IEBACiAgICAgbHB0ZS0+aFRhc2tQYXJlbnQgICA9IHBUYXNrLT5oUGFyZW50OwogICAgIGxwdGUtPmhJbnN0ICAgICAgICAgPSBwVGFzay0+aEluc3RhbmNlOwogICAgIGxwdGUtPmhNb2R1bGUgICAgICAgPSBwVGFzay0+aE1vZHVsZTsKLSAgICBscHRlLT53U1MgICAgICAgICAgID0gcFRhc2stPnNzOwotICAgIGxwdGUtPndTUCAgICAgICAgICAgPSBwVGFzay0+c3A7CisgICAgbHB0ZS0+d1NTICAgICAgICAgICA9IFNFTEVDVE9ST0YoIHBUYXNrLT5zc19zcCApOworICAgIGxwdGUtPndTUCAgICAgICAgICAgPSBPRkZTRVRPRiggcFRhc2stPnNzX3NwICk7CiAgICAgbHB0ZS0+d1N0YWNrVG9wICAgICA9IHBJbnN0RGF0YS0+c3RhY2t0b3A7CiAgICAgbHB0ZS0+d1N0YWNrTWluaW11bSA9IHBJbnN0RGF0YS0+c3RhY2ttaW47CiAgICAgbHB0ZS0+d1N0YWNrQm90dG9tICA9IHBJbnN0RGF0YS0+c3RhY2tib3R0b207CmRpZmYgLS1naXQgYS9tZW1vcnkvbGR0LmMgYi9tZW1vcnkvbGR0LmMKaW5kZXggMGQ5MjAwYy4uZmNlMzNhZiAxMDA2NDQKLS0tIGEvbWVtb3J5L2xkdC5jCisrKyBiL21lbW9yeS9sZHQuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgImRlYnVnLmgiCiAKICNpZmRlZiBsaW51eAotI2luY2x1ZGUgPHN5c2NhbGwuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKIHN0cnVjdCBtb2RpZnlfbGR0X3MgCiB7CkBAIC0zNywxMiArMzcsMTIgQEAKICNpbmNsdWRlIDxzeXMvc2VnLmg+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNEX18pCiAjaW5jbHVkZSA8bWFjaGluZS9zZWdtZW50cy5oPgogCiBleHRlcm4gaW50IGkzODZfZ2V0X2xkdChpbnQsIHVuaW9uIGRlc2NyaXB0b3IgKiwgaW50KTsKIGV4dGVybiBpbnQgaTM4Nl9zZXRfbGR0KGludCwgdW5pb24gZGVzY3JpcHRvciAqLCBpbnQpOwotI2VuZGlmICAvKiBfX05ldEJTRF9fIHx8IF9fRnJlZUJTRF9fICovCisjZW5kaWYgIC8qIF9fTmV0QlNEX18gfHwgX19GcmVlQlNEX18gfHwgX19PcGVuQlNEX18gKi8KIAogCiBsZHRfY29weV9lbnRyeSBsZHRfY29weVtMRFRfU0laRV07CkBAIC0xNzMsNyArMTczLDcgQEAKICAgICB9CiAjZW5kaWYgIC8qIGxpbnV4ICovCiAKLSNpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pCisjaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQogICAgIGlmICghX193aW5lbGliKQogICAgIHsKICAgICAgICAgbG9uZyBkWzJdOwpAQCAtMTg4LDcgKzE4OCw3IEBACiAgICAgCSAgICBleGl0KDEpOwogICAgICAgICB9CiAgICAgfQotI2VuZGlmICAvKiBfX05ldEJTRF9fIHx8IF9fRnJlZUJTRF9fICovCisjZW5kaWYgIC8qIF9fTmV0QlNEX18gfHwgX19GcmVlQlNEX18gfHwgX19PcGVuQlNEX18gKi8KICNpZiBkZWZpbmVkKF9fc3ZyNF9fKSB8fCBkZWZpbmVkKF9TQ09fRFMpCiAgICAgaWYgKCFfX3dpbmVsaWIpCiAgICAgewpkaWZmIC0tZ2l0IGEvbWVtb3J5L3NlbGVjdG9yLmMgYi9tZW1vcnkvc2VsZWN0b3IuYwppbmRleCBiM2YyNDU0Li4wNmVkM2VmIDEwMDY0NAotLS0gYS9tZW1vcnkvc2VsZWN0b3IuYworKysgYi9tZW1vcnkvc2VsZWN0b3IuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgewogICAgICAgICBpZiAoKGZyYW1lLT5kcyA+PSBzZWwpICYmIChmcmFtZS0+ZHMgPCBuZXh0c2VsKSkgZnJhbWUtPmRzID0gMDsKICAgICAgICAgaWYgKChmcmFtZS0+ZXMgPj0gc2VsKSAmJiAoZnJhbWUtPmVzIDwgbmV4dHNlbCkpIGZyYW1lLT5lcyA9IDA7Ci0JZnJhbWUgPSBQVFJfU0VHX09GRl9UT19MSU4oZnJhbWUtPnNhdmVkX3NzLCBmcmFtZS0+c2F2ZWRfc3ApOworCWZyYW1lID0gUFRSX1NFR19UT19MSU4oIGZyYW1lLT5zYXZlZF9zc19zcCApOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvbWlzYy9NYWtlZmlsZS5pbiBiL21pc2MvTWFrZWZpbGUuaW4KaW5kZXggMDhiODdlMS4uODY3NzA0NCAxMDA2NDQKLS0tIGEvbWlzYy9NYWtlZmlsZS5pbgorKysgYi9taXNjL01ha2VmaWxlLmluCkBAIC0zMiw2ICszMiw3IEBACiAJc3RyZXNzLmMgXAogCXN5c3RlbS5jIFwKIAl0b29saGVscC5jIFwKKwl0d2Vhay5jIFwKIAl2ZXIuYyBcCiAJdzMyc3lzLmMgXAogCXdpbnNvY2suYyBcCkBAIC00NCwzICs0NSw0IEBACiBATUFLRV9SVUxFU0AKIAogIyMjIERlcGVuZGVuY2llczoKKwpkaWZmIC0tZ2l0IGEvbWlzYy9jb21tLmMgYi9taXNjL2NvbW0uYwppbmRleCBkZjViN2M0Li4zNmQzZjdlIDEwMDY0NAotLS0gYS9taXNjL2NvbW0uYworKysgYi9taXNjL2NvbW0uYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2lmIGRlZmluZWQoX19OZXRCU0RfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19PcGVuQlNEX18pCiAjaW5jbHVkZSA8c3lzL2ZpbGlvLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KZGlmZiAtLWdpdCBhL21pc2MvbWFpbi5jIGIvbWlzYy9tYWluLmMKaW5kZXggODRhYjljZi4uMDFjYzMyMSAxMDA2NDQKLS0tIGEvbWlzYy9tYWluLmMKKysrIGIvbWlzYy9tYWluLmMKQEAgLTkzMiw3ICs5MzIsMTE3IEBACiBCT09MMzIgU3lzdGVtUGFyYW1ldGVyc0luZm8zMkEoIFVJTlQzMiB1QWN0aW9uLCBVSU5UMzIgdVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUFZPSUQgbHB2UGFyYW0sIFVJTlQzMiBmdVdpbkluaSApCiB7Ci0gICAgcmV0dXJuIFN5c3RlbVBhcmFtZXRlcnNJbmZvMTYodUFjdGlvbix1UGFyYW0sbHB2UGFyYW0sZnVXaW5JbmkpOworCWludCB0aW1lb3V0LCB0ZW1wOworCVhLZXlib2FyZFN0YXRlCQlrZXlib2FyZF9zdGF0ZTsKKworCXN3aXRjaCAodUFjdGlvbikgeworCWNhc2UgU1BJX0dFVEJFRVA6CisJCVhHZXRLZXlib2FyZENvbnRyb2woZGlzcGxheSwgJmtleWJvYXJkX3N0YXRlKTsKKwkJaWYgKGtleWJvYXJkX3N0YXRlLmJlbGxfcGVyY2VudCA9PSAwKQorCQkJKihCT09MMzIgKikgbHB2UGFyYW0gPSBGQUxTRTsKKwkJZWxzZQorCQkJKihCT09MMzIgKikgbHB2UGFyYW0gPSBUUlVFOworCQlicmVhazsKKworCWNhc2UgU1BJX0dFVEJPUkRFUjoKKwkJKihJTlQzMiAqKWxwdlBhcmFtID0gR2V0U3lzdGVtTWV0cmljczMyKCBTTV9DWEZSQU1FICk7CisJCWJyZWFrOworCisJY2FzZSBTUElfR0VURkFTVFRBU0tTV0lUQ0g6CisJCWlmICggR2V0UHJvZmlsZUludDMyQSggIndpbmRvd3MiLCAiQ29vbFN3aXRjaCIsIDEgKSA9PSAxICkKKwkJCSooQk9PTDMyICopIGxwdlBhcmFtID0gVFJVRTsKKwkJZWxzZQorCQkJKihCT09MMzIgKikgbHB2UGFyYW0gPSBGQUxTRTsKKwkJYnJlYWs7CisKKwljYXNlIFNQSV9HRVRHUklER1JBTlVMQVJJVFk6CisJCSooSU5UMzIqKWxwdlBhcmFtPUdldFByb2ZpbGVJbnQzMkEoImRlc2t0b3AiLCJHcmlkR3JhbnVsYXJpdHkiLDEpOworCQlicmVhazsKKworCWNhc2UgU1BJX0dFVElDT05USVRMRVdSQVA6CisJCSooQk9PTDMyKilscHZQYXJhbT1HZXRQcm9maWxlSW50MzJBKCJkZXNrdG9wIiwiSWNvblRpdGxlV3JhcCIsVFJVRSk7CisJCWJyZWFrOworCisJY2FzZSBTUElfR0VUS0VZQk9BUkRERUxBWToKKwkJKihJTlQzMiopbHB2UGFyYW09R2V0UHJvZmlsZUludDMyQSgia2V5Ym9hcmQiLCJLZXlib2FyZERlbGF5IiwxKTsKKwkJYnJlYWs7CisKKwljYXNlIFNQSV9HRVRLRVlCT0FSRFNQRUVEOgorCQkqKERXT1JEKilscHZQYXJhbT1HZXRQcm9maWxlSW50MzJBKCJrZXlib2FyZCIsIktleWJvYXJkU3BlZWQiLDMwKTsKKwkJYnJlYWs7CisKKwljYXNlIFNQSV9HRVRNRU5VRFJPUEFMSUdOTUVOVDoKKwkJKihCT09MMzIqKWxwdlBhcmFtPUdldFN5c3RlbU1ldHJpY3MzMihTTV9NRU5VRFJPUEFMSUdOTUVOVCk7IC8qIFhYWCBjaGVjayB0aGlzICovCisJCWJyZWFrOworCisJY2FzZSBTUElfR0VUU0NSRUVOU0FWRUFDVElWRToKKwkJaWYgKCBHZXRQcm9maWxlSW50MzJBKCAid2luZG93cyIsICJTY3JlZW5TYXZlQWN0aXZlIiwgMSApID09IDEgKQorCQkJKihCT09MMzIqKWxwdlBhcmFtID0gVFJVRTsKKwkJZWxzZQorCQkJKihCT09MMzIqKWxwdlBhcmFtID0gRkFMU0U7CisJCWJyZWFrOworCisJY2FzZSBTUElfR0VUU0NSRUVOU0FWRVRJTUVPVVQ6CisJLyogRklYTUUgR2V0UHJvZmlsZUludCggIndpbmRvd3MiLCAiU2NyZWVuU2F2ZVRpbWVvdXQiLCAzMDAgKTsgKi8KKwkJWEdldFNjcmVlblNhdmVyKGRpc3BsYXksICZ0aW1lb3V0LCAmdGVtcCwmdGVtcCwmdGVtcCk7CisJCSooSU5UMzIgKikgbHB2UGFyYW0gPSB0aW1lb3V0ICogMTAwMDsKKwkJYnJlYWs7CisKKwljYXNlIFNQSV9JQ09OSE9SSVpPTlRBTFNQQUNJTkc6CisJCS8qIEZJWE1FIEdldC9TZXRQcm9maWxlSW50ICovCisJCWlmIChscHZQYXJhbSA9PSBOVUxMKQorCQkJLypTZXRTeXN0ZW1NZXRyaWNzKCBTTV9DWElDT05TUEFDSU5HLCB1UGFyYW0gKSovIDsKKwkJZWxzZQorCQkJKihJTlQzMiopbHB2UGFyYW09R2V0U3lzdGVtTWV0cmljczMyKFNNX0NYSUNPTlNQQUNJTkcpOworCQlicmVhazsKKworCWNhc2UgU1BJX0lDT05WRVJUSUNBTFNQQUNJTkc6CisJCS8qIEZJWE1FIEdldC9TZXRQcm9maWxlSW50ICovCisJCWlmIChscHZQYXJhbSA9PSBOVUxMKQorCQkJLypTZXRTeXN0ZW1NZXRyaWNzKCBTTV9DWUlDT05TUEFDSU5HLCB1UGFyYW0gKSovIDsKKwkJZWxzZQorCQkJKihJTlQzMiopbHB2UGFyYW09R2V0U3lzdGVtTWV0cmljczMyKFNNX0NZSUNPTlNQQUNJTkcpOworCQlicmVhazsKKworCWNhc2UgU1BJX0dFVElDT05USVRMRUxPR0ZPTlQ6IHsKKwkJTFBMT0dGT05UMzJBIGxwTG9nRm9udCA9IChMUExPR0ZPTlQzMkEpbHB2UGFyYW07CisKKwkJR2V0UHJvZmlsZVN0cmluZzMyQSgiRGVza3RvcCIsICJJY29uVGl0bGVGYWNlTmFtZSIsICJIZWx2ZXRpY2EiLCAKKwkJCWxwTG9nRm9udC0+bGZGYWNlTmFtZSwgTEZfRkFDRVNJWkUgKTsKKwkJbHBMb2dGb250LT5sZkhlaWdodCA9IC1HZXRQcm9maWxlSW50MzJBKCJEZXNrdG9wIiwiSWNvblRpdGxlU2l6ZSIsIDgpOworCisJCWxwTG9nRm9udC0+bGZXaWR0aCA9IDA7CisJCWxwTG9nRm9udC0+bGZFc2NhcGVtZW50ID0gbHBMb2dGb250LT5sZk9yaWVudGF0aW9uID0gMDsKKwkJbHBMb2dGb250LT5sZldlaWdodCA9IEZXX05PUk1BTDsKKwkJbHBMb2dGb250LT5sZkl0YWxpYyA9IEZBTFNFOworCQlscExvZ0ZvbnQtPmxmU3RyaWtlT3V0ID0gRkFMU0U7CisJCWxwTG9nRm9udC0+bGZVbmRlcmxpbmUgPSBGQUxTRTsKKwkJbHBMb2dGb250LT5sZkNoYXJTZXQgPSBBTlNJX0NIQVJTRVQ7CisJCWxwTG9nRm9udC0+bGZPdXRQcmVjaXNpb24gPSBPVVRfREVGQVVMVF9QUkVDSVM7CisJCWxwTG9nRm9udC0+bGZDbGlwUHJlY2lzaW9uID0gQ0xJUF9ERUZBVUxUX1BSRUNJUzsKKwkJbHBMb2dGb250LT5sZlBpdGNoQW5kRmFtaWx5ID0gREVGQVVMVF9QSVRDSCB8IEZGX1NXSVNTOworCQlicmVhazsKKwl9CisJY2FzZSBTUElfR0VUV09SS0FSRUE6CisJCVNldFJlY3QzMiggKFJFQ1QzMiAqKWxwdlBhcmFtLCAwLCAwLAorCQkJR2V0U3lzdGVtTWV0cmljczMyKCBTTV9DWFNDUkVFTiApLAorCQkJR2V0U3lzdGVtTWV0cmljczMyKCBTTV9DWVNDUkVFTiApCisJCSk7CisJCWJyZWFrOworCWNhc2UgU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1M6IHsKKwkJLyogRklYTUU6IGltcGxlbWVudCBjb3JyZWN0bHkgKi8KKwkJTFBOT05DTElFTlRNRVRSSUNTMzJBCWxwbm09KExQTk9OQ0xJRU5UTUVUUklDUzMyQSlscHZQYXJhbTsKKworCQlTeXN0ZW1QYXJhbWV0ZXJzSW5mbzMyQShTUElfR0VUSUNPTlRJVExFTE9HRk9OVCwwLChMUFZPSUQpJihscG5tLT5sZkNhcHRpb25Gb250KSwwKTsKKwkJU3lzdGVtUGFyYW1ldGVyc0luZm8zMkEoU1BJX0dFVElDT05USVRMRUxPR0ZPTlQsMCwoTFBWT0lEKSYobHBubS0+bGZNZW51Rm9udCksMCk7CisJCVN5c3RlbVBhcmFtZXRlcnNJbmZvMzJBKFNQSV9HRVRJQ09OVElUTEVMT0dGT05ULDAsKExQVk9JRCkmKGxwbm0tPmxmU3RhdHVzRm9udCksMCk7CisJCVN5c3RlbVBhcmFtZXRlcnNJbmZvMzJBKFNQSV9HRVRJQ09OVElUTEVMT0dGT05ULDAsKExQVk9JRCkmKGxwbm0tPmxmTWVzc2FnZUZvbnQpLDApOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJcmV0dXJuIFN5c3RlbVBhcmFtZXRlcnNJbmZvMTYodUFjdGlvbix1UGFyYW0sbHB2UGFyYW0sZnVXaW5JbmkpOworCX0KKwlyZXR1cm4gVFJVRTsKIH0KIAogCkBAIC0xMDgwLDYgKzExOTAsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgbHBMb2dGb250LT5sZlBpdGNoQW5kRmFtaWx5ID0gREVGQVVMVF9QSVRDSCB8IEZGX1NXSVNTOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CisJCWNhc2UgU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1M6IHsKKwkJLyogRklYTUU6IGltcGxlbWVudCBjb3JyZWN0bHkgKi8KKwkJCUxQTk9OQ0xJRU5UTUVUUklDUzE2CWxwbm09KExQTk9OQ0xJRU5UTUVUUklDUzE2KWxwdlBhcmFtOworCisJCQlTeXN0ZW1QYXJhbWV0ZXJzSW5mbzE2KFNQSV9HRVRJQ09OVElUTEVMT0dGT05ULDAsKExQVk9JRCkmKGxwbm0tPmxmQ2FwdGlvbkZvbnQpLDApOworCQkJU3lzdGVtUGFyYW1ldGVyc0luZm8xNihTUElfR0VUSUNPTlRJVExFTE9HRk9OVCwwLChMUFZPSUQpJihscG5tLT5sZk1lbnVGb250KSwwKTsKKwkJCVN5c3RlbVBhcmFtZXRlcnNJbmZvMTYoU1BJX0dFVElDT05USVRMRUxPR0ZPTlQsMCwoTFBWT0lEKSYobHBubS0+bGZTdGF0dXNGb250KSwwKTsKKwkJCVN5c3RlbVBhcmFtZXRlcnNJbmZvMTYoU1BJX0dFVElDT05USVRMRUxPR0ZPTlQsMCwoTFBWT0lEKSYobHBubS0+bGZNZXNzYWdlRm9udCksMCk7CisJCQlicmVhazsKKwkJfQogCiAJCWNhc2UgU1BJX0xBTkdEUklWRVI6CiAJCWNhc2UgU1BJX1NFVEJPUkRFUjoKQEAgLTExNTMsNiArMTI3MywxNiBAQAogICAgICAgICAgICAgbHBMb2dGb250LT5sZlBpdGNoQW5kRmFtaWx5ID0gREVGQVVMVF9QSVRDSCB8IEZGX1NXSVNTOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1BJX0dFVE5PTkNMSUVOVE1FVFJJQ1M6IHsKKwkvKiBGSVhNRTogaW1wbGVtZW50IGNvcnJlY3RseSAqLworCUxQTk9OQ0xJRU5UTUVUUklDUzMyVwlscG5tPShMUE5PTkNMSUVOVE1FVFJJQ1MzMlcpbHB2UGFyYW07CisKKwlTeXN0ZW1QYXJhbWV0ZXJzSW5mbzMyVyhTUElfR0VUSUNPTlRJVExFTE9HRk9OVCwwLChMUFZPSUQpJihscG5tLT5sZkNhcHRpb25Gb250KSwwKTsKKwlTeXN0ZW1QYXJhbWV0ZXJzSW5mbzMyVyhTUElfR0VUSUNPTlRJVExFTE9HRk9OVCwwLChMUFZPSUQpJihscG5tLT5sZk1lbnVGb250KSwwKTsKKwlTeXN0ZW1QYXJhbWV0ZXJzSW5mbzMyVyhTUElfR0VUSUNPTlRJVExFTE9HRk9OVCwwLChMUFZPSUQpJihscG5tLT5sZlN0YXR1c0ZvbnQpLDApOworCVN5c3RlbVBhcmFtZXRlcnNJbmZvMzJXKFNQSV9HRVRJQ09OVElUTEVMT0dGT05ULDAsKExQVk9JRCkmKGxwbm0tPmxmTWVzc2FnZUZvbnQpLDApOworCWJyZWFrOworICAgIH0KIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBTeXN0ZW1QYXJhbWV0ZXJzSW5mbzMyQSh1QWN0aW9uLHVQYXJhbSxscHZQYXJhbSxmdVdpbkluaSk7CmRpZmYgLS1naXQgYS9taXNjL29sZTJubHMuYyBiL21pc2Mvb2xlMm5scy5jCmluZGV4IGVhNjk3NWQuLjUzYWQ5NWVlIDEwMDY0NAotLS0gYS9taXNjL29sZTJubHMuYworKysgYi9taXNjL29sZTJubHMuYwpAQCAtMTIsNiArMTIsOCBAQAogI2luY2x1ZGUgIm9sZS5oIgogI2luY2x1ZGUgIm9wdGlvbnMuaCIKICNpbmNsdWRlICJ3aW5ubHMuaCIKKyNpbmNsdWRlICJ3aW5yZWcuaCIKKyNpbmNsdWRlICJ3aW5lcnJvci5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKIApAQCAtMTI2LDYgKzEyOCw1OCBAQAogCXtOVUxMLDB9LAogfTsKIAorY29uc3Qgc3RydWN0IG1hcF9sY2lkMnN0ciB7CisJTENJRAkJbGFuZ2lkOworCWNvbnN0IGNoYXIJKmxhbmduYW1lOworfSBsYW5ndWFnZXNbXT17CisJezB4MDQwMSwiQXJhYmlzY2gifSwKKwl7MHgwNDAyLCJCdWxnYXJpc2NoIn0sCisJezB4MDQwMywiS2F0YWxhbmlzY2gifSwKKwl7MHgwNDA0LCJUcmFkaXRpb25hbGVzIENoaW5lc2lzY2gifSwKKwl7MHgwNDA1LCJUc2NoZWNpc2NoIn0sCisJezB4MDQwNiwiRGRuaXNjaCJ9LAorCXsweDA0MDcsIkRldXRzY2gifSwKKwl7MHgwNDA4LCJHcmllY2hpc2NoIn0sCisJezB4MDQwOSwiQW1lcmlrYW5pc2NoZXMgRW5nbGlzY2gifSwKKwl7MHgwNDBBLCJLYXN0aWxpc2NoZXMgU3BhbmlzY2gifSwKKwl7MHgwNDBCLCJGaW5uaXNjaCJ9LAorCXsweDA0MEMsIkZyYW56dnNpc2NoIn0sCisJezB4MDQwRCwiSGVicmRpc2NoIn0sCisJezB4MDQwRSwiVW5nYXJpc2NoIn0sCisJezB4MDQwRiwiSXNsZG5kaXNjaCJ9LAorCXsweDA0MTAsIkl0YWxpZW5pc2NoIn0sCisJezB4MDQxMSwiSmFwYW5pc2NoIn0sCisJezB4MDQxMiwiS29yZWFuaXNjaCJ9LAorCXsweDA0MTMsIk5pZWRlcmxkbmRpc2NoIn0sCisJezB4MDQxNCwiTm9yd2VnaXNjaC1Cb2ttYWwifSwKKwl7MHgwNDE1LCJQb2xuaXNjaCJ9LAorCXsweDA0MTYsIkJyYXNpbGlhbmlzY2hlcyBQb3J0dWdpZXNpc2NoIn0sCisJezB4MDQxNywiUmR0b3JvbWFuaXNjaCJ9LAorCXsweDA0MTgsIlJ1bWRuaXNjaCJ9LAorCXsweDA0MTksIlJ1c3Npc2NoIn0sCisJezB4MDQxQSwiS3JvYXRvc2VyYmlzY2ggKGxhdGVpbmlzY2gpIn0sCisJezB4MDQxQiwiU2xvd2VuaXNjaCJ9LAorCXsweDA0MUMsIkFsYmFuaXNjaCJ9LAorCXsweDA0MUQsIlNjaHdlZGlzY2gifSwKKwl7MHgwNDFFLCJUaGFpIn0sCisJezB4MDQxRiwiVHxya2lzY2gifSwKKwl7MHgwNDIwLCJVcmR1In0sCisJezB4MDQyMSwiQmFoYXNhIn0sCisJezB4MDgwNCwiVmVyZWluZmFjaHRlcyBDaGluZXNpc2NoIn0sCisJezB4MDgwNywiU2Nod2VpemVyZGV1dHNjaCJ9LAorCXsweDA4MDksIkJyaXRpc2NoZXMgRW5nbGlzY2gifSwKKwl7MHgwODBBLCJNZXhpa2FuaXNjaGVzIFNwYW5pc2NoIn0sCisJezB4MDgwQywiQmVsZ2lzY2hlcyBGcmFuenZzaXNjaCJ9LAorCXsweDA4MTAsIlNjaHdlaXplcmlzY2hlcyBJdGFsaWVuaXNjaCJ9LAorCXsweDA4MTMsIkJlbGdpc2NoZXMgTmllZGVybGRuZGlzY2gifSwKKwl7MHgwODE0LCJOb3Jnd2VnaXNjaC1OeW5vcnNrIn0sCisJezB4MDgxNiwiUG9ydHVnaWVzaXNjaCJ9LAorCXsweDA4MUEsIlNlcmJva3JhdGlzY2ggKGt5cmlsbGlzY2gpIn0sCisJezB4MEMxQywiS2FuYWRpc2NoZXMgRnJhbnp2c2lzY2gifSwKKwl7MHgxMDBDLCJTY2h3ZWl6ZXJpc2NoZXMgRnJhbnp2c2lzY2gifSwKKwl7MHgwMDAwLCJVbmJla2FubnQifSwKK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEdldFVzZXJEZWZhdWx0TENJRCAgICAgICAoT0xFMk5MUy4xKQogICovCkBAIC0xOTUsMTIgKzI0OSwxNyBAQAogICogICAgICAgICBHZXRMb2NhbGVJbmZvQSAgICAgICAgICAgICAoT0xFMk5MUy41KQogICogSXMgdGhlIGxhc3QgcGFyYW1ldGVyIHJlYWxseSBXT1JEIGZvciBXaW4xNj8KICAqLwotaW50IEdldExvY2FsZUluZm9BKERXT1JEIGxjaWQsRFdPUkQgTENUeXBlLExQU1RSIGJ1ZixXT1JEIGxlbikKK0lOVDE2IEdldExvY2FsZUluZm8xNihMQ0lEIGxjaWQsTENUWVBFIExDVHlwZSxMUFNUUiBidWYsSU5UMTYgbGVuKQoreworCXJldHVybiBHZXRMb2NhbGVJbmZvMzJBKGxjaWQsTENUeXBlLGJ1ZixsZW4pOworfQorCitJTlQzMiBHZXRMb2NhbGVJbmZvMzJBKExDSUQgbGNpZCxMQ1RZUEUgTENUeXBlLExQU1RSIGJ1ZixJTlQzMiBsZW4pCiB7CiAJY2hhcgkqcmV0U3RyaW5nOwogCWludAlmb3VuZCxpOwogCi0JZHByaW50Zl9vbGUoc3RkZGViLCJHZXRMb2NhbGVJbmZvQSglOGxYLCU4bFgsJXAsJTRYKVxuIiwKKwlkcHJpbnRmX29sZShzdGRkZWIsIkdldExvY2FsZUluZm8zMkEoJThsWCwlOGxYLCVwLCU0WClcbiIsCiAJCQlsY2lkLExDVHlwZSxidWYsbGVuKTsKIAkvKiBBcyBhbiBvcHRpb24sIHdlIGNvdWxkIG9idGFpbiB0aGUgdmFsdWUgZnJvbSB3aW4uaW5pLgogCSAgIFRoaXMgd291bGQgbm90IG1hdGNoIHRoZSBXaW5lIGNvbXBpbGUtdGltZSBvcHRpb24uCkBAIC0zNTgsNyArNDE3LDcgQEAKIAogICAgIGNhc2UgTEFOR19EYToKICAgICAJc3dpdGNoIChMQ1R5cGUpIHsKLS8qIExPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI5IikgKi8KK0xPQ1ZBTChMT0NBTEVfSUxBTkdVQUdFLCI2IikKIExPQ1ZBTChMT0NBTEVfU0xBTkdVQUdFLCJEYW5zayIpCiBMT0NWQUwoTE9DQUxFX1NFTkdMQU5HVUFHRSwiRGFuaXNoIikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVkxBTkdOQU1FLCJkYW4iKQpAQCAtMzY2LDkgKzQyNSw5IEBACiBMT0NWQUwoTE9DQUxFX0lDT1VOVFJZLCI0NSIpCiBMT0NWQUwoTE9DQUxFX1NDT1VOVFJZLCJEYW5tYXJrIikKIExPQ1ZBTChMT0NBTEVfU0VOR0NPVU5UUlksIkRlbm1hcmsiKQotTE9DVkFMKExPQ0FMRV9TQUJCUkVWQ1RSWU5BTUUsIkRhIikKK0xPQ1ZBTChMT0NBTEVfU0FCQlJFVkNUUllOQU1FLCJESyIpCiBMT0NWQUwoTE9DQUxFX1NOQVRJVkVDVFJZTkFNRSwiRGFubWFyayIpCi0vKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUTEFOR1VBR0UsIjkiKSAqLworTE9DVkFMKExPQ0FMRV9JREVGQVVMVExBTkdVQUdFLCI2IikKIExPQ1ZBTChMT0NBTEVfSURFRkFVTFRDT1VOVFJZLCI0NSIpCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQ09ERVBBR0UpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lERUZBVUxUQU5TSUNPREVQQUdFKSAqLwpAQCAtNDAzLDggKzQ2Miw4IEBACiBMT0NWQUwoTE9DQUxFX0lUTFpFUk8sIjEiKQogLyogTE9DVkFMKExPQ0FMRV9JREFZTFpFUk8pICovCiAvKiBMT0NWQUwoTE9DQUxFX0lNT05MWkVSTykgKi8KLS8qIExPQ1ZBTChMT0NBTEVfUzExNTkpICovCi0vKiBMT0NWQUwoTE9DQUxFX1MyMzU5KSAqLworTE9DVkFMKExPQ0FMRV9TMTE1OSwgIiIpCitMT0NWQUwoTE9DQUxFX1MyMzU5LCAiIikKIC8qIExPQ1ZBTChMT0NBTEVfSUNBTEVOREFSVFlQRSkgKi8KIC8qIExPQ1ZBTChMT0NBTEVfSU9QVElPTkFMQ0FMRU5EQVIpICovCiAvKiBMT0NWQUwoTE9DQUxFX0lGSVJTVERBWU9GV0VFSykgKi8KQEAgLTQ0OSwxNCArNTA4LDE0IEBACiBMT0NWQUwoTE9DQUxFX1NBQkJSRVZNT05USE5BTUUxMSwiTm92IikKIExPQ1ZBTChMT0NBTEVfU0FCQlJFVk1PTlRITkFNRTEyLCJEZWMiKQogTE9DVkFMKExPQ0FMRV9TQUJCUkVWTU9OVEhOQU1FMTMsIiIpCi0vKiBMT0NWQUwoTE9DQUxFX1NQT1NJVElWRVNJR04pICovCi0vKiBMT0NWQUwoTE9DQUxFX1NORUdBVElWRVNJR04pICovCi0vKiBMT0NWQUwoTE9DQUxFX0lQT1NTSUdOUE9TTikgKi8KLS8qIExPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JUE9TU1lNUFJFQ0VERVMpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lQT1NTRVBCWVNQQUNFKSAqLwotLyogTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMpICovCi0vKiBMT0NWQUwoTE9DQUxFX0lORUdTRVBCWVNQQUNFKSAqLworTE9DVkFMKExPQ0FMRV9TUE9TSVRJVkVTSUdOLCAiIikKK0xPQ1ZBTChMT0NBTEVfU05FR0FUSVZFU0lHTiwgIi0iKQorTE9DVkFMKExPQ0FMRV9JUE9TU0lHTlBPU04sICIzIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NJR05QT1NOLCAiMyIpCitMT0NWQUwoTE9DQUxFX0lQT1NTWU1QUkVDRURFUywgIjEiKQorTE9DVkFMKExPQ0FMRV9JUE9TU0VQQllTUEFDRSwgIjAiKQorTE9DVkFMKExPQ0FMRV9JTkVHU1lNUFJFQ0VERVMsICIxIikKK0xPQ1ZBTChMT0NBTEVfSU5FR1NFUEJZU1BBQ0UsICIwIikKIAlkZWZhdWx0OiBmb3VuZD0wO2JyZWFrOwogCX0KICAgICBicmVhazsgLyogTEFORyhEYSkgKi8KQEAgLTE2MzksMTIgKzE2OTgsMTIgQEAKICAqLwogSU5UMzIgR2V0TG9jYWxlSW5mbzMyVyhMQ0lEIGxjaWQsTENUWVBFIExDVHlwZSxMUFdTVFIgd2J1ZixJTlQzMiBsZW4pCiB7Ci0JaW50IGk7Ci0JTFBTVFIgYWJ1ZiA9IChMUFNUUikgd2J1ZjsKLQlJTlQzMiBuID0gR2V0TG9jYWxlSW5mb0EobGNpZCwgTENUeXBlLCBhYnVmLCBsZW4pOworCUxQU1RSIGFidWYgPSAoTFBTVFIpSGVhcEFsbG9jKEdldFByb2Nlc3NIZWFwKCksMCxsZW4pOworCisJSU5UMzIgbiA9IEdldExvY2FsZUluZm8zMkEobGNpZCwgTENUeXBlLCBhYnVmLCBsZW4pOwogCWlmICh3YnVmKQotCQlmb3IgKGkgPSBuOyBpID4gMDsgLS1pKQotCQkJd2J1ZltpXSA9IGFidWZbaV07CisJCWxzdHJjcHluQXRvVyh3YnVmLGFidWYsbGVuKTsKKwlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsYWJ1Zik7CiAJcmV0dXJuIG47CiB9CiAKQEAgLTE3MjgsMTQgKzE3ODcsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgSXNWYWxpZExvY2FsZSAgICAgICAoS0VSTkVMMzIuMzYxKQogICovCi1CT09MMzIgSXNWYWxpZExvY2FsZShEV09SRCBsY2lkLERXT1JEIGZsYWdzKSB7Ci0JaW50CWk7Ci0KLQlpPTA7Ci0Jd2hpbGUgKGxvY2FsZV9uYW1lMmlkW2ldLm5hbWUhPU5VTEwpCi0JCWlmIChsb2NhbGVfbmFtZTJpZFtpXS5pZCA9PSBsY2lkKQotCQkJcmV0dXJuIFRSVUU7Ci0JcmV0dXJuIEZBTFNFOworQk9PTDMyIElzVmFsaWRMb2NhbGUoTENJRCBsY2lkLERXT1JEIGZsYWdzKSB7CisJLyogd2Ugc3VwcG9ydCBBTlkgbGFuZ3VhZ2UuIFdlbGwsIGF0IGxlYXN0IHNheSB0aGF0Li4uKi8KKwlyZXR1cm4gVFJVRTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNzQ1LDE0ICsxNzk5LDM0IEBACiB7CiAJaW50CWk7CiAJQk9PTDMyCXJldDsKKwlXQ0hBUglidWZmZXJbMjAwXTsKKwlIS0VZCXhoa2V5OwogCiAJZHByaW50Zl93aW4zMihzdGRkZWIsIkVudW1TeXN0ZW1Mb2NhbGVzMzJXKCVwLCUwOGx4KVxuIiwKICAgICAgICAgICAgICAgICAgICAgICBscGZuTG9jYWxlRW51bSxmbGFncyApOworCS8qIHNlZSBpZiB3ZSBjYW4gcmV1c2UgdGhlIFdpbjk1IHJlZ2lzdHJ5IGVudHJpZXMuLi4uICovCisJaWYgKEVSUk9SX1NVQ0NFU1M9PVJlZ09wZW5LZXkzMkEoSEtFWV9MT0NBTF9NQUNISU5FLCJcXFN5c3RlbVxcQ3VycmVudENvbnRyb2xTZXRcXGNvbnRyb2xcXE5sc1xcTG9jYWxlXFwiLCZ4aGtleSkpIHsKKwkJaT0wOworCQl3aGlsZSAoMSkgeworCQkJaWYgKEVSUk9SX1NVQ0NFU1MhPVJlZ0VudW1LZXkzMlcoeGhrZXksaSxidWZmZXIsc2l6ZW9mKGJ1ZmZlcikpKQorCQkJCWJyZWFrOworICAgICAgICAgICAgCQlpZiAoIWxwZm5Mb2NhbGVFbnVtKGJ1ZmZlcikpCisJCQkJYnJlYWs7CisJCQlpKys7CisJCX0KKwkJUmVnQ2xvc2VLZXkoeGhrZXkpOworCQlyZXR1cm4gVFJVRTsKKwl9CisKIAlpPTA7Ci0Jd2hpbGUgKGxvY2FsZV9uYW1lMmlkW2ldLm5hbWUhPU5VTEwpCisJd2hpbGUgKGxhbmd1YWdlc1tpXS5sYW5nbmFtZSE9TlVMTCkKICAgICAgICAgewotICAgICAgICAgICAgTFBXU1RSIGNwID0gSEVBUF9zdHJkdXBBdG9XKCBHZXRQcm9jZXNzSGVhcCgpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVfbmFtZTJpZFtpXS5uYW1lICk7CisgICAgICAgICAgICBMUFdTVFIgY3A7CisJICAgIGNoYXIgICB4YnVmZmVyWzEwXTsKKyAgCQorCSAgICBzcHJpbnRmKHhidWZmZXIsIiUwOGx4IiwoRFdPUkQpbGFuZ3VhZ2VzW2ldLmxhbmdpZCk7CisKKwkgICAgY3AgPSBIRUFQX3N0cmR1cEF0b1coIEdldFByb2Nlc3NIZWFwKCksIDAsIHhidWZmZXIgKTsKICAgICAgICAgICAgIHJldCA9IGxwZm5Mb2NhbGVFbnVtKGNwKTsKICAgICAgICAgICAgIEhlYXBGcmVlKCBHZXRQcm9jZXNzSGVhcCgpLCAwLCBjcCApOwogICAgICAgICAgICAgaWYgKCFyZXQpIGJyZWFrOwpAQCAtMTc2NywxMyArMTg0MSwyOCBAQAogQk9PTDMyCiBFbnVtU3lzdGVtTG9jYWxlczMyQShMT0NBTEVfRU5VTVBST0MzMkEgbHBmbkxvY2FsZUVudW0sRFdPUkQgZmxhZ3MpIHsKIAlpbnQJaTsKKwlDSEFSCWJ1ZmZlclsyMDBdOworCUhLRVkJeGhrZXk7CiAKIAlkcHJpbnRmX3dpbjMyKHN0ZGRlYiwiRW51bVN5c3RlbUxvY2FsZXMzMkEoJXAsJTA4bHgpXG4iLAogCQlscGZuTG9jYWxlRW51bSxmbGFncwogCSk7CisJaWYgKEVSUk9SX1NVQ0NFU1M9PVJlZ09wZW5LZXkzMkEoSEtFWV9MT0NBTF9NQUNISU5FLCJcXFN5c3RlbVxcQ3VycmVudENvbnRyb2xTZXRcXGNvbnRyb2xcXE5sc1xcTG9jYWxlXFwiLCZ4aGtleSkpIHsKKwkJaT0wOworCQl3aGlsZSAoMSkgeworCQkJaWYgKEVSUk9SX1NVQ0NFU1MhPVJlZ0VudW1LZXkzMkEoeGhrZXksaSxidWZmZXIsc2l6ZW9mKGJ1ZmZlcikpKQorCQkJCWJyZWFrOworICAgICAgICAgICAgCQlpZiAoIWxwZm5Mb2NhbGVFbnVtKGJ1ZmZlcikpCisJCQkJYnJlYWs7CisJCQlpKys7CisJCX0KKwkJUmVnQ2xvc2VLZXkoeGhrZXkpOworCQlyZXR1cm4gVFJVRTsKKwl9CiAJaT0wOwotCXdoaWxlIChsb2NhbGVfbmFtZTJpZFtpXS5uYW1lIT1OVUxMKSB7Ci0JCWlmICghbHBmbkxvY2FsZUVudW0obG9jYWxlX25hbWUyaWRbaV0ubmFtZSkpCisJd2hpbGUgKGxhbmd1YWdlc1tpXS5sYW5nbmFtZSE9TlVMTCkgeworCQlzcHJpbnRmKGJ1ZmZlciwiJTA4bHgiLChEV09SRClsYW5ndWFnZXNbaV0ubGFuZ2lkKTsKKwkJaWYgKCFscGZuTG9jYWxlRW51bShidWZmZXIpKQogCQkJYnJlYWs7CiAJCWkrKzsKIAl9CkBAIC0xODIxLDcgKzE5MTAsOSBAQAogCQlpZiAoaXNzcGFjZShzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfU1BBQ0U7CiAJCWlmIChpc3B1bmN0KHNyY1tpXSkpIGNoYXJ0eXBlW2ldfD1DMV9QVU5DVDsKIAkJaWYgKGlzY250cmwoc3JjW2ldKSkgY2hhcnR5cGVbaV18PUMxX0NOVFJMOwotCQlpZiAoaXNibGFuayhzcmNbaV0pKSBjaGFydHlwZVtpXXw9QzFfQkxBTks7CisvKiBGSVhNRTogaXNibGFuaygpIGlzIGEgR05VIGV4dGVuc2lvbiAqLworLyoJCWlmIChpc2JsYW5rKHNyY1tpXSkpIGNoYXJ0eXBlW2ldfD1DMV9CTEFOSzsgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHNyY1tpXSA9PSAnICcpIHx8IChzcmNbaV0gPT0gJ1x0JykpIGNoYXJ0eXBlW2ldfD1DMV9CTEFOSzsKIAkJLyogQzFfWERJR0lUICovCiAJfQogCXJldHVybiBUUlVFOwpAQCAtMTg2OSwzICsxOTYwLDYwIEBACiAJfQogCXJldHVybiBUUlVFOwogfQorCisvKiBWZXJMYW5ndWFnZU5hbWUJCQkJW1ZFUi4xMF0gKi8KK0RXT1JECitWZXJMYW5ndWFnZU5hbWUxNihVSU5UMTYgbGFuZ2lkLExQU1RSIGxhbmduYW1lLFVJTlQxNiBsYW5nbmFtZWxlbikgeworCWludAlpOworCWNoYXIJKmJ1ZjsKKworCWRwcmludGZfdmVyKHN0ZGRlYiwiVmVyTGFuZ3VhZ2VOYW1lKCVkLCVwLCVkKVxuIixsYW5naWQsbGFuZ25hbWUsbGFuZ25hbWVsZW4pOworCS8qIEZpcnN0LCBjaGVjayBcU3lzdGVtXEN1cnJlbnRDb250cm9sU2V0XGNvbnRyb2xcTmxzXExvY2FsZVw8bGFuZ2lkPgorCSAqIGZyb20gdGhlIHJlZ2lzdHJ5LiAKKwkgKi8KKwlidWY9KGNoYXIqKW1hbGxvYyhzdHJsZW4oIlxcU3lzdGVtXFxDdXJyZW50Q29udHJvbFNldFxcY29udHJvbFxcTmxzXFxMb2NhbGVcXCIpKzkpOworCXNwcmludGYoYnVmLCJcXFN5c3RlbVxcQ3VycmVudENvbnRyb2xTZXRcXGNvbnRyb2xcXE5sc1xcTG9jYWxlXFwlMDh4IixsYW5naWQpOworCWlmIChFUlJPUl9TVUNDRVNTPT1SZWdRdWVyeVZhbHVlMTYoSEtFWV9MT0NBTF9NQUNISU5FLGJ1ZixsYW5nbmFtZSwoTFBEV09SRCkmbGFuZ25hbWVsZW4pKSB7CisJCWxhbmduYW1lW2xhbmduYW1lbGVuLTFdPSdcMCc7CisJCXJldHVybiBsYW5nbmFtZWxlbjsKKwl9CisJLyogaWYgdGhhdCBmYWlscywgdXNlIHRoZSBpbnRlcmFsIHRhYmxlICovCisJZm9yIChpPTA7bGFuZ3VhZ2VzW2ldLmxhbmdpZCE9MDtpKyspCisJCWlmIChsYW5naWQ9PWxhbmd1YWdlc1tpXS5sYW5naWQpCisJCQlicmVhazsKKwlzdHJuY3B5KGxhbmduYW1lLGxhbmd1YWdlc1tpXS5sYW5nbmFtZSxsYW5nbmFtZWxlbik7CisJbGFuZ25hbWVbbGFuZ25hbWVsZW4tMV09J1wwJzsKKwlyZXR1cm4gc3RybGVuKGxhbmd1YWdlc1tpXS5sYW5nbmFtZSk7Cit9CisKKy8qIFZlckxhbmd1YWdlTmFtZUEJCQkJW1ZFUlNJT04uOV0gKi8KK0RXT1JECitWZXJMYW5ndWFnZU5hbWUzMkEoVUlOVDMyIGxhbmdpZCxMUFNUUiBsYW5nbmFtZSxVSU5UMzIgbGFuZ25hbWVsZW4pIHsKKwlyZXR1cm4gVmVyTGFuZ3VhZ2VOYW1lMTYobGFuZ2lkLGxhbmduYW1lLGxhbmduYW1lbGVuKTsKK30KKworLyogVmVyTGFuZ3VhZ2VOYW1lVwkJCQlbVkVSU0lPTi4xMF0gKi8KK0RXT1JECitWZXJMYW5ndWFnZU5hbWUzMlcoVUlOVDMyIGxhbmdpZCxMUFdTVFIgbGFuZ25hbWUsVUlOVDMyIGxhbmduYW1lbGVuKSB7CisJaW50CWk7CisJY2hhcglidWZmZXJbODBdOworCUxQV1NUUglrZXluYW1lOworCisJLyogRmlyc3QsIGNoZWNrIFxTeXN0ZW1cQ3VycmVudENvbnRyb2xTZXRcY29udHJvbFxObHNcTG9jYWxlXDxsYW5naWQ+CisJICogZnJvbSB0aGUgcmVnaXN0cnkuIAorCSAqLworCXNwcmludGYoYnVmZmVyLCJcXFN5c3RlbVxcQ3VycmVudENvbnRyb2xTZXRcXGNvbnRyb2xcXE5sc1xcTG9jYWxlXFwlMDh4IixsYW5naWQpOworCWtleW5hbWUgPSBIRUFQX3N0cmR1cEF0b1coIEdldFByb2Nlc3NIZWFwKCksIDAsIGJ1ZmZlciApOworCWlmIChFUlJPUl9TVUNDRVNTPT1SZWdRdWVyeVZhbHVlMzJXKEhLRVlfTE9DQUxfTUFDSElORSxrZXluYW1lLGxhbmduYW1lLChMUERXT1JEKSZsYW5nbmFtZWxlbikpIHsKKwkJSGVhcEZyZWUoIEdldFByb2Nlc3NIZWFwKCksIDAsIGtleW5hbWUgKTsKKwkJcmV0dXJuIGxhbmduYW1lbGVuOworCX0KKyAgICAgICAgSGVhcEZyZWUoIEdldFByb2Nlc3NIZWFwKCksIDAsIGtleW5hbWUgKTsKKwkvKiBpZiB0aGF0IGZhaWxzLCB1c2UgdGhlIGludGVyYWwgdGFibGUgKi8KKwlmb3IgKGk9MDtsYW5ndWFnZXNbaV0ubGFuZ2lkIT0wO2krKykKKwkJaWYgKGxhbmdpZD09bGFuZ3VhZ2VzW2ldLmxhbmdpZCkKKwkJCWJyZWFrOworICAgICAgICBsc3RyY3B5QXRvVyggbGFuZ25hbWUsIGxhbmd1YWdlc1tpXS5sYW5nbmFtZSApOworCXJldHVybiBzdHJsZW4obGFuZ3VhZ2VzW2ldLmxhbmduYW1lKTsgLyogc2FtZSBhcyBzdHJsZW5XKGxhbmduYW1lKTsgKi8KK30KKwpkaWZmIC0tZ2l0IGEvbWlzYy90d2Vhay5jIGIvbWlzYy90d2Vhay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MTE4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9taXNjL3R3ZWFrLmMKQEAgLTAsMCArMSw0NTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgIHR3ZWFrLmMKKyAqCisgKiAgIFdpbmRvd3MgOTUgc3R5bGUgaW50ZXJmYWNlIHR3ZWFrcy4KKyAqICAgQ29weXJpZ2h0IChjKSAxOTk3IERhdmUgQ3V0aGJlcnQuCisgKgorICogICBGSVhNRTogIFRoaXMgZmlsZSBpcywgdW5mb3J0dW5hdGVseSwgYXB0bHkgbmFtZWQ6ICB0aGUgbWV0aG9kIG9mCisgKiAgIGRpc3BsYXlpbmcgV2luOTUgc3R5bGUgd2luZG93cyBpcyBhIHR3ZWFrLiAgTG90cyBvZiBzdHVmZiBkb2VzIG5vdCB5ZXQKKyAqICAgd29yayAtLSBhbmQgcHJvYmFibHkgbmV2ZXIgd2lsbCB1bmxlc3Mgc29tZSBvZiB0aGlzIGNvZGUgaXMKKyAqICAgaW5jb3Jwb3JhdGVkIGludG8gdGhlIG1haW5zdHJlYW0gV2luZSBjb2RlLgorICoKKyAqICAgREVWRUxPUEVSUywgUExFQVNFIE5PVEU6ICBCZWZvcmUgZGVsdmluZyBpbnRvIHRoZSBtYWluc3RyZWFtIGNvZGUgYW5kCisgKiAgIGFsdGVyaW5nIGl0LCBjb25zaWRlciBob3cgeW91ciBjaGFuZ2VzIHdpbGwgYWZmZWN0IHRoZSBXaW4zLjEgaW50ZXJmYWNlCisgKiAgICh3aGljaCBoYXMgdGFrZW4gYSBtYWpvciBlZmZvcnQgdG8gY3JlYXRlISkuICBBZnRlciB5b3UgbWFrZSBhbnkgc29ydCBvZgorICogICBub24tdHJpdmlhbCBjaGFuZ2UsICp0ZXN0KiB0aGUgV2luZSBjb2RlIHJ1bm5pbmcgaW4gV2luMy4xIG1vZGUhICBUaGUKKyAqICAgb2JqZWN0IGhlcmUgaXMgdG8gbWFrZSBpdCBzbyB0aGF0IHRoZSBwZXJzb24gd2hvIHRlc3RzIHRoZSBsYXRlc3QgdmVyc2lvbgorICogICBvZiBXaW5lIHdpdGhvdXQgYWRkaW5nIHRoZSB0d2Vha3MgaW50byB3aW5lLmNvbmYgbm90aWNlcyBub3RoaW5nIG91dCBvZgorICogICB0aGUgb3JkaW5hcnkuCisgKgorICogICBSZXZpc2lvbiBoaXN0b3J5CisgKiAgICAgICAgMDMtSnVsLTE5OTcgRGF2ZSBDdXRoYmVydCAoZGFjdXRAZWNlLmNtdS5lZHUpCisgKiAgICAgICAgICAgICBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPFgxMS9YbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiZGMuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImdyYXBoaWNzLmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgorI2luY2x1ZGUgInN0YWNrZnJhbWUuaCIKKyNpbmNsdWRlICJzeXNjb2xvci5oIgorI2luY2x1ZGUgInR3ZWFrLmgiCisjaW5jbHVkZSAid2luZG93cy5oIgorCisvKiBQYXJhbWV0ZXJzIGZvciB3aW5kb3dzL25vbmNsaWVudC5jICovCitleHRlcm4gaW50ICBOQ19DYXB0aW9uTGVmdE51ZGdlOworZXh0ZXJuIGludCAgTkNfQ2FwdGlvblRvcE51ZGdlOworZXh0ZXJuIGludCAgTkNfU3lzQ29udHJvbE51ZGdlOworZXh0ZXJuIGludCAgTkNfTWF4Q29udHJvbE51ZGdlOworZXh0ZXJuIGludCAgTkNfTWluQ29udHJvbE51ZGdlOworZXh0ZXJuIFVJTlQzMiAgTkNfQ2FwdGlvblRleHRGbGFnczsKK2V4dGVybiBIQlJVU0gzMiAgTkNfV2luSGlnaGxpZ2h0OTU7CitleHRlcm4gSEJSVVNIMzIgIE5DX1dpblNoYWRvdzk1OworCisvKiBQYXJhbWV0ZXJzIGZvciBjb250cm9scy9tZW51LmMgKi8KK2V4dGVybiBVSU5UMzIgIE1FTlVfQmFySXRlbVRvcE51ZGdlOworZXh0ZXJuIFVJTlQzMiAgTUVOVV9CYXJJdGVtTGVmdE51ZGdlOworZXh0ZXJuIFVJTlQzMiAgTUVOVV9JdGVtVG9wTnVkZ2U7CitleHRlcm4gVUlOVDMyICBNRU5VX0l0ZW1MZWZ0TnVkZ2U7CitleHRlcm4gVUlOVDMyICBNRU5VX0hpZ2hsaWdodFRvcE51ZGdlOworZXh0ZXJuIFVJTlQzMiAgTUVOVV9IaWdobGlnaHRMZWZ0TnVkZ2U7CitleHRlcm4gVUlOVDMyICBNRU5VX0hpZ2hsaWdodEJvdHRvbU51ZGdlOworZXh0ZXJuIFVJTlQzMiAgTUVOVV9IaWdobGlnaHRSaWdodE51ZGdlOworCisvKiBHZW5lcmFsIG9wdGlvbnMgKi8KK0hQRU4zMiAgVFdFQUtfUGVuRkY5NTsKK0hQRU4zMiAgVFdFQUtfUGVuRTA5NTsKK0hQRU4zMiAgVFdFQUtfUGVuQzA5NTsKK0hQRU4zMiAgVFdFQUtfUGVuODA5NTsKK0hQRU4zMiAgVFdFQUtfUGVuMDA5NTsKKworI2lmIGRlZmluZWQoV0lOXzk1X0xPT0spCitpbnQgIFRXRUFLX1dpbjk1TG9vayA9IDE7CisjZWxzZQoraW50ICBUV0VBS19XaW45NUxvb2sgPSAwOworI2VuZGlmCisKK2ludCAgVFdFQUtfV2luZUluaXRpYWxpemVkID0gMDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICBpbnQgIFRXRUFLX01lbnVJbml0KCkKKyAqIAorICogICBJbml0aWFsaXplcyB0aGUgV2luOTUgdHdlYWtzIHRvIHRoZSBtZW51IGNvZGUuICBTZWUgY29udHJvbHMvbWVudS5jLgorICogICBSZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHN1Y2Nlc3MgKG5vbi16ZXJvKSBvciBmYWlsdXJlLgorICoKKyAqICAgUmV2aXNpb24gaGlzdG9yeQorICogICAgICAgIDA2LUp1bC0xOTk3IERhdmUgQ3V0aGJlcnQgKGRhY3V0QGVjZS5jbXUuZWR1KQorICogICAgICAgICAgICAgT3JpZ2luYWwgaW1wbGVtZW50YXRpb24uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50ICBUV0VBS19NZW51SW5pdCgpCit7CisgICAgTUVOVV9CYXJJdGVtVG9wTnVkZ2UgPQorCVBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuTGF5b3V0IiwgIk1lbnVCYXJJdGVtVG9wTnVkZ2UiLCAwKTsKKyAgICBNRU5VX0Jhckl0ZW1MZWZ0TnVkZ2UgPQorCVBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuTGF5b3V0IiwgIk1lbnVCYXJJdGVtTGVmdE51ZGdlIiwgMCk7CisgICAgTUVOVV9JdGVtVG9wTnVkZ2UgPQorCVBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuTGF5b3V0IiwgIk1lbnVJdGVtVG9wTnVkZ2UiLCAwKTsKKyAgICBNRU5VX0l0ZW1MZWZ0TnVkZ2UgPQorCVBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuTGF5b3V0IiwgIk1lbnVJdGVtTGVmdE51ZGdlIiwgMCk7CisgICAgTUVOVV9IaWdobGlnaHRUb3BOdWRnZSA9CisJUFJPRklMRV9HZXRXaW5lSW5pSW50KCJUd2Vhay5MYXlvdXQiLCAiTWVudUhpZ2hsaWdodFRvcE51ZGdlIiwgMCk7CisgICAgTUVOVV9IaWdobGlnaHRMZWZ0TnVkZ2UgPQorCVBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuTGF5b3V0IiwgIk1lbnVIaWdobGlnaHRMZWZ0TnVkZ2UiLCAwKTsKKyAgICBNRU5VX0hpZ2hsaWdodEJvdHRvbU51ZGdlID0KKwlQUk9GSUxFX0dldFdpbmVJbmlJbnQoIlR3ZWFrLkxheW91dCIsICJNZW51SGlnaGxpZ2h0Qm90dG9tTnVkZ2UiLCAwKTsKKyAgICBNRU5VX0hpZ2hsaWdodFJpZ2h0TnVkZ2UgPQorCVBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuTGF5b3V0IiwgIk1lbnVIaWdobGlnaHRSaWdodE51ZGdlIiwgMCk7CisKKyAgICByZXR1cm4gMTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICBpbnQgIFRXRUFLX05vbkNsaWVudEluaXQoKQorICoKKyAqICAgSW5pdGlhbGl6ZXMgdGhlIFdpbjk1IHR3ZWFrcyB0byB0aGUgbm9uLWNsaWVudCBkcmF3aW5nIGZ1bmN0aW9ucy4gIFNlZQorICogICB3aW5kb3dzL25vbmNsaWVudC5jLiAgUmV0dXJuIHZhbHVlIGluZGljYXRlcyBzdWNjZXNzIChub24temVybykgb3IKKyAqICAgZmFpbHVyZS4KKyAqCisgKiAgIFJldmlzaW9uIGhpc3RvcnkKKyAqICAgICAgICAwNS1KdWwtMTk5NyBEYXZlIEN1dGhiZXJ0IChkYWN1dEBlY2UuY211LmVkdSkKKyAqICAgICAgICAgICAgIE9yaWdpbmFsIGltcGxlbWVudGF0aW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCAgVFdFQUtfTm9uQ2xpZW50SW5pdCgpCit7CisgICAgY2hhciAga2V5X3ZhbHVlWzJdOworCisgICAgTkNfQ2FwdGlvbkxlZnROdWRnZSA9CisJUFJPRklMRV9HZXRXaW5lSW5pSW50KCJUd2Vhay5MYXlvdXQiLCAiQ2FwdGlvbkxlZnROdWRnZSIsIDApOworICAgIE5DX0NhcHRpb25Ub3BOdWRnZSA9CisJUFJPRklMRV9HZXRXaW5lSW5pSW50KCJUd2Vhay5MYXlvdXQiLCAiQ2FwdGlvblRvcE51ZGdlIiwgMCk7CisgICAgTkNfU3lzQ29udHJvbE51ZGdlID0KKwlQUk9GSUxFX0dldFdpbmVJbmlJbnQoIlR3ZWFrLkxheW91dCIsICJTeXNDb250cm9sTnVkZ2UiLCAwKTsKKyAgICBOQ19NYXhDb250cm9sTnVkZ2UgPQorCVBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuTGF5b3V0IiwgIk1heENvbnRyb2xOdWRnZSIsIDApOworICAgIE5DX01pbkNvbnRyb2xOdWRnZSA9CisJUFJPRklMRV9HZXRXaW5lSW5pSW50KCJUd2Vhay5MYXlvdXQiLCAiTWluQ29udHJvbE51ZGdlIiwgMCk7CisKKyAgICBOQ19XaW5IaWdobGlnaHQ5NSA9IENyZWF0ZVNvbGlkQnJ1c2gzMihSR0IoMHhjMCwgMHhjMCwgMHhjMCkpOworICAgIE5DX1dpblNoYWRvdzk1ID0gQ3JlYXRlU29saWRCcnVzaDMyKFJHQigweDAwLCAweDAwLCAweDAwKSk7CisKKyAgICBOQ19DYXB0aW9uVGV4dEZsYWdzID0gRFRfU0lOR0xFTElORSB8IERUX1ZDRU5URVIgfCBEVF9OT1BSRUZJWDsKKworICAgIFBST0ZJTEVfR2V0V2luZUluaVN0cmluZygiVHdlYWsuTGF5b3V0IiwgIkNhcHRpb25BbGlnbm1lbnQiLCAKKwkJCSAgICAgVFdFQUtfV2luOTVMb29rID8gImwiIDogImMiLCBrZXlfdmFsdWUsIDIpOworCisgICAgc3dpdGNoKGtleV92YWx1ZVswXSkgeworICAgIGNhc2UgJ2wnOgorICAgIGNhc2UgJ0wnOgorCU5DX0NhcHRpb25UZXh0RmxhZ3MgfD0gRFRfTEVGVDsKKwlicmVhazsKKworICAgIGNhc2UgJ3InOgorICAgIGNhc2UgJ1InOgorCU5DX0NhcHRpb25UZXh0RmxhZ3MgfD0gRFRfUklHSFQ7CisJYnJlYWs7CisKKyAgICBkZWZhdWx0OgorCU5DX0NhcHRpb25UZXh0RmxhZ3MgfD0gRFRfQ0VOVEVSOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgIGludCAgVFdFQUtfVmFySW5pdCgpCisgKgorICogICBJbml0aWFsaXplcyB0aGUgbWlzY2VsbGFuZW91cyB2YXJpYWJsZXMgd2hpY2ggYXJlIHVzZWQgaW4gdGhlIHR3ZWFrCisgKiAgIHJvdXRpbmVzLiAgUmV0dXJuIHZhbHVlIGlzIG5vbi16ZXJvIG9uIHN1Y2Nlc3MuCisgKgorICogICBSZXZpc2lvbiBoaXN0b3J5CisgKiAgICAgICAgMDctSnVsLTE5OTcgRGF2ZSBDdXRoYmVydCAoZGFjdXRAZWNlLmNtdS5lZHUpCisgKiAgICAgICAgICAgICBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgIFRXRUFLX1ZhckluaXQoKQoreworICAgIFRXRUFLX1dpbjk1TG9vayA9IFBST0ZJTEVfR2V0V2luZUluaUJvb2woIlR3ZWFrLkxheW91dCIsICJXaW45NUxvb2siLCAwKTsKKworICAgIC8qIEZJWE1FOiBFYWNoIGNvbG9yIHNob3VsZCByZWFsbHkgb2NjdXB5IGEgc2luZ2xlIGVudHJ5IGluIHRoZSB3aW5lLmNvbmYKKyAgICAgICBmaWxlLCBidXQgSSBjb3VsZG4ndCBzZXR0bGUgb24gYSBnb29kIChpbnR1aXRpdmUhKSBmb3JtYXQuICovCisKKyAgICBUV0VBS19QZW5GRjk1ID0gQ3JlYXRlUGVuMzIoCisJUFNfU09MSUQsIDEsCisJUkdCKFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbkZGOTUuUmVkIiwgMHhmZiksCisJICAgIFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbkZGOTUuR3JuIiwgMHhmZiksCisJICAgIFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbkZGOTUuQmx1IiwgMHhmZikpKTsKKyAgICBUV0VBS19QZW5FMDk1ID0gQ3JlYXRlUGVuMzIoCisJUFNfU09MSUQsIDEsCisJUkdCKFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbkUwOTUuUmVkIiwgMHhlMCksCisJICAgIFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbkUwOTUuR3JuIiwgMHhlMCksCisJICAgIFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbkUwOTUuQmx1IiwgMHhlMCkpKTsKKyAgICBUV0VBS19QZW5DMDk1ID0gQ3JlYXRlUGVuMzIoCisJUFNfU09MSUQsIDEsCisJUkdCKFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbkMwOTUuUmVkIiwgMHhjMCksCisJICAgIFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbkMwOTUuR3JuIiwgMHhjMCksCisJICAgIFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbkMwOTUuQmx1IiwgMHhjMCkpKTsKKyAgICBUV0VBS19QZW44MDk1ID0gQ3JlYXRlUGVuMzIoCisJUFNfU09MSUQsIDEsCisJUkdCKFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbjgwOTUuUmVkIiwgMHg4MCksCisJICAgIFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbjgwOTUuR3JuIiwgMHg4MCksCisJICAgIFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbjgwOTUuQmx1IiwgMHg4MCkpKTsKKyAgICBUV0VBS19QZW4wMDk1ID0gQ3JlYXRlUGVuMzIoCisJUFNfU09MSUQsIDEsCisJUkdCKFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbjAwOTUuUmVkIiwgMHgwMCksCisJICAgIFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbjAwOTUuR3JuIiwgMHgwMCksCisJICAgIFBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuQ29sb3JzIiwgIlBlbjAwOTUuQmx1IiwgMHgwMCkpKTsKKworICAgIGRwcmludGZfdHdlYWsoc3RkZGViLCAiVFdFQUtfVmFySW5pdDogVXNpbmcgJXMgbG9vayBhbmQgZmVlbC5cbiIsCisJCSAgVFdFQUtfV2luOTVMb29rID8gIldpbjk1IiA6ICJXaW4zLjEiKTsKKyAgICByZXR1cm4gMTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICBpbnQgIFRXRUFLX0luaXQoKQorICoKKyAqICAgRG9lcyB0aGUgZnVsbCBpbml0aWFsaXphdGlvbiBvZiB0aGUgV2luOTUgdHdlYWsgc3Vic3lzdGVtLiAgUmV0dXJuIHZhbHVlCisgKiAgIGluZGljYXRlcyBzdWNjZXNzLiAgQ2FsbGVkIGJ5IGxvYWRlci9tYWluLmMncyBNQUlOX0luaXQoKS4KKyAqCisgKiAgIFJldmlzaW9uIGhpc3RvcnkKKyAqICAgICAgICAwNS1KdWwtMTk5NyBEYXZlIEN1dGhiZXJ0IChkYWN1dEBlY2UuY211LmVkdSkKKyAqICAgICAgICAgICAgIE9yaWdpbmFsIGltcGxlbWVudGF0aW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50ICBUV0VBS19Jbml0KCkKK3sKKyAgICBUV0VBS19WYXJJbml0KCk7CisgICAgVFdFQUtfTm9uQ2xpZW50SW5pdCgpOworICAgIFRXRUFLX01lbnVJbml0KCk7CisgICAgcmV0dXJuIDE7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgaW50ICBUV0VBS19DaGVja09sZEZvbnRzKCkKKyAqCisgKiAgIEV4YW1pbmVzIHdpbmUuY29uZiBmb3Igb2xkL2ludmFsaWQgZm9udCBlbnRyaWVzIGFuZCByZWNvbW1lbmQgY2hhbmdlcyB0bworICogICB0aGUgdXNlci4KKyAqCisgKiAgIFJldmlzaW9uIGhpc3RvcnkKKyAqICAgICAgICAwNS1KdWwtMTk5NyBEYXZlIEN1dGhiZXJ0IChkYWN1dEBlY2UuY211LmVkdSkKKyAqICAgICAgICAgICAgIE9yaWdpbmFsIGltcGxlbWVudGF0aW9uLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgIFRXRUFLX0NoZWNrT2xkRm9udHNDYWxsYmFjayhjaGFyIGNvbnN0ICosIGNoYXIgY29uc3QgKiwgdm9pZCAqKTsKKworc3RhdGljIGNoYXIgY29uc3QgICpmb250bXNncHJvbG9ndWUgPSAKKyJXaW5lIHdhcm5pbmc6XG4iCisiICAgVGhlIGZvbGxvd2luZyBlbnRyaWVzIGluIHRoZSBbZm9udHNdIHNlY3Rpb24gb2YgdGhlIHdpbmUuY29uZiBmaWxlIGFyZVxuIgorIiAgIG9ic29sZXRlIG9yIGludmFsaWQ6XG4iOworCitzdGF0aWMgY2hhciBjb25zdCAgKmZvbnRtc2dlcGlsb2d1ZSA9CisiICAgVGhlc2UgZW50cmllcyBzaG91bGQgYmUgZWxpbWluYXRlZCBvciB1cGRhdGVkLlxuIgorIiAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbi9mb250cyBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIjsKKworc3RhdGljIGludCAgVFdFQUtfQ2hlY2tPbGRGb250cygpCit7CisgICAgaW50ICBmb3VuZCA9IDA7CisKKyAgICBQUk9GSUxFX0VudW1lcmF0ZVdpbmVJbmlTZWN0aW9uKCJGb250cyIsICZUV0VBS19DaGVja09sZEZvbnRzQ2FsbGJhY2ssCisJCQkJICAgICh2b2lkICopJmZvdW5kKTsKKyAgICBpZihmb3VuZCkKKwlmcHJpbnRmKHN0ZGVyciwgZm9udG1zZ2VwaWxvZ3VlKTsKKworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCAgVFdFQUtfQ2hlY2tPbGRGb250c0NhbGxiYWNrKAorICAgIGNoYXIgY29uc3QgICprZXksCisgICAgY2hhciBjb25zdCAgKnZhbHVlLAorICAgIHZvaWQgICpmb3VuZCkKK3sKKyAgICAvKiBJZ25vcmUgYW55IGtleXMgdGhhdCBzdGFydCB3aXRoIHBvdGVudGlhbCBjb21tZW50IGNoYXJhY3RlcnMgIiciLCAnIycsCisgICAgICAgb3IgJzsnLiAqLworICAgIGlmKGtleVswXSA9PSAnXCcnIHx8IGtleVswXSA9PSAnIycgfHwga2V5WzBdID09ICc7JyB8fCBrZXlbMF0gPT0gJ1wwJykKKwlyZXR1cm47CisKKyAgICAvKiBNYWtlIHN1cmUgdGhpcyBpcyBhIHZhbGlkIGtleSAqLworICAgIGlmKHN0cm5jYXNlY21wKGtleSwgIkFsaWFzIiwgNSkgPT0gMCB8fAorICAgICAgIHN0cmNhc2VjbXAoa2V5LCAiRGVmYXVsdCIpID09IDApIHsKKworCS8qIFZhbGlkIGtleTsgbWFrZSBzdXJlIHRoZSB2YWx1ZSBkb2Vzbid0IGNvbnRhaW4gYSB3aWxkY2FyZCAqLworCWlmKHN0cmNocih2YWx1ZSwgJyonKSkgeworCSAgICBpZigqKGludCAqKWZvdW5kID09IDApIHsKKwkJZnByaW50ZihzdGRlcnIsIGZvbnRtc2dwcm9sb2d1ZSk7CisJCSsrKihpbnQgKilmb3VuZDsKKwkgICAgfQorCSAgICAKKwkgICAgZnByaW50ZihzdGRlcnIsICIgICAgICVzPSVzIFtubyB3aWxkY2FyZHMgYWxsb3dlZF1cbiIsIGtleSwgdmFsdWUpOworCX0KKyAgICB9CisgICAgZWxzZSB7CisJLyogTm90IGEgdmFsaWQga2V5ICovCisJaWYoKihpbnQgKilmb3VuZCA9PSAwKSB7CisJICAgIGZwcmludGYoc3RkZXJyLCBmb250bXNncHJvbG9ndWUpOworCSAgICArKyooaW50ICopZm91bmQ7CisJfQorCisJZnByaW50ZihzdGRlcnIsICIgICAgICVzPSVzIFtvYnNvbGV0ZV1cbiIsIGtleSwgdmFsdWUpOworICAgIH0KKworICAgIHJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICBpbnQgIFRXRUFLX0NoZWNrQ29uZmlndXJhdGlvbigpCisgKgorICogICBFeGFtaW5lcyB3aW5lLmNvbmYgZm9yIG9sZC9iYWQgZW50cmllcyBhbmQgcmVjb21tZW5kcyBjaGFuZ2VzIHRvIHRoZSB1c2VyLgorICoKKyAqICAgUmV2aXNpb24gaGlzdG9yeQorICogICAgICAgIDA1LUp1bC0xOTk3IERhdmUgQ3V0aGJlcnQgKGRhY3V0QGVjZS5jbXUuZWR1KQorICogICAgICAgICAgICAgT3JpZ2luYWwgaW1wbGVtZW50YXRpb24uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgIFRXRUFLX0NoZWNrQ29uZmlndXJhdGlvbigpCit7CisgICAgVFdFQUtfQ2hlY2tPbGRGb250cygpOworICAgIHJldHVybiAxOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgICBUd2VhayBncmFwaGljIHN1YnN5c3RlbS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgIHZvaWQgIFRXRUFLX0RyYXdSZWxpZWZSZWN0OTUoCisgKiAgICAgIEhEQzMyICBoZGMsICAgICAgICAgICAgICAgLy8gRGV2aWNlIGNvbnRleHQgb24gd2hpY2ggdG8gZHJhdworICogICAgICBSRUNUMzIgY29uc3QgICpyZWN0ICkgICAgIC8vIFJlY3RhbmdsZSB0byB1c2UKKyAqCisgKiAgIERyYXdzIHRoZSBkb3VibGUtYm9yZGVyZWQgV2luOTUtc3R5bGUgcmVsaWVmIHJlY3RhbmdsZS4KKyAqCisgKiAgIEJ1Z3MKKyAqICAgICAgICBUaGVyZSBhcmUgc29tZSBjaGVja3MgbWlzc2luZyBmcm9tIHRoaXMgZnVuY3Rpb24uICBQZXJoYXBzIHRoZQorICogICAgICAgIFNlbGVjdE9iamVjdDMyIGNhbGxzIHNob3VsZCBiZSBleGFtaW5lZD8gIEhhc24ndCBmYWlsZWQgb24gbWUgKHlldCkuCisgKgorICogICAgICAgIFNob3VsZCBJIHJlYWxseSBiZSBjYWxsaW5nIFggZnVuY3Rpb25zIGRpcmVjdGx5IGZyb20gaGVyZT8gIEl0IGlzCisgKiAgICAgICAgYW4gb3B0aW1pemF0aW9uLCBidXQgc2hvdWxkIEkgYmUgb3B0aW1pemluZyBhbHBoYSBjb2RlPyAgUHJvYmFibHkKKyAqICAgICAgICBub3QuCisgKgorICogICBSZXZpc2lvbiBoaXN0b3J5CisgKiAgICAgICAgMDgtSnVsLTE5OTcgRGF2ZSBDdXRoYmVydCAoZGFjdXRAZWNlLmNtdS5lZHUpCisgKiAgICAgICAgICAgICBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgIFRXRUFLX0RyYXdSZWxpZWZSZWN0OTUoCisgICAgSERDMzIgIGhkYywKKyAgICBSRUNUMzIgY29uc3QgICpyZWN0ICkKK3sKKyAgICBEQyAgKmRjOworICAgIEhQRU4zMiAgcHJldnBlbjsKKworICAgIGlmKChkYyA9IChEQyAqKUdESV9HZXRPYmpQdHIoaGRjLCBEQ19NQUdJQykpKSB7CisKKwkvKiBEcmF3IHRoZSB0b3AvbGVmdCBsaW5lcyBmaXJzdCAqLworCXByZXZwZW4gPSBTZWxlY3RPYmplY3QzMihoZGMsIFRXRUFLX1BlbkUwOTUpOworCURDX1NldHVwR0NGb3JQZW4oZGMpOworCVhEcmF3TGluZShkaXNwbGF5LCBkYy0+dS54LmRyYXdhYmxlLCBkYy0+dS54LmdjLCByZWN0LT5sZWZ0LCByZWN0LT50b3AsCisJCSAgcmVjdC0+cmlnaHQgLSAxLCByZWN0LT50b3ApOworCVhEcmF3TGluZShkaXNwbGF5LCBkYy0+dS54LmRyYXdhYmxlLCBkYy0+dS54LmdjLCByZWN0LT5sZWZ0LCByZWN0LT50b3AsCisJCSAgcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gMSk7CisKKwlTZWxlY3RPYmplY3QzMihoZGMsIFRXRUFLX1BlbkZGOTUpOworCURDX1NldHVwR0NGb3JQZW4oZGMpOworCVhEcmF3TGluZShkaXNwbGF5LCBkYy0+dS54LmRyYXdhYmxlLCBkYy0+dS54LmdjLCByZWN0LT5sZWZ0ICsgMSwKKwkJICByZWN0LT50b3AgKyAxLCByZWN0LT5yaWdodCAtIDIsIHJlY3QtPnRvcCArIDEpOworCVhEcmF3TGluZShkaXNwbGF5LCBkYy0+dS54LmRyYXdhYmxlLCBkYy0+dS54LmdjLCByZWN0LT5sZWZ0ICsgMSwKKwkJICByZWN0LT50b3AgKyAxLCByZWN0LT5sZWZ0ICsgMSwgcmVjdC0+Ym90dG9tIC0gMik7CisKKworCS8qIE5vdyB0aGUgYm90dG9tL3JpZ2h0IGxpbmVzICovCisJU2VsZWN0T2JqZWN0MzIoaGRjLCBUV0VBS19QZW4wMDk1KTsKKwlEQ19TZXR1cEdDRm9yUGVuKGRjKTsKKwlYRHJhd0xpbmUoZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywgcmVjdC0+bGVmdCwKKwkJICByZWN0LT5ib3R0b20gLSAxLCByZWN0LT5yaWdodCAtIDEsIHJlY3QtPmJvdHRvbSAtIDEpOworCVhEcmF3TGluZShkaXNwbGF5LCBkYy0+dS54LmRyYXdhYmxlLCBkYy0+dS54LmdjLCByZWN0LT5yaWdodCAtIDEsCisJCSAgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIDEsIHJlY3QtPmJvdHRvbSAtIDEpOworCisJU2VsZWN0T2JqZWN0MzIoaGRjLCBUV0VBS19QZW44MDk1KTsKKwlEQ19TZXR1cEdDRm9yUGVuKGRjKTsKKwlYRHJhd0xpbmUoZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywgcmVjdC0+bGVmdCArIDEsCisJCSAgcmVjdC0+Ym90dG9tIC0gMiwgcmVjdC0+cmlnaHQgLSAyLCByZWN0LT5ib3R0b20gLSAyKTsKKwlYRHJhd0xpbmUoZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywgcmVjdC0+cmlnaHQgLSAyLAorCQkgIHJlY3QtPnRvcCArIDEsIHJlY3QtPnJpZ2h0IC0gMiwgcmVjdC0+Ym90dG9tIC0gMik7CisJCisJU2VsZWN0T2JqZWN0MzIoaGRjLCBwcmV2cGVuKTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgdm9pZCAgVFdFQUtfRHJhd01lbnVTZXBhcmF0b3I5NSgKKyAqICAgICAgSERDMzIgIGhkYywgICAgICAgICAgICAgICAvLyBEZXZpY2UgY29udGV4dCBvbiB3aGljaCB0byBkcmF3CisgKiAgICAgIFVJTlQzMiAgeGMxLCAgICAgICAgICAgICAgLy8gTGVmdCB4LWNvb3JkaW5hdGUKKyAqICAgICAgVUlOVDMyICB5YywgICAgICAgICAgICAgICAvLyBZLWNvb3JkaW5hdGUgb2YgdGhlIExPV0VSIGxpbmUKKyAqICAgICAgVUlOVDMyICB4YzIgKSAgICAgICAgICAgICAvLyBSaWdodCB4LWNvb3JkaW5hdGUKKyAqCisgKiAgIERyYXdzIHRoZSBtZW51IHNlcGFyYXRvciBiYXIgV2luIDk1IHN0eWxlLgorICoKKyAqICAgQnVncworICogICAgICAgIFNhbWUgYXMgdGhvc2UgZm9yIERyYXdSZWxpZWZSZWN0OTUuCisgKgorICogICBSZXZpc2lvbiBoaXN0b3J5CisgKiAgICAgICAgMDgtSnVsLTE5OTcgRGF2ZSBDdXRoYmVydCAoZGFjdXRAZWNlLmNtdS5lZHUpCisgKiAgICAgICAgICAgICBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgIFRXRUFLX0RyYXdNZW51U2VwYXJhdG9yOTUoCisgICAgSERDMzIgIGhkYywKKyAgICBVSU5UMzIgIHhjMSwKKyAgICBVSU5UMzIgIHljLAorICAgIFVJTlQzMiAgeGMyICkKK3sKKyAgICBEQyAgKmRjOworICAgIEhQRU4zMiAgcHJldnBlbjsKKworICAgIGlmKChkYyA9IChEQyAqKUdESV9HZXRPYmpQdHIoaGRjLCBEQ19NQUdJQykpKSB7CisKKwkvKiBEcmF3IHRoZSB0b3AgbGluZSAqLworCXByZXZwZW4gPSBTZWxlY3RPYmplY3QzMihoZGMsIFRXRUFLX1BlbjgwOTUpOworCURDX1NldHVwR0NGb3JQZW4oZGMpOworCVhEcmF3TGluZShkaXNwbGF5LCBkYy0+dS54LmRyYXdhYmxlLCBkYy0+dS54LmdjLCB4YzEsIHljIC0gMSwgeGMyLAorCQkgIHljIC0gMSk7CisKKwkvKiBBbmQgdGhlIGJvdHRvbSBsaW5lICovCisJU2VsZWN0T2JqZWN0MzIoaGRjLCBUV0VBS19QZW5GRjk1KTsKKwlEQ19TZXR1cEdDRm9yUGVuKGRjKTsKKwlYRHJhd0xpbmUoZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywgeGMxLCB5YywgeGMyLCB5Yyk7CisKKwlTZWxlY3RPYmplY3QzMihoZGMsIHByZXZwZW4pOworICAgIH0KKworICAgIHJldHVybjsKK30KZGlmZiAtLWdpdCBhL21pc2MvdmVyLmMgYi9taXNjL3Zlci5jCmluZGV4IDcwNjkwYjguLjUxYjkwODkgMTAwNjQ0Ci0tLSBhL21pc2MvdmVyLmMKKysrIGIvbWlzYy92ZXIuYwpAQCAtMjcsNyArMjcsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogICB2b2lkICBkcHJpbnRmX3Zlcl9zdHJpbmcoCisgKiAgIHZvaWQgIHZlcl9kc3RyaW5nKAogICogICAgICBjaGFyIGNvbnN0ICogcHJvbG9ndWUsCiAgKiAgICAgIGNoYXIgY29uc3QgKiB0ZXN0c3RyaW5nLAogICogICAgICBjaGFyIGNvbnN0ICogZXBpbG9ndWUgKQpAQCAtMzksMTEgKzM5LDE0IEBACiAgKgogICogICBSZXZpc2lvbiBoaXN0b3J5CiAgKiAgICAgIDMwLU1heS0xOTk3IERhdmUgQ3V0aGJlcnQgKGRhY3V0QGVjZS5jbXUuZWR1KQotICogICAgICAgICBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbgorICogICAgICAgICBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBhcyBkcHJpbnRmW19ddmVyX3N0cmluZworICogICAgICAwNS1KdWwtMTk5NyBEYXZlIEN1dGhiZXJ0IChkYWN1dEBlY2UuY211LmVkdSkKKyAqICAgICAgICAgRml4ZWQgcHJvYmxlbSB0aGF0IGNhdXNlZCBidWcgd2l0aCB0b29scy9tYWtlX2RlYnVnIC0tIHJlbmFtaW5nCisgKiAgICAgICAgIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGZpeCB0aGUgcHJvYmxlbS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkICBkcHJpbnRmX3Zlcl9zdHJpbmcoCitzdGF0aWMgdm9pZCAgdmVyX2RzdHJpbmcoCiAgICAgY2hhciBjb25zdCAqIHByb2xvZ3VlLAogICAgIGNoYXIgY29uc3QgKiB0ZXN0c3RyaW5nLAogICAgIGNoYXIgY29uc3QgKiBlcGlsb2d1ZSApCkBAIC01NTcsOSArNTYwLDkgQEAKICAgICBlbHNlCiAJZHByaW50Zl92ZXIoc3RkZGViLCAiXG4iKTsKIAotICAgIGRwcmludGZfdmVyX3N0cmluZygiXHRscHN6RmlsZW5hbWUgPSAiLCBscHN6RmlsZW5hbWUsICJcbiIpOwotICAgIGRwcmludGZfdmVyX3N0cmluZygiXHRscHN6V2luRGlyID0gIiwgbHBzeldpbkRpciwgIlxuIik7Ci0gICAgZHByaW50Zl92ZXJfc3RyaW5nKCJcdGxwc3pBcHBEaXIgPSAiLCBscHN6QXBwRGlyLCAiXG4iKTsKKyAgICB2ZXJfZHN0cmluZygiXHRscHN6RmlsZW5hbWUgPSAiLCBscHN6RmlsZW5hbWUsICJcbiIpOworICAgIHZlcl9kc3RyaW5nKCJcdGxwc3pXaW5EaXIgPSAiLCBscHN6V2luRGlyLCAiXG4iKTsKKyAgICB2ZXJfZHN0cmluZygiXHRscHN6QXBwRGlyID0gIiwgbHBzekFwcERpciwgIlxuIik7CiAKICAgICBkcHJpbnRmX3ZlcihzdGRkZWIsICJcdGxwc3pDdXJEaXIgPSAlcFxuIiwgbHBzekN1ckRpcik7CiAgICAgaWYobHB1Q3VyRGlyTGVuKQpAQCAtNjc0LDE0ICs2NzcsMTQgQEAKIAlkcHJpbnRmX3ZlcihzdGRkZWIsICIpIik7CiAgICAgfQogCi0gICAgZHByaW50Zl92ZXJfc3RyaW5nKCJcblx0KEV4aXQpIGxwc3pDdXJEaXIgPSAiLCBscHN6Q3VyRGlyLCAiXG4iKTsKKyAgICB2ZXJfZHN0cmluZygiXG5cdChFeGl0KSBscHN6Q3VyRGlyID0gIiwgbHBzekN1ckRpciwgIlxuIik7CiAgICAgaWYobHB1Q3VyRGlyTGVuKQogCWRwcmludGZfdmVyKHN0ZGRlYiwgIlx0KEV4aXQpIGxwdUN1ckRpckxlbiA9ICVwICgldSlcbiIsCiAJCSAgICBscHVDdXJEaXJMZW4sICpscHVDdXJEaXJMZW4pOwogICAgIGVsc2UKIAlkcHJpbnRmX3ZlcihzdGRkZWIsICJcdChFeGl0KSBscHVDdXJEaXJMZW4gPSAobnVsbClcbiIpOwogCi0gICAgZHByaW50Zl92ZXJfc3RyaW5nKCJcdChFeGl0KSBscHN6RGVzdERpciA9ICIsIGxwc3pEZXN0RGlyLCAiXG4iKTsKKyAgICB2ZXJfZHN0cmluZygiXHQoRXhpdCkgbHBzekRlc3REaXIgPSAiLCBscHN6RGVzdERpciwgIlxuIik7CiAgICAgaWYobHB1RGVzdERpckxlbikKIAlkcHJpbnRmX3ZlcihzdGRkZWIsICJcdChFeGl0KSBscHVEZXN0RGlyTGVuID0gJXAgKCV1KVxuIiwKIAkJICAgIGxwdURlc3REaXJMZW4sICpscHVEZXN0RGlyTGVuKTsKQEAgLTk3MiwxMTQgKzk3NSw2IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAotLyogRklYTUU6IFRoaXMgdGFibGUgc2hvdWxkLCBvZiBjb3Vyc2UsIGJlIGxhbmd1YWdlIGRlcGVuZGVuZCAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBtYXBfaWQyc3RyIHsKLQlVSU5UMTYJbGFuZ2lkOwotCWNvbnN0IGNoYXIgKmxhbmduYW1lOwotfSBsYW5ndWFnZXNbXT17Ci0JezB4MDQwMSwiQXJhYmlzY2gifSwKLQl7MHgwNDAyLCJCdWxnYXJpc2NoIn0sCi0JezB4MDQwMywiS2F0YWxhbmlzY2gifSwKLQl7MHgwNDA0LCJUcmFkaXRpb25hbGVzIENoaW5lc2lzY2gifSwKLQl7MHgwNDA1LCJUc2NoZWNpc2NoIn0sCi0JezB4MDQwNiwiRORuaXNjaCJ9LAotCXsweDA0MDcsIkRldXRzY2gifSwKLQl7MHgwNDA4LCJHcmllY2hpc2NoIn0sCi0JezB4MDQwOSwiQW1lcmlrYW5pc2NoZXMgRW5nbGlzY2gifSwKLQl7MHgwNDBBLCJLYXN0aWxpc2NoZXMgU3BhbmlzY2gifSwKLQl7MHgwNDBCLCJGaW5uaXNjaCJ9LAotCXsweDA0MEMsIkZyYW569nNpc2NoIn0sCi0JezB4MDQwRCwiSGVicuRpc2NoIn0sCi0JezB4MDQwRSwiVW5nYXJpc2NoIn0sCi0JezB4MDQwRiwiSXNs5G5kaXNjaCJ9LAotCXsweDA0MTAsIkl0YWxpZW5pc2NoIn0sCi0JezB4MDQxMSwiSmFwYW5pc2NoIn0sCi0JezB4MDQxMiwiS29yZWFuaXNjaCJ9LAotCXsweDA0MTMsIk5pZWRlcmzkbmRpc2NoIn0sCi0JezB4MDQxNCwiTm9yd2VnaXNjaC1Cb2ttYWwifSwKLQl7MHgwNDE1LCJQb2xuaXNjaCJ9LAotCXsweDA0MTYsIkJyYXNpbGlhbmlzY2hlcyBQb3J0dWdpZXNpc2NoIn0sCi0JezB4MDQxNywiUuR0b3JvbWFuaXNjaCJ9LAotCXsweDA0MTgsIlJ1beRuaXNjaCJ9LAotCXsweDA0MTksIlJ1c3Npc2NoIn0sCi0JezB4MDQxQSwiS3JvYXRvc2VyYmlzY2ggKGxhdGVpbmlzY2gpIn0sCi0JezB4MDQxQiwiU2xvd2VuaXNjaCJ9LAotCXsweDA0MUMsIkFsYmFuaXNjaCJ9LAotCXsweDA0MUQsIlNjaHdlZGlzY2gifSwKLQl7MHgwNDFFLCJUaGFpIn0sCi0JezB4MDQxRiwiVPxya2lzY2gifSwKLQl7MHgwNDIwLCJVcmR1In0sCi0JezB4MDQyMSwiQmFoYXNhIn0sCi0JezB4MDgwNCwiVmVyZWluZmFjaHRlcyBDaGluZXNpc2NoIn0sCi0JezB4MDgwNywiU2Nod2VpemVyZGV1dHNjaCJ9LAotCXsweDA4MDksIkJyaXRpc2NoZXMgRW5nbGlzY2gifSwKLQl7MHgwODBBLCJNZXhpa2FuaXNjaGVzIFNwYW5pc2NoIn0sCi0JezB4MDgwQywiQmVsZ2lzY2hlcyBGcmFuevZzaXNjaCJ9LAotCXsweDA4MTAsIlNjaHdlaXplcmlzY2hlcyBJdGFsaWVuaXNjaCJ9LAotCXsweDA4MTMsIkJlbGdpc2NoZXMgTmllZGVybORuZGlzY2gifSwKLQl7MHgwODE0LCJOb3Jnd2VnaXNjaC1OeW5vcnNrIn0sCi0JezB4MDgxNiwiUG9ydHVnaWVzaXNjaCJ9LAotCXsweDA4MUEsIlNlcmJva3JhdGlzY2ggKGt5cmlsbGlzY2gpIn0sCi0JezB4MEMxQywiS2FuYWRpc2NoZXMgRnJhbnr2c2lzY2gifSwKLQl7MHgxMDBDLCJTY2h3ZWl6ZXJpc2NoZXMgRnJhbnr2c2lzY2gifSwKLQl7MHgwMDAwLCJVbmJla2FubnQifSwKLX07Ci0KLS8qIFZlckxhbmd1YWdlTmFtZQkJCQlbVkVSLjEwXSAqLwotRFdPUkQKLVZlckxhbmd1YWdlTmFtZTE2KFVJTlQxNiBsYW5naWQsTFBTVFIgbGFuZ25hbWUsVUlOVDE2IGxhbmduYW1lbGVuKSB7Ci0JaW50CWk7Ci0JY2hhcgkqYnVmOwotCi0JZHByaW50Zl92ZXIoc3RkZGViLCJWZXJMYW5ndWFnZU5hbWUoJWQsJXAsJWQpXG4iLGxhbmdpZCxsYW5nbmFtZSxsYW5nbmFtZWxlbik7Ci0JLyogRmlyc3QsIGNoZWNrIFxTeXN0ZW1cQ3VycmVudENvbnRyb2xTZXRcY29udHJvbFxObHNcTG9jYWxlXDxsYW5naWQ+Ci0JICogZnJvbSB0aGUgcmVnaXN0cnkuIAotCSAqLwotCWJ1Zj0oY2hhciopbWFsbG9jKHN0cmxlbigiXFxTeXN0ZW1cXEN1cnJlbnRDb250cm9sU2V0XFxjb250cm9sXFxObHNcXExvY2FsZVxcIikrOSk7Ci0Jc3ByaW50ZihidWYsIlxcU3lzdGVtXFxDdXJyZW50Q29udHJvbFNldFxcY29udHJvbFxcTmxzXFxMb2NhbGVcXCUwOHgiLGxhbmdpZCk7Ci0JaWYgKEVSUk9SX1NVQ0NFU1M9PVJlZ1F1ZXJ5VmFsdWUxNihIS0VZX0xPQ0FMX01BQ0hJTkUsYnVmLGxhbmduYW1lLChMUERXT1JEKSZsYW5nbmFtZWxlbikpIHsKLQkJbGFuZ25hbWVbbGFuZ25hbWVsZW4tMV09J1wwJzsKLQkJcmV0dXJuIGxhbmduYW1lbGVuOwotCX0KLQkvKiBpZiB0aGF0IGZhaWxzLCB1c2UgdGhlIGludGVyYWwgdGFibGUgKi8KLQlmb3IgKGk9MDtsYW5ndWFnZXNbaV0ubGFuZ2lkIT0wO2krKykKLQkJaWYgKGxhbmdpZD09bGFuZ3VhZ2VzW2ldLmxhbmdpZCkKLQkJCWJyZWFrOwotCXN0cm5jcHkobGFuZ25hbWUsbGFuZ3VhZ2VzW2ldLmxhbmduYW1lLGxhbmduYW1lbGVuKTsKLQlsYW5nbmFtZVtsYW5nbmFtZWxlbi0xXT0nXDAnOwotCXJldHVybiBzdHJsZW4obGFuZ3VhZ2VzW2ldLmxhbmduYW1lKTsKLX0KLQotLyogVmVyTGFuZ3VhZ2VOYW1lQQkJCQlbVkVSU0lPTi45XSAqLwotRFdPUkQKLVZlckxhbmd1YWdlTmFtZTMyQShVSU5UMzIgbGFuZ2lkLExQU1RSIGxhbmduYW1lLFVJTlQzMiBsYW5nbmFtZWxlbikgewotCXJldHVybiBWZXJMYW5ndWFnZU5hbWUxNihsYW5naWQsbGFuZ25hbWUsbGFuZ25hbWVsZW4pOwotfQotCi0vKiBWZXJMYW5ndWFnZU5hbWVXCQkJCVtWRVJTSU9OLjEwXSAqLwotRFdPUkQKLVZlckxhbmd1YWdlTmFtZTMyVyhVSU5UMzIgbGFuZ2lkLExQV1NUUiBsYW5nbmFtZSxVSU5UMzIgbGFuZ25hbWVsZW4pIHsKLQlpbnQJaTsKLQljaGFyCWJ1ZmZlcls4MF07Ci0JTFBXU1RSCWtleW5hbWU7Ci0KLQkvKiBGaXJzdCwgY2hlY2sgXFN5c3RlbVxDdXJyZW50Q29udHJvbFNldFxjb250cm9sXE5sc1xMb2NhbGVcPGxhbmdpZD4KLQkgKiBmcm9tIHRoZSByZWdpc3RyeS4gCi0JICovCi0Jc3ByaW50ZihidWZmZXIsIlxcU3lzdGVtXFxDdXJyZW50Q29udHJvbFNldFxcY29udHJvbFxcTmxzXFxMb2NhbGVcXCUwOHgiLGxhbmdpZCk7Ci0Ja2V5bmFtZSA9IEhFQVBfc3RyZHVwQXRvVyggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgYnVmZmVyICk7Ci0JaWYgKEVSUk9SX1NVQ0NFU1M9PVJlZ1F1ZXJ5VmFsdWUzMlcoSEtFWV9MT0NBTF9NQUNISU5FLGtleW5hbWUsbGFuZ25hbWUsKExQRFdPUkQpJmxhbmduYW1lbGVuKSkgewotCQlIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwga2V5bmFtZSApOwotCQlyZXR1cm4gbGFuZ25hbWVsZW47Ci0JfQotICAgICAgICBIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwga2V5bmFtZSApOwotCS8qIGlmIHRoYXQgZmFpbHMsIHVzZSB0aGUgaW50ZXJhbCB0YWJsZSAqLwotCWZvciAoaT0wO2xhbmd1YWdlc1tpXS5sYW5naWQhPTA7aSsrKQotCQlpZiAobGFuZ2lkPT1sYW5ndWFnZXNbaV0ubGFuZ2lkKQotCQkJYnJlYWs7Ci0gICAgICAgIGxzdHJjcHlBdG9XKCBsYW5nbmFtZSwgbGFuZ3VhZ2VzW2ldLmxhbmduYW1lICk7Ci0JcmV0dXJuIHN0cmxlbihsYW5ndWFnZXNbaV0ubGFuZ25hbWUpOyAvKiBzYW1lIGFzIHN0cmxlblcobGFuZ25hbWUpOyAqLwotfQogCiAvKiBGSVhNRTogVU5JQ09ERT8gKi8KIHN0cnVjdCBkYiB7CmRpZmYgLS1naXQgYS9taXNjL3dpbnNvY2suYyBiL21pc2Mvd2luc29jay5jCmluZGV4IDdmNGMzMTQuLmU0ZWNkNTEgMTAwNjQ0Ci0tLSBhL21pc2Mvd2luc29jay5jCisrKyBiL21pc2Mvd2luc29jay5jCkBAIC0yNjcsNiArMjY3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN1bk9TIiwKICAgICAgICAgICAgICAgICAgICAgICAgICNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGcmVlQlNEIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICNlbGlmIGRlZmluZWQoX19PcGVuQlNEX18pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPcGVuQlNEL2kzODYiLAogICAgICAgICAgICAgICAgICAgICAgICAgI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24iLAogICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCmRpZmYgLS1naXQgYS9tc2Rvcy9pbnQyMS5jIGIvbXNkb3MvaW50MjEuYwppbmRleCA0YWYzYTUzLi5kODEzNjgyIDEwMDY0NAotLS0gYS9tc2Rvcy9pbnQyMS5jCisrKyBiL21zZG9zL2ludDIxLmMKQEAgLTg0Myw1MiArODQzLDMxIEBACiAKIHN0YXRpYyB2b2lkIGZMb2NrKCBDT05URVhUICogY29udGV4dCApCiB7Ci0jaWYgMAotICAgIHN0cnVjdCBmbG9jayBmOwotICAgIGludCByZXN1bHQscmV0cmllcz1zaGFyaW5nX3JldHJpZXM7Ci0KLSAgICBmLmxfc3RhcnQgPSBNQUtFTE9ORyhEWF9yZWcoY29udGV4dCksQ1hfcmVnKGNvbnRleHQpKTsKLSAgICBmLmxfbGVuICAgPSBNQUtFTE9ORyhESV9yZWcoY29udGV4dCksU0lfcmVnKGNvbnRleHQpKTsKLSAgICBmLmxfd2hlbmNlID0gMDsKLSAgICBmLmxfcGlkID0gMDsKIAogICAgIHN3aXRjaCAoIEFYX3JlZyhjb250ZXh0KSAmIDB4ZmYgKQogICAgIHsKICAgICAgICAgY2FzZSAweDAwOiAvKiBMT0NLICovCi0JICBmLmxfdHlwZSA9IEZfV1JMQ0s7CisJICBpZiAoIUxvY2tGaWxlKEJYX3JlZyhjb250ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1BS0VMT05HKERYX3JlZyhjb250ZXh0KSxDWF9yZWcoY29udGV4dCkpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxPTkcoRElfcmVnKGNvbnRleHQpLFNJX3JlZyhjb250ZXh0KSksIDApKSB7CisJICAgIEFYX3JlZyhjb250ZXh0KSA9IERPU19FeHRlbmRlZEVycm9yOworCSAgICBTRVRfQ0ZMQUcoY29udGV4dCk7CisJICB9CiAgICAgICAgICAgYnJlYWs7CiAKIAljYXNlIDB4MDE6IC8qIFVOTE9DSyAqLwotICAgICAgICAgIGYubF90eXBlID0gRl9VTkxDSzsKLQkgIGJyZWFrOwotCisJICBpZiAoIVVubG9ja0ZpbGUoQlhfcmVnKGNvbnRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBNQUtFTE9ORyhEWF9yZWcoY29udGV4dCksQ1hfcmVnKGNvbnRleHQpKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxPTkcoRElfcmVnKGNvbnRleHQpLFNJX3JlZyhjb250ZXh0KSksIDApKSB7CisJICAgIEFYX3JlZyhjb250ZXh0KSA9IERPU19FeHRlbmRlZEVycm9yOworCSAgICBTRVRfQ0ZMQUcoY29udGV4dCk7CisJICB9CisJICByZXR1cm47CiAJZGVmYXVsdDoKIAkgIEFYX3JlZyhjb250ZXh0KSA9IDB4MDAwMTsKIAkgIFNFVF9DRkxBRyhjb250ZXh0KTsKIAkgIHJldHVybjsKICAgICAgfQotIAotICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gZmNudGwoQlhfcmVnKGNvbnRleHQpLEZfU0VUTEssJmYpOyAKLSAgICAgICAgICBpZiAoIHJldHJpZXMgJiYgKCFyZXN1bHQpICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgICBmb3IoaT0wO2k8MzI3NjgqKChpbnQpc2hhcmluZ19wYXVzZSk7aSsrKQotICAgICAgICAgICAgICAgICAgcmVzdWx0Kys7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdG9wIHRoZSBvcHRpbWl6ZXIgKi8KLSAgICAgICAgICAgICAgZm9yKGk9MDtpPDMyNzY4KigoaW50KXNoYXJpbmdfcGF1c2UpO2krKykKLSAgICAgICAgICAgICAgICAgIHJlc3VsdC0tOwotICAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHdoaWxlKCAoIXJlc3VsdCkgJiYgKCEocmV0cmllcy0tKSkgKTsKLQotICAgICAgaWYocmVzdWx0KSAgCi0gICAgICB7Ci0gICAgICAgICAgRklMRV9TZXREb3NFcnJvcigpOwotICAgICAgICAgIEFYX3JlZyhjb250ZXh0KSA9IERPU19FeHRlbmRlZEVycm9yOwotICAgICAgICAgIFNFVF9DRkxBRyhjb250ZXh0KTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0jZW5kaWYKIH0gCiAKIApkaWZmIC0tZ2l0IGEvbXNkb3MvaW9wb3J0cy5jIGIvbXNkb3MvaW9wb3J0cy5jCmluZGV4IGUzMzQ4N2EuLjRjOWViZjkgMTAwNjQ0Ci0tLSBhL21zZG9zL2lvcG9ydHMuYworKysgYi9tc2Rvcy9pb3BvcnRzLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogI2lmZGVmIGxpbnV4CiAgICAgaWYgKGRvX2RpcmVjdF9wb3J0X2FjY2VzcykgaW9wbCgwKTsKICNlbmRpZgotICAgIGRwcmludGZfaW50KHN0ZGRlYiwgIiggMHgleCApXG4iLCByZXMgKTsKKyAgICBkcHJpbnRmX2ludChzdGRkZWIsICIoIDB4JWx4IClcbiIsIHJlcyApOwogICAgIHJldHVybiByZXM7CiB9CiAKZGlmZiAtLWdpdCBhL211bHRpbWVkaWEvbWNpc3RyaW5nLmMgYi9tdWx0aW1lZGlhL21jaXN0cmluZy5jCmluZGV4IDM2ZDMzODkuLjE2MjRlZTMgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvbWNpc3RyaW5nLmMKKysrIGIvbXVsdGltZWRpYS9tY2lzdHJpbmcuYwpAQCAtMjE0OSw3ICsyMTQ5LDggQEAKIAl9CiAJZHdGbGFncyA9IDA7IC8qIGRlZmF1bHQgZmxhZ3MgKi8KIAlmb3IgKGk9MDtpPG5yb2ZrZXl3b3JkczspIHsKLQkJaWYgKCFTVFJDTVAoa2V5d29yZHNbaV0sInR5cGUiKSkgeworCQkvKiB0YWtlIGNhcmUsIHRoZXJlIGlzIGFsc28gYSAiZGV2aWNlIHR5cGUiIGNhcGFiaWxpdHkgKi8KKwkJaWYgKCghU1RSQ01QKGtleXdvcmRzW2ldLCJ0eXBlIikpICYmIChpPG5yb2ZrZXl3b3Jkcy0xKSkgewogCQkJZmlsZW5hbWUgPSBkZXY7CiAJCQlkZXYgPSBrZXl3b3Jkc1tpKzFdOwogCQkJbWVtY3B5KGtleXdvcmRzK2ksa2V5d29yZHMrKGkrMiksKG5yb2ZrZXl3b3Jkcy1pLTIpKnNpemVvZihjaGFyICopKTsKZGlmZiAtLWdpdCBhL29iamVjdHMvZGliLmMgYi9vYmplY3RzL2RpYi5jCmluZGV4IDk0NzQzZGIuLjQzM2NmNzEgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZGliLmMKKysrIGIvb2JqZWN0cy9kaWIuYwpAQCAtODIyLDE3ICs4MjIsMTkgQEAKIAogICAgICAgLyogVHJhbnNmZXIgY29sb3IgaW5mbyAqLwogICAgIAotICAgIHBhbEVudHJ5ID0gcGFsZXR0ZS0+bG9ncGFsZXR0ZS5wYWxQYWxFbnRyeTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+Ym1pSGVhZGVyLmJpQ2xyVXNlZDsgaSsrLCBwYWxFbnRyeSsrKQotICAgIHsKLQlpZiAoY29sb3J1c2UgPT0gRElCX1JHQl9DT0xPUlMpCisgICAgaWYgKGluZm8tPmJtaUhlYWRlci5iaUJpdENvdW50PD04KSB7CisJcGFsRW50cnkgPSBwYWxldHRlLT5sb2dwYWxldHRlLnBhbFBhbEVudHJ5OworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5ibWlIZWFkZXIuYmlDbHJVc2VkOyBpKyssIHBhbEVudHJ5KyspCiAJewotCSAgICBpbmZvLT5ibWlDb2xvcnNbaV0ucmdiUmVkICAgICAgPSBwYWxFbnRyeS0+cGVSZWQ7Ci0JICAgIGluZm8tPmJtaUNvbG9yc1tpXS5yZ2JHcmVlbiAgICA9IHBhbEVudHJ5LT5wZUdyZWVuOwotCSAgICBpbmZvLT5ibWlDb2xvcnNbaV0ucmdiQmx1ZSAgICAgPSBwYWxFbnRyeS0+cGVCbHVlOwotCSAgICBpbmZvLT5ibWlDb2xvcnNbaV0ucmdiUmVzZXJ2ZWQgPSAwOworCSAgICBpZiAoY29sb3J1c2UgPT0gRElCX1JHQl9DT0xPUlMpCisJICAgIHsKKwkJaW5mby0+Ym1pQ29sb3JzW2ldLnJnYlJlZCAgICAgID0gcGFsRW50cnktPnBlUmVkOworCQlpbmZvLT5ibWlDb2xvcnNbaV0ucmdiR3JlZW4gICAgPSBwYWxFbnRyeS0+cGVHcmVlbjsKKwkJaW5mby0+Ym1pQ29sb3JzW2ldLnJnYkJsdWUgICAgID0gcGFsRW50cnktPnBlQmx1ZTsKKwkJaW5mby0+Ym1pQ29sb3JzW2ldLnJnYlJlc2VydmVkID0gMDsKKwkgICAgfQorCSAgICBlbHNlICgoV09SRCAqKWluZm8tPmJtaUNvbG9ycylbaV0gPSAoV09SRClpOwogCX0KLQllbHNlICgoV09SRCAqKWluZm8tPmJtaUNvbG9ycylbaV0gPSAoV09SRClpOwogICAgIH0KICAgICAKICAgICBpZiAoYml0cykKZGlmZiAtLWdpdCBhL29iamVjdHMvZ2Rpb2JqLmMgYi9vYmplY3RzL2dkaW9iai5jCmluZGV4IDgxM2ZhNmYuLjNkNTk0MzUgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZ2Rpb2JqLmMKKysrIGIvb2JqZWN0cy9nZGlvYmouYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgImRjLmgiCiAjaW5jbHVkZSAiZm9udC5oIgogI2luY2x1ZGUgImhlYXAuaCIKKyNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAicGFsZXR0ZS5oIgogI2luY2x1ZGUgInBlbi5oIgogI2luY2x1ZGUgInJlZ2lvbi5oIgpAQCAtMTUwLDYgKzE1MSw2MCBAQAogICAgIChHRElPQkpIRFIgKikgJlN5c3RlbUZpeGVkRm9udAogfTsKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgdm9pZCAgUmVhZEZvbnRJbmZvcm1hdGlvbigKKyAqICAgICAgY2hhciBjb25zdCAgKmZvbnROYW1lLAorICogICAgICBGT05UT0JKICAqZm9udCwKKyAqICAgICAgaW50ICBkZWZIZWlnaHQsCisgKiAgICAgIGludCAgZGVmQm9sZCwKKyAqICAgICAgaW50ICBkZWZJdGFsaWMsCisgKiAgICAgIGludCAgZGVmVW5kZXJsaW5lLAorICogICAgICBpbnQgIGRlZlN0cmlrZU91dCApCisgKgorICogICBSZWFkRm9udEluZm9ybWF0aW9uKCkgY2hlY2tzIHRoZSBXaW5lIGNvbmZpZ3VyYXRpb24gZmlsZSdzIFR3ZWFrLkZvbnRzCisgKiAgIHNlY3Rpb24gZm9yIGVudHJpZXMgY29udGFpbmluZyBmb250TmFtZS5IZWlnaHQsIGZvbnROYW1lLkJvbGQsIGV0Yy4sCisgKiAgIHdoZXJlIGZvbnROYW1lIGlzIHRoZSBuYW1lIHNwZWNpZmllZCBpbiB0aGUgY2FsbCAoZS5nLiwgIlN5c3RlbSIpLiAgSXQKKyAqICAgYXR0ZW1wdHMgdG8gYmUgdXNlciBmcmllbmRseSBieSBhY2NlcHRpbmcgJ24nLCAnTicsICdmJywgJ0YnLCBvciAnMCcgYXMKKyAqICAgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgYm9vbGVhbiBhdHRyaWJ1dGVzIChib2xkLCBpdGFsaWMsIGFuZAorICogICB1bmRlcmxpbmUpLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCAgUmVhZEZvbnRJbmZvcm1hdGlvbigKKyAgICBjaGFyIGNvbnN0ICpmb250TmFtZSwKKyAgICBGT05UT0JKICpmb250LAorICAgIGludCAgZGVmSGVpZ2h0LAorICAgIGludCAgZGVmQm9sZCwKKyAgICBpbnQgIGRlZkl0YWxpYywKKyAgICBpbnQgIGRlZlVuZGVybGluZSwKKyAgICBpbnQgIGRlZlN0cmlrZU91dCApCit7CisgICAgY2hhciAga2V5WzI1Nl07CisKKyAgICBzcHJpbnRmKGtleSwgIiVzLkhlaWdodCIsIGZvbnROYW1lKTsKKyAgICBmb250LT5sb2dmb250LmxmSGVpZ2h0ID0KKwlQUk9GSUxFX0dldFdpbmVJbmlJbnQoIlR3ZWFrLkZvbnRzIiwga2V5LCBkZWZIZWlnaHQpOworCisgICAgc3ByaW50ZihrZXksICIlcy5Cb2xkIiwgZm9udE5hbWUpOworICAgIGZvbnQtPmxvZ2ZvbnQubGZXZWlnaHQgPQorCShQUk9GSUxFX0dldFdpbmVJbmlCb29sKCJUd2Vhay5Gb250cyIsIGtleSwgZGVmQm9sZCkpID8KKwlGV19CT0xEIDogRldfTk9STUFMOworCisgICAgc3ByaW50ZihrZXksICIlcy5JdGFsaWMiLCBmb250TmFtZSk7CisgICAgZm9udC0+bG9nZm9udC5sZkl0YWxpYyA9CisJUFJPRklMRV9HZXRXaW5lSW5pQm9vbCgiVHdlYWsuRm9udHMiLCBrZXksIGRlZkl0YWxpYyk7CisKKyAgICBzcHJpbnRmKGtleSwgIiVzLlVuZGVybGluZSIsIGZvbnROYW1lKTsKKyAgICBmb250LT5sb2dmb250LmxmVW5kZXJsaW5lID0KKwlQUk9GSUxFX0dldFdpbmVJbmlCb29sKCJUd2Vhay5Gb250cyIsIGtleSwgZGVmVW5kZXJsaW5lKTsKKworICAgIHNwcmludGYoa2V5LCAiJXMuU3RyaWtlT3V0IiwgZm9udE5hbWUpOworICAgIGZvbnQtPmxvZ2ZvbnQubGZTdHJpa2VPdXQgPQorCVBST0ZJTEVfR2V0V2luZUluaUJvb2woIlR3ZWFrLkZvbnRzIiwga2V5LCBkZWZTdHJpa2VPdXQpOworCisgICAgcmV0dXJuOworfQorCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIEdESV9Jbml0CkBAIC0xNjEsNiArMjE2LDEzIEBACiAgICAgZXh0ZXJuIEJPT0wzMiBYMTFEUlZfSW5pdCh2b2lkKTsKICAgICBleHRlcm4gQk9PTDMyIERJQl9Jbml0KHZvaWQpOwogCisgICAgLyogVFdFQUs6IEluaXRpYWxpemUgZm9udCBoaW50cyAqLworICAgIFJlYWRGb250SW5mb3JtYXRpb24oIk9FTUZpeGVkIiwgJk9FTUZpeGVkRm9udCwgMTIsIDAsIDAsIDAsIDApOworICAgIFJlYWRGb250SW5mb3JtYXRpb24oIkFuc2lGaXhlZCIsICZBbnNpRml4ZWRGb250LCAxMiwgMCwgMCwgMCwgMCk7CisgICAgUmVhZEZvbnRJbmZvcm1hdGlvbigiQW5zaVZhciIsICZBbnNpVmFyRm9udCwgMTIsIDAsIDAsIDAsIDApOworICAgIFJlYWRGb250SW5mb3JtYXRpb24oIlN5c3RlbSIsICZTeXN0ZW1Gb250LCAxNiwgMSwgMCwgMCwgMCk7CisgICAgUmVhZEZvbnRJbmZvcm1hdGlvbigiU3lzdGVtRml4ZWQiLCAmU3lzdGVtRml4ZWRGb250LCAxMiwgMSwgMCwgMCwgMCk7CisKICAgICAvKiBJbml0aWFsaXplIGRyaXZlcnMgKi8KIAogICAgIERJQl9Jbml0KCk7CS8qIGFsd2F5cyBiZWZvcmUgWDExRFJWX0luaXQoKSAqLwpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9vZW1iaXRtYXAuYyBiL29iamVjdHMvb2VtYml0bWFwLmMKaW5kZXggNmZiOGFhYi4uNTE0Y2I3OCAxMDA2NDQKLS0tIGEvb2JqZWN0cy9vZW1iaXRtYXAuYworKysgYi9vYmplY3RzL29lbWJpdG1hcC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSAiY29sb3IuaCIKICNpbmNsdWRlICJjdXJzb3JpY29uLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKKyNpbmNsdWRlICJ0d2Vhay5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAieG1hbGxvYy5oIgogCkBAIC01NiwyNSArNTcsMjMgQEAKICNpbmNsdWRlICJiaXRtYXBzL29ibV9vbGRfY2xvc2UiCiAjaW5jbHVkZSAiYml0bWFwcy9vYm1fdHJ0eXBlIgogCi0jaWZuZGVmIFdJTl85NV9MT09LCiAjaW5jbHVkZSAiYml0bWFwcy9vYm1fem9vbWQiCiAjaW5jbHVkZSAiYml0bWFwcy9vYm1fcmVkdWNlZCIKICNpbmNsdWRlICJiaXRtYXBzL29ibV96b29tIgogI2luY2x1ZGUgImJpdG1hcHMvb2JtX3JlZHVjZSIKICNpbmNsdWRlICJiaXRtYXBzL29ibV9jbG9zZSIKLSNlbHNlCiAjaW5jbHVkZSAiYml0bWFwcy9vYm1fem9vbWRfOTUiCiAjaW5jbHVkZSAiYml0bWFwcy9vYm1fcmVkdWNlZF85NSIKICNpbmNsdWRlICJiaXRtYXBzL29ibV96b29tXzk1IgogI2luY2x1ZGUgImJpdG1hcHMvb2JtX3JlZHVjZV85NSIKICNpbmNsdWRlICJiaXRtYXBzL29ibV9jbG9zZV85NSIKICNpbmNsdWRlICJiaXRtYXBzL29ibV9jbG9zZWRfOTUiCi0jZW5kaWYgIC8qIFdJTl85NV9MT09LICovCisKIAogI2RlZmluZSBPQk1fRklSU1QgIE9CTV9UUlRZUEUJICAgLyogRmlyc3QgT0VNIGJpdG1hcCAqLwogI2RlZmluZSBPQk1fTEFTVCAgIE9CTV9PTERfQ0xPU0UgICAvKiBMYXN0IE9FTSBiaXRtYXAgKi8KIAotc3RhdGljIGNvbnN0IHN0cnVjdAorc3RhdGljIHN0cnVjdAogewogICAgIGNoYXIqKiBkYXRhOyAgIC8qIFBvaW50ZXIgdG8gYml0bWFwIGRhdGEgKi8KICAgICBCT09MMzIgY29sb3I7ICAvKiBJcyBpdCBhIGNvbG9yIGJpdG1hcD8gICovCkBAIC05NiwzMCArOTUsMTYgQEAKICAgICB7IG9ibV9kbmFycm93ZCwgVFJVRSB9LCAgICAgLyogT0JNX0ROQVJST1dEICovCiAgICAgeyBvYm1fdXBhcnJvd2QsIFRSVUUgfSwgICAgIC8qIE9CTV9VUEFSUk9XRCAqLwogICAgIHsgb2JtX3Jlc3RvcmVkLCBUUlVFIH0sICAgICAvKiBPQk1fUkVTVE9SRUQgKi8KLSNpZmRlZiBXSU5fOTVfTE9PSwotICAgIHsgb2JtX3pvb21kXzk1LCBUUlVFIH0sICAgICAvKiBPQk1fWk9PTUQgKi8KLSAgICB7IG9ibV9yZWR1Y2VkXzk1LCBUUlVFIH0sICAgLyogT0JNX1JFRFVDRUQgKi8KLSNlbHNlCiAgICAgeyBvYm1fem9vbWQsIFRSVUUgfSwgICAgICAgIC8qIE9CTV9aT09NRCAqLwogICAgIHsgb2JtX3JlZHVjZWQsIFRSVUUgfSwgICAgICAvKiBPQk1fUkVEVUNFRCAqLwotI2VuZGlmCiAgICAgeyBvYm1fcmVzdG9yZSwgVFJVRSB9LCAgICAgIC8qIE9CTV9SRVNUT1JFICovCi0jaWZkZWYgV0lOXzk1X0xPT0sKLSAgICB7IG9ibV96b29tXzk1LCBUUlVFIH0sICAgICAgLyogT0JNX1pPT00gKi8KLSAgICB7IG9ibV9yZWR1Y2VfOTUsIFRSVUUgfSwgICAgLyogT0JNX1JFRFVDRSAqLwotI2Vsc2UKICAgICB7IG9ibV96b29tLCBUUlVFIH0sICAgICAgICAgLyogT0JNX1pPT00gKi8KICAgICB7IG9ibV9yZWR1Y2UsIFRSVUUgfSwgICAgICAgLyogT0JNX1JFRFVDRSAqLwotI2VuZGlmCiAgICAgeyBvYm1fbGZhcnJvdywgVFJVRSB9LCAgICAgIC8qIE9CTV9MRkFSUk9XICovCiAgICAgeyBvYm1fcmdhcnJvdywgVFJVRSB9LCAgICAgIC8qIE9CTV9SR0FSUk9XICovCiAgICAgeyBvYm1fZG5hcnJvdywgVFJVRSB9LCAgICAgIC8qIE9CTV9ETkFSUk9XICovCiAgICAgeyBvYm1fdXBhcnJvdywgVFJVRSB9LCAgICAgIC8qIE9CTV9VUEFSUk9XICovCi0jaWZkZWYgV0lOXzk1X0xPT0sKLSAgICB7IG9ibV9jbG9zZV85NSwgVFJVRSB9LCAgICAgLyogT0JNX0NMT1NFICovCi0jZWxzZQogICAgIHsgb2JtX2Nsb3NlLCBUUlVFIH0sICAgICAgICAvKiBPQk1fQ0xPU0UgKi8KLSNlbmRpZgogICAgIHsgb2JtX29sZF9yZXN0b3JlLCBGQUxTRSB9LCAvKiBPQk1fT0xEX1JFU1RPUkUgKi8KICAgICB7IG9ibV9vbGRfem9vbSwgRkFMU0UgfSwgICAgLyogT0JNX09MRF9aT09NICovCiAgICAgeyBvYm1fb2xkX3JlZHVjZSwgRkFMU0UgfSwgIC8qIE9CTV9PTERfUkVEVUNFICovCkBAIC0zMDksOCArMjk0LDggQEAKICAgICBpZiAoIWhiaXRtYXApIHJldHVybiAwOwogCiAgICAgYm1wT2JqUHRyID0gKEJJVE1BUE9CSiAqKSBHRElfSEVBUF9MSU5fQUREUiggaGJpdG1hcCApOwotICAgIGJtcE9ialB0ci0+c2l6ZS5jeCA9IDA7Ci0gICAgYm1wT2JqUHRyLT5zaXplLmN5ID0gMDsKKyAgICBibXBPYmpQdHItPnNpemUuY3ggPSB3aWR0aDsKKyAgICBibXBPYmpQdHItPnNpemUuY3kgPSBoZWlnaHQ7CiAgICAgYm1wT2JqUHRyLT5waXhtYXAgID0gcGl4bWFwOwogICAgIGJtcE9ialB0ci0+Yml0bWFwLmJtVHlwZSAgICAgICA9IDA7CiAgICAgYm1wT2JqUHRyLT5iaXRtYXAuYm1XaWR0aCAgICAgID0gd2lkdGg7CkBAIC00OTEsMyArNDc2LDI5IEBACiAgICAgaWYgKGZDdXJzb3IpIE9CTV9DdXJzb3JzW2lkXSA9IGhhbmRsZTsKICAgICByZXR1cm4gaGFuZGxlOwogfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIE9CTV9Jbml0CisgKgorICogSW5pdGlhbGl6ZXMgdGhlIE9CTV9QaXhtYXBzX0RhdGEgc3RydWN0CisgKi8KK0JPT0wzMiBPQk1fSW5pdCgpCit7CisgICAgaWYoVFdFQUtfV2luOTVMb29rKSB7CisJT0JNX1BpeG1hcHNfRGF0YVtPQk1fWk9PTUQgLSBPQk1fRklSU1RdLmRhdGEgPSBvYm1fem9vbWRfOTU7CisJT0JNX1BpeG1hcHNfRGF0YVtPQk1fUkVEVUNFRCAtIE9CTV9GSVJTVF0uZGF0YSA9IG9ibV9yZWR1Y2VkXzk1OworCU9CTV9QaXhtYXBzX0RhdGFbT0JNX1pPT00gLSBPQk1fRklSU1RdLmRhdGEgPSBvYm1fem9vbV85NTsKKwlPQk1fUGl4bWFwc19EYXRhW09CTV9SRURVQ0UgLSBPQk1fRklSU1RdLmRhdGEgPSBvYm1fcmVkdWNlXzk1OworCU9CTV9QaXhtYXBzX0RhdGFbT0JNX0NMT1NFIC0gT0JNX0ZJUlNUXS5kYXRhID0gb2JtX2Nsb3NlXzk1OworICAgIH0KKyAgICBlbHNlIHsKKwlPQk1fUGl4bWFwc19EYXRhW09CTV9aT09NRCAtIE9CTV9GSVJTVF0uZGF0YSA9IG9ibV96b29tZDsKKwlPQk1fUGl4bWFwc19EYXRhW09CTV9SRURVQ0VEIC0gT0JNX0ZJUlNUXS5kYXRhID0gb2JtX3JlZHVjZWQ7CisJT0JNX1BpeG1hcHNfRGF0YVtPQk1fWk9PTSAtIE9CTV9GSVJTVF0uZGF0YSA9IG9ibV96b29tOworCU9CTV9QaXhtYXBzX0RhdGFbT0JNX1JFRFVDRSAtIE9CTV9GSVJTVF0uZGF0YSA9IG9ibV9yZWR1Y2U7CisJT0JNX1BpeG1hcHNfRGF0YVtPQk1fQ0xPU0UgLSBPQk1fRklSU1RdLmRhdGEgPSBvYm1fY2xvc2U7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9wcm9ncmFtcy9wcm9nbWFuL0NoYW5nZUxvZyBiL3Byb2dyYW1zL3Byb2dtYW4vQ2hhbmdlTG9nCmluZGV4IDRhNzgyMzUuLjFhN2MwNzIgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3Byb2dtYW4vQ2hhbmdlTG9nCisrKyBiL3Byb2dyYW1zL3Byb2dtYW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOCBAQAorRnJpIEp1bCA0IDEyOjAwOjAwIDE5OTcgIEhlbnJpayBPbHNlbiA8SGVucmlrLk9sc2VuQGlhZXN0ZS5kaz4KKworCSogW0RhLnJjXSAobmV3KQorCUFkZGVkIERhbmlzaCBsYW5ndWFnZSBzdXBwb3J0LgorCiBUdWUgSnVuICAzIDA3OjM0OjI2IDE5OTcgIE1hcmNlbCBCYXVyIDxtYmF1ckBnMjYuZXRoei5jaD4KIAogCSogW1ZhLnJjXSAobmV3KQpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvcHJvZ21hbi9EYS5yYyBiL3Byb2dyYW1zL3Byb2dtYW4vRGEucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkYjg1MgotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyYW1zL3Byb2dtYW4vRGEucmMKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBQcm9ncmFtIE1hbmFnZXIKKyAqCisgKiBDb3B5cmlnaHQgMTk5NyBIZW5yaWsgT2xzZW4KKyAqLworCisjZGVmaW5lIExBTkdVQUdFX0lEICAgICAgICAgICAgICAgICAgRGEKKyNkZWZpbmUgTEFOR1VBR0VfTlVNQkVSICAgICAgICAgICAgICA2CisjZGVmaW5lIExBTkdVQUdFX01FTlVfSVRFTSAgICAgICAgICAgIiZEYW5zayIKKworLyogTWVudSAqLworCisjZGVmaW5lIE1FTlVfRklMRSAgICAgICAgICAgICAgICAgICAgIiZGaWxlciIKKyNkZWZpbmUgTUVOVV9GSUxFX05FVyAgICAgICAgICAgICAgICAiJk55dCBwcm9ncmFtb2JqZWt0Li4uIgorI2RlZmluZSBNRU5VX0ZJTEVfT1BFTiAgICAgICAgICAgICAgICLFJmJuXHRFbnRlciIKKyNkZWZpbmUgTUVOVV9GSUxFX01PVkUgICAgICAgICAgICAgICAiJkZseXQuLi5cdEY3IgorI2RlZmluZSBNRU5VX0ZJTEVfQ09QWSAgICAgICAgICAgICAgICJLJm9waWVyLi4uXHRGOCIKKyNkZWZpbmUgTUVOVV9GSUxFX0RFTEVURSAgICAgICAgICAgICAiJlNsZXRcdERlbCIKKyNkZWZpbmUgTUVOVV9GSUxFX0FUVFJJQlVURVMgICAgICAgICAiJlByb2dyYW1wYXJhbWV0cmUuLi5eSUFsdCtFbnRlciIKKyNkZWZpbmUgTUVOVV9GSUxFX0VYRUNVVEUgICAgICAgICAgICAiJkv4ci4uLiIKKyNkZWZpbmUgTUVOVV9GSUxFX0VYSVQgICAgICAgICAgICAgICAiJkFmc2x1dCBXaW5kb3dzLi4uIgorCisjZGVmaW5lIE1FTlVfT1BUSU9OUyAgICAgICAgICAgICAgICAgIiZJbmRzdGlsbGluZ2VyIgorI2RlZmluZSBNRU5VX09QVElPTlNfQVVUT19BUlJBTkdFICAgICImQXJyYW5nZXIgYXV0b21hdGlzayIKKyNkZWZpbmUgTUVOVV9PUFRJT05TX01JTl9PTl9SVU4gICAgICAiJk1pbmltZXIgdmVkIGJydWciCisjZGVmaW5lIE1FTlVfT1BUSU9OU19TQVZFX1NFVFRJTkdTICAgIiZHZW0gaW5kc3RpbGxpbmdlciB2ZWQgYWZzbHV0bmluZyIKKworI2RlZmluZSBNRU5VX1dJTkRPV1MgICAgICAgICAgICAgICAgICImVmluZHVlIgorI2RlZmluZSBNRU5VX1dJTkRPV1NfT1ZFUkxBUCAgICAgICAgICImT3ZlcmxhcHBldFx0U2tpZnQrRjUiCisjZGVmaW5lIE1FTlVfV0lORE9XU19TSURFX0JZX1NJREUgICAgIiZTaWRlIG9tIHNpZGVcdFNraWZ0K0Y0IgorI2RlZmluZSBNRU5VX1dJTkRPV1NfQVJSQU5HRSAgICAgICAgICImQXJyYW5nZXIgaWtvbmVyIgorCisjZGVmaW5lIE1FTlVfTEFOR1VBR0UgICAgICAgICAgICAgICAgIiZTcHJvZyIKKworI2RlZmluZSBNRU5VX0hFTFAgICAgICAgICAgICAgICAgICAgICImSGrmbHAiCisjZGVmaW5lIE1FTlVfSEVMUF9DT05URU5UUyAgICAgICAgICAgIiZJbmRob2xkIgorI2RlZmluZSBNRU5VX0hFTFBfU0VBUkNIICAgICAgICAgICAgICImU/hnIGVmdGVyIGhq5mxwIG9tLi4uIgorI2RlZmluZSBNRU5VX0hFTFBfSEVMUF9PTl9IRUxQICAgICAgICImQnJ1ZyBhZiBIauZscCIKKyNkZWZpbmUgTUVOVV9IRUxQX1RVVE9SSUFMICAgICAgICAgICAiJldpbmRvd3MgU2VsdnN0dWRpdW0iCisKKyNkZWZpbmUgTUVOVV9JTkZPICAgICAgICAgICAgICAgICAgICAiJk9tIFByb2dyYW1zdHlyaW5nLi4uIgorI2RlZmluZSBNRU5VX0lORk9fTElDRU5TRSAgICAgICAgICAgICImTGljZW5zIgorI2RlZmluZSBNRU5VX0lORk9fTk9fV0FSUkFOVFkgICAgICAgICImTk8gV0FSUkFOVFkiCisjZGVmaW5lIE1FTlVfSU5GT19BQk9VVF9XSU5FICAgICAgICAgIiZPbSBXSU5FIgorCisvKiBEaWFsb2dzICovCisKKyNkZWZpbmUgRElBTE9HX09LICAgICAgICAgICAgICAgICAgICAiT0siCisjZGVmaW5lIERJQUxPR19DQU5DRUwgICAgICAgICAgICAgICAgIkFubnVsbGVyIgorI2RlZmluZSBESUFMT0dfQlJPV1NFICAgICAgICAgICAgICAgICImR2VubmVtc2UuLi4iCisjZGVmaW5lIERJQUxPR19IRUxQICAgICAgICAgICAgICAgICAgIiZIZWxwIgorCisjZGVmaW5lIERJQUxPR19ORVdfQ0FQVElPTiAgICAgICAgICAgIk55dCBwcm9ncmFtb2JqZWN0IgorI2RlZmluZSBESUFMT0dfTkVXX05FVyAgICAgICAgICAgICAgICJOeXQiCisjZGVmaW5lIERJQUxPR19ORVdfR1JPVVAgICAgICAgICAgICAgIlByb2dyYW0gJmdydXBwZSIKKyNkZWZpbmUgRElBTE9HX05FV19QUk9HUkFNICAgICAgICAgICAiJlByb2dyYW0iCisKKyNkZWZpbmUgRElBTE9HX01PVkVfQ0FQVElPTiAgICAgICAgICAiRmx5dCBwcm9ncmFtZWxlbWVudCIKKyNkZWZpbmUgRElBTE9HX01PVkVfUFJPR1JBTSAgICAgICAgICAiRmx5dCBlbGVtZW50ZXQ6IgorI2RlZmluZSBESUFMT0dfTU9WRV9GUk9NX0dST1VQICAgICAgICJGcmEgZ3J1cHBlbjoiCisjZGVmaW5lIERJQUxPR19NT1ZFX1RPX0dST1VQICAgICAgICAgIiZUaWwgZ3J1cHBlbjoiCisKKyNkZWZpbmUgRElBTE9HX0NPUFlfQ0FQVElPTiAgICAgICAgICAiS29waWVyIHByb2dyYW1lbGVtZW50IgorI2RlZmluZSBESUFMT0dfQ09QWV9QUk9HUkFNICAgICAgICAgICJLb3BpZXIgZWxlbWVudGV0OiIKKyNkZWZpbmUgRElBTE9HX0NPUFlfRlJPTV9HUk9VUCAgICAgICBESUFMT0dfTU9WRV9GUk9NX0dST1VQCisjZGVmaW5lIERJQUxPR19DT1BZX1RPX0dST1VQICAgICAgICAgRElBTE9HX01PVkVfVE9fR1JPVVAKKworI2RlZmluZSBESUFMT0dfR1JPVVBfQ0FQVElPTiAgICAgICAgICJHcnVwcGVwYXJhbWV0cmUiCisjZGVmaW5lIERJQUxPR19HUk9VUF9ERVNDUklQVElPTiAgICAgIiZCZXNrcml2ZWxzZToiCisjZGVmaW5lIERJQUxPR19HUk9VUF9GSUxFICAgICAgICAgICAgIiZHcnVwcGVmaWw6IgorCisjZGVmaW5lIERJQUxPR19QUk9HUkFNX0NBUFRJT04gICAgICAgIlByb2dyYW1wYXJhbWV0cmUiCisjZGVmaW5lIERJQUxPR19QUk9HUkFNX0RFU0NSSVBUSU9OICAgRElBTE9HX0dST1VQX0RFU0NSSVBUSU9OCisjZGVmaW5lIERJQUxPR19QUk9HUkFNX0NPTU1BTkRfTElORSAgIiZLb21tYW5kb2xpbmplOiIKKyNkZWZpbmUgRElBTE9HX1BST0dSQU1fRElSRUNUT1JZICAgICAiJkFyYmVqZHNiaWJsaW90ZWs6IgorI2RlZmluZSBESUFMT0dfUFJPR1JBTV9IT1RfS0VZICAgICAgICJHZW52ZWpzJnRhc3Q6IgorI2RlZmluZSBESUFMT0dfUFJPR1JBTV9TWU1CT0wgICAgICAgICJL+HIgJm1pbmltZXJldCIKKyNkZWZpbmUgRElBTE9HX1BST0dSQU1fT1RIRVJfU1lNQk9MICAiU2tpZnQgJmlrb24uLi4iCisKKyNkZWZpbmUgRElBTE9HX1NZTUJPTF9DQVBUSU9OICAgICAgICAiU2tpZnQgaWtvbiIKKyNkZWZpbmUgRElBTE9HX1NZTUJPTF9GSUxFICAgICAgICAgICAiJkZpbG5hdm46IgorI2RlZmluZSBESUFMT0dfU1lNQk9MX0NVUlJFTlQgICAgICAgICImTnV25nJlbmRlIGlrb246IgorCisjZGVmaW5lIERJQUxPR19FWEVDVVRFX0NBUFRJT04gICAgICAgIkv4ciIKKyNkZWZpbmUgRElBTE9HX0VYRUNVVEVfQ09NTUFORF9MSU5FICBESUFMT0dfUFJPR1JBTV9DT01NQU5EX0xJTkUKKyNkZWZpbmUgRElBTE9HX0VYRUNVVEVfU1lNQk9MICAgICAgICBESUFMT0dfUFJPR1JBTV9TWU1CT0wKKworLyogU3RyaW5ncyAqLworCisjZGVmaW5lIFNUUklOR19QUk9HUkFNX01BTkFHRVIgICAgICAgICAgICAiUHJvZ3JhbXN0eXJpbmciCisjZGVmaW5lIFNUUklOR19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAiRkVKTCIKKyNkZWZpbmUgU1RSSU5HX1dBUk5JTkcgICAgICAgICAgICAgICAgICAgICJBRFZBUlNFTCIKKyNkZWZpbmUgU1RSSU5HX0lORk8gICAgICAgICAgICAgICAgICAgICAgICJJbmZvcm1hdGlvbiIKKyNkZWZpbmUgU1RSSU5HX0RFTEVURSAgICAgICAgICAgICAgICAgICAgICJTbGV0IgorI2RlZmluZSBTVFJJTkdfREVMRVRFX0dST1VQX3MgICAgICAgICAgICAgIlNsZXQgZ3J1cHBlIGAlcycgPyIKKyNkZWZpbmUgU1RSSU5HX0RFTEVURV9QUk9HUkFNX3MgICAgICAgICAgICJTbGV0IHByb2dyYW0gYCVzJyA/IgorI2RlZmluZSBTVFJJTkdfTk9UX0lNUExFTUVOVEVEICAgICAgICAgICAgIklra2UgaW1wbGVtZW50ZXJldC4iCisjZGVmaW5lIFNUUklOR19GSUxFX1JFQURfRVJST1JfcyAgICAgICAgICAiS2FuIGlra2UgbOZzZSBmaWxlbiBgJXMnIgorI2RlZmluZSBTVFJJTkdfRklMRV9XUklURV9FUlJPUl9zICAgICAgICAgIkthbiBpa2tlIHNrcml2ZSBmaWxlbiBgJXMnIgorCisjZGVmaW5lIFNUUklOR19HUlBGSUxFX1JFQURfRVJST1JfcyAgICAgICAiXAorS2FuIGlra2Ug5WJuZSBncnVwcGVmaWxlbiAnJXMnLlxuXAor2G5za2VyIGR1LCBhdCBQcm9ncmFtc3R5cmluZyBpIGZyZW10aWRlbiBzdGFkaWcgc2thbCBwcvh2ZSBhdCBpbmRs5nNlIGRlbj8iCisKKyNkZWZpbmUgU1RSSU5HX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICJcCitEZXIgZXIgaWtrZSBub2sgaHVrb21tZWxzZSB0aWwgYXQgdWRm+HJlIGRlbm5lIG9wZXJhdGlvbi5cblwKK0Fmc2x1dCBldCBlbGxlciBmbGVyZSBha3RpdmUgcHJvZ3JhbW1lciBmb3IgYXQgZnJpZ/hyZSBodWtvbW1lbHNlLCBcCitvZyBwcvh2IHPlIGlnZW4uIgorCisjZGVmaW5lIFNUUklOR19XSU5IRUxQX0VSUk9SICAgICAgICAgICAgICAiXAorS2FuIGlra2UgdmlzZSBpbmZvcm1hdGlvbiBmcmEgSGrmbHAuIgorCisjZGVmaW5lIFNUUklOR19VTktOT1dOX0ZFQVRVUkVfcyAgICAgICAgICAiVWtlbmR0IGluZGhvbGQgaSAlcyIKKyNkZWZpbmUgU1RSSU5HX0ZJTEVfTk9UX09WRVJXUklUVEVOX3MgICAgICJcCitGaWxlbiBgJXMnIGZpbmRlcy4gSWtrZSBvdmVyc2tyZXZldC4iCisKKyNkZWZpbmUgU1RSSU5HX1NBVkVfR1JPVVBfQVNfcyAgICAgICAgICAgICJcCitHZW0gZ3J1cHBlbiBzb20gYCVzJyBmb3IgYXQgdW5kZ+UgYXQgb3ZlcnNrcml2ZSBvcmlnaW5hbGUgZmlsZXIiCisKKyNkZWZpbmUgU1RSSU5HX05PX0hPVF9LRVkgICAgICAgICAgICAgICAgICJJbmdlbiIKKworI2RlZmluZSBTVFJJTkdfQUxMX0ZJTEVTICAgICAgICAgICAgICAgICAgIkFsbGUgZmlsZXIgKCouKikiCisjZGVmaW5lIFNUUklOR19QUk9HUkFNUyAgICAgICAgICAgICAgICAgICAiUHJvZ3JhbW1lciIKKyNkZWZpbmUgU1RSSU5HX0xJQlJBUklFU19ETEwgICAgICAgICAgICAgICJCaWJsaW90ZWtzZmlsZXIgKCouZGxsKSIKKyNkZWZpbmUgU1RSSU5HX1NZTUJPTF9GSUxFUyAgICAgICAgICAgICAgICJJa29uZmlsZXIiCisjZGVmaW5lIFNUUklOR19TWU1CT0xTX0lDTyAgICAgICAgICAgICAgICAiSWtvbmVyICgqLmljbykiCisKKyNpbmNsdWRlICJYeC5yYyIKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3Byb2dtYW4vTWFrZWZpbGUuaW4gYi9wcm9ncmFtcy9wcm9nbWFuL01ha2VmaWxlLmluCmluZGV4IGY3ZWNhZWIuLmE1ZDg2ZjYgMTAwNjQ0Ci0tLSBhL3Byb2dyYW1zL3Byb2dtYW4vTWFrZWZpbGUuaW4KKysrIGIvcHJvZ3JhbXMvcHJvZ21hbi9NYWtlZmlsZS5pbgpAQCAtOCw3ICs4LDcgQEAKIERFRlMgICAgICA9IC1JJChTUkNESVIpCiBSQ0ZMQUdTICAgPSAtdzMyCiAKLUxBTkdVQUdFUyAgID0gRW4gRGUgRnIgRmkgS28gSHUgSXQgVmEKK0xBTkdVQUdFUyAgID0gRW4gRGEgRGUgRnIgRmkgS28gSHUgSXQgVmEKIExJQ0VOU0VMQU5HID0gRW4KIAogIyBJbnN0YWxsYXRpb24gaW5mb3MKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3dpbmhlbHAvQ2hhbmdlTG9nIGIvcHJvZ3JhbXMvd2luaGVscC9DaGFuZ2VMb2cKaW5kZXggNjM0ODRhZi4uMTc4MGFjYiAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvd2luaGVscC9DaGFuZ2VMb2cKKysrIGIvcHJvZ3JhbXMvd2luaGVscC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4IEBACitGcmkgSnVsIDQgMTI6MDA6MDAgMTk5NyAgSGVucmlrIE9sc2VuIDxIZW5yaWsuT2xzZW5AaWFlc3RlLmRrPgorCisJKiBbRGEucmNdIChuZXcpCisJQWRkZWQgRGFuaXNoIGxhbmd1YWdlIHN1cHBvcnQuCisKIFR1ZSBKdW4gIDMgMDc6NDc6NDIgMTk5NyAgTWFyY2VsIEJhdXIgPG1iYXVyQGcyNi5ldGh6LmNoCiAKIAkqIFtWYS5yY10gKG5ldykKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3dpbmhlbHAvRGEucmMgYi9wcm9ncmFtcy93aW5oZWxwL0RhLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYmFhNGMKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncmFtcy93aW5oZWxwL0RhLnJjCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBIZWxwIFZpZXdlcgorICoKKyAqIENvcHlyaWdodCAxOTk3IEhlbnJpayBPbHNlbgorICovCisKKy8qIFRoaXMgZmlsZSBpcyBub3QgeWV0IGNvbXBsZXRlICEhICovCisKKyNkZWZpbmUgTEFOR1VBR0VfSUQgICAgICAgICAgICAgICAgICBEYQorI2RlZmluZSBMQU5HVUFHRV9OVU1CRVIgICAgICAgICAgICAgIDYKKworLyogTWVudSAqLworCisjZGVmaW5lIE1FTlVfRklMRSAgICAgICAgICAgICAgICAgICAgIiZGaWxlciIKKyNkZWZpbmUgTUVOVV9GSUxFX09QRU4gICAgICAgICAgICAgICAixSZibi4uLiIKKyNkZWZpbmUgTUVOVV9GSUxFX1BSSU5UICAgICAgICAgICAgICAiJlVkc2tyaXYgZW1uZSIKKyNkZWZpbmUgTUVOVV9GSUxFX1BSSU5URVJfU0VUVVAgICAgICAiJkluZHN0aWwgcHJpbnRlciIKKyNkZWZpbmUgTUVOVV9GSUxFX0VYSVQgICAgICAgICAgICAgICAiJkFmc2x1dCIKKworI2RlZmluZSBNRU5VX0VESVQgICAgICAgICAgICAgICAgICAgICImUmVkaWdlciIKKyNkZWZpbmUgTUVOVV9FRElUX0NPUFlfRElBTE9HICAgICAgICAiSyZvcGllci4uLiIKKyNkZWZpbmUgTUVOVV9FRElUX0FOTk9UQVRFICAgICAgICAgICAiJkFubeZyay4uLiIKKworI2RlZmluZSBNRU5VX0JPT0tNQVJLICAgICAgICAgICAgICAgICJCb2cmbeZya2UiCisjZGVmaW5lIE1FTlVfQk9PS01BUktfREVGSU5FICAgICAgICAgIiZEZWZpbmVyLi4uIgorCisjZGVmaW5lIE1FTlVfSEVMUCAgICAgICAgICAgICAgICAgICAgIiZIauZscCIKKyNkZWZpbmUgTUVOVV9IRUxQX09OX0hFTFAgICAgICAgICAgICAiJkJydWcgYWYgSGrmbHAiCisjZGVmaW5lIE1FTlVfSEVMUF9PTl9UT1AgICAgICAgICAgICAgIkFsdGlkICb4dmVyc3QiCisjZGVmaW5lIE1FTlVfSEVMUF9JTkZPICAgICAgICAgICAgICAgIiZJbmZvLi4uIgorI2RlZmluZSBNRU5VX0hFTFBfQUJPVVRfV0lORSAgICAgICAgICJPbSAmV0lORSIKKworLyogU3RyaW5ncyAqLworCisjZGVmaW5lIFNUUklOR19XSU5FX0hFTFAgICAgICAgICAgICAgIldJTkUgSGrmbHAiCisjZGVmaW5lIFNUUklOR19FUlJPUiAgICAgICAgICAgICAgICAgIkZFSkwiCisjZGVmaW5lIFNUUklOR19XQVJOSU5HICAgICAgICAgICAgICAgIkFEVkFSU0VMIgorI2RlZmluZSBTVFJJTkdfSU5GTyAgICAgICAgICAgICAgICAgICJJbmZvcm1hdGlvbiIKKyNkZWZpbmUgU1RSSU5HX05PVF9JTVBMRU1FTlRFRCAgICAgICAiSWtrZSBpbXBsZW1lbnRlcmV0IgorI2RlZmluZSBTVFJJTkdfSExQRklMRV9FUlJPUl9zICAgICAgICJGZWpsIHZlZCBs5nNuaW5nIGFmIGZpbGVuIGAlcyciCisjZGVmaW5lIFNUUklOR19DT05URU5UUyAgICAgICAgICAgICAgIiZJbmRob2xkIgorI2RlZmluZSBTVFJJTkdfU0VBUkNIICAgICAgICAgICAgICAgICImU/hnIgorI2RlZmluZSBTVFJJTkdfQkFDSyAgICAgICAgICAgICAgICAgICImVGlsYmFnZSIKKyNkZWZpbmUgU1RSSU5HX0hJU1RPUlkgICAgICAgICAgICAgICAiJk92ZXJzaWd0IgorI2RlZmluZSBTVFJJTkdfQUxMX0ZJTEVTICAgICAgICAgICAgICJBbGxlIGZpbGVyICgqLiopIgorI2RlZmluZSBTVFJJTkdfSEVMUF9GSUxFU19ITFAgICAgICAgICJIauZscGUgZmlsZXIgKCouaGxwKSIKKworI2luY2x1ZGUgIlh4LnJjIgpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvd2luaGVscC9NYWtlZmlsZS5pbiBiL3Byb2dyYW1zL3dpbmhlbHAvTWFrZWZpbGUuaW4KaW5kZXggMGU1ZWExNi4uNzE3ZGZlMSAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvd2luaGVscC9NYWtlZmlsZS5pbgorKysgYi9wcm9ncmFtcy93aW5oZWxwL01ha2VmaWxlLmluCkBAIC03LDcgKzcsNyBAQAogQUxMX0xJQlMgID0gJChXSU5FTElCKSAkKFhfTElCUykgJChYUE1fTElCKSAkKFhMSUIpICQoTERMSUJTKQogUkNGTEFHUyAgID0gLXczMgogCi1MQU5HVUFHRVMgICA9IEVuIERlIEZyIEZpIEtvIEh1IEl0IFZhCitMQU5HVUFHRVMgICA9IEVuIERhIERlIEZyIEZpIEtvIEh1IEl0IFZhCiAKICMgSW5zdGFsbGF0aW9uIGluZm9zCiAKZGlmZiAtLWdpdCBhL3Jlc291cmNlcy9UT0RPIGIvcmVzb3VyY2VzL1RPRE8KaW5kZXggMzNmOWRjNC4uZDNhOGZkOCAxMDA2NDQKLS0tIGEvcmVzb3VyY2VzL1RPRE8KKysrIGIvcmVzb3VyY2VzL1RPRE8KQEAgLTQ1LDYgKzQ1LDcgQEAKICogSXRhbGlhbgogKiBLb3JlYW4KICogRmlubmlzaAorKiBEYW5pc2gKIC4uLnRvIGJlIGNvbnRpbnVlZC4uLi4uLgogCiBUaGFuayB5b3UuCkBAIC02NSw2ICs2Niw3IEBACiAqIEZpbm5pc2gKICogSXRhbGlhbgogKiBGcmVuY2gKKyogRGFuaXNoCiAuLi4uLgogCiBUaGFuayB5b3UuCkBAIC04Myw2ICs4NSw3IEBACiBUaGlzIGhhcyBub3cgYmVlbiBkb25lIGZvcjoKIAogKiBFbmdsaXNoCisqIERhbmlzaAogLi4uLi4KIAogTm90ZTogSSBwaWNrZWQgdGhlIElEcyBvZiB0aGUgbWVudWl0ZW1zICJhdCByYW5kb20iLiAgV2hlbiBzb21lb25lIHdhbnRzIHRvCmRpZmYgLS1naXQgYS9yZXNvdXJjZXMvc3lzcmVzX0RhLnJjIGIvcmVzb3VyY2VzL3N5c3Jlc19EYS5yYwppbmRleCBkNDNhN2U2Li41YzYwYWQ4IDEwMDY0NAotLS0gYS9yZXNvdXJjZXMvc3lzcmVzX0RhLnJjCisrKyBiL3Jlc291cmNlcy9zeXNyZXNfRGEucmMKQEAgLTE3LDE0ICsxNywxNCBAQAogewogCVBPUFVQICIiCiAJQkVHSU4KLQkJTUVOVUlURU0gIiZVbmRvIiwgRU1fVU5ETzMyCisJCU1FTlVJVEVNICImRm9ydHJ5ZCIsIEVNX1VORE8zMgogCQlNRU5VSVRFTSBTRVBBUkFUT1IKLQkJTUVOVUlURU0gIkN1JnQiLCBXTV9DVVQKLQkJTUVOVUlURU0gIiZDb3B5IiwgV01fQ09QWQotCQlNRU5VSVRFTSAiJlBhc3RlIiwgV01fUEFTVEUKLQkJTUVOVUlURU0gIiZEZWxldGUiLCBXTV9DTEVBUgorCQlNRU5VSVRFTSAiJktsaXAiLCBXTV9DVVQKKwkJTUVOVUlURU0gIksmb3BpZXIiLCBXTV9DT1BZCisJCU1FTlVJVEVNICJT5nQgJmluZCIsIFdNX1BBU1RFCisJCU1FTlVJVEVNICImU2xldCIsIFdNX0NMRUFSCiAJCU1FTlVJVEVNIFNFUEFSQVRPUgotCQlNRU5VSVRFTSAiU2VsZWN0ICZBbGwiLCBFTV9TRVRTRUwzMgorCQlNRU5VSVRFTSAiVuZsZyAmQWx0IiwgRU1fU0VUU0VMMzIKIAlFTkQKIH0KIApAQCAtMTQ3LDM2ICsxNDcsNjYgQEAKIH0KIAogCi1DSE9PU0VfRk9OVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0CitDSE9PU0VfRk9OVCBESUFMT0cgRElTQ0FSREFCTEUgIDEzLCA1NCwgMjY0LCAxNDcKIFNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCi1DQVBUSU9OICJTa3JpZnRzbml0IgorQ0FQVElPTiAiU2tyaWZ0dHlwZXIiCiBGT05UIDgsICJIZWx2IgogewotIExURVhUICJTa3JpZnRzbml0OiIsIDEwODgsIDYsIDYsIDQwLCA5Ci0gTFRFWFQgIiIsIDEwODksIDYwLCA2LCAxNTAsIDkKLSBERUZQVVNIQlVUVE9OICJPayIsIDEsIDIwNiwgNiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiQW5udWxsZXIiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorICAgIExURVhUICAgICAgICAgICAiU2tyaWZ0dHlwZSZuYXZuOiIsIDEwODgsIDYsIDYsIDQwLCA5CisgICAgQ09NQk9CT1ggICAgICAgIDExMzYgLDYsMTMsOTQsNTQsICBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfSEFTU1RSSU5HUyB8IENCU19ESVNBQkxFTk9TQ1JPTEwgfAorICAgICAgICAgICAgICAgICAgICBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QIHwgQ0JTX1NJTVBMRQorICAgIExURVhUICAgICAgICAgICAiJlR5cG9ncmFmaToiLDEwODkgLDEwOCwzLDQ0LDkKKyAgICBDT01CT0JPWCAgICAgICAgMTEzNywxMDgsMTMsNjQsNTQsIENCU19PV05FUkRSQVdGSVhFRCB8IENCU19IQVNTVFJJTkdTIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8CisgICAgICAgICAgICAgICAgICAgIFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QIHwgQ0JTX1NJTVBMRQorICAgIExURVhUICAgICAgICAgICAiJlN0+HJyZWxzZToiLDEwOTAsMTc5LDMsMzAsOQorICAgIENPTUJPQk9YICAgICAgICAxMTM4LDE3OSwxMywzMiw1NCwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0hBU1NUUklOR1MgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwKKyAgICAgICAgICAgICAgICAgICAgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AgfCBDQlNfU0lNUExFIHwgQ0JTX1NPUlQKKyAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDIxOCw2LDQwLDE0LFdTX0dST1VQCisgICAgUFVTSEJVVFRPTiAgICAgICJBbm51bGxlciIsSURDQU5DRUwsMjE4LDIzLDQwLDE0LFdTX0dST1VQCisgICAgUFVTSEJVVFRPTiAgICAgICImQW52ZW5kIiwgMTAyNiwyMTgsNDAsNDAsMTQsV1NfR1JPVVAKKyAgICBQVVNIQlVUVE9OICAgICAgIiZIauZscCIgLCAxMDM4LDIxOCw1Nyw0MCwxNCxXU19HUk9VUAorICAgIEdST1VQQk9YICAgICAgICAiRWZmZWt0ZXIiLDEwNzIsNiw3Miw4NCwzNCxXU19HUk9VUAorICAgIENIRUNLQk9YICAgICAgICAiJkdlbm5lbXN0cmVnZXQiLCAxMDQwLCAxMCw4Miw1MCwxMCwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUAorICAgIENIRUNLQk9YICAgICAgICAiJlVuZGVyc3RyZWdldCIsIDEwNDEsIDEwLDk0LDUwLDEwLCBCU19BVVRPQ0hFQ0tCT1ggCisgICAgTFRFWFQgICAgICAgICAgICImRmFydmU6IiwgMTA5MSAsNiwxMTAsMzAsOQorICAgIENPTUJPQk9YICAgICAgICAxMTM5LDYsMTIwLDg0LDEwMCxDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0hBU1NUUklOR1MgfAorICAgICAgICAgICAgICAgICAgICBDQlNfQVVUT0hTQ1JPTEwgfCAgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKKyAgICBHUk9VUEJPWCAgICAgICAgIkVrc2VtcGVsIiwxMDczLDk4LDcyLDE2MCw0OSxXU19HUk9VUAorICAgIENURVhUICAgICAgICAgICAiQWFCYll5WnoiLDEwOTMsMTA0LDgxLDE0OSwzNyxTU19OT1BSRUZJWCB8IFdTX1ZJU0lCTEUKIH0KIAogCi1DSE9PU0VfQ09MT1IgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAyNjQsIDIwMAorQ0hPT1NFX0NPTE9SIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDM2LCAyNCwgMzAwLCAyMDAKIFNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCiBDQVBUSU9OICJGYXJ2ZSIKIEZPTlQgOCwgIkhlbHYiCiB7Ci0gTFRFWFQgIiZHcnVuZGzmZ2dlbmRlIGZhcnZlcjoiLCAxMDg4LCA2LCA2LCA0MCwgOQotIExURVhUICImU2VsdnZhbGd0ZSBmYXJ2ZXI6IiwgMTA4OSwgNiwgMTI2LCA0MCwgOQotIExURVhUICImRW5zZmFydmV0IiwgMTA5MCwgMTAwLCAxNDYsIDQwLCA5Ci0gTFRFWFQgIiZJbnRlbnNpdGV0OiIsIDEwOTEsIDE1MCwgMTI2LCA0MCwgOQotIExURVhUICImRmFydmVt5nRuaW5nOiIsIDEwOTIsIDE1MCwgMTQ2LCA0MCwgOQotIExURVhUICImTHlzc3R5cmtlOiIsIDEwOTMsIDE1MCwgMTY2LCA0MCwgOQotIExURVhUICImUvhkOiIsIDEwOTQsIDE1MCwgMTI2LCA0MCwgOQotIExURVhUICImR3L4bjoiLCAxMDk1LCAxNTAsIDE0NiwgNDAsIDkKLSBMVEVYVCAiJkJs5ToiLCAxMDk2LCAxNTAsIDE2NiwgNDAsIDkKLSBERUZQVVNIQlVUVE9OICJPayIsIDEsIDYsIDE4MiwgNTYsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiJlRpbGb4aiB0aWwgc2VsdnZhbGd0ZSBmYXJ2ZXIiLCAxMDI0LCAxMjAsIDE4MiwgMTAwLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiJlNsZXQgc2VsdnZhbGd0ZSBmYXJ2ZXIiLCAxMDI1LCA2LCAxNjQsIDU2LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiQW5udWxsZXIiLCAyLCA3NiwgMTgyLCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICImR3J1bmRs5mdnZW5kZSBmYXJ2ZXI6IiwgICAxMDg4LCA0LCAgICA0LCAgMTQwLCAxMAorIExURVhUICImU2VsdnZhbGd0ZSBmYXJ2ZXI6IiwgIDEwODksIDQsICAgMTA2LCAxNDAsIDEwCisgTFRFWFQgIiZFbnNmYXJ2ZXQiLCAgMTA5MCwgMTUwLCAxNTEsICA0OCwgMTAKKyBMVEVYVCAgICImUvhkOiIsIDcyNiAvKjEwOTQqLywyNDksMTI2LDI0LDEwCisgRURJVFRFWFQgNzA2LCAyNzUsMTI0LDE4LDEyLCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAgICImR3L4bjoiLDcyNy8qMTA5NSovLDI0OSwxNDAsMjQsMTAKKyBFRElUVEVYVCA3MDcsIDI3NSwxMzgsMTgsMTIsIFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIExURVhUICAgIiZCbOU6Iiw3MjggLyoxMDk2Ki8sMjQ5LDE1NCwyNCwxMAorIEVESVRURVhUIDcwOCwgMjc1LDE1MiwxOCwxMiwgV1NfQk9SREVSIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgTFRFWFQgICImSW50ZW5zaXRldDoiICw3MjMgLyoxMDkxKi8sMjAyLDEyNiwyMiwxMAorIEVESVRURVhUIDcwMywgMjI2LDEyNCwxOCwxMiwgV1NfQk9SREVSIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgTFRFWFQgICImRmFydmVt5nRuaW5nOiIgLDcyNCAvKjEwOTIqLywyMDIsMTQwLDIyLDEwCisgRURJVFRFWFQgNzA0LCAyMjYsMTM4LDE4LDEyLCBXU19CT1JERVIgfCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBMVEVYVCAgIiZMeXNzdHlya2U6IiAsNzI1IC8qMTA5MyovLDIwMiwxNTQsMjIsMTAKKyBFRElUVEVYVCA3MDUsIDIyNiwxNTIsMTgsMTIsIFdTX0JPUkRFUiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIENPTlRST0wgIiIgLDcyMCwiU1RBVElDIixTU19TSU1QTEV8V1NfVEFCU1RPUHxXU19HUk9VUCw0LDE0LDE0MCw4NgorIENPTlRST0wgIiIgLDcyMSwiU1RBVElDIixTU19TSU1QTEV8V1NfVEFCU1RPUHxXU19HUk9VUCw0LDExNiwxNDAsMjgKKyBDT05UUk9MICIiICw3MTAsIlNUQVRJQyIsV1NfQk9SREVSfFNTX1NJTVBMRXxXU19UQUJTVE9QfFdTX0dST1VQLCAxNTIsNCwxMTgsMTE2CisgQ09OVFJPTCAiIiAsNzAyLCJTVEFUSUMiLFNTX1NJTVBMRXxXU19UQUJTVE9QfFdTX0dST1VQLCAyNzgsNCw4LDExNgorIENPTlRST0wgIiIgLDcwOSwiU1RBVElDIixTU19TSU1QTEV8V1NfVEFCU1RPUHxXU19HUk9VUCwgMTUyLDEyNCw0MCwyNgorIERFRlBVU0hCVVRUT04gIk9rIiwgIDEsICA0LCAxNjYsIDQ0LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIkFubnVsbGVyIiwgMiwgNTIsIDE2NiwgNDQsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AKKyBQVVNIQlVUVE9OICJIauZscCIsIDEwMzgsMTAwLDE2NiwgNDQsIDE0CisgUFVTSEJVVFRPTiAiJlRpbGb4aiB0aWwgc2VsdnZhbGd0ZSBmYXJ2ZXIiLCAgICA3MTIvKjEwMjQqLywgMTUyLCAxNjYsIDE0MiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorIFBVU0hCVVRUT04gIiZEZWZpbmVyIHNlbHZ2YWxndCBmYXJ2ZSA+PiIsIDcxOS8qMTAyNSovLCAgIDQsIDE1MCwgMTQyLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCisgUFVTSEJVVFRPTiAgIiZpIiw3MTMsMzAwLDIwMCw0LDE0ICAgLyoganVzdCBhIGR1bW15OiAgJ2knIGlzICBsaWtlICAmaSAgaW4gInNvbCZpZCIgICovCiB9CiAKIApkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQtc3BlYy50eHQgYi90b29scy9idWlsZC1zcGVjLnR4dAppbmRleCA0Yzk4MGE1Li42NDkxN2YyIDEwMDY0NAotLS0gYS90b29scy9idWlsZC1zcGVjLnR4dAorKysgYi90b29scy9idWlsZC1zcGVjLnR4dApAQCAtNjIsMTEgKzYyLDEyIEBACiAtICJ3b3JkIgogLSAibG9uZyIKIC0gInB0ciIgKGxpbmVhciBwb2ludGVyKQotLSAic3RyIiAobGluZWFyIHBvaW50ZXIgdG8gYSBzdHJpbmcpCistICJzdHIiIChsaW5lYXIgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcpCiAtICJzX2J5dGUiIChzaWduZWQgYnl0ZSkKIC0gInNfd29yZCIgKHNpZ25lZCB3b3JkKQogLSAic19sb25nIiAoc2lnbmVkIGxvbmcpCiAtICJzZWdwdHIiIChzZWdtZW50ZWQgcG9pbnRlcikuCistICJzZWdzdHIiIChzZWdtZW50ZWQgcG9pbnRlciB0byBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcpCiAKIE9ubHkgInB0ciIsICJzdHIiIGFuZCAibG9uZyIgYXJlIHZhbGlkIGZvciBXaW4zMiBmdW5jdGlvbnMuCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkLmMgYi90b29scy9idWlsZC5jCmluZGV4IGMzODc4NWYuLjZkMDI4OTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2J1aWxkLmMKKysrIGIvdG9vbHMvYnVpbGQuYwpAQCAtMzcyLDYgKzM3Miw4IEBACiAgICAgICAgICAgICBvZHAtPnUuZnVuYy5hcmdfdHlwZXNbaV0gPSAncCc7CiAJZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgInN0ciIpKQogCSAgICBvZHAtPnUuZnVuYy5hcmdfdHlwZXNbaV0gPSAndCc7CisJZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgInNlZ3N0ciIpKQorCSAgICBvZHAtPnUuZnVuYy5hcmdfdHlwZXNbaV0gPSAnVCc7CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlZDogVW5rbm93biB2YXJpYWJsZSB0eXBlICclcydcbiIsIExpbmUsIHRva2VuKTsKQEAgLTE0MzcsMTQgKzE0MzksMTUgQEAKICAgICAgICAgICAgIHBvczE2ICs9IDI7CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlICdsJzogIC8qIGxvbmcgKi8KKyAgICAgICAgY2FzZSAnbCc6ICAvKiBsb25nIG9yIHNlZ21lbnRlZCBwb2ludGVyICovCisgICAgICAgIGNhc2UgJ1QnOiAgLyogc2VnbWVudGVkIHBvaW50ZXIgdG8gbnVsbC10ZXJtaW5hdGVkIHN0cmluZyAqLwogICAgICAgICAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92bCAlZCglJWVicCksJSVlYXhcbiIsIHBvczE2ICk7CiAgICAgICAgICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3ZsICUlZWF4LCVkKCUlZWJ4KVxuIiwgcG9zMzIgKTsKICAgICAgICAgICAgIHBvczE2ICs9IDQ7CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlICdwJzogIC8qIHB0ciAqLwotICAgICAgICBjYXNlICd0JzogIC8qIHN0cmluZyAqLworICAgICAgICBjYXNlICdwJzogIC8qIGxpbmVhciBwb2ludGVyICovCisgICAgICAgIGNhc2UgJ3QnOiAgLyogbGluZWFyIHBvaW50ZXIgdG8gbnVsbC10ZXJtaW5hdGVkIHN0cmluZyAqLwogICAgICAgICAgICAgLyogR2V0IHRoZSBzZWxlY3RvciAqLwogICAgICAgICAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92dyAlZCglJWVicCksJSVheFxuIiwgcG9zMTYgKyAyICk7CiAgICAgICAgICAgICAvKiBHZXQgdGhlIHNlbGVjdG9yIGJhc2UgKi8KQEAgLTE1MDksNyArMTUxMiw3IEBACiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0cHVzaGZsXG4iICk7CiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0cG9wbCAlZCglJWVieClcbiIsCiAgICAgICAgICAgICAgQ09OVEVYVE9GRlNFVChFRmxhZ3MpIC0gc2l6ZW9mKENPTlRFWFQpICk7Ci0gICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92endsIDAoJSVlYnApLCUlZWF4XG4iICk7IC8qIEdldCAlYnAgZnJvbSBzdGFjayAqLworICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdmwgLTE2KCUlZWJwKSwlJWVheFxuIiApOyAvKiBHZXQgJWVicCBmcm9tIHN0YWNrICovCiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92bCAlJWVheCwlZCglJWVieClcbiIsCiAgICAgICAgICAgICAgQ09OVEVYVE9GRlNFVChFYnApIC0gc2l6ZW9mKENPTlRFWFQpICk7CiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92endsIDIoJSVlYnApLCUlZWF4XG4iICk7IC8qIEdldCAlaXAgZnJvbSBzdGFjayAqLwpAQCAtMTU0NSw2ICsxNTQ4LDEwIEBACiAKICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3ZsICIgUFJFRklYICJJRjE2MzJfU2F2ZWQzMl9lc3AsJSVlYnhcbiIgKTsKIAorICAgIC8qIFJlbW92ZSBldmVyeXRoaW5nIHVwIHRvIHRoZSByZXR1cm4gYWRkcmVzcyBmcm9tIHRoZSAxNi1iaXQgc3RhY2sgKi8KKworICAgIGZwcmludGYoIG91dGZpbGUsICJcdGFkZGwgJDE4LCUlZXNwXG4iICk7CisKICAgICAvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgKi8KIAogICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdmwgJWQoJSVlYngpLCUlZWN4XG4iLApAQCAtMTU1NSw4ICsxNTYyLDggQEAKICAgICAgICAgICAgICBDT05URVhUT0ZGU0VUKEVzaSkgLSBzaXplb2YoQ09OVEVYVCkgKTsKICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3ZsICVkKCUlZWJ4KSwlJWVkaVxuIiwKICAgICAgICAgICAgICBDT05URVhUT0ZGU0VUKEVkaSkgLSBzaXplb2YoQ09OVEVYVCkgKTsKLSAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRwb3BsICUlZWF4XG4iICk7IC8qIFJlbW92ZSBvbGQgZHMgYW5kIGlwIGZyb20gc3RhY2sgKi8KLSAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRwb3BsICUlZWF4XG4iICk7IC8qIFJlbW92ZSBvbGQgY3MgYW5kIGVzIGZyb20gc3RhY2sgKi8KKyAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3ZsICVkKCUlZWJ4KSwlJWVicFxuIiwKKyAgICAgICAgICAgICBDT05URVhUT0ZGU0VUKEVicCkgLSBzaXplb2YoQ09OVEVYVCkgKTsKICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRwdXNodyAlZCglJWVieClcbiIsICAvKiBQdXNoIG5ldyBkcyAqLwogICAgICAgICAgICAgIENPTlRFWFRPRkZTRVQoU2VnRHMpIC0gc2l6ZW9mKENPTlRFWFQpICk7CiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0cHVzaHcgJWQoJSVlYngpXG4iLCAgLyogUHVzaCBuZXcgZXMgKi8KQEAgLTE1NjgsNiArMTU3NSw4IEBACiAgICAgICAgICAgICAgQ09OVEVYVE9GRlNFVChFYXgpIC0gc2l6ZW9mKENPTlRFWFQpICk7CiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92bCAlZCglJWVieCksJSVlYnhcbiIsCiAgICAgICAgICAgICAgQ09OVEVYVE9GRlNFVChFYngpIC0gc2l6ZW9mKENPTlRFWFQpICk7CisgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0cG9wdyAlJWVzXG4iICk7ICAvKiBTZXQgZXMgKi8KKyAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRwb3B3ICUlZHNcbiIgKTsgIC8qIFNldCBkcyAqLwogfQogCiAKQEAgLTE1NzcsNyArMTU4Niw4IEBACiAgKiBCdWlsZCBhIDE2LWJpdC10by1XaW5lIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGUgc3ludGF4IG9mIHRoZSBmdW5jdGlvbgogICogcHJvZmlsZSBpczogdHlwZV94eHh4eCwgd2hlcmUgJ3R5cGUnIGlzIG9uZSBvZiAncmVncycsICd3b3JkJyBvcgogICogJ2xvbmcnIGFuZCBlYWNoICd4JyBpcyBhbiBhcmd1bWVudCAoJ3cnPXdvcmQsICdzJz1zaWduZWQgd29yZCwKLSAqICdsJz1sb25nLCAncCc9cG9pbnRlciwgJ3QnPXN0cmluZykuCisgKiAnbCc9bG9uZywgJ3AnPWxpbmVhciBwb2ludGVyLCAndCc9bGluZWFyIHBvaW50ZXIgdG8gbnVsbC10ZXJtaW5hdGVkIHN0cmluZywKKyAqICdUJz1zZWdtZW50ZWQgcG9pbnRlciB0byBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nKS4KICAqIEZvciByZWdpc3RlciBmdW5jdGlvbnMsIHRoZSBhcmd1bWVudHMgYXJlIGlnbm9yZWQsIGJ1dCB0aGV5IGFyZSBzdGlsbAogICogcmVtb3ZlZCBmcm9tIHRoZSBzdGFjayB1cG9uIHJldHVybi4KICAqCkBAIC0xNTg3LDEyICsxNTk3LDE2IEBACiAgKiAoc3ArMTYpIHdvcmQgICBjcwogICogKHNwKzE0KSB3b3JkICAgaXAKICAqIChzcCsxMikgd29yZCAgIGJwCi0gKiAoc3ArOCkgIGxvbmcgICAzMi1iaXQgZW50cnkgcG9pbnQKKyAqIChzcCs4KSAgbG9uZyAgIDMyLWJpdCBlbnRyeSBwb2ludCAodXNlZCB0byBzdG9yZSBlZHgpCiAgKiAoc3ArNikgIHdvcmQgICBoaWdoIHdvcmQgb2YgY3MgKGFsd2F5cyAwLCB1c2VkIHRvIHN0b3JlIGVzKQogICogKHNwKzQpICB3b3JkICAgbG93IHdvcmQgb2YgY3Mgb2YgMTYtYml0IGVudHJ5IHBvaW50CiAgKiAoc3ArMikgIHdvcmQgICBoaWdoIHdvcmQgb2YgaXAgKGFsd2F5cyAwLCB1c2VkIHRvIHN0b3JlIGRzKQogICogKHNwKSAgICB3b3JkICAgbG93IHdvcmQgb2YgaXAgb2YgMTYtYml0IGVudHJ5IHBvaW50CiAgKgorICogQWRkZWQgb24gdGhlIHN0YWNrOgorICogKHNwLTQpICBsb25nICAgZWJwCisgKiAoc3AtNikgIHdvcmQgICBzYXZlZCBwcmV2aW91cyBzcAorICogKHNwLTgpICB3b3JkICAgc2F2ZWQgcHJldmlvdXMgc3MKICAqLwogc3RhdGljIHZvaWQgQnVpbGRDYWxsRnJvbTE2RnVuYyggRklMRSAqb3V0ZmlsZSwgY2hhciAqcHJvZmlsZSApCiB7CkBAIC0xNjIzLDggKzE2MzcsOSBAQAogCiAgICAgLyogU2V0dXAgYnAgdG8gcG9pbnQgdG8gaXRzIGNvcHkgb24gdGhlIHN0YWNrICovCiAKKyAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRwdXNobCAlJWVicFxuIiApOyAgLyogU2F2ZSB0aGUgZnVsbCAzMi1iaXQgZWJwICovCiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92endsICUlc3AsJSVlYnBcbiIgKTsKLSAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRhZGR3ICQxMiwlJWJwXG4iICk7CisgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0YWRkdyAkMTYsJSVicFxuIiApOwogCiAgICAgLyogU2F2ZSAxNi1iaXQgZHMgYW5kIGVzICovCiAKQEAgLTE2NDQsMTMgKzE2NTksMTIgQEAKIAogICAgIC8qIFNhdmUgdGhlIDE2LWJpdCBzdGFjayAqLwogCi0gICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0cHVzaHcgIiBQUkVGSVggIklGMTYzMl9TYXZlZDE2X3NwXG4iICk7Ci0gICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0cHVzaHcgIiBQUkVGSVggIklGMTYzMl9TYXZlZDE2X3NzXG4iICk7CisgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0cHVzaGwgIiBQUkVGSVggIklGMTYzMl9TYXZlZDE2X3NzX3NwXG4iICk7CiAjaWZkZWYgX19zdnI0X18KICAgICBmcHJpbnRmKCBvdXRmaWxlLCJcdGRhdGExNlxuIik7CiAjZW5kaWYKLSAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3Z3ICUlc3MsIiBQUkVGSVggIklGMTYzMl9TYXZlZDE2X3NzXG4iICk7Ci0gICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92dyAlJXNwLCIgUFJFRklYICJJRjE2MzJfU2F2ZWQxNl9zcFxuIiApOworICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdncgJSVzcywiIFBSRUZJWCAiSUYxNjMyX1NhdmVkMTZfc3Nfc3ArMlxuIiApOworICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdncgJSVzcCwiIFBSRUZJWCAiSUYxNjMyX1NhdmVkMTZfc3Nfc3BcbiIgKTsKIAogICAgIC8qIFRyYW5zZmVyIHRoZSBhcmd1bWVudHMgKi8KIApAQCAtMTcxMywyMiArMTcyNywxMiBAQAogI2lmZGVmIF9fc3ZyNF9fCiAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0ZGF0YTE2XG4iKTsKICNlbmRpZgotICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdncgIiBQUkVGSVggIklGMTYzMl9TYXZlZDE2X3NzLCUlc3NcbiIgKTsKLSAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3Z3ICIgUFJFRklYICJJRjE2MzJfU2F2ZWQxNl9zcCwlJXNwXG4iICk7Ci0jaWZkZWYgX19zdnI0X18KLSAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRkYXRhMTZcbiIpOwotI2VuZGlmCi0gICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0cG9wdyAiIFBSRUZJWCAiSUYxNjMyX1NhdmVkMTZfc3NcbiIgKTsKLSNpZmRlZiBfX3N2cjRfXwotICAgIGZwcmludGYoIG91dGZpbGUsICJcdGRhdGExNlxuIik7Ci0jZW5kaWYKLSAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRwb3B3ICIgUFJFRklYICJJRjE2MzJfU2F2ZWQxNl9zcFxuIiApOworICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdncgIiBQUkVGSVggIklGMTYzMl9TYXZlZDE2X3NzX3NwKzIsJSVzc1xuIiApOworICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdncgIiBQUkVGSVggIklGMTYzMl9TYXZlZDE2X3NzX3NwLCUlc3BcbiIgKTsKKyAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRwb3BsICIgUFJFRklYICJJRjE2MzJfU2F2ZWQxNl9zc19zcFxuIiApOwogCiAgICAgaWYgKHJlZ19mdW5jKQogICAgIHsKLSAgICAgICAgLyogUmVzdG9yZSByZWdpc3RlcnMgZnJvbSB0aGUgY29udGV4dCBzdHJ1Y3R1cmUgKi8KLSAgICAgICAgUmVzdG9yZUNvbnRleHQxNiggb3V0ZmlsZSApOwotICAgICAgICAKICAgICAgICAgLyogQ2FsYyB0aGUgYXJndW1lbnRzIHNpemUgKi8KICAgICAgICAgd2hpbGUgKCphcmdzKQogICAgICAgICB7CkBAIC0xNzQxLDYgKzE3NDUsNyBAQAogICAgICAgICAgICAgY2FzZSAncCc6CiAgICAgICAgICAgICBjYXNlICd0JzoKICAgICAgICAgICAgIGNhc2UgJ2wnOgorCSAgICBjYXNlICdUJzoKICAgICAgICAgICAgICAgICBhcmdzaXplICs9IDQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTc0OSwzOCArMTc1NCwzNSBAQAogICAgICAgICAgICAgYXJncysrOwogICAgICAgICB9CiAKLSAgICAgICAgLyogUmVzdG9yZSBkcyBhbmQgZXMgKi8KLSAgICAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0cG9wdyAlJWVzXG4iICk7Ci0gICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdHBvcHcgJSVkc1xuIiApOwotCi0gICAgICAgIC8qIFJlbW92ZSB0aGUgZW50cnkgcG9pbnQgZnJvbSB0aGUgc3RhY2sgKi8KLSAgICAgICAgLyogKHdlIGRvbid0IHVzZSBhZGQgdG8gYXZvaWQgbW9kaWZ5aW5nIHRoZSBjYXJyeSBmbGFnKSAqLwotICAgICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRwb3BsICUlZWJwXG4iICk7CisgICAgICAgIC8qIFJlc3RvcmUgcmVnaXN0ZXJzIGZyb20gdGhlIGNvbnRleHQgc3RydWN0dXJlICovCisgICAgICAgIFJlc3RvcmVDb250ZXh0MTYoIG91dGZpbGUgKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKKyAgICAgICAgLyogUmVzdG9yZSBoaWdoIDE2IGJpdHMgb2YgZWJwICovCisgICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdHBvcGwgJSVlYnBcbiIgKTsKKwogICAgICAgICAvKiBSZXN0b3JlIGRzIGFuZCBlcyAqLwotICAgICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRwb3B3ICUlYnBcbiIgKTsgICAgICAgLyogUmVtb3ZlIGlwICovCi0gICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdHBvcGwgJSVlYnBcbiIgKTsgICAgICAvKiBSZW1vdmUgZHMgYW5kIGNzICovCi0gICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdncgJSVicCwlJWRzXG4iICk7ICAvKiBSZXN0b3JlIGRzICovCisgICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdGluY2wgJSVlc3BcbiIgKTsgICAgICAvKiBSZW1vdmUgaXAgKi8KKyAgICAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0aW5jbCAlJWVzcFxuIiApOworICAgICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRwb3BsICUlZWR4XG4iICk7ICAgICAgLyogUmVtb3ZlIGNzIGFuZCBkcyAqLworICAgICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3Z3ICUlZHgsJSVkc1xuIiApOyAgLyogYW5kIHJlc3RvcmUgZHMgKi8KICAgICAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0cG9wdyAlJWVzXG4iICk7ICAgICAgIC8qIFJlc3RvcmUgZXMgKi8KIAogICAgICAgICBpZiAoc2hvcnRfcmV0KSBmcHJpbnRmKCBvdXRmaWxlLCAiXHRwb3BsICUlZWR4XG4iICk7ICAvKiBSZXN0b3JlIGVkeCAqLwogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIEdldCB0aGUgcmV0dXJuIHZhbHVlIGludG8gZHg6YXggKi8KLSAgICAgICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdHB1c2hsICUlZWF4XG4iICk7Ci0gICAgICAgICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRwb3B3ICUlYXhcbiIgKTsKLSAgICAgICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdHBvcHcgJSVkeFxuIiApOworICAgICAgICAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92bCAlJWVheCwlJWVkeFxuIiApOworICAgICAgICAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0c2hybCAkMTYsJSVlZHhcbiIgKTsKICAgICAgICAgICAgIC8qIFJlbW92ZSBBUEkgZW50cnkgcG9pbnQgKi8KICAgICAgICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdGFkZGwgJDQsJSVlc3BcbiIgKTsKICAgICAgICAgfQorCisgICAgICAgIC8qIFJlc3RvcmUgbG93IDE2IGJpdHMgb2YgZWJwICovCisgICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdHBvcHcgJSVicFxuIiApOwogICAgIH0KIAotICAgIC8qIFJlc3RvcmUgYnAgKi8KLQotICAgIGZwcmludGYoIG91dGZpbGUsICJcdHBvcHcgJSVicFxuIiApOwotCiAgICAgLyogUmVtb3ZlIHRoZSBhcmd1bWVudHMgYW5kIHJldHVybiAqLwogCiAgICAgaWYgKGFyZ3NpemUpCkBAIC0xODgyLDggKzE4ODQsOCBAQAogI2lmZGVmIF9fc3ZyNF9fCiAgICAgZnByaW50Ziggb3V0ZmlsZSwiXHRkYXRhMTZcbiIpOwogI2VuZGlmCi0gICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0bW92dyAiIFBSRUZJWCAiSUYxNjMyX1NhdmVkMTZfc3MsJSVzc1xuIiApOwotICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdncgIiBQUkVGSVggIklGMTYzMl9TYXZlZDE2X3NwLCUlc3BcbiIgKTsKKyAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3Z3ICIgUFJFRklYICJJRjE2MzJfU2F2ZWQxNl9zc19zcCsyLCUlc3NcbiIgKTsKKyAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3Z3ICIgUFJFRklYICJJRjE2MzJfU2F2ZWQxNl9zc19zcCwlJXNwXG4iICk7CiAKICAgICAvKiBUcmFuc2ZlciB0aGUgYXJndW1lbnRzICovCiAKQEAgLTE5MDYsNyArMTkwOCw3IEBACiAKICAgICAgICAgLyogTWFrZSAlYnAgcG9pbnQgdG8gdGhlIHByZXZpb3VzIHN0YWNrZnJhbWUgKGJ1aWx0IGJ5IENhbGxGcm9tMTYpICovCiAgICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdG1vdnp3bCAlJXNwLCUlZWJwXG4iICk7Ci0gICAgICAgIGZwcmludGYoIG91dGZpbGUsICJcdGFkZHcgJDE2LCUlYnBcbiIgKTsKKyAgICAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0YWRkdyAkMjAsJSVicFxuIiApOwogCiAgICAgICAgIHdoaWxlICgqYXJncykKICAgICAgICAgewpAQCAtMTkxOCw2ICsxOTIwLDkgQEAKICAgICAgICAgICAgIGNhc2UgJ2wnOiAvKiBsb25nICovCiAgICAgICAgICAgICAgICAgZnByaW50Ziggb3V0ZmlsZSwgIlx0cHVzaGwgJWQoJSVlYngpXG4iLCBwb3MgKTsKICAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJZnByaW50Ziggc3RkZXJyLCAiVW5leHBlY3RlZCBjYXNlICclYycgaW4gQnVpbGRDYWxsVG8xNkZ1bmNcbiIsCisJCQlhcmdzWy0xXSApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcG9zICs9IDQ7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3dpbjMyL2ZpbGUuYyBiL3dpbjMyL2ZpbGUuYwppbmRleCAzYmI0ZmVkLi4xNzBjOTFhIDEwMDY0NAotLS0gYS93aW4zMi9maWxlLmMKKysrIGIvd2luMzIvZmlsZS5jCkBAIC0yNDksMjYgKzI0OSwzIEBACiB9CiAKIAotQk9PTDMyCi1Mb2NrRmlsZSgKLQlIRklMRTMyIGhGaWxlLERXT1JEIGR3RmlsZU9mZnNldExvdyxEV09SRCBkd0ZpbGVPZmZzZXRIaWdoLAotCURXT1JEIG5OdW1iZXJPZkJ5dGVzVG9Mb2NrTG93LERXT1JEIG5OdW1iZXJPZkJ5dGVzVG9Mb2NrSGlnaCApCi17Ci0JZnByaW50ZihzdGRuaW1wLCJMb2NrRmlsZSglZCwweCUwOGx4JTA4bHgsMHglMDhseCUwOGx4KSxzdHViIVxuIiwKLQkJaEZpbGUsZHdGaWxlT2Zmc2V0SGlnaCxkd0ZpbGVPZmZzZXRMb3csCi0JCW5OdW1iZXJPZkJ5dGVzVG9Mb2NrSGlnaCxuTnVtYmVyT2ZCeXRlc1RvTG9ja0xvdwotCSk7Ci0JcmV0dXJuIFRSVUU7Ci19Ci0KLUJPT0wzMgotVW5sb2NrRmlsZSgKLQlIRklMRTMyIGhGaWxlLERXT1JEIGR3RmlsZU9mZnNldExvdyxEV09SRCBkd0ZpbGVPZmZzZXRIaWdoLAotCURXT1JEIG5OdW1iZXJPZkJ5dGVzVG9VbmxvY2tMb3csRFdPUkQgbk51bWJlck9mQnl0ZXNUb1VubG9ja0hpZ2ggKQotewotCWZwcmludGYoc3RkbmltcCwiVW5sb2NrRmlsZSglZCwweCUwOGx4JTA4bHgsMHglMDhseCUwOGx4KSxzdHViIVxuIiwKLQkJaEZpbGUsZHdGaWxlT2Zmc2V0SGlnaCxkd0ZpbGVPZmZzZXRMb3csCi0JCW5OdW1iZXJPZkJ5dGVzVG9VbmxvY2tIaWdoLG5OdW1iZXJPZkJ5dGVzVG9VbmxvY2tMb3cKLQkpOwotCXJldHVybiBUUlVFOwotfQpkaWZmIC0tZ2l0IGEvd2luZG93cy9kY2UuYyBiL3dpbmRvd3MvZGNlLmMKaW5kZXggOTI2MjJiMS4uNWU5MjVmNiAxMDA2NDQKLS0tIGEvd2luZG93cy9kY2UuYworKysgYi93aW5kb3dzL2RjZS5jCkBAIC0xMTgsNyArMTE4LDcgQEAKICAqIEl0IGlzIGNhbGxlZCBmcm9tIFNldFdpbmRvd1BvcyAtIHdlIGhhdmUgdG8gaW52YWxpZGF0ZSBhbGwgYnVzeQogICogRENFJ3MgZm9yIHdpbmRvd3Mgd2hvc2UgY2xpZW50IHJlY3QgaW50ZXJzZWN0cyB3aXRoIHVwZGF0ZSByZWN0YW5nbGUgCiAgKi8KLUJPT0wzMiBEQ0VfSW52YWxpZGF0ZURDRShXTkQqIHduZFNjb3BlLCBSRUNUMTYqIHBSZWN0VXBkYXRlKQorQk9PTDMyIERDRV9JbnZhbGlkYXRlRENFKFdORCogd25kU2NvcGUsIFJFQ1QzMiogcFJlY3RVcGRhdGUpCiB7CiAgICAgQk9PTDMyIGJSZXQgPSBGQUxTRTsKICAgICBEQ0UgKmRjZTsKQEAgLTE0NywxMyArMTQ3LDE0IEBACiAJZm9yKCA7IHduZCA7IHduZCA9IHduZC0+cGFyZW50ICkKIAkgICAgaWYoIHduZCA9PSB3bmRTY29wZSApCiAJICAgICAgeyAKLQkgICAgICAgIFJFQ1QxNiB3bmRSZWN0ID0gd25kQ3VycmVudC0+cmVjdFdpbmRvdzsKKwkgICAgICAgIFJFQ1QzMiB3bmRSZWN0ID0gd25kQ3VycmVudC0+cmVjdFdpbmRvdzsKIAogCSAgICAgICAgZHByaW50Zl9kYyhzdGRkZWIsIlx0Z290IGh3bmQgJTA0eFxuIiwgd25kQ3VycmVudC0+aHduZFNlbGYpOwogICAKLQkgICAgICAgIE1hcFdpbmRvd1BvaW50czE2KHduZEN1cnJlbnQtPnBhcmVudC0+aHduZFNlbGYsIHduZFNjb3BlLT5od25kU2VsZiwKLQkJCSAJCQkJICAgICAgIChMUFBPSU5UMTYpJnduZFJlY3QsIDIpOwotCSAgICAgICAgaWYoIEludGVyc2VjdFJlY3QxNigmd25kUmVjdCwmd25kUmVjdCxwUmVjdFVwZGF0ZSkgKQorCSAgICAgICAgTWFwV2luZG93UG9pbnRzMzIoIHduZEN1cnJlbnQtPnBhcmVudC0+aHduZFNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHduZFNjb3BlLT5od25kU2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExQUE9JTlQzMikmd25kUmVjdCwgMiApOworCSAgICAgICAgaWYgKEludGVyc2VjdFJlY3QzMiggJnduZFJlY3QsICZ3bmRSZWN0LCBwUmVjdFVwZGF0ZSApKQogCSAgICAgICAgeyAgICAKIAkJICAgU2V0SG9va0ZsYWdzKGRjZS0+aERDLCBEQ0hGX0lOVkFMSURBVEVWSVNSR04pOwogCQkgICBiUmV0ID0gVFJVRTsKQEAgLTE4OCw3ICsxODksNyBAQAogICogd2luZG93IGFyZWEgY2xpcHBlZCBieSB0aGUgY2xpZW50IGFyZWEgb2YgYWxsIGFuY2VzdG9ycy4KICAqIFJldHVybiBGQUxTRSBpZiB0aGUgdmlzaWJsZSByZWdpb24gaXMgZW1wdHkuCiAgKi8KLXN0YXRpYyBCT09MMzIgRENFX0dldFZpc1JlY3QoIFdORCAqd25kUHRyLCBCT09MMzIgY2xpZW50QXJlYSwgUkVDVDE2ICpscHJlY3QgKQorc3RhdGljIEJPT0wzMiBEQ0VfR2V0VmlzUmVjdCggV05EICp3bmRQdHIsIEJPT0wzMiBjbGllbnRBcmVhLCBSRUNUMzIgKmxwcmVjdCApCiB7CiAgICAgaW50IHhvZmZzZXQsIHlvZmZzZXQ7CiAKQEAgLTE5OCw3ICsxOTksNyBAQAogCiAgICAgaWYgKCEod25kUHRyLT5kd1N0eWxlICYgV1NfVklTSUJMRSkgfHwgKHduZFB0ci0+ZmxhZ3MgJiBXSU5fTk9fUkVEUkFXKSkKICAgICB7Ci0gICAgICAgIFNldFJlY3RFbXB0eTE2KCBscHJlY3QgKTsgIC8qIENsaXAgZXZlcnl0aGluZyAqLworICAgICAgICBTZXRSZWN0RW1wdHkzMiggbHByZWN0ICk7ICAvKiBDbGlwIGV2ZXJ5dGhpbmcgKi8KICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIApAQCAtMjA5LDIwICsyMTAsMjAgQEAKICAgICAgICAgICAgICh3bmRQdHItPmZsYWdzICYgV0lOX05PX1JFRFJBVykgfHwKICAgICAgICAgICAgICh3bmRQdHItPmR3U3R5bGUgJiBXU19JQ09OSUMpKQogICAgICAgICB7Ci0gICAgICAgICAgICBTZXRSZWN0RW1wdHkxNiggbHByZWN0ICk7ICAvKiBDbGlwIGV2ZXJ5dGhpbmcgKi8KKyAgICAgICAgICAgIFNldFJlY3RFbXB0eTMyKCBscHJlY3QgKTsgIC8qIENsaXAgZXZlcnl0aGluZyAqLwogICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAJeG9mZnNldCArPSB3bmRQdHItPnJlY3RDbGllbnQubGVmdDsKIAl5b2Zmc2V0ICs9IHduZFB0ci0+cmVjdENsaWVudC50b3A7Ci0JT2Zmc2V0UmVjdDE2KCBscHJlY3QsIHduZFB0ci0+cmVjdENsaWVudC5sZWZ0LAorCU9mZnNldFJlY3QzMiggbHByZWN0LCB3bmRQdHItPnJlY3RDbGllbnQubGVmdCwKICAgICAgICAgICAgICAgICAgICAgICB3bmRQdHItPnJlY3RDbGllbnQudG9wICk7CiAKIAkgIC8qIFdhcm5pbmchISB3ZSBhc3N1bWUgdGhhdCBJbnRlcnNlY3RSZWN0KCkgaGFuZGxlcyB0aGUgY2FzZSAqLwogCSAgLyogd2hlcmUgdGhlIGRlc3RpbmF0aW9uIGlzIHRoZSBzYW1lIGFzIG9uZSBvZiB0aGUgc291cmNlcy4gICovCi0JaWYgKCFJbnRlcnNlY3RSZWN0MTYoIGxwcmVjdCwgbHByZWN0LCAmd25kUHRyLT5yZWN0Q2xpZW50ICkpCisJaWYgKCFJbnRlcnNlY3RSZWN0MzIoIGxwcmVjdCwgbHByZWN0LCAmd25kUHRyLT5yZWN0Q2xpZW50ICkpCiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7ICAvKiBWaXNpYmxlIHJlY3RhbmdsZSBpcyBlbXB0eSAqLwogICAgIH0KLSAgICBPZmZzZXRSZWN0MTYoIGxwcmVjdCwgLXhvZmZzZXQsIC15b2Zmc2V0ICk7CisgICAgT2Zmc2V0UmVjdDMyKCBscHJlY3QsIC14b2Zmc2V0LCAteW9mZnNldCApOwogICAgIHJldHVybiBUUlVFOwogfQogCkBAIC0yNzcsNyArMjc4LDcgQEAKICAqLwogSFJHTjMyIERDRV9HZXRWaXNSZ24oIEhXTkQzMiBod25kLCBXT1JEIGZsYWdzICkKIHsKLSAgICBSRUNUMTYgcmVjdDsKKyAgICBSRUNUMzIgcmVjdDsKICAgICBIUkdOMzIgaHJnbjsKICAgICBpbnQgeG9mZnNldCwgeW9mZnNldDsKICAgICBXTkQgKnduZFB0ciA9IFdJTl9GaW5kV25kUHRyKCBod25kICk7CkBAIC0yODksNyArMjkwLDcgQEAKICAgICB7CiAgICAgICAgIHJldHVybiBDcmVhdGVSZWN0UmduMzIoIDAsIDAsIDAsIDAgKTsgIC8qIFZpc2libGUgcmVnaW9uIGlzIGVtcHR5ICovCiAgICAgfQotICAgIGlmICghKGhyZ24gPSBDcmVhdGVSZWN0UmduSW5kaXJlY3QxNiggJnJlY3QgKSkpIHJldHVybiAwOworICAgIGlmICghKGhyZ24gPSBDcmVhdGVSZWN0UmduSW5kaXJlY3QzMiggJnJlY3QgKSkpIHJldHVybiAwOwogCiAgICAgICAvKiBDbGlwIGFsbCBjaGlsZHJlbiBmcm9tIHRoZSB2aXNpYmxlIHJlZ2lvbiAqLwogCkBAIC01NDUsMTIgKzU0NiwxMiBAQAogICAgICAgaWYoIHduZFB0ci0+cGFyZW50ICYmIHduZFB0ci0+d2luZG93ICkKICAgICAgIHsKICAgICAgICAgV05EKiAJd25kID0gd25kUHRyLT5wYXJlbnQtPmNoaWxkOwotCVJFQ1QxNiAgcmVjdDsKKwlSRUNUMzIgIHJlY3Q7CiAJCiAgICAgICAgIGZvciggOyB3bmQgIT0gd25kUHRyOyB3bmQgPSB3bmQtPm5leHQgKQogICAgICAgICAgICBpZiggd25kLT5jbGFzcy0+c3R5bGUgJiBDU19TQVZFQklUUyAmJgogICAgICAgICAgICAgICAgd25kLT5kd1N0eWxlICYgV1NfVklTSUJMRSAmJgotCSAgICAgICBJbnRlcnNlY3RSZWN0MTYoJnJlY3QsICZ3bmRQdHItPnJlY3RDbGllbnQsICZ3bmQtPnJlY3RDbGllbnQpICkKKwkgICAgICAgSW50ZXJzZWN0UmVjdDMyKCZyZWN0LCAmd25kUHRyLT5yZWN0Q2xpZW50LCAmd25kLT5yZWN0Q2xpZW50KSApCiAgICAgICAgICAgICAgICB3bmQtPmZsYWdzIHw9IFdJTl9TQVZFVU5ERVJfT1ZFUlJJREU7CiAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3dpbmRvd3MvZGVmd25kLmMgYi93aW5kb3dzL2RlZnduZC5jCmluZGV4IDg1MDM1OWEuLjdiNTk0NDcgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZGVmd25kLmMKKysrIGIvd2luZG93cy9kZWZ3bmQuYwpAQCAtMzgwLDcgKzM4MCwxMiBAQAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgV01fTkNDQUxDU0laRToKLQlyZXN1bHQgPSBOQ19IYW5kbGVOQ0NhbGNTaXplKHduZFB0ciwgKFJFQ1QxNiAqKVBUUl9TRUdfVE9fTElOKGxQYXJhbSkpOworICAgICAgICB7CisgICAgICAgICAgICBSRUNUMzIgcmVjdDMyOworICAgICAgICAgICAgQ09OVl9SRUNUMTZUTzMyKCAoUkVDVDE2ICopUFRSX1NFR19UT19MSU4obFBhcmFtKSwgJnJlY3QzMiApOworICAgICAgICAgICAgcmVzdWx0ID0gTkNfSGFuZGxlTkNDYWxjU2l6ZSggd25kUHRyLCAmcmVjdDMyICk7CisgICAgICAgICAgICBDT05WX1JFQ1QzMlRPMTYoICZyZWN0MzIsIChSRUNUMTYgKilQVFJfU0VHX1RPX0xJTihsUGFyYW0pICk7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFdNX1dJTkRPV1BPU0NIQU5HSU5HOgpAQCAtNDQxLDEyICs0NDYsNyBAQAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgV01fTkNDQUxDU0laRToKLSAgICAgICAgewotICAgICAgICAgICAgUkVDVDE2IHJlY3QxNjsKLSAgICAgICAgICAgIENPTlZfUkVDVDMyVE8xNiggKFJFQ1QzMiAqKWxQYXJhbSwgJnJlY3QxNiApOwotICAgICAgICAgICAgcmVzdWx0ID0gTkNfSGFuZGxlTkNDYWxjU2l6ZSggd25kUHRyLCAmcmVjdDE2ICk7Ci0gICAgICAgICAgICBDT05WX1JFQ1QxNlRPMzIoICZyZWN0MTYsIChSRUNUMzIgKilsUGFyYW0gKTsKLSAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBOQ19IYW5kbGVOQ0NhbGNTaXplKCB3bmRQdHIsIChSRUNUMzIgKilsUGFyYW0gKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFdNX1dJTkRPV1BPU0NIQU5HSU5HOgpkaWZmIC0tZ2l0IGEvd2luZG93cy9ldmVudC5jIGIvd2luZG93cy9ldmVudC5jCmluZGV4IDQyYzhmMzQuLmRjNWMyMzggMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZXZlbnQuYworKysgYi93aW5kb3dzL2V2ZW50LmMKQEAgLTY5NywzMiArNjk3LDMxIEBACiAgICAgZWxzZQogICAgIHsKICAgICAgICAgV05EICp3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZCApOwotCVdJTkRPV1BPUzE2ICp3aW5wb3M7Ci0JUkVDVDE2IG5ld1dpbmRvd1JlY3QsIG5ld0NsaWVudFJlY3Q7CisJV0lORE9XUE9TMzIgd2lucG9zOworCVJFQ1QzMiBuZXdXaW5kb3dSZWN0LCBuZXdDbGllbnRSZWN0OwogCUhSR04zMiBocmduT2xkUG9zLCBocmduTmV3UG9zOwogCVdpbmRvdyBhYm92ZSA9IGV2ZW50LT5hYm92ZTsKIAotCWlmICghd25kUHRyIHx8ICEod25kUHRyLT5mbGFncyAmIFdJTl9NQU5BR0VEKSB8fAotICAgICAgICAgICAgISh3aW5wb3MgPSBTRUdQVFJfTkVXKFdJTkRPV1BPUzE2KSkpIHJldHVybjsKKwlpZiAoIXduZFB0ciB8fCAhKHduZFB0ci0+ZmxhZ3MgJiBXSU5fTUFOQUdFRCkpIHJldHVybjsKIAogCS8qIEZpbGwgV0lORE9XUE9TIHN0cnVjdCAqLwotCXdpbnBvcy0+ZmxhZ3MgPSBTV1BfTk9BQ1RJVkFURSB8IFNXUF9OT1pPUkRFUjsKLQl3aW5wb3MtPmh3bmQgPSBod25kOwotCXdpbnBvcy0+eCA9IGV2ZW50LT54OwotCXdpbnBvcy0+eSA9IGV2ZW50LT55OwotCXdpbnBvcy0+Y3ggPSBldmVudC0+d2lkdGg7Ci0Jd2lucG9zLT5jeSA9IGV2ZW50LT5oZWlnaHQ7CisJd2lucG9zLmZsYWdzID0gU1dQX05PQUNUSVZBVEUgfCBTV1BfTk9aT1JERVI7CisJd2lucG9zLmh3bmQgPSBod25kOworCXdpbnBvcy54ID0gZXZlbnQtPng7CisJd2lucG9zLnkgPSBldmVudC0+eTsKKwl3aW5wb3MuY3ggPSBldmVudC0+d2lkdGg7CisJd2lucG9zLmN5ID0gZXZlbnQtPmhlaWdodDsKIAogCS8qIENoZWNrIGZvciB1bmNoYW5nZWQgYXR0cmlidXRlcyAqLwotCWlmKHdpbnBvcy0+eCA9PSB3bmRQdHItPnJlY3RXaW5kb3cubGVmdCAmJgotCSAgIHdpbnBvcy0+eSA9PSB3bmRQdHItPnJlY3RXaW5kb3cudG9wKQotCSAgICB3aW5wb3MtPmZsYWdzIHw9IFNXUF9OT01PVkU7Ci0JaWYod2lucG9zLT5jeCA9PSB3bmRQdHItPnJlY3RXaW5kb3cucmlnaHQgLSB3bmRQdHItPnJlY3RXaW5kb3cubGVmdCAmJgotCSAgIHdpbnBvcy0+Y3kgPT0gd25kUHRyLT5yZWN0V2luZG93LmJvdHRvbSAtIHduZFB0ci0+cmVjdFdpbmRvdy50b3ApCi0JICAgIHdpbnBvcy0+ZmxhZ3MgfD0gU1dQX05PU0laRTsKKwlpZih3aW5wb3MueCA9PSB3bmRQdHItPnJlY3RXaW5kb3cubGVmdCAmJgorCSAgIHdpbnBvcy55ID09IHduZFB0ci0+cmVjdFdpbmRvdy50b3ApCisJICAgIHdpbnBvcy5mbGFncyB8PSBTV1BfTk9NT1ZFOworCWlmKHdpbnBvcy5jeCA9PSB3bmRQdHItPnJlY3RXaW5kb3cucmlnaHQgLSB3bmRQdHItPnJlY3RXaW5kb3cubGVmdCAmJgorCSAgIHdpbnBvcy5jeSA9PSB3bmRQdHItPnJlY3RXaW5kb3cuYm90dG9tIC0gd25kUHRyLT5yZWN0V2luZG93LnRvcCkKKwkgICAgd2lucG9zLmZsYWdzIHw9IFNXUF9OT1NJWkU7CiAKIAkvKiBTZW5kIFdNX1dJTkRPV1BPU0NIQU5HSU5HICovCi0JU2VuZE1lc3NhZ2UxNihod25kLCBXTV9XSU5ET1dQT1NDSEFOR0lORywgMCwgKExQQVJBTSlTRUdQVFJfR0VUKHdpbnBvcykpOworCVNlbmRNZXNzYWdlMzJBKCBod25kLCBXTV9XSU5ET1dQT1NDSEFOR0lORywgMCwgKExQQVJBTSkmd2lucG9zICk7CiAKIAkvKiBDYWxjdWxhdGUgbmV3IHBvc2l0aW9uIGFuZCBzaXplICovCiAJbmV3V2luZG93UmVjdC5sZWZ0ID0gZXZlbnQtPng7CkBAIC03MzAsMjAgKzcyOSwxOCBAQAogCW5ld1dpbmRvd1JlY3QudG9wID0gZXZlbnQtPnk7CiAJbmV3V2luZG93UmVjdC5ib3R0b20gPSBldmVudC0+eSArIGV2ZW50LT5oZWlnaHQ7CiAKLQlXSU5QT1NfU2VuZE5DQ2FsY1NpemUoIHdpbnBvcy0+aHduZCwgVFJVRSwgJm5ld1dpbmRvd1JlY3QsCi0JCQkgICAgICAgJnduZFB0ci0+cmVjdFdpbmRvdywgJnduZFB0ci0+cmVjdENsaWVudCwKLQkJCSAgICAgICBTRUdQVFJfR0VUKHdpbnBvcyksICZuZXdDbGllbnRSZWN0ICk7CisJV0lOUE9TX1NlbmROQ0NhbGNTaXplKCB3aW5wb3MuaHduZCwgVFJVRSwgJm5ld1dpbmRvd1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnduZFB0ci0+cmVjdFdpbmRvdywgJnduZFB0ci0+cmVjdENsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd2lucG9zLCAmbmV3Q2xpZW50UmVjdCApOwogCi0gICAgICAgIGhyZ25PbGRQb3MgPSBDcmVhdGVSZWN0UmduSW5kaXJlY3QxNiggJnduZFB0ci0+cmVjdFdpbmRvdyApOwotICAgICAgICBocmduTmV3UG9zID0gQ3JlYXRlUmVjdFJnbkluZGlyZWN0MTYoICZuZXdXaW5kb3dSZWN0ICk7CisgICAgICAgIGhyZ25PbGRQb3MgPSBDcmVhdGVSZWN0UmduSW5kaXJlY3QzMiggJnduZFB0ci0+cmVjdFdpbmRvdyApOworICAgICAgICBocmduTmV3UG9zID0gQ3JlYXRlUmVjdFJnbkluZGlyZWN0MzIoICZuZXdXaW5kb3dSZWN0ICk7CiAgICAgICAgIENvbWJpbmVSZ24zMiggaHJnbk9sZFBvcywgaHJnbk9sZFBvcywgaHJnbk5ld1BvcywgUkdOX0RJRkYgKTsKICAKIAkvKiBTZXQgbmV3IHNpemUgYW5kIHBvc2l0aW9uICovCiAJd25kUHRyLT5yZWN0V2luZG93ID0gbmV3V2luZG93UmVjdDsKIAl3bmRQdHItPnJlY3RDbGllbnQgPSBuZXdDbGllbnRSZWN0OwotCVNlbmRNZXNzYWdlMTYoIGh3bmQsIFdNX1dJTkRPV1BPU0NIQU5HRUQsIDAsIChMUEFSQU0pU0VHUFRSX0dFVCh3aW5wb3MpKTsKLQotICAgICAgICBTRUdQVFJfRlJFRSh3aW5wb3MpOworCVNlbmRNZXNzYWdlMzJBKCBod25kLCBXTV9XSU5ET1dQT1NDSEFOR0VELCAwLCAoTFBBUkFNKSZ3aW5wb3MgKTsKIAogCWlmKCBJc1dpbmRvdzMyKCBod25kICkgKQogCSAgICBpZiggYWJvdmUgPT0gTm9uZSApCQkJLyogYWJzb2x1dGUgYm90dG9tICovCmRpZmYgLS1naXQgYS93aW5kb3dzL2dyYXBoaWNzLmMgYi93aW5kb3dzL2dyYXBoaWNzLmMKaW5kZXggNDRhYTY5Zi4uYTExNDA0YiAxMDA2NDQKLS0tIGEvd2luZG93cy9ncmFwaGljcy5jCisrKyBiL3dpbmRvd3MvZ3JhcGhpY3MuYwpAQCAtMTIyLDYgKzEyMiwzMyBAQAogdm9pZCBHUkFQSF9EcmF3UmVsaWVmUmVjdCggSERDMzIgaGRjLCBjb25zdCBSRUNUMzIgKnJlY3QsIElOVDMyIGhpZ2hsaWdodF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UMzIgc2hhZG93X3NpemUsIEJPT0wzMiBwcmVzc2VkICkKIHsKKyAgICBpZihwcmVzc2VkKQorCUdSQVBIX0RyYXdHZW5lcmljUmVsaWVmUmVjdChoZGMsIHJlY3QsIGhpZ2hsaWdodF9zaXplLCBzaGFkb3dfc2l6ZSwKKwkJCQkgICAgc3lzQ29sb3JPYmplY3RzLmhicnVzaEJ0blNoYWRvdywKKwkJCQkgICAgc3lzQ29sb3JPYmplY3RzLmhicnVzaEJ0bkhpZ2hsaWdodCk7CisgICAgZWxzZQorCUdSQVBIX0RyYXdHZW5lcmljUmVsaWVmUmVjdChoZGMsIHJlY3QsIGhpZ2hsaWdodF9zaXplLCBzaGFkb3dfc2l6ZSwKKwkJCQkgICAgc3lzQ29sb3JPYmplY3RzLmhicnVzaEJ0bkhpZ2hsaWdodCwKKwkJCQkgICAgc3lzQ29sb3JPYmplY3RzLmhicnVzaEJ0blNoYWRvdyk7CisKKyAgICByZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgR1JBUEhfRHJhd0dlbmVyaWNSZWxpZWZSZWN0CisgKgorICogICBDcmVhdGVzIGEgcmVjdGFuZ2xlIHdpdGggdGhlIHNwZWNpZmllZCBoaWdobGlnaHQgYW5kIHNoYWRvdyBjb2xvcnMuCisgKiAgIEFkYXB0ZWQgZnJvbSBEcmF3UmVsaWVmUmVjdCAod2hpY2ggaXMgc29tZXdoYXQgbWlzbmFtZWQpLgorICovCit2b2lkICBHUkFQSF9EcmF3R2VuZXJpY1JlbGllZlJlY3QoCisgICAgSERDMzIgIGhkYywKKyAgICBjb25zdCAgUkVDVDMyICpyZWN0LAorICAgIElOVDMyICBoaWdobGlnaHRfc2l6ZSwKKyAgICBJTlQzMiAgc2hhZG93X3NpemUsCisgICAgSEJSVVNIMzIgIGhpZ2hsaWdodCwKKyAgICBIQlJVU0gzMiAgc2hhZG93ICkKK3sKICAgICBEQyoJCWRjOwogICAgIEhCUlVTSDMyIAloUHJldkJydXNoOwogICAgIElOVDMyIAl3LCBoOwpAQCAtMTMyLDggKzE1OSw4IEBACiAgICAgT2Zmc2V0UmVjdDMyKCAmciwgZGMtPncuRENPcmdYLCBkYy0+dy5EQ09yZ1kpOwogICAgIGggPSByZWN0LT5ib3R0b20gLSByZWN0LT50b3A7ICB3ID0gcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0OwogCi0gICAgaFByZXZCcnVzaCA9IFNlbGVjdE9iamVjdDMyKGhkYywgcHJlc3NlZCA/IHN5c0NvbG9yT2JqZWN0cy5oYnJ1c2hCdG5TaGFkb3cgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNDb2xvck9iamVjdHMuaGJydXNoQnRuSGlnaGxpZ2h0ICk7CisgICAgaFByZXZCcnVzaCA9IFNlbGVjdE9iamVjdDMyKGhkYywgaGlnaGxpZ2h0KTsKKwogICAgIGlmICggRENfU2V0dXBHQ0ZvckJydXNoKCBkYyApICkKICAgICB7CiAgICAgICAgICBJTlQzMglpOwpAQCAtMTQ4LDggKzE3NSw3IEBACiAgICAgICAgICB9CiAgICAgfQogCi0gICAgU2VsZWN0T2JqZWN0MzIoIGhkYywgcHJlc3NlZCA/IHN5c0NvbG9yT2JqZWN0cy5oYnJ1c2hCdG5IaWdobGlnaHQgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNDb2xvck9iamVjdHMuaGJydXNoQnRuU2hhZG93ICk7CisgICAgU2VsZWN0T2JqZWN0MzIoIGhkYywgc2hhZG93ICk7CiAgICAgaWYgKCBEQ19TZXR1cEdDRm9yQnJ1c2goIGRjICkgKQogICAgIHsKIAkgSU5UMzIJaTsKQEAgLTE2Nyw2ICsxOTMsOCBAQAogICAgIFNlbGVjdE9iamVjdDMyKCBoZGMsIGhQcmV2QnJ1c2ggKTsKIH0KIAorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICBHUkFQSF9EcmF3UmVjdGFuZ2xlCiAgKi8KZGlmZiAtLWdpdCBhL3dpbmRvd3MvaG9vay5jIGIvd2luZG93cy9ob29rLmMKaW5kZXggODQ4ZDlhNi4uMmIxMzMzZCAxMDA2NDQKLS0tIGEvd2luZG93cy9ob29rLmMKKysrIGIvd2luZG93cy9ob29rLmMKQEAgLTk3OSw3ICs5NzksNyBAQAogCiAgICAgLyogU2V0IERTID0gU1MgdG8gY2FsbCBob29rIHByb2NlZHVyZSAqLwogICAgIG9sZF9kcyA9IENVUlJFTlRfRFM7Ci0gICAgQ1VSUkVOVF9EUyA9IElGMTYzMl9TYXZlZDE2X3NzOworICAgIENVUlJFTlRfRFMgPSBTRUxFQ1RPUk9GKElGMTYzMl9TYXZlZDE2X3NzX3NwKTsKICAgICByZXQgPSBkYXRhLT5wcm9jKGNvZGUsIHdQYXJhbSwgbFBhcmFtKTsKICAgICBDVVJSRU5UX0RTID0gb2xkX2RzOwogCmRpZmYgLS1naXQgYS93aW5kb3dzL21kaS5jIGIvd2luZG93cy9tZGkuYwppbmRleCA1ODFkMDkxLi4zOWM2NzNlIDEwMDY0NAotLS0gYS93aW5kb3dzL21kaS5jCisrKyBiL3dpbmRvd3MvbWRpLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogc3RhdGljIHZvaWQgTURJX0NhbGNEZWZhdWx0Q2hpbGRQb3MoIFdORCogdywgV09SRCBuLCBMUFBPSU5UMTYgbHBQb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UMzIgZGVsdGEpCiB7Ci0gUkVDVDE2IHJlY3QgPSB3LT5yZWN0Q2xpZW50OworIFJFQ1QzMiByZWN0ID0gdy0+cmVjdENsaWVudDsKICBJTlQzMiAgc3BhY2luZyA9IEdldFN5c3RlbU1ldHJpY3MzMihTTV9DWUNBUFRJT04pICsKICAgICAgICAgICAgICAgICAgIEdldFN5c3RlbU1ldHJpY3MzMihTTV9DWUZSQU1FKSAtIDE7IAogIElOVDMyICBuc3RhZ2dlcjsKQEAgLTM5OCwxMSArMzk4LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU5NQVhJTkZPMTYqIGxwTWluTWF4ICkKIHsKICBXTkQqCWNoaWxkV25kID0gV0lOX0ZpbmRXbmRQdHIoaHduZCk7Ci0gUkVDVDE2CXJlY3QgCSA9IGNsaWVudFduZC0+cmVjdENsaWVudDsKKyBSRUNUMzIJcmVjdCAJID0gY2xpZW50V25kLT5yZWN0Q2xpZW50OwogCi0gTWFwV2luZG93UG9pbnRzMTYoY2xpZW50V25kLT5wYXJlbnQtPmh3bmRTZWxmLCAKLQkgICAgICAgKChNRElDTElFTlRJTkZPKiljbGllbnRXbmQtPndFeHRyYSktPnNlbGYsIChMUFBPSU5UMTYpJnJlY3QsIDIpOwotIEFkanVzdFdpbmRvd1JlY3RFeDE2KCAmcmVjdCwgY2hpbGRXbmQtPmR3U3R5bGUsIDAsIGNoaWxkV25kLT5kd0V4U3R5bGUgKTsKKyBNYXBXaW5kb3dQb2ludHMzMihjbGllbnRXbmQtPnBhcmVudC0+aHduZFNlbGYsIAorICAgICAgICAgICAgICAgICAgICgoTURJQ0xJRU5USU5GTyopY2xpZW50V25kLT53RXh0cmEpLT5zZWxmLAorICAgICAgICAgICAgICAgICAgIChMUFBPSU5UMzIpJnJlY3QsIDIpOworIEFkanVzdFdpbmRvd1JlY3RFeDMyKCAmcmVjdCwgY2hpbGRXbmQtPmR3U3R5bGUsIDAsIGNoaWxkV25kLT5kd0V4U3R5bGUgKTsKIAogIGxwTWluTWF4LT5wdE1heFNpemUueCA9IHJlY3QucmlnaHQgLT0gcmVjdC5sZWZ0OwogIGxwTWluTWF4LT5wdE1heFNpemUueSA9IHJlY3QuYm90dG9tIC09IHJlY3QudG9wOwpAQCAtNzAxLDcgKzcwMiw3IEBACiAKIAlpZiggdG90YWwgKQogCXsKLQkgICAgUkVDVDE2CXJlY3Q7CisJICAgIFJFQ1QzMglyZWN0OwogCSAgICBpbnQJCXgsIHksIHhzaXplLCB5c2l6ZTsKIAkgICAgaW50CQlyb3dzLCBjb2x1bW5zLCByLCBjLCBpOwogCkBAIC05MDAsNyArOTAxLDcgQEAKIHsKICAgICBMUENSRUFURVNUUlVDVDE2ICAgICBjczsKICAgICBNRElDTElFTlRJTkZPICAgICAgICpjaTsKLSAgICBSRUNUMTYJCSByZWN0OworICAgIFJFQ1QzMgkJIHJlY3Q7CiAgICAgV05EICAgICAgICAgICAgICAgICAqdyAJICA9IFdJTl9GaW5kV25kUHRyKGh3bmQpOwogICAgIFdORAkJCSpmcmFtZVduZCA9IHctPnBhcmVudDsKICAgICBJTlQzMiBuSXRlbXM7CkBAIC05NDgsNyArOTQ5LDcgQEAKIAogCUFwcGVuZE1lbnUzMkEoIGNpLT5oV2luZG93TWVudSwgTUZfU0VQQVJBVE9SLCAwLCBOVUxMICk7CiAKLQlHZXRDbGllbnRSZWN0MTYoZnJhbWVXbmQtPmh3bmRTZWxmLCAmcmVjdCk7CisJR2V0Q2xpZW50UmVjdDMyKGZyYW1lV25kLT5od25kU2VsZiwgJnJlY3QpOwogCU5DX0hhbmRsZU5DQ2FsY1NpemUoIHcsICZyZWN0ICk7CiAJdy0+cmVjdENsaWVudCA9IHJlY3Q7CiAKQEAgLTE1NzEsMjIgKzE1NzIsMjIgQEAKICAqLwogdm9pZCBDYWxjQ2hpbGRTY3JvbGwoIEhXTkQxNiBod25kLCBXT1JEIHNjcm9sbCApCiB7Ci0gICAgUkVDVDE2IGNoaWxkUmVjdCwgY2xpZW50UmVjdDsKKyAgICBSRUNUMzIgY2hpbGRSZWN0LCBjbGllbnRSZWN0OwogICAgIElOVDMyICB2bWluLCB2bWF4LCBobWluLCBobWF4LCB2cG9zLCBocG9zOwogICAgIEJPT0wzMiBub3Njcm9sbCA9IEZBTFNFOwogICAgIFdORCAqcFduZCwgKlduZDsKIAogICAgIGlmICghKFduZCA9IHBXbmQgPSBXSU5fRmluZFduZFB0ciggaHduZCApKSkgcmV0dXJuOwotICAgIEdldENsaWVudFJlY3QxNiggaHduZCwgJmNsaWVudFJlY3QgKTsKLSAgICBTZXRSZWN0RW1wdHkxNiggJmNoaWxkUmVjdCApOworICAgIEdldENsaWVudFJlY3QzMiggaHduZCwgJmNsaWVudFJlY3QgKTsKKyAgICBTZXRSZWN0RW1wdHkzMiggJmNoaWxkUmVjdCApOwogCiAgICAgZm9yICggcFduZCA9IHBXbmQtPmNoaWxkOyBwV25kOyBwV25kID0gcFduZC0+bmV4dCApCiAJewotICAgICAgICAgIFVuaW9uUmVjdDE2KCAmY2hpbGRSZWN0LCAmcFduZC0+cmVjdFdpbmRvdywgJmNoaWxkUmVjdCApOworICAgICAgICAgIFVuaW9uUmVjdDMyKCAmY2hpbGRSZWN0LCAmcFduZC0+cmVjdFdpbmRvdywgJmNoaWxkUmVjdCApOwogCSAgaWYoIHBXbmQtPmR3U3R5bGUgJiBXU19NQVhJTUlaRSApCiAJICAgICAgbm9zY3JvbGwgPSBUUlVFOwogCX0gCi0gICAgVW5pb25SZWN0MTYoICZjaGlsZFJlY3QsICZjbGllbnRSZWN0LCAmY2hpbGRSZWN0ICk7CisgICAgVW5pb25SZWN0MzIoICZjaGlsZFJlY3QsICZjbGllbnRSZWN0LCAmY2hpbGRSZWN0ICk7CiAKICAgICAvKiBqdW1wIHRocm91Z2ggdGhlIGhvb3BzIHRvIHByZXZlbnQgZXhjZXNzaXZlIGZsYXNoaW5nIAogICAgICAqLwpkaWZmIC0tZ2l0IGEvd2luZG93cy9tZXNzYWdlLmMgYi93aW5kb3dzL21lc3NhZ2UuYwppbmRleCAwYzIyYjhhLi5hMTI0ZmNkIDEwMDY0NAotLS0gYS93aW5kb3dzL21lc3NhZ2UuYworKysgYi93aW5kb3dzL21lc3NhZ2UuYwpAQCAtNTUwLDcgKzU1MCw3IEBACiAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbiBpbnRlci10YXNrIFNlbmRNZXNzYWdlLgogICovCiBzdGF0aWMgTFJFU1VMVCBNU0dfU2VuZE1lc3NhZ2UoIEhRVUVVRTE2IGhEZXN0UXVldWUsIEhXTkQxNiBod25kLCBVSU5UMTYgbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0gKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUEFSQU0zMiB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIFdPUkQgZmxhZ3MgKQogewogICAgIElOVDMyCSAgcHJldlNNUkwgPSBkZWJ1Z1NNUkw7CiAgICAgUVNNQ1RSTCAJICBxQ3RybCA9IHsgMCwgMX07CkBAIC01NzQsMTQgKzU3NCwxNiBAQAogCiAgICAgLyogcmVzdW1lIHNlbmRpbmcgKi8gCiAKLSAgICBxdWV1ZS0+aFduZCAgID0gaHduZDsKLSAgICBxdWV1ZS0+bXNnICAgID0gbXNnOwotICAgIHF1ZXVlLT53UGFyYW0gPSB3UGFyYW07Ci0gICAgcXVldWUtPmxQYXJhbSA9IGxQYXJhbTsKKyAgICBxdWV1ZS0+aFduZCAgICAgICA9IGh3bmQ7CisgICAgcXVldWUtPm1zZyAgICAgICAgPSBtc2c7CisgICAgcXVldWUtPndQYXJhbSAgICAgPSBMT1dPUkQod1BhcmFtKTsKKyAgICBxdWV1ZS0+d1BhcmFtSGlnaCA9IEhJV09SRCh3UGFyYW0pOworICAgIHF1ZXVlLT5sUGFyYW0gICAgID0gbFBhcmFtOwogICAgIHF1ZXVlLT5oUHJldlNlbmRpbmdUYXNrID0gZGVzdFEtPmhTZW5kaW5nVGFzazsKICAgICBkZXN0US0+aFNlbmRpbmdUYXNrID0gR2V0VGFza1F1ZXVlKDApOwogCiAgICAgcXVldWUtPndha2VCaXRzICY9IH5RU19TTVBBUkFNU0ZSRUU7CisgICAgcXVldWUtPmZsYWdzID0gKHF1ZXVlLT5mbGFncyAmIH4oUVVFVUVfU01fV0lOMzJ8UVVFVUVfU01fVU5JQ09ERSkpIHwgZmxhZ3M7CiAKICAgICBkcHJpbnRmX3NlbmRtc2coc3RkZGViLCIlKnNzbTogc21SZXN1bHRJbml0ID0gJTA4eFxuIiwgcHJldlNNUkwsICIiLCAodW5zaWduZWQpJnFDdHJsKTsKIApAQCAtMTA1OCwxMiArMTA2MCwxNiBAQAogICAgIH0KICAgICBpZiAoUVVFVUVfSXNFeGl0aW5nUXVldWUod25kUHRyLT5obWVtVGFza1EpKQogICAgICAgICByZXR1cm4gMDsgIC8qIERvbid0IHNlbmQgYW55dGhpbmcgaWYgdGhlIHRhc2sgaXMgZHlpbmcgKi8KLSAgICBpZiAod25kUHRyLT5obWVtVGFza1EgIT0gR2V0VGFza1F1ZXVlKDApKQotICAgICAgICByZXR1cm4gTVNHX1NlbmRNZXNzYWdlKCB3bmRQdHItPmhtZW1UYXNrUSwgaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSApOwogCiAgICAgU1BZX0VudGVyTWVzc2FnZSggU1BZX1NFTkRNRVNTQUdFMTYsIGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0gKTsKLSAgICByZXQgPSBDYWxsV2luZG93UHJvYzE2KCAoV05EUFJPQzE2KXduZFB0ci0+d2lucHJvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtICk7CisKKyAgICBpZiAod25kUHRyLT5obWVtVGFza1EgIT0gR2V0VGFza1F1ZXVlKDApKQorICAgICAgICByZXQgPSBNU0dfU2VuZE1lc3NhZ2UoIHduZFB0ci0+aG1lbVRhc2tRLCBod25kLCBtc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhcmFtLCBsUGFyYW0sIDAgKTsKKyAgICBlbHNlCisgICAgICAgIHJldCA9IENhbGxXaW5kb3dQcm9jMTYoIChXTkRQUk9DMTYpd25kUHRyLT53aW5wcm9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtICk7CisKICAgICBTUFlfRXhpdE1lc3NhZ2UoIFNQWV9SRVNVTFRfT0sxNiwgaHduZCwgbXNnLCByZXQgKTsKICAgICByZXR1cm4gcmV0OwogfQpAQCAtMTEyNSwxNSArMTEzMSwxNSBAQAogICAgIGlmIChRVUVVRV9Jc0V4aXRpbmdRdWV1ZSh3bmRQdHItPmhtZW1UYXNrUSkpCiAgICAgICAgIHJldHVybiAwOyAgLyogRG9uJ3Qgc2VuZCBhbnl0aGluZyBpZiB0aGUgdGFzayBpcyBkeWluZyAqLwogCi0gICAgaWYgKHduZFB0ci0+aG1lbVRhc2tRICE9IEdldFRhc2tRdWV1ZSgwKSkKLSAgICB7Ci0gICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlNlbmRNZXNzYWdlMzJBOiBpbnRlcnRhc2sgbWVzc2FnZSBbJTA0eF0gbm90IHN1cHBvcnRlZFxuIiwgbXNnICk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQogICAgIFNQWV9FbnRlck1lc3NhZ2UoIFNQWV9TRU5ETUVTU0FHRTMyLCBod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtICk7Ci0gICAgcmV0ID0gQ2FsbFdpbmRvd1Byb2MzMkEoIChXTkRQUk9DMzIpd25kUHRyLT53aW5wcm9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtICk7CisKKyAgICBpZiAod25kUHRyLT5obWVtVGFza1EgIT0gR2V0VGFza1F1ZXVlKDApKQorICAgICAgICByZXQgPSBNU0dfU2VuZE1lc3NhZ2UoIHduZFB0ci0+aG1lbVRhc2tRLCBod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVVFX1NNX1dJTjMyICk7CisgICAgZWxzZQorICAgICAgICByZXQgPSBDYWxsV2luZG93UHJvYzMyQSggKFdORFBST0MzMil3bmRQdHItPndpbnByb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtICk7CisKICAgICBTUFlfRXhpdE1lc3NhZ2UoIFNQWV9SRVNVTFRfT0szMiwgaHduZCwgbXNnLCByZXQgKTsKICAgICByZXR1cm4gcmV0OwogfQpAQCAtMTE3MywxNSArMTE3OSwxNiBAQAogICAgIH0KICAgICBpZiAoUVVFVUVfSXNFeGl0aW5nUXVldWUod25kUHRyLT5obWVtVGFza1EpKQogICAgICAgICByZXR1cm4gMDsgIC8qIERvbid0IHNlbmQgYW55dGhpbmcgaWYgdGhlIHRhc2sgaXMgZHlpbmcgKi8KLSAgICBpZiAod25kUHRyLT5obWVtVGFza1EgIT0gR2V0VGFza1F1ZXVlKDApKQotICAgIHsKLSAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiU2VuZE1lc3NhZ2UzMlc6IGludGVydGFzayBtZXNzYWdlIG5vdCBzdXBwb3J0ZWRcbiIgKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCiAgICAgU1BZX0VudGVyTWVzc2FnZSggU1BZX1NFTkRNRVNTQUdFMzIsIGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0gKTsKLSAgICByZXQgPSBDYWxsV2luZG93UHJvYzMyVyggKFdORFBST0MzMil3bmRQdHItPndpbnByb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0gKTsKKworICAgIGlmICh3bmRQdHItPmhtZW1UYXNrUSAhPSBHZXRUYXNrUXVldWUoMCkpCisgICAgICAgIHJldCA9IE1TR19TZW5kTWVzc2FnZSggd25kUHRyLT5obWVtVGFza1EsIGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVVFX1NNX1dJTjMyIHwgUVVFVUVfU01fVU5JQ09ERSApOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0gQ2FsbFdpbmRvd1Byb2MzMlcoIChXTkRQUk9DMzIpd25kUHRyLT53aW5wcm9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSApOworCiAgICAgU1BZX0V4aXRNZXNzYWdlKCBTUFlfUkVTVUxUX09LMzIsIGh3bmQsIG1zZywgcmV0ICk7CiAgICAgcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL3dpbmRvd3Mvbm9uY2xpZW50LmMgYi93aW5kb3dzL25vbmNsaWVudC5jCmluZGV4IDUyMzdhNTIuLmIxZWY1ODYgMTAwNjQ0Ci0tLSBhL3dpbmRvd3Mvbm9uY2xpZW50LmMKKysrIGIvd2luZG93cy9ub25jbGllbnQuYwpAQCAtMjIsMTAgKzIyLDIwIEBACiAjaW5jbHVkZSAicXVldWUuaCIKICNpbmNsdWRlICJzZWxlY3RvcnMuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgorI2luY2x1ZGUgInR3ZWFrLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJvcHRpb25zLmgiCiAKIAoraW50ICBOQ19DYXB0aW9uTGVmdE51ZGdlOworaW50ICBOQ19DYXB0aW9uVG9wTnVkZ2U7CitpbnQgIE5DX1N5c0NvbnRyb2xOdWRnZTsKK2ludCAgTkNfTWF4Q29udHJvbE51ZGdlOworaW50ICBOQ19NaW5Db250cm9sTnVkZ2U7CitVSU5UMzIgIE5DX0NhcHRpb25UZXh0RmxhZ3M7CitIQlJVU0gzMiAgTkNfV2luSGlnaGxpZ2h0OTU7CitIQlJVU0gzMiAgTkNfV2luU2hhZG93OTU7CisKIHN0YXRpYyBIQklUTUFQMTYgaGJpdG1hcENsb3NlID0gMDsKIHN0YXRpYyBIQklUTUFQMTYgaGJpdG1hcE1pbmltaXplID0gMDsKIHN0YXRpYyBIQklUTUFQMTYgaGJpdG1hcE1pbmltaXplRCA9IDA7CkBAIC02Nyw2ICs3NywxMCBAQAogc3RhdGljIHZvaWQgTkNfQWRqdXN0UmVjdCggTFBSRUNUMTYgcmVjdCwgRFdPUkQgc3R5bGUsIEJPT0wzMiBtZW51LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZXhTdHlsZSApCiB7CisgICAgaWYoVFdFQUtfV2luOTVMb29rKQorCWZwcmludGYoIHN0ZGRlYiwgIk5DX0FkanVzdFJlY3Qgd2FzIGNhbGxlZCBpbiBXaW45NSBtb2RlLiAgQWllZSEgICIKKwkJICJQbGVhc2UgcmVwb3J0IHRoaXMuXG4iICk7CisKICAgICBpZihzdHlsZSAmIFdTX0lDT05JQykgcmV0dXJuOwogICAgIC8qIERlY2lkZSBpZiB0aGUgd2luZG93IHdpbGwgYmUgbWFuYWdlZCAoc2VlIENyZWF0ZVdpbmRvd0V4KSAqLwogICAgIGlmICghKE9wdGlvbnMubWFuYWdlZCAmJiAhKHN0eWxlICYgV1NfQ0hJTEQpICYmCkBAIC05Myw2ICsxMDcsNjAgQEAKIH0KIAogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICBOQ19BZGp1c3RSZWN0OTUoCisgKiAgICAgIExQUkVDVDE2ICByZWN0LAorICogICAgICBEV09SRCAgc3R5bGUsCisgKiAgICAgIEJPT0wzMiAgbWVudSwKKyAqICAgICAgRFdPUkQgIGV4U3R5bGUgKQorICoKKyAqICAgQ29tcHV0ZXMgdGhlIHNpemUgb2YgdGhlIHdpbmRvdyBiYXNlZCBvbiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgY2xpZW50CisgKiAgIGFyZWEuCisgKgorICogICBCdWdzCisgKiAgICAgICAgTW9zdCBvZiB0aGlzIGNvZGUgaXMgY29waWVkIGZyb20gTkNfQWRqdXN0UmVjdC4gIEl0IHNob3VsZG4ndCBiZS4KKyAqICAgICAgICBUaGVyZSBhcmUgc29tZSB1bmlxdWUgdGhpbmdzIGFib3V0IFdpbiA5NSB0aGF0IGFyZSBiZWluZyBob3JyaWJseQorICogICAgICAgIG5lZ2xlY3RlZCBoZXJlLiAgSSBkb24ndCBrbm93IHdoYXQgdGhleSBhcmUsIGVpdGhlci4gIDotXAorICoKKyAqICAgUmV2aXNpb24gaGlzdG9yeQorICogICAgICAgIDA1LUp1bC0xOTk3IERhdmUgQ3V0aGJlcnQgKGRhY3V0QGVjZS5jbXUuZWR1KQorICogICAgICAgICAgICAgT3JpZ2luYWwgY3V0ICYgcGFzdGUgZnJvbSBOQ19BZGp1c3RSZWN0CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBOQ19BZGp1c3RSZWN0OTUoIExQUkVDVDE2IHJlY3QsIERXT1JEIHN0eWxlLCBCT09MMzIgbWVudSwKKwkJCSAgICAgRFdPUkQgZXhTdHlsZSApCit7CisgICAgaWYoc3R5bGUgJiBXU19JQ09OSUMpIHJldHVybjsKKworICAgIC8qIERlY2lkZSBpZiB0aGUgd2luZG93IHdpbGwgYmUgbWFuYWdlZCAoc2VlIENyZWF0ZVdpbmRvd0V4KSAqLworICAgIGlmICghKE9wdGlvbnMubWFuYWdlZCAmJiAhKHN0eWxlICYgV1NfQ0hJTEQpICYmCisgICAgICAgICAgKChzdHlsZSAmIChXU19ETEdGUkFNRSB8IFdTX1RISUNLRlJBTUUpKSB8fAorICAgICAgICAgICAoZXhTdHlsZSAmIFdTX0VYX0RMR01PREFMRlJBTUUpKSkpCisgICAgeworICAgICAgICBpZiAoSEFTX0RMR0ZSQU1FKCBzdHlsZSwgZXhTdHlsZSApKQorICAgICAgICAgICAgSW5mbGF0ZVJlY3QxNihyZWN0LCBTWVNNRVRSSUNTX0NYRExHRlJBTUUsIFNZU01FVFJJQ1NfQ1lETEdGUkFNRSApOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChIQVNfVEhJQ0tGUkFNRShzdHlsZSkpCisgICAgICAgICAgICAgICAgSW5mbGF0ZVJlY3QxNiggcmVjdCwgU1lTTUVUUklDU19DWEZSQU1FLCBTWVNNRVRSSUNTX0NZRlJBTUUgKTsKKyAgICAgICAgICAgIGlmIChzdHlsZSAmIFdTX0JPUkRFUikKKyAgICAgICAgICAgICAgICBJbmZsYXRlUmVjdDE2KCByZWN0LCBTWVNNRVRSSUNTX0NYQk9SREVSLCBTWVNNRVRSSUNTX0NZQk9SREVSKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoc3R5bGUgJiBXU19DQVBUSU9OKSA9PSBXU19DQVBUSU9OKQorICAgICAgICAgICAgcmVjdC0+dG9wIC09IFNZU01FVFJJQ1NfQ1lDQVBUSU9OIC0gU1lTTUVUUklDU19DWUJPUkRFUjsKKyAgICB9CisgICAgaWYgKG1lbnUpIHJlY3QtPnRvcCAtPSBTWVNNRVRSSUNTX0NZTUVOVSArIFNZU01FVFJJQ1NfQ1lCT1JERVIgKyAyOworICAgIGVsc2UgcmVjdC0+dG9wICs9IFNZU01FVFJJQ1NfQ1lCT1JERVI7CisKKyAgICBpZiAoc3R5bGUgJiBXU19WU0NST0xMKSByZWN0LT5yaWdodCAgKz0gU1lTTUVUUklDU19DWFZTQ1JPTEw7CisgICAgaWYgKHN0eWxlICYgV1NfSFNDUk9MTCkgcmVjdC0+Ym90dG9tICs9IFNZU01FVFJJQ1NfQ1lIU0NST0xMOworfQorCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgQWRqdXN0V2luZG93UmVjdDE2ICAgIChVU0VSLjEwMikKICAqLwpAQCAtMTI5LDcgKzE5NywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgIHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwgcmVjdC0+cmlnaHQsIHJlY3QtPmJvdHRvbSwKICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSwgbWVudSwgZXhTdHlsZSApOwogCi0gICAgTkNfQWRqdXN0UmVjdCggcmVjdCwgc3R5bGUsIG1lbnUsIGV4U3R5bGUgKTsKKyAgICBpZihUV0VBS19XaW45NUxvb2spCisJTkNfQWRqdXN0UmVjdDk1KCByZWN0LCBzdHlsZSwgbWVudSwgZXhTdHlsZSApOworICAgIGVsc2UKKwlOQ19BZGp1c3RSZWN0KCByZWN0LCBzdHlsZSwgbWVudSwgZXhTdHlsZSApOworCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTE1NSw3ICsyMjcsNyBAQAogICoKICAqIEhhbmRsZSBhIFdNX05DQ0FMQ1NJWkUgbWVzc2FnZS4gQ2FsbGVkIGZyb20gRGVmV2luZG93UHJvYygpLgogICovCi1MT05HIE5DX0hhbmRsZU5DQ2FsY1NpemUoIFdORCAqcFduZCwgUkVDVDE2ICp3aW5SZWN0ICkKK0xPTkcgTkNfSGFuZGxlTkNDYWxjU2l6ZSggV05EICpwV25kLCBSRUNUMzIgKndpblJlY3QgKQogewogICAgIFJFQ1QxNiB0bXBSZWN0ID0geyAwLCAwLCAwLCAwIH07CiAgICAgTE9ORyByZXN1bHQgPSAwOwpAQCAtMTYzLDIwICsyMzUsMjkgQEAKICAgICBpZiAocFduZC0+Y2xhc3MtPnN0eWxlICYgQ1NfVlJFRFJBVykgcmVzdWx0IHw9IFdWUl9WUkVEUkFXOwogICAgIGlmIChwV25kLT5jbGFzcy0+c3R5bGUgJiBDU19IUkVEUkFXKSByZXN1bHQgfD0gV1ZSX0hSRURSQVc7CiAKLSAgICBpZiggISggcFduZC0+ZHdTdHlsZSAmIFdTX01JTklNSVpFICkgKQotICAgIHsKLSAgICAgIE5DX0FkanVzdFJlY3QoICZ0bXBSZWN0LCBwV25kLT5kd1N0eWxlLCBGQUxTRSwgcFduZC0+ZHdFeFN0eWxlICk7Ci0gICAgICB3aW5SZWN0LT5sZWZ0ICAgLT0gdG1wUmVjdC5sZWZ0OwotICAgICAgd2luUmVjdC0+dG9wICAgIC09IHRtcFJlY3QudG9wOwotICAgICAgd2luUmVjdC0+cmlnaHQgIC09IHRtcFJlY3QucmlnaHQ7Ci0gICAgICB3aW5SZWN0LT5ib3R0b20gLT0gdG1wUmVjdC5ib3R0b207CisgICAgaWYoICEoIHBXbmQtPmR3U3R5bGUgJiBXU19NSU5JTUlaRSApICkgeworCWlmKFRXRUFLX1dpbjk1TG9vaykKKwkgICAgTkNfQWRqdXN0UmVjdDk1KCAmdG1wUmVjdCwgcFduZC0+ZHdTdHlsZSwgRkFMU0UsIHBXbmQtPmR3RXhTdHlsZSApOworCWVsc2UKKwkgICAgTkNfQWRqdXN0UmVjdCggJnRtcFJlY3QsIHBXbmQtPmR3U3R5bGUsIEZBTFNFLCBwV25kLT5kd0V4U3R5bGUgKTsKIAotICAgICAgaWYgKEhBU19NRU5VKHBXbmQpKQotICAgICAgewotCXdpblJlY3QtPnRvcCArPSBNRU5VX0dldE1lbnVCYXJIZWlnaHQoIHBXbmQtPmh3bmRTZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5SZWN0LT5yaWdodCAtIHdpblJlY3QtPmxlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXRtcFJlY3QubGVmdCwgLXRtcFJlY3QudG9wICkgKyAxOwotICAgICAgfQorCXdpblJlY3QtPmxlZnQgICAtPSB0bXBSZWN0LmxlZnQ7CisJd2luUmVjdC0+dG9wICAgIC09IHRtcFJlY3QudG9wOworCXdpblJlY3QtPnJpZ2h0ICAtPSB0bXBSZWN0LnJpZ2h0OworCXdpblJlY3QtPmJvdHRvbSAtPSB0bXBSZWN0LmJvdHRvbTsKKworCWlmIChIQVNfTUVOVShwV25kKSkgeworCSAgICBkcHJpbnRmX25vbmNsaWVudCggc3RkZGViLCAiTkNfSGFuZGxlTkNDYWxjU2l6ZTogQ2FsbGluZyAiCisJCQkgICAgICAgIkdldE1lbnVCYXJIZWlnaHQgd2l0aCBIV05EIDB4JXgsIHdpZHRoICVkLCAiCisJCQkgICAgICAgImF0ICglZCwgJWQpLlxuIiwgcFduZC0+aHduZFNlbGYsCisJCQkgICAgICAgd2luUmVjdC0+cmlnaHQgLSB3aW5SZWN0LT5sZWZ0LAorCQkJICAgICAgIC10bXBSZWN0LmxlZnQsIC10bXBSZWN0LnRvcCApOworCisJICAgIHdpblJlY3QtPnRvcCArPQorCQlNRU5VX0dldE1lbnVCYXJIZWlnaHQoIHBXbmQtPmh3bmRTZWxmLAorCQkJCSAgICAgICB3aW5SZWN0LT5yaWdodCAtIHdpblJlY3QtPmxlZnQsCisJCQkJICAgICAgIC10bXBSZWN0LmxlZnQsIC10bXBSZWN0LnRvcCApICsgMTsKKwl9CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xODgsNiArMjY5LDggQEAKICAqIEdldCB0aGUgJ2luc2lkZScgcmVjdGFuZ2xlIG9mIGEgd2luZG93LCBpLmUuIHRoZSB3aG9sZSB3aW5kb3cgcmVjdGFuZ2xlCiAgKiBidXQgd2l0aG91dCB0aGUgYm9yZGVycyAoaWYgYW55KS4KICAqIFRoZSByZWN0YW5nbGUgaXMgaW4gd2luZG93IGNvb3JkaW5hdGVzIChmb3IgZHJhd2luZyB3aXRoIEdldFdpbmRvd0RDKCkpLgorICoKKyAqIEZJWE1FOiAgQSBXaW45NSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgbmVlZGVkLgogICovCiBzdGF0aWMgdm9pZCBOQ19HZXRJbnNpZGVSZWN0KCBIV05EMzIgaHduZCwgUkVDVDMyICpyZWN0ICkKIHsKQEAgLTIxMyw2ICsyOTYsOCBAQAogCWlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19CT1JERVIpCiAJICAgIEluZmxhdGVSZWN0MzIoIHJlY3QsIC1TWVNNRVRSSUNTX0NYQk9SREVSLCAtU1lTTUVUUklDU19DWUJPUkRFUiApOwogICAgIH0KKworICAgIHJldHVybjsKIH0KIAogCkBAIC0yMjAsNiArMzA1LDggQEAKICAqICAgICAgICAgICBOQ19IYW5kbGVOQ0hpdFRlc3QKICAqCiAgKiBIYW5kbGUgYSBXTV9OQ0hJVFRFU1QgbWVzc2FnZS4gQ2FsbGVkIGZyb20gRGVmV2luZG93UHJvYygpLgorICoKKyAqIEZJWE1FOiAgQSBXaW45NSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgbmVlZGVkLgogICovCiBMT05HIE5DX0hhbmRsZU5DSGl0VGVzdCggSFdORDMyIGh3bmQsIFBPSU5UMTYgcHQgKQogewpAQCAtNDEzLDYgKzUwMCwxNTUgQEAKIH0KIAogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICB2b2lkICBOQ19EcmF3U3lzQnV0dG9uOTUoCisgKiAgICAgIEhXTkQzMiAgaHduZCwKKyAqICAgICAgSERDMzIgIGhkYywKKyAqICAgICAgQk9PTDMyICBkb3duICkKKyAqCisgKiAgIERyYXdzIGEgZmFrZSBXaW45NSBzeXN0ZW0gYnV0dG9uLiAgSG9ycmlibHkgYnJva2VuLiAgV2Ugc2hvdWxkIGJlIGRyYXdpbmcKKyAqICAgYW4gaWNvbiwgbm90IHRoZSBYLiAgKFRoaXMgd2lsbCByZXF1aXJlIHNvbWUgdGhvdWdodCkKKyAqCisgKiAgIEJ1Z3MKKyAqICAgICAgICBQbGFpbiBhbmQgc2ltcGx5IGRvZXNuJ3Qgd29yay4gIEZhaWxzIG1pc2VyYWJseSBmb3IgY2hpbGQgd2luZG93cy4KKyAqCisgKiAgIFJldmlzaW9uIGhpc3RvcnkKKyAqICAgICAgICAwNS1KdWwtMTk5NyBEYXZlIEN1dGhiZXJ0IChkYWN1dEBlY2UuY211LmVkdSkKKyAqICAgICAgICAgICAgIE9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGZyb20gTkNfRHJhd1N5c0J1dHRvbiBzb3VyY2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkICBOQ19EcmF3U3lzQnV0dG9uOTUoCisgICAgSFdORDMyICBod25kLAorICAgIEhEQzMyICBoZGMsCisgICAgQk9PTDMyICBkb3duICkKK3sKKyAgICBSRUNUMzIgcmVjdDsKKyAgICBIREMzMiBoZGNNZW07CisgICAgSEJJVE1BUDMyIGhiaXRtYXA7CisgICAgV05EICp3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZCApOworICAgIFNJWkUzMiAgYm1zejsKKworICAgIGlmKCAhKHduZFB0ci0+ZmxhZ3MgJiBXSU5fTUFOQUdFRCkgKQorICAgIHsKKwlOQ19HZXRJbnNpZGVSZWN0KCBod25kLCAmcmVjdCApOworCWhkY01lbSA9IENyZWF0ZUNvbXBhdGlibGVEQzMyKCBoZGMgKTsKKwloYml0bWFwID0gU2VsZWN0T2JqZWN0MzIoIGhkY01lbSwgaGJpdG1hcENsb3NlICk7CisJaWYoR2V0Qml0bWFwRGltZW5zaW9uRXgzMiggaGJpdG1hcENsb3NlLCAmYm1zeiApKSB7CisJICAgIEJpdEJsdDMyKGhkYywgcmVjdC5sZWZ0ICsgKHN5c01ldHJpY3NbU01fQ1hTSVpFXSAtIGJtc3ouY3gpIC8gMiArCisJCSAgICAgTkNfU3lzQ29udHJvbE51ZGdlLAorCQkgICAgIHJlY3QudG9wICsgKHN5c01ldHJpY3NbU01fQ1lTSVpFXSAtIGJtc3ouY3kgLSAxKSAvIDIsCisJCSAgICAgYm1zei5jeCwgYm1zei5jeSwKKwkJICAgICBoZGNNZW0sIDAsIDAsIGRvd24gPyBOT1RTUkNDT1BZIDogU1JDQ09QWSApOworCX0KKwlTZWxlY3RPYmplY3QzMiggaGRjTWVtLCBoYml0bWFwICk7CisJRGVsZXRlREMzMiggaGRjTWVtICk7CisJCisgICAgfQorICAgIHJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICBOQ19EcmF3TWF4QnV0dG9uOTUoCisgKiAgICAgIEhXTkQzMiAgaHduZCwKKyAqICAgICAgSERDMTYgIGhkYywKKyAqICAgICAgQk9PTDMyICBkb3duICkKKyAqCisgKiAgIERyYXdzIHRoZSBtYXhpbWl6ZSBidXR0b24gZm9yIFdpbjk1IHN0eWxlIHdpbmRvd3MuCisgKgorICogICBCdWdzCisgKiAgICAgICAgTWFueS4gIFNwYWNpbmcgbWlnaHQgc3RpbGwgYmUgaW5jb3JyZWN0LiAgTmVlZCB0byBmaXQgYSBjbG9zZQorICogICAgICAgIGJ1dHRvbiBiZXR3ZWVuIHRoZSBtYXggYnV0dG9uIGFuZCB0aGUgZWRnZS4gIERyYXdzIHRoZSB3cm9uZyB0aGluZworICogICAgICAgIChhIFdpbjMxIHVwLWRvd24pIHdoZW4gbWF4aW1pemVkLiAgU2hvdWxkIHNjYWxlIHRoZSBpbWFnZSB3aXRoIHRoZQorICogICAgICAgIHRpdGxlIGJhci4gIEFuZCBtb3JlLi4uCisgKgorICogICBSZXZpc2lvbiBoaXN0b3J5CisgKiAgICAgICAgMDUtSnVsLTE5OTcgRGF2ZSBDdXRoYmVydCAoZGFjdXRAZWNlLmNtdS5lZHUpCisgKiAgICAgICAgICAgICBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkICBOQ19EcmF3TWF4QnV0dG9uOTUoCisgICAgSFdORDMyIGh3bmQsCisgICAgSERDMTYgaGRjLAorICAgIEJPT0wzMiBkb3duICkKK3sKKyAgICBSRUNUMzIgcmVjdDsKKyAgICBXTkQgKnduZFB0ciA9IFdJTl9GaW5kV25kUHRyKCBod25kICk7CisgICAgU0laRTMyICBibXN6OworICAgIEhCSVRNQVAzMiAgYm07CisKKyAgICBpZiggISh3bmRQdHItPmZsYWdzICYgV0lOX01BTkFHRUQpICYmCisJR2V0Qml0bWFwRGltZW5zaW9uRXgzMigoYm0gPSBJc1pvb21lZDMyKGh3bmQpID8KKwkJCQkoZG93biA/IGhiaXRtYXBSZXN0b3JlRCA6IGhiaXRtYXBSZXN0b3JlICkgOgorCQkJCShkb3duID8gaGJpdG1hcE1heGltaXplRCA6IGhiaXRtYXBNYXhpbWl6ZSkpLAorCQkJICAgICAgICZibXN6KSkgeworCisJTkNfR2V0SW5zaWRlUmVjdCggaHduZCwgJnJlY3QgKTsKKwkKKwlHUkFQSF9EcmF3Qml0bWFwKCBoZGMsIGJtLAorCQkJICByZWN0LnJpZ2h0ICsgTkNfTWF4Q29udHJvbE51ZGdlIC0KKwkJCSAgKHN5c01ldHJpY3NbU01fQ1hTSVpFXSArIGJtc3ouY3gpIC8gMiwKKwkJCSAgcmVjdC50b3AgKyAoc3lzTWV0cmljc1tTTV9DWVNJWkVdIC0gYm1zei5jeSAtIDEpIC8gMiwKKwkJCSAgMCwgMCwgYm1zei5jeCwgYm1zei5jeSwgRkFMU0UgKTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICAgTkNfRHJhd01pbkJ1dHRvbjk1KAorICogICAgICBIV05EMzIgIGh3bmQsCisgKiAgICAgIEhEQzE2ICBoZGMsCisgKiAgICAgIEJPT0wzMiAgZG93biApCisgKgorICogICBEcmF3cyB0aGUgbWluaW1pemUgYnV0dG9uIGZvciBXaW45NSBzdHlsZSB3aW5kb3dzLgorICoKKyAqICAgQnVncworICogICAgICAgIE1hbnkuICBTcGFjaW5nIGlzIHN0aWxsIGluY29ycmVjdC4gIFNob3VsZCBzY2FsZSB0aGUgaW1hZ2Ugd2l0aCB0aGUKKyAqICAgICAgICB0aXRsZSBiYXIuICBBbmQgbW9yZS4uLgorICoKKyAqICAgUmV2aXNpb24gaGlzdG9yeQorICogICAgICAgIDA1LUp1bC0xOTk3IERhdmUgQ3V0aGJlcnQgKGRhY3V0QGVjZS5jbXUuZWR1KQorICogICAgICAgICAgICAgT3JpZ2luYWwgaW1wbGVtZW50YXRpb24uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCAgTkNfRHJhd01pbkJ1dHRvbjk1KAorICAgIEhXTkQzMiBod25kLAorICAgIEhEQzE2IGhkYywKKyAgICBCT09MMzIgZG93biApCit7CisgICAgUkVDVDMyIHJlY3Q7CisgICAgV05EICp3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZCApOworICAgIFNJWkUzMiAgYm1zejsKKyAgICBIQklUTUFQMzIgIGJtOworCisgICAgaWYoICEod25kUHRyLT5mbGFncyAmIFdJTl9NQU5BR0VEKSAmJgorCUdldEJpdG1hcERpbWVuc2lvbkV4MzIoKGJtID0gZG93biA/IGhiaXRtYXBNaW5pbWl6ZUQgOgorCQkJCWhiaXRtYXBNaW5pbWl6ZSksICZibXN6KSkgeworCQorCU5DX0dldEluc2lkZVJlY3QoIGh3bmQsICZyZWN0ICk7CisKKwlpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfTUFYSU1JWkVCT1gpCisJICAgIHJlY3QucmlnaHQgKz0gLTEgKyBOQ19NYXhDb250cm9sTnVkZ2UgLQorCQkoc3lzTWV0cmljc1tTTV9DWFNJWkVdICsgYm1zei5jeCkgLyAyOworCisJR1JBUEhfRHJhd0JpdG1hcCggaGRjLCBibSwgcmVjdC5yaWdodCArIE5DX01pbkNvbnRyb2xOdWRnZSAtCisJCQkgIChzeXNNZXRyaWNzW1NNX0NYU0laRV0gKyBibXN6LmN4KSAvIDIsCisJCQkgIHJlY3QudG9wICsgKHN5c01ldHJpY3NbU01fQ1lTSVpFXSAtIGJtc3ouY3kgLSAxKSAvIDIsCisJCQkgIDAsIDAsIGJtc3ouY3gsIGJtc3ouY3ksIEZBTFNFICk7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIE5DX0RyYXdGcmFtZQogICoKQEAgLTQyNCw2ICs2NjAsMTAgQEAKIHsKICAgICBJTlQzMiB3aWR0aCwgaGVpZ2h0OwogCisgICAgaWYoVFdFQUtfV2luOTVMb29rKQorCWZwcmludGYoIHN0ZGRlYiwgIk5DX0RyYXdGcmFtZSB3YXMgY2FsbGVkIGluIFdpbjk1IG1vZGUuICBBaWVlISAgIgorCQkgIlBsZWFzZSByZXBvcnQgdGhpcy5cbiIgKTsKKwogICAgIGlmIChkbGdGcmFtZSkKICAgICB7CiAJd2lkdGggPSBTWVNNRVRSSUNTX0NYRExHRlJBTUUgLSAxOwpAQCAtNDkzLDE2ICs3MzMsOTkgQEAKIH0KIAogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICB2b2lkICBOQ19EcmF3RnJhbWU5NSgKKyAqICAgICAgSERDMzIgIGhkYywKKyAqICAgICAgUkVDVDMyICAqcmVjdCwKKyAqICAgICAgQk9PTDMyICBkbGdGcmFtZSwKKyAqICAgICAgQk9PTDMyICBhY3RpdmUgKQorICoKKyAqICAgRHJhdyBhIHdpbmRvdyBmcmFtZSBpbnNpZGUgdGhlIGdpdmVuIHJlY3RhbmdsZSwgYW5kIHVwZGF0ZSB0aGUgcmVjdGFuZ2xlLgorICogICBUaGUgY29ycmVjdCBwZW4gZm9yIHRoZSBmcmFtZSBtdXN0IGJlIHNlbGVjdGVkIGluIHRoZSBEQy4KKyAqCisgKiAgIEJ1Z3MKKyAqICAgICAgICBNYW55LiAgRmlyc3QsIGp1c3Qgd2hhdCBJUyBhIGZyYW1lIGluIFdpbjk1PyAgTm90ZSB0aGF0IHRoZSAzRCBsb29rCisgKiAgICAgICAgb24gdGhlIG91dGVyIGVkZ2UgaXMgaGFuZGxlZCBieSBOQ19Eb05DUGFpbnQ5NS4gIEFzIGlzIHRoZSBpbm5lcgorICogICAgICAgIGVkZ2UuICBUaGUgaW5uZXIgcmVjdGFuZ2xlIGp1c3QgaW5zaWRlIHRoZSBmcmFtZSBpcyBoYW5kbGVkIGJ5IHRoZQorICogICAgICAgIENhcHRpb24gY29kZS4KKyAqCisgKiAgICAgICAgSW4gc2hvcnQsIGZvciBtb3N0IHBlb3BsZSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgYSBub3AgKHVubGVzcworICogICAgICAgIHlvdSBMSUtFIHRoaWNrIGJvcmRlcnMgaW4gV2luOTUvTlQ0LjAgLS0gSSd2ZSBiZWVuIHdvcmtpbmcgd2l0aAorICogICAgICAgIHRoZW0gbGF0ZWx5LCBidXQganVzdCB0byBnZXQgdGhpcyBjb2RlIHJpZ2h0KS4gIEV2ZW4gc28sIGl0IGRvZXNuJ3QKKyAqICAgICAgICBhcHBlYXIgdG8gYmUgc28uICBJdCdzIGJlaW5nIHdvcmtlZCBvbi4uLgorICogCisgKiAgIFJldmlzaW9uIGhpc3RvcnkKKyAqICAgICAgICAwNi1KdWwtMTk5NyBEYXZlIEN1dGhiZXJ0IChkYWN1dEBlY2UuY211LmVkdSkKKyAqICAgICAgICAgICAgIE9yaWdpbmFsIGltcGxlbWVudGF0aW9uIChiYXNlZCBvbiBOQ19EcmF3RnJhbWUpCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCAgTkNfRHJhd0ZyYW1lOTUoCisgICAgSERDMzIgIGhkYywKKyAgICBSRUNUMzIgICpyZWN0LAorICAgIEJPT0wzMiAgZGxnRnJhbWUsCisgICAgQk9PTDMyICBhY3RpdmUgKQoreworICAgIElOVDMyIHdpZHRoLCBoZWlnaHQ7CisKKyAgICBpZiAoZGxnRnJhbWUpCisgICAgeworCXdpZHRoID0gU1lTTUVUUklDU19DWERMR0ZSQU1FIC0gMTsKKwloZWlnaHQgPSBTWVNNRVRSSUNTX0NZRExHRlJBTUUgLSAxOworICAgICAgICBTZWxlY3RPYmplY3QzMiggaGRjLCBhY3RpdmUgPyBzeXNDb2xvck9iamVjdHMuaGJydXNoQWN0aXZlQ2FwdGlvbiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c0NvbG9yT2JqZWN0cy5oYnJ1c2hJbmFjdGl2ZUNhcHRpb24gKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwl3aWR0aCA9IHN5c01ldHJpY3NbU01fQ1hGUkFNRV0gLSBzeXNNZXRyaWNzW1NNX0NYRURHRV0gLSAxOworCWhlaWdodCA9IHN5c01ldHJpY3NbU01fQ1lGUkFNRV0gLSBzeXNNZXRyaWNzW1NNX0NZRURHRV0gLSAxOworICAgICAgICBTZWxlY3RPYmplY3QzMiggaGRjLCBhY3RpdmUgPyBzeXNDb2xvck9iamVjdHMuaGJydXNoQWN0aXZlQm9yZGVyIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzQ29sb3JPYmplY3RzLmhicnVzaEluYWN0aXZlQm9yZGVyICk7CisgICAgfQorCisgICAgLyogRHJhdyBmcmFtZSAqLworICAgIFBhdEJsdDMyKCBoZGMsIHJlY3QtPmxlZnQsIHJlY3QtPnRvcCwKKyAgICAgICAgICAgICAgcmVjdC0+cmlnaHQgLSByZWN0LT5sZWZ0LCBoZWlnaHQsIFBBVENPUFkgKTsKKyAgICBQYXRCbHQzMiggaGRjLCByZWN0LT5sZWZ0LCByZWN0LT50b3AsCisgICAgICAgICAgICAgIHdpZHRoLCByZWN0LT5ib3R0b20gLSByZWN0LT50b3AsIFBBVENPUFkgKTsKKyAgICBQYXRCbHQzMiggaGRjLCByZWN0LT5sZWZ0LCByZWN0LT5ib3R0b20sCisgICAgICAgICAgICAgIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgLWhlaWdodCwgUEFUQ09QWSApOworICAgIFBhdEJsdDMyKCBoZGMsIHJlY3QtPnJpZ2h0LCByZWN0LT50b3AsCisgICAgICAgICAgICAgIC13aWR0aCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wLCBQQVRDT1BZICk7CisKKyAgICBJbmZsYXRlUmVjdDMyKCByZWN0LCAtd2lkdGgsIC1oZWlnaHQgKTsKKworICAgIGlmKCFkbGdGcmFtZSkgeworCS8qIERyYXcgaW5uZXIgcmVjdGFuZ2xlICovCisJR1JBUEhfRHJhd1JlY3RhbmdsZSggaGRjLCByZWN0LT5sZWZ0LCByZWN0LT50b3AsCisJCQkgICAgIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwKKwkJCSAgICAgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wLAorCQkJICAgICBUV0VBS19QZW5DMDk1ICk7CisKKwlJbmZsYXRlUmVjdDMyKCByZWN0LCAtMSwgLTEgKTsKKyAgICB9Cit9CisKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBOQ19EcmF3TW92aW5nRnJhbWUKICAqCiAgKiBEcmF3IHRoZSBmcmFtZSB1c2VkIHdoZW4gbW92aW5nIG9yIHJlc2l6aW5nIHdpbmRvdy4KKyAqCisgKiBGSVhNRTogIFRoaXMgY2F1c2VzIHByb2JsZW1zIGluIFdpbjk1IG1vZGUuICAod2h5PykKICAqLwotc3RhdGljIHZvaWQgTkNfRHJhd01vdmluZ0ZyYW1lKCBIREMxNiBoZGMsIFJFQ1QxNiAqcmVjdCwgQk9PTDMyIHRoaWNrZnJhbWUgKQorc3RhdGljIHZvaWQgTkNfRHJhd01vdmluZ0ZyYW1lKCBIREMzMiBoZGMsIFJFQ1QzMiAqcmVjdCwgQk9PTDMyIHRoaWNrZnJhbWUgKQogewotICAgIGlmICh0aGlja2ZyYW1lKSBGYXN0V2luZG93RnJhbWUoIGhkYywgcmVjdCwgU1lTTUVUUklDU19DWEZSQU1FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNZU01FVFJJQ1NfQ1lGUkFNRSwgUEFUSU5WRVJUICk7Ci0gICAgZWxzZSBEcmF3Rm9jdXNSZWN0MTYoIGhkYywgcmVjdCApOworICAgIGlmICh0aGlja2ZyYW1lKQorICAgIHsKKyAgICAgICAgUkVDVDE2IHIxNjsKKyAgICAgICAgQ09OVl9SRUNUMzJUTzE2KCByZWN0LCAmcjE2ICk7CisgICAgICAgIEZhc3RXaW5kb3dGcmFtZSggaGRjLCAmcjE2LCBTWVNNRVRSSUNTX0NYRlJBTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgU1lTTUVUUklDU19DWUZSQU1FLCBQQVRJTlZFUlQgKTsKKyAgICB9CisgICAgZWxzZSBEcmF3Rm9jdXNSZWN0MzIoIGhkYywgcmVjdCApOwogfQogCiAKQEAgLTU3OSw2ICs5MDIsOTEgQEAKIH0KIAogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICBOQ19EcmF3Q2FwdGlvbjk1KAorICogICAgICBIREMzMiAgaGRjLAorICogICAgICBSRUNUMzIgICpyZWN0LAorICogICAgICBIV05EMzIgIGh3bmQsCisgKiAgICAgIERXT1JEICBzdHlsZSwKKyAqICAgICAgQk9PTDMyICBhY3RpdmUgKQorICoKKyAqICAgRHJhdyB0aGUgd2luZG93IGNhcHRpb24gZm9yIFdpbjk1IHN0eWxlIHdpbmRvd3MuCisgKiAgIFRoZSBjb3JyZWN0IHBlbiBmb3IgdGhlIHdpbmRvdyBmcmFtZSBtdXN0IGJlIHNlbGVjdGVkIGluIHRoZSBEQy4KKyAqCisgKiAgIEJ1Z3MKKyAqICAgICAgICBIZXksIGEgZnVuY3Rpb24gdGhhdCBmaW5hbGx5IHdvcmtzISAgV2VsbCwgYWxtb3N0LiAgSW4gV2luOTUsIHRoZQorICogICAgICAgIHRpdGxlIGhhcyBpdHMgb3duIGZvbnQgLS0gbm90IHRoZSBzeXN0ZW0gZm9udC4gIEl0J3MgYmVpbmcgd29ya2VkCisgKiAgICAgICAgb24uCisgKgorICogICBSZXZpc2lvbiBoaXN0b3J5CisgKiAgICAgICAgMDUtSnVsLTE5OTcgRGF2ZSBDdXRoYmVydCAoZGFjdXRAZWNlLmNtdS5lZHUpCisgKiAgICAgICAgICAgICBPcmlnaW5hbCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkICBOQ19EcmF3Q2FwdGlvbjk1KAorICAgIEhEQzMyICBoZGMsCisgICAgUkVDVDMyICAqcmVjdCwKKyAgICBIV05EMzIgaHduZCwKKyAgICBEV09SRCAgc3R5bGUsCisgICAgQk9PTDMyICBhY3RpdmUgKQoreworICAgIFJFQ1QzMiAgciA9ICpyZWN0OworICAgIFdORCAgICp3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZCApOworICAgIGNoYXIgIGJ1ZmZlclsyNTZdOworCisgICAgaWYgKHduZFB0ci0+ZmxhZ3MgJiBXSU5fTUFOQUdFRCkgcmV0dXJuOworCisgICAgRmlsbFJlY3QzMiggaGRjLCAmciwgYWN0aXZlID8gc3lzQ29sb3JPYmplY3RzLmhicnVzaEFjdGl2ZUNhcHRpb24gOiAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c0NvbG9yT2JqZWN0cy5oYnJ1c2hJbmFjdGl2ZUNhcHRpb24gKTsKKworICAgIGlmICghaGJpdG1hcENsb3NlKSB7CisJaWYgKCEoaGJpdG1hcENsb3NlID0gTG9hZEJpdG1hcDE2KCAwLCBNQUtFSU5UUkVTT1VSQ0UoT0JNX0NMT1NFKSApKSkKKwkgICAgcmV0dXJuOworCWhiaXRtYXBNaW5pbWl6ZSAgPSBMb2FkQml0bWFwMTYoIDAsIE1BS0VJTlRSRVNPVVJDRShPQk1fUkVEVUNFKSApOworCWhiaXRtYXBNaW5pbWl6ZUQgPSBMb2FkQml0bWFwMTYoIDAsIE1BS0VJTlRSRVNPVVJDRShPQk1fUkVEVUNFRCkgKTsKKwloYml0bWFwTWF4aW1pemUgID0gTG9hZEJpdG1hcDE2KCAwLCBNQUtFSU5UUkVTT1VSQ0UoT0JNX1pPT00pICk7CisJaGJpdG1hcE1heGltaXplRCA9IExvYWRCaXRtYXAxNiggMCwgTUFLRUlOVFJFU09VUkNFKE9CTV9aT09NRCkgKTsKKwloYml0bWFwUmVzdG9yZSAgID0gTG9hZEJpdG1hcDE2KCAwLCBNQUtFSU5UUkVTT1VSQ0UoT0JNX1JFU1RPUkUpICk7CisJaGJpdG1hcFJlc3RvcmVEICA9IExvYWRCaXRtYXAxNiggMCwgTUFLRUlOVFJFU09VUkNFKE9CTV9SRVNUT1JFRCkgKTsKKyAgICB9CisgICAgCisgICAgaWYgKHduZFB0ci0+ZHdFeFN0eWxlICYgV1NfRVhfRExHTU9EQUxGUkFNRSkgeworCUhCUlVTSDMyIGhicnVzaE9sZCA9IFNlbGVjdE9iamVjdDMyKGhkYywgc3lzQ29sb3JPYmplY3RzLmhicnVzaFdpbmRvdyk7CisJUGF0Qmx0MzIoIGhkYywgci5sZWZ0LCByLnRvcCwgMSwgci5ib3R0b20tci50b3ArMSxQQVRDT1BZICk7CisJUGF0Qmx0MzIoIGhkYywgci5yaWdodC0xLCByLnRvcCwgMSwgci5ib3R0b20tci50b3ArMSwgUEFUQ09QWSApOworCVBhdEJsdDMyKCBoZGMsIHIubGVmdCwgci50b3AtMSwgci5yaWdodC1yLmxlZnQsIDEsIFBBVENPUFkgKTsKKwlyLmxlZnQrKzsKKwlyLnJpZ2h0LS07CisJU2VsZWN0T2JqZWN0MzIoIGhkYywgaGJydXNoT2xkICk7CisgICAgfQorCisgICAgaWYgKHN0eWxlICYgV1NfU1lTTUVOVSkgeworCU5DX0RyYXdTeXNCdXR0b245NSggaHduZCwgaGRjLCBGQUxTRSApOworCXIubGVmdCArPSBTWVNNRVRSSUNTX0NYU0laRSArIDE7CisgICAgfQorICAgIGlmIChzdHlsZSAmIFdTX01BWElNSVpFQk9YKSB7CisJTkNfRHJhd01heEJ1dHRvbjk1KCBod25kLCBoZGMsIEZBTFNFICk7CisJci5yaWdodCAtPSBTWVNNRVRSSUNTX0NYU0laRSArIDE7CisgICAgfQorICAgIGlmIChzdHlsZSAmIFdTX01JTklNSVpFQk9YKSB7CisJTkNfRHJhd01pbkJ1dHRvbjk1KCBod25kLCBoZGMsIEZBTFNFICk7CisJci5yaWdodCAtPSBTWVNNRVRSSUNTX0NYU0laRSArIDE7CisgICAgfQorCisgICAgaWYgKEdldFdpbmRvd1RleHQzMkEoIGh3bmQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgKSkgeworCWlmIChhY3RpdmUpIFNldFRleHRDb2xvcjMyKCBoZGMsIEdldFN5c0NvbG9yMzIoIENPTE9SX0NBUFRJT05URVhUICkgKTsKKwllbHNlIFNldFRleHRDb2xvcjMyKCBoZGMsIEdldFN5c0NvbG9yMzIoIENPTE9SX0lOQUNUSVZFQ0FQVElPTlRFWFQgKSApOworCVNldEJrTW9kZTMyKCBoZGMsIFRSQU5TUEFSRU5UICk7CisJci50b3AgKz0gTkNfQ2FwdGlvblRvcE51ZGdlIC0gMjsKKwlyLmxlZnQgKz0gTkNfQ2FwdGlvbkxlZnROdWRnZTsKKwlEcmF3VGV4dDMyQSggaGRjLCBidWZmZXIsIC0xLCAmciwgTkNfQ2FwdGlvblRleHRGbGFncyApOworICAgIH0KK30KKworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIE5DX0RvTkNQYWludAogICoKQEAgLTY2OCw2ICsxMDc2LDEzNCBAQAogfQogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgIHZvaWQgIE5DX0RvTkNQYWludDk1KAorICogICAgICBXTkQgICp3bmRQdHIsCisgKiAgICAgIEhSR04zMiAgY2xpcCwKKyAqICAgICAgQk9PTDMyICBzdXBwcmVzc19tZW51cGFpbnQgKQorICoKKyAqICAgUGFpbnQgdGhlIG5vbi1jbGllbnQgYXJlYSBmb3IgV2luOTUgd2luZG93cy4gIFRoZSBjbGlwIHJlZ2lvbiBpcworICogICBjdXJyZW50bHkgaWdub3JlZC4KKyAqCisgKiAgIEJ1Z3MKKyAqICAgICAgICBncmVwIC1FIC1BMTAgLUI1IFwoOTVcKVx8XChCdWdzXClcfFwoRklYTUVcKSB3aW5kb3dzL25vbmNsaWVudC5jIFwKKyAqICAgICAgICAgICBtaXNjL3R3ZWFrLmMgY29udHJvbHMvbWVudS5jICAjIDotKQorICoKKyAqICAgUmV2aXNpb24gaGlzdG9yeQorICogICAgICAgIDAzLUp1bC0xOTk3IERhdmUgQ3V0aGJlcnQgKGRhY3V0QGVjZS5jbXUuZWR1KQorICogICAgICAgICAgICAgT3JpZ2luYWwgaW1wbGVtZW50YXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgIE5DX0RvTkNQYWludDk1KAorICAgIFdORCAgKnduZFB0ciwKKyAgICBIUkdOMzIgIGNsaXAsCisgICAgQk9PTDMyICBzdXBwcmVzc19tZW51cGFpbnQgKQoreworICAgIEhEQzMyIGhkYzsKKyAgICBSRUNUMzIgcmVjdDsKKyAgICBCT09MMzIgYWN0aXZlOworICAgIEhXTkQzMiBod25kID0gd25kUHRyLT5od25kU2VsZjsKKworICAgIGlmICggd25kUHRyLT5kd1N0eWxlICYgV1NfTUlOSU1JWkUgfHwKKwkhV0lOX0lzV2luZG93RHJhd2FibGUoIHduZFB0ciwgMCApKSByZXR1cm47IC8qIE5vdGhpbmcgdG8gZG8gKi8KKworICAgIGFjdGl2ZSAgPSB3bmRQdHItPmZsYWdzICYgV0lOX05DQUNUSVZBVEVEOworCisgICAgZHByaW50Zl9ub25jbGllbnQoc3RkZGViLCAiTkNfRG9OQ1BhaW50OTU6ICUwNHggJWRcbiIsIGh3bmQsIGFjdGl2ZSApOworCisgICAgaWYgKCEoaGRjID0gR2V0RENFeDMyKCBod25kLCAwLCBEQ1hfVVNFU1RZTEUgfCBEQ1hfV0lORE9XICkpKSByZXR1cm47CisKKyAgICBpZiAoRXhjbHVkZVZpc1JlY3QoIGhkYywgd25kUHRyLT5yZWN0Q2xpZW50LmxlZnQtd25kUHRyLT5yZWN0V2luZG93LmxlZnQsCisJCSAgICAgICAgd25kUHRyLT5yZWN0Q2xpZW50LnRvcC13bmRQdHItPnJlY3RXaW5kb3cudG9wLAorCQkgICAgICAgIHduZFB0ci0+cmVjdENsaWVudC5yaWdodC13bmRQdHItPnJlY3RXaW5kb3cubGVmdCwKKwkJICAgICAgICB3bmRQdHItPnJlY3RDbGllbnQuYm90dG9tLXduZFB0ci0+cmVjdFdpbmRvdy50b3AgKQorCT09IE5VTExSRUdJT04pCisgICAgeworCVJlbGVhc2VEQzMyKCBod25kLCBoZGMgKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgcmVjdC50b3AgPSByZWN0LmxlZnQgPSAwOworICAgIHJlY3QucmlnaHQgID0gd25kUHRyLT5yZWN0V2luZG93LnJpZ2h0IC0gd25kUHRyLT5yZWN0V2luZG93LmxlZnQ7CisgICAgcmVjdC5ib3R0b20gPSB3bmRQdHItPnJlY3RXaW5kb3cuYm90dG9tIC0gd25kUHRyLT5yZWN0V2luZG93LnRvcDsKKworICAgIFNlbGVjdE9iamVjdDMyKCBoZGMsIHN5c0NvbG9yT2JqZWN0cy5ocGVuV2luZG93RnJhbWUgKTsKKworICAgIGlmKCEod25kUHRyLT5mbGFncyAmIFdJTl9NQU5BR0VEKSkgeworICAgICAgICBpZigod25kUHRyLT5kd1N0eWxlICYgV1NfQk9SREVSKSB8fCAod25kUHRyLT5kd1N0eWxlICYgV1NfRExHRlJBTUUpIHx8CisJICAgKHduZFB0ci0+ZHdFeFN0eWxlICYgV1NfRVhfRExHTU9EQUxGUkFNRSkpIHsKKwkgICAgVFdFQUtfRHJhd1JlbGllZlJlY3Q5NShoZGMsICZyZWN0KTsKKwkgICAgSW5mbGF0ZVJlY3QzMigmcmVjdCwgLTIsIC0yKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChIQVNfRExHRlJBTUUoIHduZFB0ci0+ZHdTdHlsZSwgd25kUHRyLT5kd0V4U3R5bGUgKSkgCisgICAgICAgICAgICBOQ19EcmF3RnJhbWU5NSggaGRjLCAmcmVjdCwgVFJVRSwgYWN0aXZlICk7CisgICAgICAgIGVsc2UgaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX1RISUNLRlJBTUUpCisgICAgICAgICAgICBOQ19EcmF3RnJhbWU5NShoZGMsICZyZWN0LCBGQUxTRSwgYWN0aXZlICk7CisKKyAgICAgICAgaWYgKCh3bmRQdHItPmR3U3R5bGUgJiBXU19DQVBUSU9OKSA9PSBXU19DQVBUSU9OKQorICAgICAgICB7CisgICAgICAgICAgICBSRUNUMzIgIHIgPSByZWN0OworCSAgICBQT0lOVDMyICBzZXBbMl0gPSB7IHsgcmVjdC5sZWZ0LAorCQkJCSAgcmVjdC50b3AgKyBzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl0gLSAyIH0sCisJCQkJeyByZWN0LnJpZ2h0LAorCQkJCSAgcmVjdC50b3AgKyBzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl0gLSAyIH0gfTsKKworICAgICAgICAgICAgci5ib3R0b20gPSByZWN0LnRvcCArIHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXSAtIDI7CisgICAgICAgICAgICByZWN0LnRvcCArPSBzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl0gLSAyICsgc3lzTWV0cmljc1tTTV9DWUJPUkRFUl07CisgICAgICAgICAgICBOQ19EcmF3Q2FwdGlvbjk1KCBoZGMsICZyLCBod25kLCB3bmRQdHItPmR3U3R5bGUsIGFjdGl2ZSApOworCSAgICBHUkFQSF9EcmF3TGluZXMoIGhkYywgc2VwLCAxLCBUV0VBS19QZW5DMDk1ICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoSEFTX01FTlUod25kUHRyKSkKKyAgICB7CisJUkVDVDMyIHIgPSByZWN0OworCXIuYm90dG9tID0gcmVjdC50b3AgKyBzeXNNZXRyaWNzW1NNX0NZTUVOVV0gLSBzeXNNZXRyaWNzW1NNX0NZQk9SREVSXTsKKwlyLnRvcCAtPSBzeXNNZXRyaWNzW1NNX0NZQk9SREVSXTsKKwkKKwlkcHJpbnRmX25vbmNsaWVudChzdGRkZWIsICJEb05DUGFpbnQ5NTogQ2FsbGluZyBEcmF3TWVudUJhciB3aXRoICIKKwkJCSAgInJlY3QgKCVkLCAlZCktKCVkLCAlZClcbiIsIHIubGVmdCwgci50b3AsCisJCQkgIHIucmlnaHQsIHIuYm90dG9tKTsKKworCXJlY3QudG9wICs9IE1FTlVfRHJhd01lbnVCYXIoIGhkYywgJnIsIGh3bmQsIHN1cHByZXNzX21lbnVwYWludCApOworICAgIH0KKworICAgIGRwcmludGZfbm9uY2xpZW50KCBzdGRkZWIsICJBZnRlciBNZW51QmFyLCByZWN0IGlzICglZCwgJWQpLSglZCwgJWQpLlxuIiwKKwkJICAgICAgIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tICk7CisKKyAgICAvKiBEcmF3IHRoZSBpbm5lciBmcmFtZXMgKi8KKyAgICBHUkFQSF9EcmF3UmVjdGFuZ2xlKCBoZGMsIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQgLSByZWN0LmxlZnQsCisJCQkgcmVjdC5ib3R0b20gLSByZWN0LnRvcCwgVFdFQUtfUGVuQzA5NSApOworICAgIEluZmxhdGVSZWN0MzIoJnJlY3QsIC0xLCAtMSk7CisgICAgR1JBUEhfRHJhd0dlbmVyaWNSZWxpZWZSZWN0KCBoZGMsICZyZWN0LCAxLCAxLCBOQ19XaW5TaGFkb3c5NSwKKwkJCQkgTkNfV2luSGlnaGxpZ2h0OTUgKTsKKworICAgIEluZmxhdGVSZWN0MzIoJnJlY3QsIC0xLCAtMSk7CisKKyAgICAvKiBEcmF3IHRoZSBzY3JvbGwtYmFycyAqLworCisgICAgaWYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX1ZTQ1JPTEwpCisgICAgICAgIFNDUk9MTF9EcmF3U2Nyb2xsQmFyKCBod25kLCBoZGMsIFNCX1ZFUlQsIFRSVUUgKTsKKyAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfSFNDUk9MTCkKKyAgICAgICAgU0NST0xMX0RyYXdTY3JvbGxCYXIoIGh3bmQsIGhkYywgU0JfSE9SWiwgVFJVRSApOworCisgICAgLyogRHJhdyB0aGUgInNpemUtYm94IiAqLworICAgIGlmICgod25kUHRyLT5kd1N0eWxlICYgV1NfVlNDUk9MTCkgJiYgKHduZFB0ci0+ZHdTdHlsZSAmIFdTX0hTQ1JPTEwpKQorICAgIHsKKyAgICAgICAgUkVDVDMyIHIgPSByZWN0OworICAgICAgICByLmxlZnQgPSByLnJpZ2h0IC0gU1lTTUVUUklDU19DWFZTQ1JPTEwgKyAxOworICAgICAgICByLnRvcCAgPSByLmJvdHRvbSAtIFNZU01FVFJJQ1NfQ1lIU0NST0xMICsgMTsKKyAgICAgICAgRmlsbFJlY3QzMiggaGRjLCAmciwgc3lzQ29sb3JPYmplY3RzLmhicnVzaFNjcm9sbGJhciApOworICAgIH0gICAgCisKKyAgICBSZWxlYXNlREMzMiggaHduZCwgaGRjICk7Cit9CisKKworCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIE5DX0hhbmRsZU5DUGFpbnQKQEAgLTY4Miw3ICsxMjE4LDkgQEAKICAgICB7CiAJaWYoIHduZFB0ci0+ZHdTdHlsZSAmIFdTX01JTklNSVpFICkKIAkgICAgV0lOUE9TX1JlZHJhd0ljb25UaXRsZSggaHduZCApOwotCWVsc2UgCisJZWxzZSBpZihUV0VBS19XaW45NUxvb2spCisJICAgIE5DX0RvTkNQYWludDk1KCB3bmRQdHIsIGNsaXAsIEZBTFNFICk7CisJZWxzZQogCSAgICBOQ19Eb05DUGFpbnQoIHduZFB0ciwgY2xpcCwgRkFMU0UgKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC03MDgsNiArMTI0Niw4IEBACiAKIAlpZiggd25kUHRyLT5kd1N0eWxlICYgV1NfTUlOSU1JWkUgKSAKIAkgICAgV0lOUE9TX1JlZHJhd0ljb25UaXRsZSggd25kUHRyLT5od25kU2VsZiApOworCWVsc2UgaWYoIFRXRUFLX1dpbjk1TG9vayApCisJICAgIE5DX0RvTkNQYWludDk1KCB3bmRQdHIsIChIUkdOMzIpMSwgRkFMU0UgKTsKIAllbHNlCiAJICAgIE5DX0RvTkNQYWludCggd25kUHRyLCAoSFJHTjMyKTEsIEZBTFNFICk7CiAgICAgfQpAQCAtODIwLDggKzEzNjAsMTAgQEAKIAkgICAgIE1hcFdpbmRvd1BvaW50czE2KCAwLCBod25kLCAoTFBQT0lOVDE2KSZyVHJhY2ssIDIgKTsKIAogCSAgICAgLyogdHJhY2sgbW91c2Ugd2hpbGUgd2FpdGluZyBmb3IgV01fTEJVVFRPTlVQICovCi0KLQkgICAgIE5DX0RyYXdTeXNCdXR0b24oIGh3bmQsIGhkYywgYlRyYWNrICk7CisJICAgICBpZihUV0VBS19XaW45NUxvb2spCisJCSBOQ19EcmF3U3lzQnV0dG9uOTUoIGh3bmQsIGhkYywgYlRyYWNrICk7CisJICAgICBlbHNlCisJCSBOQ19EcmF3U3lzQnV0dG9uKCBod25kLCBoZGMsIGJUcmFjayApOwogCSAgICAgU2V0Q2FwdHVyZTMyKGh3bmQpOwogCSAgICAgZG8KIAkgICAgIHsKQEAgLTgzMyw3ICsxMzc1LDExIEBACiAJCSAgICB7ICAgaWYoIGJUcmFjayApIGNvbnRpbnVlOyB9CiAJCSAgICBlbHNlIAogCQkgICAgeyAgIGlmKCFiVHJhY2sgKSBjb250aW51ZTsgfQotCQkgICAgTkNfRHJhd1N5c0J1dHRvbiggaHduZCwgaGRjLCBiVHJhY2sgPSBiTmV3KTsKKworCQkgICAgaWYoVFdFQUtfV2luOTVMb29rKQorCQkJTkNfRHJhd1N5c0J1dHRvbjk1KCBod25kLCBoZGMsIGJUcmFjayA9IGJOZXcpOworCQkgICAgZWxzZQorCQkJTkNfRHJhd1N5c0J1dHRvbiggaHduZCwgaGRjLCBiVHJhY2sgPSBiTmV3KTsKIAkJfQogCSAgICAgfSB3aGlsZSggbXNnLm1lc3NhZ2UgIT0gV01fTEJVVFRPTlVQICk7CiAKQEAgLTk0MywxMSArMTQ4OSwxMiBAQAogc3RhdGljIHZvaWQgTkNfRG9TaXplTW92ZSggSFdORDMyIGh3bmQsIFdPUkQgd1BhcmFtLCBQT0lOVDE2IHB0ICkKIHsKICAgICBNU0cxNiBtc2c7Ci0gICAgUkVDVDE2IHNpemluZ1JlY3QsIG1vdXNlUmVjdDsKKyAgICBSRUNUMzIgc2l6aW5nUmVjdCwgbW91c2VSZWN0OwogICAgIEhEQzMyIGhkYzsKICAgICBMT05HIGhpdHRlc3QgPSAoTE9ORykod1BhcmFtICYgMHgwZik7CiAgICAgSENVUlNPUjE2IGhEcmFnQ3Vyc29yID0gMCwgaE9sZEN1cnNvciA9IDA7Ci0gICAgUE9JTlQxNiAgIG1pblRyYWNrLCBtYXhUcmFjaywgY2FwdHVyZVBvaW50ID0gcHQ7CisgICAgUE9JTlQzMiBtaW5UcmFjaywgbWF4VHJhY2s7CisgICAgUE9JTlQxNiBjYXB0dXJlUG9pbnQgPSBwdDsKICAgICBXTkQgKiAgICAgd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKTsKICAgICBCT09MMzIgICAgdGhpY2tmcmFtZSA9IEhBU19USElDS0ZSQU1FKCB3bmRQdHItPmR3U3R5bGUgKTsKICAgICBCT09MMzIgICAgaWNvbmljID0gd25kUHRyLT5kd1N0eWxlICYgV1NfTUlOSU1JWkU7CkBAIC05ODQsOSArMTUzMSw5IEBACiAgICAgV0lOUE9TX0dldE1pbk1heEluZm8oIHduZFB0ciwgTlVMTCwgTlVMTCwgJm1pblRyYWNrLCAmbWF4VHJhY2sgKTsKICAgICBzaXppbmdSZWN0ID0gd25kUHRyLT5yZWN0V2luZG93OwogICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19DSElMRCkKLQlHZXRDbGllbnRSZWN0MTYoIHduZFB0ci0+cGFyZW50LT5od25kU2VsZiwgJm1vdXNlUmVjdCApOworCUdldENsaWVudFJlY3QzMiggd25kUHRyLT5wYXJlbnQtPmh3bmRTZWxmLCAmbW91c2VSZWN0ICk7CiAgICAgZWxzZSAKLSAgICAgICAgU2V0UmVjdDE2KCZtb3VzZVJlY3QsIDAsIDAsIFNZU01FVFJJQ1NfQ1hTQ1JFRU4sIFNZU01FVFJJQ1NfQ1lTQ1JFRU4pOworICAgICAgICBTZXRSZWN0MzIoJm1vdXNlUmVjdCwgMCwgMCwgU1lTTUVUUklDU19DWFNDUkVFTiwgU1lTTUVUUklDU19DWVNDUkVFTik7CiAgICAgaWYgKE9OX0xFRlRfQk9SREVSKGhpdHRlc3QpKQogICAgIHsKIAltb3VzZVJlY3QubGVmdCAgPSBNQVgoIG1vdXNlUmVjdC5sZWZ0LCBzaXppbmdSZWN0LnJpZ2h0LW1heFRyYWNrLnggKTsKQEAgLTEwNzksOSArMTYyNiw5IEBACiAJICAgIGlmIChtc2cubWVzc2FnZSA9PSBXTV9LRVlET1dOKSBTZXRDdXJzb3JQb3MzMiggcHQueCwgcHQueSApOwogCSAgICBlbHNlCiAJICAgIHsKLQkJUkVDVDE2IG5ld1JlY3QgPSBzaXppbmdSZWN0OworCQlSRUNUMzIgbmV3UmVjdCA9IHNpemluZ1JlY3Q7CiAKLQkJaWYgKGhpdHRlc3QgPT0gSFRDQVBUSU9OKSBPZmZzZXRSZWN0MTYoICZuZXdSZWN0LCBkeCwgZHkgKTsKKwkJaWYgKGhpdHRlc3QgPT0gSFRDQVBUSU9OKSBPZmZzZXRSZWN0MzIoICZuZXdSZWN0LCBkeCwgZHkgKTsKIAkJaWYgKE9OX0xFRlRfQk9SREVSKGhpdHRlc3QpKSBuZXdSZWN0LmxlZnQgKz0gZHg7CiAJCWVsc2UgaWYgKE9OX1JJR0hUX0JPUkRFUihoaXR0ZXN0KSkgbmV3UmVjdC5yaWdodCArPSBkeDsKIAkJaWYgKE9OX1RPUF9CT1JERVIoaGl0dGVzdCkpIG5ld1JlY3QudG9wICs9IGR5OwpAQCAtMTEyMCwxMiArMTY2NywxMiBAQAogICAgICAgIFJFQ1QxNiogcHIgPSBTRUdQVFJfTkVXKFJFQ1QxNik7CiAgICAgICAgaWYoIHByICkKICAgICAgICB7Ci0JICpwciA9IHNpemluZ1JlY3Q7CisgICAgICAgICAgIENPTlZfUkVDVDMyVE8xNiggJnNpemluZ1JlY3QsIHByICk7CiAJICBpZiggSE9PS19DYWxsSG9va3MxNiggV0hfQ0JULCBIQ0JUX01PVkVTSVpFLCBod25kLAogCQkJICAgICAgICAoTFBBUkFNKVNFR1BUUl9HRVQocHIpKSApCiAJICAgICAgc2l6aW5nUmVjdCA9IHduZFB0ci0+cmVjdFdpbmRvdzsKIAkgIGVsc2UKLQkgICAgICBzaXppbmdSZWN0ID0gKnByOworCSAgICAgIENPTlZfUkVDVDE2VE8zMiggcHIsICZzaXppbmdSZWN0ICk7CiAJICBTRUdQVFJfRlJFRShwcik7CiAgICAgICAgfQogICAgIH0KQEAgLTExNjQsOCArMTcxMSwxNiBAQAogICAgIEJPT0wzMiBwcmVzc2VkID0gVFJVRTsKIAogICAgIFNldENhcHR1cmUzMiggaHduZCApOwotICAgIGlmICh3UGFyYW0gPT0gSFRNSU5CVVRUT04pIE5DX0RyYXdNaW5CdXR0b24oIGh3bmQsIGhkYywgVFJVRSApOwotICAgIGVsc2UgTkNfRHJhd01heEJ1dHRvbiggaHduZCwgaGRjLCBUUlVFICk7CisgICAgaWYgKHdQYXJhbSA9PSBIVE1JTkJVVFRPTikKKwlpZihUV0VBS19XaW45NUxvb2spCisJICAgIE5DX0RyYXdNaW5CdXR0b245NSggaHduZCwgaGRjLCBUUlVFICk7CisJZWxzZQorCSAgICBOQ19EcmF3TWluQnV0dG9uKCBod25kLCBoZGMsIFRSVUUgKTsKKyAgICBlbHNlCisJaWYoVFdFQUtfV2luOTVMb29rKQorCSAgICBOQ19EcmF3TWF4QnV0dG9uOTUoIGh3bmQsIGhkYywgVFJVRSApOworCWVsc2UKKwkgICAgTkNfRHJhd01heEJ1dHRvbiggaHduZCwgaGRjLCBUUlVFICk7CiAKICAgICBkbwogICAgIHsKQEAgLTExNzUsMTMgKzE3MzAsMjkgQEAKIAlwcmVzc2VkID0gKE5DX0hhbmRsZU5DSGl0VGVzdCggaHduZCwgbXNnLnB0ICkgPT0gd1BhcmFtKTsKIAlpZiAocHJlc3NlZCAhPSBvbGRzdGF0ZSkKIAl7Ci0JICAgIGlmICh3UGFyYW0gPT0gSFRNSU5CVVRUT04pIE5DX0RyYXdNaW5CdXR0b24oIGh3bmQsIGhkYywgcHJlc3NlZCApOwotCSAgICBlbHNlIE5DX0RyYXdNYXhCdXR0b24oIGh3bmQsIGhkYywgcHJlc3NlZCApOwkgICAgCisJICAgIGlmICh3UGFyYW0gPT0gSFRNSU5CVVRUT04pCisJCWlmKFRXRUFLX1dpbjk1TG9vaykKKwkJICAgIE5DX0RyYXdNaW5CdXR0b245NSggaHduZCwgaGRjLCBwcmVzc2VkICk7CisJCWVsc2UKKwkJICAgIE5DX0RyYXdNaW5CdXR0b24oIGh3bmQsIGhkYywgcHJlc3NlZCApOworCSAgICBlbHNlCisJCWlmKFRXRUFLX1dpbjk1TG9vaykKKwkJICAgIE5DX0RyYXdNYXhCdXR0b245NSggaHduZCwgaGRjLCBwcmVzc2VkICk7CisJCWVsc2UKKwkJICAgIE5DX0RyYXdNYXhCdXR0b24oIGh3bmQsIGhkYywgcHJlc3NlZCApOwogCX0KICAgICB9IHdoaWxlIChtc2cubWVzc2FnZSAhPSBXTV9MQlVUVE9OVVApOwogCi0gICAgaWYgKHdQYXJhbSA9PSBIVE1JTkJVVFRPTikgTkNfRHJhd01pbkJ1dHRvbiggaHduZCwgaGRjLCBGQUxTRSApOwotICAgIGVsc2UgTkNfRHJhd01heEJ1dHRvbiggaHduZCwgaGRjLCBGQUxTRSApOworICAgIGlmICh3UGFyYW0gPT0gSFRNSU5CVVRUT04pCisJaWYoVFdFQUtfV2luOTVMb29rKQorCSAgICBOQ19EcmF3TWluQnV0dG9uOTUoIGh3bmQsIGhkYywgRkFMU0UgKTsKKwllbHNlCisJICAgIE5DX0RyYXdNaW5CdXR0b24oIGh3bmQsIGhkYywgRkFMU0UgKTsKKyAgICBlbHNlCisJaWYoVFdFQUtfV2luOTVMb29rKQorCSAgICBOQ19EcmF3TWF4QnV0dG9uOTUoIGh3bmQsIGhkYywgRkFMU0UgKTsKKwllbHNlCisJICAgIE5DX0RyYXdNYXhCdXR0b24oIGh3bmQsIGhkYywgRkFMU0UgKTsKIAogICAgIFJlbGVhc2VDYXB0dXJlKCk7CiAgICAgUmVsZWFzZURDMzIoIGh3bmQsIGhkYyApOwpkaWZmIC0tZ2l0IGEvd2luZG93cy9xdWV1ZS5jIGIvd2luZG93cy9xdWV1ZS5jCmluZGV4IDk4NDVjMWEuLjY2NmY4N2IgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvcXVldWUuYworKysgYi93aW5kb3dzL3F1ZXVlLmMKQEAgLTMyNSwxNiArMzI1LDMzIEBACiAJCQkJKHVuc2lnbmVkKXF1ZXVlLT5zbVJlc3VsdEN1cnJlbnQsICh1bnNpZ25lZClwcmV2Q3RybFB0ciApOwogICAgIFFVRVVFX1NldFdha2VCaXQoIHNlbmRlclEsIFFTX1NNUEFSQU1TRlJFRSApOwogCi0gICAgZHByaW50Zl9tc2coc3RkZGViLCAiXHRyY206IGNhbGxpbmcgd25kcHJvYyAtICUwNHggJTA0eCAlMDR4ICUwOHhcbiIsCi0gICAgICAgICAgICBzZW5kZXJRLT5oV25kLCBzZW5kZXJRLT5tc2csIHNlbmRlclEtPndQYXJhbSwgKHVuc2lnbmVkKXNlbmRlclEtPmxQYXJhbSApOworICAgIGRwcmludGZfbXNnKHN0ZGRlYiwgIlx0cmNtOiBjYWxsaW5nIHduZHByb2MgLSAlMDR4ICUwNHggJTA0eCUwNHggJTA4eFxuIiwKKyAgICAgICAgICAgICAgICBzZW5kZXJRLT5oV25kLCBzZW5kZXJRLT5tc2csIHNlbmRlclEtPndQYXJhbUhpZ2gsCisgICAgICAgICAgICAgICAgc2VuZGVyUS0+d1BhcmFtLCAodW5zaWduZWQpc2VuZGVyUS0+bFBhcmFtICk7CiAKICAgICBpZiAoSXNXaW5kb3czMiggc2VuZGVyUS0+aFduZCApKQogICAgIHsKKyAgICAgICAgV05EICp3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggc2VuZGVyUS0+aFduZCApOwogICAgICAgICBEV09SRCBleHRyYUluZm8gPSBxdWV1ZS0+R2V0TWVzc2FnZUV4dHJhSW5mb1ZhbDsKICAgICAgICAgcXVldWUtPkdldE1lc3NhZ2VFeHRyYUluZm9WYWwgPSBzZW5kZXJRLT5HZXRNZXNzYWdlRXh0cmFJbmZvVmFsOwogCi0gICAgICAgIHJlc3VsdCA9IENhbGxXaW5kb3dQcm9jMTYoIChXTkRQUk9DMTYpR2V0V2luZG93TG9uZzE2KHNlbmRlclEtPmhXbmQsIEdXTF9XTkRQUk9DKSwKLQkJCQkgICBzZW5kZXJRLT5oV25kLCBzZW5kZXJRLT5tc2csIHNlbmRlclEtPndQYXJhbSwgc2VuZGVyUS0+bFBhcmFtICk7CisgICAgICAgIGlmIChzZW5kZXJRLT5mbGFncyAmIFFVRVVFX1NNX1dJTjMyKQorICAgICAgICB7CisgICAgICAgICAgICBXUEFSQU0zMiB3UGFyYW0gPSBNQUtFTE9ORyggc2VuZGVyUS0+d1BhcmFtLCBzZW5kZXJRLT53UGFyYW1IaWdoICk7CisgICAgICAgICAgICBkcHJpbnRmX21zZyhzdGRkZWIsICJcdHJjbTogbXNnIGlzIFdpbjMyXG4iICk7CisgICAgICAgICAgICBpZiAoc2VuZGVyUS0+ZmxhZ3MgJiBRVUVVRV9TTV9VTklDT0RFKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IENhbGxXaW5kb3dQcm9jMzJXKCB3bmRQdHItPndpbnByb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRlclEtPmhXbmQsIHNlbmRlclEtPm1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1BhcmFtLCBzZW5kZXJRLT5sUGFyYW0gKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBDYWxsV2luZG93UHJvYzMyQSggd25kUHRyLT53aW5wcm9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXJRLT5oV25kLCBzZW5kZXJRLT5tc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdQYXJhbSwgc2VuZGVyUS0+bFBhcmFtICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAgLyogV2luMTYgbWVzc2FnZSAqLworICAgICAgICAgICAgcmVzdWx0ID0gQ2FsbFdpbmRvd1Byb2MxNiggKFdORFBST0MxNil3bmRQdHItPndpbnByb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXJRLT5oV25kLCBzZW5kZXJRLT5tc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXJRLT53UGFyYW0sIHNlbmRlclEtPmxQYXJhbSApOwogCiAgICAgICAgIHF1ZXVlLT5HZXRNZXNzYWdlRXh0cmFJbmZvVmFsID0gZXh0cmFJbmZvOyAgLyogUmVzdG9yZSBleHRyYSBpbmZvICovCiAJZHByaW50Zl9tc2coc3RkZGViLCJcdHJjbTogcmVzdWx0ID0gICUwOHhcbiIsICh1bnNpZ25lZClyZXN1bHQgKTsKQEAgLTc0MCw4ICs3NTcsOCBAQAogICAgIGlmICgoaFF1ZXVlID0gR2V0VGFza1F1ZXVlKDApKSAhPSAwKSAKICAgICB7CiAgICAgICAgTUVTU0FHRVFVRVVFICpvbGRRID0gKE1FU1NBR0VRVUVVRSAqKUdsb2JhbExvY2sxNiggaFF1ZXVlICk7Ci0gICAgICAgbWVtY3B5KCAmcXVldWVQdHItPnJlc2VydmVkMiwgJm9sZFEtPnJlc2VydmVkMiwgCi0JCQkoaW50KW9sZFEtPm1lc3NhZ2VzIC0gKGludCkoJm9sZFEtPnJlc2VydmVkMikgKTsKKyAgICAgICBtZW1jcHkoICZxdWV1ZVB0ci0+d1BhcmFtSGlnaCwgJm9sZFEtPndQYXJhbUhpZ2gsCisJCQkoaW50KW9sZFEtPm1lc3NhZ2VzIC0gKGludCkoJm9sZFEtPndQYXJhbUhpZ2gpICk7CiAgICAgICAgSE9PS19SZXNldFF1ZXVlSG9va3MoIGhOZXdRdWV1ZSApOwogICAgICAgIGlmKCBXSU5fR2V0RGVza3RvcCgpLT5obWVtVGFza1EgPT0gaFF1ZXVlICkKIAkgICBXSU5fR2V0RGVza3RvcCgpLT5obWVtVGFza1EgPSBoTmV3UXVldWU7CmRpZmYgLS1naXQgYS93aW5kb3dzL3N5c2NvbG9yLmMgYi93aW5kb3dzL3N5c2NvbG9yLmMKaW5kZXggN2JjNDU1Yi4uMTRkMDZlYSAxMDA2NDQKLS0tIGEvd2luZG93cy9zeXNjb2xvci5jCisrKyBiL3dpbmRvd3Mvc3lzY29sb3IuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgImdkaS5oIgogI2luY2x1ZGUgInN5c2NvbG9yLmgiCiAjaW5jbHVkZSAic3RkZGVidWcuaCIKKyNpbmNsdWRlICJ0d2Vhay5oIgogLyogI2RlZmluZSBERUJVR19TWVNDT0xPUiAqLwogI2luY2x1ZGUgImRlYnVnLmgiCiAKQEAgLTIyLDcgKzIzLDcgQEAKICAgICAiQmFja2dyb3VuZCIsICIxOTIgMTkyIDE5MiIsICAgICAvKiBDT0xPUl9CQUNLR1JPVU5EICAgICAgICAgICovCiAgICAgIkFjdGl2ZVRpdGxlIiwgIjAgNjQgMTI4IiwgICAgICAgLyogQ09MT1JfQUNUSVZFQ0FQVElPTiAgICAgICAqLwogICAgICJJbmFjdGl2ZVRpdGxlIiwgIjI1NSAyNTUgMjU1IiwgIC8qIENPTE9SX0lOQUNUSVZFQ0FQVElPTiAgICAgKi8KLSAgICAiTWVudSIsICIwIDI1NSAyNTUiLCAgICAgICAgICAgICAvKiBDT0xPUl9NRU5VICAgICAgICAgICAgICAgICovCisgICAgIk1lbnUiLCAiMjU1IDI1NSAyNTUiLCAgICAgICAgICAgICAvKiBDT0xPUl9NRU5VICAgICAgICAgICAgICAgICovCiAgICAgIldpbmRvdyIsICIyNTUgMjU1IDI1NSIsICAgICAgICAgLyogQ09MT1JfV0lORE9XICAgICAgICAgICAgICAqLwogICAgICJXaW5kb3dGcmFtZSIsICIwIDAgMCIsICAgICAgICAgIC8qIENPTE9SX1dJTkRPV0ZSQU1FICAgICAgICAgKi8KICAgICAiTWVudVRleHQiLCAiMCAwIDAiLCAgICAgICAgICAgICAvKiBDT0xPUl9NRU5VVEVYVCAgICAgICAgICAgICovCkBAIC00MSw2ICs0MiwzMiBAQAogICAgICJCdXR0b25IaWxpZ2h0IiwgIjI1NSAyNTUgMjU1IiAgIC8qIENPTE9SX0JUTkhJR0hMSUdIVCAgICAgICAgKi8KIH07CiAKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgRGVmU3lzQ29sb3JzOTVbXSA9Cit7CisgICAgIlNjcm9sbGJhciIsICIyMjQgMjI0IDIyNCIsICAgICAgLyogQ09MT1JfU0NST0xMQkFSICAgICAgICAgICAqLworICAgICJCYWNrZ3JvdW5kIiwgIjE5MiAxOTIgMTkyIiwgICAgIC8qIENPTE9SX0JBQ0tHUk9VTkQgICAgICAgICAgKi8KKyAgICAiQWN0aXZlVGl0bGUiLCAiMCA2NCAxMjgiLCAgICAgICAvKiBDT0xPUl9BQ1RJVkVDQVBUSU9OICAgICAgICovCisgICAgIkluYWN0aXZlVGl0bGUiLCAiMjU1IDI1NSAyNTUiLCAgLyogQ09MT1JfSU5BQ1RJVkVDQVBUSU9OICAgICAqLworICAgICJNZW51IiwgIjE5MiAxOTIgMTkyIiwgICAgICAgICAgIC8qIENPTE9SX01FTlUgICAgICAgICAgICAgICAgKi8KKyAgICAiV2luZG93IiwgIjI1NSAyNTUgMjU1IiwgICAgICAgICAvKiBDT0xPUl9XSU5ET1cgICAgICAgICAgICAgICovCisgICAgIldpbmRvd0ZyYW1lIiwgIjAgMCAwIiwgICAgICAgICAgLyogQ09MT1JfV0lORE9XRlJBTUUgICAgICAgICAqLworICAgICJNZW51VGV4dCIsICIwIDAgMCIsICAgICAgICAgICAgIC8qIENPTE9SX01FTlVURVhUICAgICAgICAgICAgKi8KKyAgICAiV2luZG93VGV4dCIsICIwIDAgMCIsICAgICAgICAgICAvKiBDT0xPUl9XSU5ET1dURVhUICAgICAgICAgICovCisgICAgIlRpdGxlVGV4dCIsICIyNTUgMjU1IDI1NSIsICAgICAgLyogQ09MT1JfQ0FQVElPTlRFWFQgICAgICAgICAqLworICAgICJBY3RpdmVCb3JkZXIiLCAiMTI4IDEyOCAxMjgiLCAgIC8qIENPTE9SX0FDVElWRUJPUkRFUiAgICAgICAgKi8KKyAgICAiSW5hY3RpdmVCb3JkZXIiLCAiMjU1IDI1NSAyNTUiLCAvKiBDT0xPUl9JTkFDVElWRUJPUkRFUiAgICAgICovCisgICAgIkFwcFdvcmtzcGFjZSIsICIyNTUgMjU1IDIzMiIsICAgLyogQ09MT1JfQVBQV09SS1NQQUNFICAgICAgICAqLworICAgICJIaWxpZ2h0IiwgIjE2NiAyMDIgMjQwIiwgICAgICAgIC8qIENPTE9SX0hJR0hMSUdIVCAgICAgICAgICAgKi8KKyAgICAiSGlsaWdodFRleHQiLCAiMCAwIDAiLCAgICAgICAgICAvKiBDT0xPUl9ISUdITElHSFRURVhUICAgICAgICovCisgICAgIkJ1dHRvbkZhY2UiLCAiMTkyIDE5MiAxOTIiLCAgICAgLyogQ09MT1JfQlRORkFDRSAgICAgICAgICAgICAqLworICAgICJCdXR0b25TaGFkb3ciLCAiMTI4IDEyOCAxMjgiLCAgIC8qIENPTE9SX0JUTlNIQURPVyAgICAgICAgICAgKi8KKyAgICAiR3JheVRleHQiLCAiMTkyIDE5MiAxOTIiLCAgICAgICAvKiBDT0xPUl9HUkFZVEVYVCAgICAgICAgICAgICovCisgICAgIkJ1dHRvblRleHQiLCAiMCAwIDAiLCAgICAgICAgICAgLyogQ09MT1JfQlROVEVYVCAgICAgICAgICAgICAqLworICAgICJJbmFjdGl2ZVRpdGxlVGV4dCIsICIwIDAgMCIsICAgIC8qIENPTE9SX0lOQUNUSVZFQ0FQVElPTlRFWFQgKi8KKyAgICAiQnV0dG9uSGlsaWdodCIsICIyNTUgMjU1IDI1NSIgICAvKiBDT0xPUl9CVE5ISUdITElHSFQgICAgICAgICovCit9OworCisKICNkZWZpbmUgTlVNX1NZU19DT0xPUlMgICAgIChDT0xPUl9CVE5ISUdITElHSFQrMSkKIAogc3RhdGljIENPTE9SUkVGIFN5c0NvbG9yc1tOVU1fU1lTX0NPTE9SU107CkBAIC0xMzUsNyArMTYyLDggQEAKICAgICBjb25zdCBjaGFyICogY29uc3QgKnA7CiAgICAgY2hhciBidWZmZXJbMTAwXTsKIAotICAgIGZvciAoaSA9IDAsIHAgPSBEZWZTeXNDb2xvcnM7IGkgPCBOVU1fU1lTX0NPTE9SUzsgaSsrLCBwICs9IDIpCisgICAgZm9yIChpID0gMCwgcCA9IFRXRUFLX1dpbjk1TG9vayA/IERlZlN5c0NvbG9yczk1IDogRGVmU3lzQ29sb3JzOworCSBpIDwgTlVNX1NZU19DT0xPUlM7IGkrKywgcCArPSAyKQogICAgIHsKIAlHZXRQcm9maWxlU3RyaW5nMzJBKCAiY29sb3JzIiwgcFswXSwgcFsxXSwgYnVmZmVyLCAxMDAgKTsKIAlpZiAoIXNzY2FuZiggYnVmZmVyLCAiICVkICVkICVkIiwgJnIsICZnLCAmYiApKSByID0gZyA9IGIgPSAwOwpkaWZmIC0tZ2l0IGEvd2luZG93cy9zeXNtZXRyaWNzLmMgYi93aW5kb3dzL3N5c21ldHJpY3MuYwppbmRleCBkNjM3NTNkLi41MjUwODhlIDEwMDY0NAotLS0gYS93aW5kb3dzL3N5c21ldHJpY3MuYworKysgYi93aW5kb3dzL3N5c21ldHJpY3MuYwpAQCAtNyw2ICs3LDggQEAKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAiZ2RpLmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgorI2luY2x1ZGUgInR3ZWFrLmgiCiAjaW5jbHVkZSAic3lzbWV0cmljcy5oIgogCiBzaG9ydCBzeXNNZXRyaWNzW1NNX0NNRVRSSUNTKzFdOwpAQCAtMjAsODkgKzIyLDExNCBAQAogewogICAgIHN5c01ldHJpY3NbU01fQ1hTQ1JFRU5dID0gc2NyZWVuV2lkdGg7CiAgICAgc3lzTWV0cmljc1tTTV9DWVNDUkVFTl0gPSBzY3JlZW5IZWlnaHQ7Ci0gICAgc3lzTWV0cmljc1tTTV9DWFZTQ1JPTExdID0gU1lTTUVUUklDU19DWFZTQ1JPTEw7Ci0gICAgc3lzTWV0cmljc1tTTV9DWUhTQ1JPTExdID0gU1lTTUVUUklDU19DWUhTQ1JPTEw7Ci0gICAgc3lzTWV0cmljc1tTTV9DWUNBUFRJT05dID0gU1lTTUVUUklDU19DWUNBUFRJT047Ci0gICAgc3lzTWV0cmljc1tTTV9DWEJPUkRFUl0gPSBTWVNNRVRSSUNTX0NYQk9SREVSOwotICAgIHN5c01ldHJpY3NbU01fQ1lCT1JERVJdID0gU1lTTUVUUklDU19DWUJPUkRFUjsKLSAgICBzeXNNZXRyaWNzW1NNX0NYRExHRlJBTUVdID0gU1lTTUVUUklDU19DWERMR0ZSQU1FOwotICAgIHN5c01ldHJpY3NbU01fQ1lETEdGUkFNRV0gPSBTWVNNRVRSSUNTX0NZRExHRlJBTUU7Ci0gICAgc3lzTWV0cmljc1tTTV9DWVZUSFVNQl0gPSBTWVNNRVRSSUNTX0NZVlRIVU1COwotICAgIHN5c01ldHJpY3NbU01fQ1hIVEhVTUJdID0gU1lTTUVUUklDU19DWEhUSFVNQjsKLSAgICBzeXNNZXRyaWNzW1NNX0NYSUNPTl0gPSBTWVNNRVRSSUNTX0NYSUNPTjsKLSAgICBzeXNNZXRyaWNzW1NNX0NZSUNPTl0gPSBTWVNNRVRSSUNTX0NZSUNPTjsKLSAgICBzeXNNZXRyaWNzW1NNX0NYQ1VSU09SXSA9IFNZU01FVFJJQ1NfQ1hDVVJTT1I7Ci0gICAgc3lzTWV0cmljc1tTTV9DWUNVUlNPUl0gPSBTWVNNRVRSSUNTX0NZQ1VSU09SOwotICAgIHN5c01ldHJpY3NbU01fQ1lNRU5VXSA9IFNZU01FVFJJQ1NfQ1lNRU5VOworICAgIHN5c01ldHJpY3NbU01fQ1hWU0NST0xMXSA9CisJUFJPRklMRV9HZXRXaW5lSW5pSW50KCJUd2Vhay5MYXlvdXQiLCAiU2Nyb2xsQmFyV2lkdGgiLCAxNikgKyAxOworICAgIHN5c01ldHJpY3NbU01fQ1lIU0NST0xMXSA9IHN5c01ldHJpY3NbU01fQ1hWU0NST0xMXTsKKyAgICBzeXNNZXRyaWNzW1NNX0NZQ0FQVElPTl0gPSAyICsKKwlQUk9GSUxFX0dldFdpbmVJbmlJbnQoIlR3ZWFrLkxheW91dCIsICJDYXB0aW9uSGVpZ2h0IiwgMTgpOworICAgIHN5c01ldHJpY3NbU01fQ1hCT1JERVJdID0gMTsKKyAgICBzeXNNZXRyaWNzW1NNX0NZQk9SREVSXSA9IHN5c01ldHJpY3NbU01fQ1hCT1JERVJdOworICAgIHN5c01ldHJpY3NbU01fQ1hETEdGUkFNRV0gPQorCVBST0ZJTEVfR2V0V2luZUluaUludCgiVHdlYWsuTGF5b3V0IiwgIkRpYWxvZ0ZyYW1lV2lkdGgiLAorCQkJICAgICAgVFdFQUtfV2luOTVMb29rID8gMiA6IDQpOworICAgIHN5c01ldHJpY3NbU01fQ1lETEdGUkFNRV0gPSBzeXNNZXRyaWNzW1NNX0NYRExHRlJBTUVdOworICAgIHN5c01ldHJpY3NbU01fQ1lWVEhVTUJdID0gc3lzTWV0cmljc1tTTV9DWFZTQ1JPTExdIC0gMTsKKyAgICBzeXNNZXRyaWNzW1NNX0NYSFRIVU1CXSA9IHN5c01ldHJpY3NbU01fQ1lWVEhVTUJdOworICAgIHN5c01ldHJpY3NbU01fQ1hJQ09OXSA9IDMyOworICAgIHN5c01ldHJpY3NbU01fQ1lJQ09OXSA9IDMyOworICAgIHN5c01ldHJpY3NbU01fQ1lNRU5VXSA9CisJUFJPRklMRV9HZXRXaW5lSW5pSW50KCJUd2Vhay5MYXlvdXQiLCAiTWVudUhlaWdodCIsIDE4KTsKICAgICBzeXNNZXRyaWNzW1NNX0NYRlVMTFNDUkVFTl0gPSBzeXNNZXRyaWNzW1NNX0NYU0NSRUVOXTsKLSAgICBzeXNNZXRyaWNzW1NNX0NZRlVMTFNDUkVFTl0gPSBzeXNNZXRyaWNzW1NNX0NZU0NSRUVOXSAtIHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXTsKKyAgICBzeXNNZXRyaWNzW1NNX0NZRlVMTFNDUkVFTl0gPQorCXN5c01ldHJpY3NbU01fQ1lTQ1JFRU5dIC0gc3lzTWV0cmljc1tTTV9DWUNBUFRJT05dOwogICAgIHN5c01ldHJpY3NbU01fQ1lLQU5KSVdJTkRPV10gPSAwOwogICAgIHN5c01ldHJpY3NbU01fTU9VU0VQUkVTRU5UXSA9IDE7Ci0gICAgc3lzTWV0cmljc1tTTV9DWVZTQ1JPTExdID0gU1lTTUVUUklDU19DWVZTQ1JPTEw7Ci0gICAgc3lzTWV0cmljc1tTTV9DWEhTQ1JPTExdID0gU1lTTUVUUklDU19DWEhTQ1JPTEw7CisgICAgc3lzTWV0cmljc1tTTV9DWVZTQ1JPTExdID0gc3lzTWV0cmljc1tTTV9DWVZUSFVNQl07CisgICAgc3lzTWV0cmljc1tTTV9DWEhTQ1JPTExdID0gc3lzTWV0cmljc1tTTV9DWEhUSFVNQl07CiAgICAgc3lzTWV0cmljc1tTTV9ERUJVR10gPSAwOworCisgICAgLyogRklYTUU6IFRoZSBmb2xsb3dpbmcgc2hvdWxkIGxvb2sgZm9yIHRoZSByZWdpc3RyeSBrZXkgdG8gc2VlIGlmIHRoZQorICAgICAgIGJ1dHRvbnMgc2hvdWxkIGJlIHN3YXBwZWQuICovCiAgICAgc3lzTWV0cmljc1tTTV9TV0FQQlVUVE9OXSA9IDA7CisKICAgICBzeXNNZXRyaWNzW1NNX1JFU0VSVkVEMV0gPSAwOwogICAgIHN5c01ldHJpY3NbU01fUkVTRVJWRUQyXSA9IDA7CiAgICAgc3lzTWV0cmljc1tTTV9SRVNFUlZFRDNdID0gMDsKICAgICBzeXNNZXRyaWNzW1NNX1JFU0VSVkVENF0gPSAwOwotICAgIHN5c01ldHJpY3NbU01fQ1hNSU5dID0gU1lTTUVUUklDU19DWE1JTjsKLSAgICBzeXNNZXRyaWNzW1NNX0NZTUlOXSA9IFNZU01FVFJJQ1NfQ1lNSU47Ci0gICAgc3lzTWV0cmljc1tTTV9DWFNJWkVdID0gU1lTTUVUUklDU19DWFNJWkU7Ci0gICAgc3lzTWV0cmljc1tTTV9DWVNJWkVdID0gU1lTTUVUUklDU19DWVNJWkU7Ci0gICAgc3lzTWV0cmljc1tTTV9DWEZSQU1FXSA9IEdldFByb2ZpbGVJbnQzMkEoICJ3aW5kb3dzIiwgIkJvcmRlcldpZHRoIiwgNCApOworCisgICAgLyogRklYTUU6IFRoZSBmb2xsb3dpbmcgdHdvIGFyZSBjYWxjdWxhdGVkLCBidXQgaG93PyAqLworICAgIHN5c01ldHJpY3NbU01fQ1hNSU5dID0gVFdFQUtfV2luOTVMb29rID8gMTEyIDogMTAwOworICAgIHN5c01ldHJpY3NbU01fQ1lNSU5dID0gVFdFQUtfV2luOTVMb29rID8gMjcgOiAyODsKKworICAgIHN5c01ldHJpY3NbU01fQ1hTSVpFXSA9IHN5c01ldHJpY3NbU01fQ1lDQVBUSU9OXSAtIDI7CisgICAgc3lzTWV0cmljc1tTTV9DWVNJWkVdID0gc3lzTWV0cmljc1tTTV9DWFNJWkVdOworICAgIHN5c01ldHJpY3NbU01fQ1hGUkFNRV0gPSBHZXRQcm9maWxlSW50MzJBKCJXaW5kb3dzIiwgIkJvcmRlcldpZHRoIiwgNCk7CiAgICAgc3lzTWV0cmljc1tTTV9DWUZSQU1FXSA9IHN5c01ldHJpY3NbU01fQ1hGUkFNRV07Ci0gICAgc3lzTWV0cmljc1tTTV9DWE1JTlRSQUNLXSA9IFNZU01FVFJJQ1NfQ1hNSU5UUkFDSzsKLSAgICBzeXNNZXRyaWNzW1NNX0NZTUlOVFJBQ0tdID0gU1lTTUVUUklDU19DWU1JTlRSQUNLOwotICAgIHN5c01ldHJpY3NbU01fQ1hET1VCTEVDTEtdID0gKEdldFByb2ZpbGVJbnQzMkEoICJ3aW5kb3dzIiwiRG91YmxlQ2xpY2tXaWR0aCIsIDQpICsgMSkgJiB+MTsKLSAgICBzeXNNZXRyaWNzW1NNX0NZRE9VQkxFQ0xLXSA9IChHZXRQcm9maWxlSW50MzJBKCAid2luZG93cyIsIkRvdWJsZUNsaWNrSGVpZ2h0IiwgNCkgKyAxKSAmIH4xOwotICAgIHN5c01ldHJpY3NbU01fQ1hJQ09OU1BBQ0lOR10gPSBHZXRQcm9maWxlSW50MzJBKCAiZGVza3RvcCIsIkljb25TcGFjaW5nIiwgNzUpOwotICAgIHN5c01ldHJpY3NbU01fQ1lJQ09OU1BBQ0lOR10gPSBHZXRQcm9maWxlSW50MzJBKCAiZGVza3RvcCIsIkljb25WZXJ0aWNhbFNwYWNpbmciLCA3Mik7Ci0gICAgc3lzTWV0cmljc1tTTV9NRU5VRFJPUEFMSUdOTUVOVF0gPSBHZXRQcm9maWxlSW50MzJBKCAid2luZG93cyIsIk1lbnVEcm9wQWxpZ25tZW50IiwgMCApOworICAgIHN5c01ldHJpY3NbU01fQ1hNSU5UUkFDS10gPSBzeXNNZXRyaWNzW1NNX0NYTUlOXTsKKyAgICBzeXNNZXRyaWNzW1NNX0NZTUlOVFJBQ0tdID0gc3lzTWV0cmljc1tTTV9DWU1JTl07CisgICAgc3lzTWV0cmljc1tTTV9DWERPVUJMRUNMS10gPQorCShHZXRQcm9maWxlSW50MzJBKCJXaW5kb3dzIiwgIkRvdWJsZUNsaWNrV2lkdGgiLCA0KSArIDEpICYgfjE7CisgICAgc3lzTWV0cmljc1tTTV9DWURPVUJMRUNMS10gPQorCShHZXRQcm9maWxlSW50MzJBKCJXaW5kb3dzIiwiRG91YmxlQ2xpY2tIZWlnaHQiLCA0KSArIDEpICYgfjE7CisgICAgc3lzTWV0cmljc1tTTV9DWElDT05TUEFDSU5HXSA9CisJR2V0UHJvZmlsZUludDMyQSgiRGVza3RvcCIsIkljb25TcGFjaW5nIiwgNzUpOworICAgIHN5c01ldHJpY3NbU01fQ1lJQ09OU1BBQ0lOR10gPQorCUdldFByb2ZpbGVJbnQzMkEoIkRlc2t0b3AiLCAiSWNvblZlcnRpY2FsU3BhY2luZyIsIDc1KTsKKyAgICBzeXNNZXRyaWNzW1NNX01FTlVEUk9QQUxJR05NRU5UXSA9CisJR2V0UHJvZmlsZUludDMyQSgiV2luZG93cyIsICJNZW51RHJvcEFsaWdubWVudCIsIDApOwogICAgIHN5c01ldHJpY3NbU01fUEVOV0lORE9XU10gPSAwOwogICAgIHN5c01ldHJpY3NbU01fREJDU0VOQUJMRURdID0gMDsKLSAgICAvKiBXaW4zMiBhZGRpdGlvbnMgKi8KLSAgICBzeXNNZXRyaWNzW1NNX0NNT1VTRUJVVFRPTlNdID0gMzsgLyogRklYTUU6IHF1ZXJ5IFggb24gdGhhdCBvbmUgKi8KKworICAgIC8qIEZJWE1FOiBOZWVkIHRvIHF1ZXJ5IFggZm9yIHRoZSBmb2xsb3dpbmcgKi8KKyAgICBzeXNNZXRyaWNzW1NNX0NNT1VTRUJVVFRPTlNdID0gMzsKKwogICAgIHN5c01ldHJpY3NbU01fU0VDVVJFXSA9IDA7Ci0gICAgc3lzTWV0cmljc1tTTV9DWEVER0VdID0gU1lTTUVUUklDU19DWEJPUkRFUjsKLSAgICBzeXNNZXRyaWNzW1NNX0NZRURHRV0gPSBTWVNNRVRSSUNTX0NZQk9SREVSOwotICAgIHN5c01ldHJpY3NbU01fQ1hNSU5TUEFDSU5HXSA9IFNZU01FVFJJQ1NfQ1lCT1JERVI7CisgICAgc3lzTWV0cmljc1tTTV9DWEVER0VdID0gc3lzTWV0cmljc1tTTV9DWEJPUkRFUl0gKyAxOworICAgIHN5c01ldHJpY3NbU01fQ1lFREdFXSA9IHN5c01ldHJpY3NbU01fQ1hFREdFXTsKKyAgICBzeXNNZXRyaWNzW1NNX0NYTUlOU1BBQ0lOR10gPSAxNjA7CisgICAgc3lzTWV0cmljc1tTTV9DWU1JTlNQQUNJTkddID0gMjQ7CisgICAgc3lzTWV0cmljc1tTTV9DWFNNSUNPTl0gPQorCXN5c01ldHJpY3NbU01fQ1lTSVpFXSAtIChzeXNNZXRyaWNzW1NNX0NZU0laRV0gJSAyKSAtIDI7CisgICAgc3lzTWV0cmljc1tTTV9DWVNNSUNPTl0gPSBzeXNNZXRyaWNzW1NNX0NYU01JQ09OXTsKKyAgICBzeXNNZXRyaWNzW1NNX0NZU01DQVBUSU9OXSA9IDE2OworICAgIHN5c01ldHJpY3NbU01fQ1hTTVNJWkVdID0gMTU7CisgICAgc3lzTWV0cmljc1tTTV9DWVNNU0laRV0gPSBzeXNNZXRyaWNzW1NNX0NYU01TSVpFXTsKKyAgICBzeXNNZXRyaWNzW1NNX0NYTUVOVVNJWkVdID0gc3lzTWV0cmljc1tTTV9DWU1FTlVdOworICAgIHN5c01ldHJpY3NbU01fQ1lNRU5VU0laRV0gPSBzeXNNZXRyaWNzW1NNX0NYTUVOVVNJWkVdOwogCi0vKgotU01fQ1hFREdFICAgICAgICAgICAgICAgNDUKLVNNX0NZRURHRSAgICAgICAgICAgICAgIDQ2Ci1TTV9DWE1JTlNQQUNJTkcgICAgICAgICA0NwotU01fQ1lNSU5TUEFDSU5HICAgICAgICAgNDgKLVNNX0NYU01JQ09OICAgICAgICAgICAgIDQ5Ci1TTV9DWVNNSUNPTiAgICAgICAgICAgICA1MAotU01fQ1lTTUNBUFRJT04gICAgICAgICAgNTEKLVNNX0NYU01TSVpFICAgICAgICAgICAgIDUyCi1TTV9DWVNNU0laRSAgICAgICAgICAgICA1MwotU01fQ1hNRU5VU0laRSAgICAgICAgICAgNTQKLVNNX0NZTUVOVVNJWkUgICAgICAgICAgIDU1Ci1TTV9BUlJBTkdFICAgICAgICAgICAgICA1NgotU01fQ1hNSU5JTUlaRUQgICAgICAgICAgNTcKLVNNX0NZTUlOSU1JWkVEICAgICAgICAgIDU4Ci1TTV9DWE1BWFRSQUNLICAgICAgICAgICA1OQotU01fQ1lNQVhUUkFDSyAgICAgICAgICAgNjAKLVNNX0NYTUFYSU1JWkVEICAgICAgICAgIDYxCi1TTV9DWU1BWElNSVpFRCAgICAgICAgICA2MgotICovCi0gICAgc3lzTWV0cmljc1tTTV9ORVRXT1JLXSA9IDE7Ci0gICAgc3lzTWV0cmljc1tTTV9DTEVBTkJPT1RdID0gMDsgLyogMCAtIG9rLCAxIC0gZmFpbHNhZmUsIDIgLSBmYWlsc2FmZSAmIG5ldCAqLwotIC8qCi1TTV9DWERSQUcgICAgICAgICAgICAgICA2OAotU01fQ1lEUkFHICAgICAgICAgICAgICAgNjkKLSAgKi8KLSAgICBzeXNNZXRyaWNzW1NNX1NIT1dTT1VORFNdID0gMTsKLSAvKgotU01fQ1hNRU5VQ0hFQ0sgICAgICAgICAgNzEKLVNNX0NZTUVOVUNIRUNLICAgICAgICAgIDcyCi0gICovCi0gICAgc3lzTWV0cmljc1tTTV9TTE9XTUFDSElORV0gPSAwOyAvKiBGSVhNRTogcGVyaGFwcyBkZWNpZGUgb24gdHlwZSBvZiBwcm9jICovCi0gICAgc3lzTWV0cmljc1tTTV9NSURFQVNURU5BQkxFRF0gPSAwOyAvKiBGSVhNRTogMSBpZiBlbmFibGVkICovCisgICAgLyogRklYTUU6IFdoYXQgZG8gdGhlc2UgbWVhbj8gKi8KKyAgICBzeXNNZXRyaWNzW1NNX0FSUkFOR0VdID0gODsKKyAgICBzeXNNZXRyaWNzW1NNX0NYTUlOSU1JWkVEXSA9IDE2MDsKKyAgICBzeXNNZXRyaWNzW1NNX0NZTUlOSU1JWkVEXSA9IDI0OworCisgICAgLyogRklYTUU6IEhvdyBkbyBJIGNhbGN1bGF0ZSB0aGVzZT8gKi8KKyAgICBzeXNNZXRyaWNzW1NNX0NYTUFYVFJBQ0tdID0gCisJc3lzTWV0cmljc1tTTV9DWFNDUkVFTl0gKyA0ICsgMiAqIHN5c01ldHJpY3NbU01fQ1hGUkFNRV07CisgICAgc3lzTWV0cmljc1tTTV9DWU1BWFRSQUNLXSA9CisJc3lzTWV0cmljc1tTTV9DWVNDUkVFTl0gKyA0ICsgMiAqIHN5c01ldHJpY3NbU01fQ1lGUkFNRV07CisgICAgc3lzTWV0cmljc1tTTV9DWE1BWElNSVpFRF0gPQorCXN5c01ldHJpY3NbU01fQ1hTQ1JFRU5dICsgMiAqIHN5c01ldHJpY3NbU01fQ1hGUkFNRV07CisgICAgc3lzTWV0cmljc1tTTV9DWU1BWElNSVpFRF0gPQorCXN5c01ldHJpY3NbU01fQ1lTQ1JFRU5dIC0gNDU7CisgICAgc3lzTWV0cmljc1tTTV9ORVRXT1JLXSA9IDM7CisKKyAgICAvKiBGb3IgdGhlIGZvbGxvd2luZzogMCA9IG9rLCAxID0gZmFpbHNhZmUsIDIgPSBmYWlsc2FmZSArIG5ldHdvcmsgKi8KKyAgICBzeXNNZXRyaWNzW1NNX0NMRUFOQk9PVF0gPSAwOworCisgICAgc3lzTWV0cmljc1tTTV9DWERSQUddID0gMDsKKyAgICBzeXNNZXRyaWNzW1NNX0NZRFJBR10gPSAwOworICAgIHN5c01ldHJpY3NbU01fU0hPV1NPVU5EU10gPSAwOworICAgIHN5c01ldHJpY3NbU01fQ1hNRU5VQ0hFQ0tdID0gMjsKKyAgICBzeXNNZXRyaWNzW1NNX0NZTUVOVUNIRUNLXSA9IDI7CisKKyAgICAvKiBGSVhNRTogU2hvdWxkIGNoZWNrIHRoZSB0eXBlIG9mIHByb2Nlc3NvciBmb3IgdGhlIGZvbGxvd2luZyAqLworICAgIHN5c01ldHJpY3NbU01fU0xPV01BQ0hJTkVdID0gMDsKKworICAgIC8qIEZJWE1FOiBTaG91bGQgcGVyZm9ybSBhIGNoZWNrICovCisgICAgc3lzTWV0cmljc1tTTV9NSURFQVNURU5BQkxFRF0gPSAwOworCisgICAgc3lzTWV0cmljc1tTTV9NT1VTRVdIRUVMUFJFU0VOVF0gPSAwOwogICAgIHN5c01ldHJpY3NbU01fQ01FVFJJQ1NdID0gU01fQ01FVFJJQ1M7Ci0KIH0KIAogCmRpZmYgLS1naXQgYS93aW5kb3dzL3VzZXIuYyBiL3dpbmRvd3MvdXNlci5jCmluZGV4IDcyY2Q5YjAuLjQ0ZWRkZGYgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvdXNlci5jCisrKyBiL3dpbmRvd3MvdXNlci5jCkBAIC0xNjksNiArMTY5LDE3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgRXhpdFdpbmRvd3NFeGVjMTYgICAoVVNFUi4yNDYpCisgKi8KK0JPT0wxNiBFeGl0V2luZG93c0V4ZWMxNiggTFBDU1RSIGxwc3pFeGUsIExQQ1NUUiBscHN6UGFyYW1zICkKK3sKK2ZwcmludGYoc3RkbmltcCwgIkV4aXRXaW5kb3dzRXhlYygpIDogU2hvdWxkIHJ1biB0aGUgZm9sbG93aW5nIGluIERPUy1tb2RlIDpcblx0XCIlcyAlc1wiXG4iLAorCWxwc3pFeGUsIGxwc3pQYXJhbXMpOworICAgIHJldHVybiBFeGl0V2luZG93c0V4KCBFV1hfTE9HT0ZGLCAweGZmZmZmZmZmICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgRXhpdFdpbmRvd3NFeCAgIChVU0VSMzIuMTk1KQogICovCiBCT09MMzIgRXhpdFdpbmRvd3NFeCggVUlOVDMyIGZsYWdzLCBEV09SRCByZXNlcnZlZCApCmRpZmYgLS1naXQgYS93aW5kb3dzL3dpbi5jIGIvd2luZG93cy93aW4uYwppbmRleCAwODdmOTQyLi4zNzFhNDdiIDEwMDY0NAotLS0gYS93aW5kb3dzL3dpbi5jCisrKyBiL3dpbmRvd3Mvd2luLmMKQEAgLTQ2NCw3ICs0NjQsNyBAQAogICAgIENMQVNTICpjbGFzc1B0cjsKICAgICBXTkQgKnduZFB0cjsKICAgICBIV05EMTYgaHduZCwgaHduZExpbmtBZnRlcjsKLSAgICBQT0lOVDE2IG1heFNpemUsIG1heFBvcywgbWluVHJhY2ssIG1heFRyYWNrOworICAgIFBPSU5UMzIgbWF4U2l6ZSwgbWF4UG9zLCBtaW5UcmFjaywgbWF4VHJhY2s7CiAgICAgTFJFU1VMVCAoKmxvY2FsU2VuZDMyKShIV05EMzIsIFVJTlQzMiwgV1BBUkFNMzIsIExQQVJBTSk7CiAKICAgICBkcHJpbnRmX3dpbiggc3RkZGViLCAiQ3JlYXRlV2luZG93RXg6ICIgKTsKQEAgLTYxNSw3ICs2MTUsNyBAQAogCiAgICAgaWYgKChjcy0+c3R5bGUgJiBXU19USElDS0ZSQU1FKSB8fCAhKGNzLT5zdHlsZSAmIChXU19QT1BVUCB8IFdTX0NISUxEKSkpCiAgICAgewotICAgICAgICBXSU5QT1NfR2V0TWluTWF4SW5mbyggd25kUHRyLCAmbWF4U2l6ZSwgJm1heFBvcywgJm1pblRyYWNrLCAmbWF4VHJhY2sgKTsKKyAgICAgICAgV0lOUE9TX0dldE1pbk1heEluZm8oIHduZFB0ciwgJm1heFNpemUsICZtYXhQb3MsICZtaW5UcmFjaywgJm1heFRyYWNrKTsKICAgICAgICAgaWYgKG1heFNpemUueCA8IGNzLT5jeCkgY3MtPmN4ID0gbWF4U2l6ZS54OwogICAgICAgICBpZiAobWF4U2l6ZS55IDwgY3MtPmN5KSBjcy0+Y3kgPSBtYXhTaXplLnk7CiAgICAgICAgIGlmIChjcy0+Y3ggPCBtaW5UcmFjay54ICkgY3MtPmN4ID0gbWluVHJhY2sueDsKQEAgLTcyMyw4ICs3MjMsOCBAQAogICAgIHsKICAgICAgICAgV0lOUE9TX1NlbmROQ0NhbGNTaXplKCBod25kLCBGQUxTRSwgJnduZFB0ci0+cmVjdFdpbmRvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAwLCAmd25kUHRyLT5yZWN0Q2xpZW50ICk7Ci0gICAgICAgIE9mZnNldFJlY3QxNigmd25kUHRyLT5yZWN0V2luZG93LCBtYXhQb3MueCAtIHduZFB0ci0+cmVjdFdpbmRvdy5sZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQb3MueSAtIHduZFB0ci0+cmVjdFdpbmRvdy50b3ApOworICAgICAgICBPZmZzZXRSZWN0MzIoJnduZFB0ci0+cmVjdFdpbmRvdywgbWF4UG9zLnggLSB3bmRQdHItPnJlY3RXaW5kb3cubGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFBvcy55IC0gd25kUHRyLT5yZWN0V2luZG93LnRvcCk7CiAgICAgICAgIGlmKCAoKCpsb2NhbFNlbmQzMikoIGh3bmQsIFdNX0NSRUFURSwgMCwgKExQQVJBTSljcyApKSAhPSAtMSApCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIFNlbmQgdGhlIHNpemUgbWVzc2FnZXMgKi8KQEAgLTczMiwxMSArNzMyLDEyIEBACiAgICAgICAgICAgICBpZiAoISh3bmRQdHItPmZsYWdzICYgV0lOX05FRURfU0laRSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLyogc2VuZCBpdCBhbnl3YXkgKi8KLSAgICAgICAgICAgICAgICBTZW5kTWVzc2FnZTE2KCBod25kLCBXTV9TSVpFLCBTSVpFX1JFU1RPUkVELAotICAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxPTkcod25kUHRyLT5yZWN0Q2xpZW50LnJpZ2h0LXduZFB0ci0+cmVjdENsaWVudC5sZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgd25kUHRyLT5yZWN0Q2xpZW50LmJvdHRvbS13bmRQdHItPnJlY3RDbGllbnQudG9wKSk7Ci0gICAgICAgICAgICAgICAgU2VuZE1lc3NhZ2UxNiggaHduZCwgV01fTU9WRSwgMCwgTUFLRUxPTkcoIHduZFB0ci0+cmVjdENsaWVudC5sZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd25kUHRyLT5yZWN0Q2xpZW50LnRvcCApKTsKKyAgICAgICAgICAgICAgICBTZW5kTWVzc2FnZTMyQSggaHduZCwgV01fU0laRSwgU0laRV9SRVNUT1JFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxPTkcod25kUHRyLT5yZWN0Q2xpZW50LnJpZ2h0LXduZFB0ci0+cmVjdENsaWVudC5sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3bmRQdHItPnJlY3RDbGllbnQuYm90dG9tLXduZFB0ci0+cmVjdENsaWVudC50b3ApKTsKKyAgICAgICAgICAgICAgICBTZW5kTWVzc2FnZTMyQSggaHduZCwgV01fTU9WRSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxPTkcoIHduZFB0ci0+cmVjdENsaWVudC5sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd25kUHRyLT5yZWN0Q2xpZW50LnRvcCApICk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFdJTl9TZW5kUGFyZW50Tm90aWZ5KCBod25kLCBXTV9DUkVBVEUsIHduZFB0ci0+d0lEbWVudSwgKExQQVJBTSlod25kICk7CkBAIC0yMjM2LDE4ICsyMjM3LDE4IEBACiBCT09MMTYgRFJBR19RdWVyeVVwZGF0ZSggSFdORDMyIGhRdWVyeVduZCwgU0VHUFRSIHNwRHJhZ0luZm8sIEJPT0wzMiBiTm9TZW5kICkKIHsKICBCT09MMTYJCXdQYXJhbSxiUmVzdWx0ID0gMDsKLSBQT0lOVDE2ICAgICAgICBwdDsKKyBQT0lOVDMyICAgICAgICBwdDsKICBMUERSQUdJTkZPCXB0ckRyYWdJbmZvID0gKExQRFJBR0lORk8pIFBUUl9TRUdfVE9fTElOKHNwRHJhZ0luZm8pOwogIFdORCAJICAgICAgICpwdHJRdWVyeVduZCA9IFdJTl9GaW5kV25kUHRyKGhRdWVyeVduZCksKnB0clduZDsKLSBSRUNUMTYJCXRlbXBSZWN0OworIFJFQ1QzMgkJdGVtcFJlY3Q7CiAKICBpZiggIXB0clF1ZXJ5V25kIHx8ICFwdHJEcmFnSW5mbyApIHJldHVybiAwOwogCi0gcHQgCQk9IHB0ckRyYWdJbmZvLT5wdDsKKyBDT05WX1BPSU5UMTZUTzMyKCAmcHRyRHJhZ0luZm8tPnB0LCAmcHQgKTsKIAotIEdldFdpbmRvd1JlY3QxNihoUXVlcnlXbmQsJnRlbXBSZWN0KTsgCisgR2V0V2luZG93UmVjdDMyKGhRdWVyeVduZCwmdGVtcFJlY3QpOyAKIAotIGlmKCAhUHRJblJlY3QxNigmdGVtcFJlY3QscHQpIHx8CisgaWYoICFQdEluUmVjdDMyKCZ0ZW1wUmVjdCxwdCkgfHwKICAgICAgKHB0clF1ZXJ5V25kLT5kd1N0eWxlICYgV1NfRElTQUJMRUQpICkKIAlyZXR1cm4gMDsKIApAQCAtMjI1NSwxOSArMjI1NiwxOCBAQAogICAgewogICAgICB0ZW1wUmVjdCA9IHB0clF1ZXJ5V25kLT5yZWN0Q2xpZW50OwogICAgICBpZihwdHJRdWVyeVduZC0+ZHdTdHlsZSAmIFdTX0NISUxEKQotICAgICAgICBNYXBXaW5kb3dQb2ludHMxNihwdHJRdWVyeVduZC0+cGFyZW50LT5od25kU2VsZiwwLChMUFBPSU5UMTYpJnRlbXBSZWN0LDIpOworICAgICAgICBNYXBXaW5kb3dQb2ludHMzMiggcHRyUXVlcnlXbmQtPnBhcmVudC0+aHduZFNlbGYsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBQT0lOVDMyKSZ0ZW1wUmVjdCwgMiApOwogCi0gICAgIGlmKCBQdEluUmVjdDE2KCZ0ZW1wUmVjdCxwdCkgKQorICAgICBpZiAoUHRJblJlY3QzMiggJnRlbXBSZWN0LCBwdCkpCiAJewogCSB3UGFyYW0gPSAwOwogICAgICAgICAgCiAJIGZvciAocHRyV25kID0gcHRyUXVlcnlXbmQtPmNoaWxkOyBwdHJXbmQgO3B0clduZCA9IHB0clduZC0+bmV4dCkKICAgICAgICAgICAgICBpZiggcHRyV25kLT5kd1N0eWxlICYgV1NfVklTSUJMRSApCiAJICAgICB7Ci0gICAgICAgICAgICAgICAgIEdldFdpbmRvd1JlY3QxNihwdHJXbmQtPmh3bmRTZWxmLCZ0ZW1wUmVjdCk7Ci0KLSAgICAgICAgICAgICAgICAgaWYoIFB0SW5SZWN0MTYoJnRlbXBSZWN0LHB0KSApIAotICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgIEdldFdpbmRvd1JlY3QzMiggcHRyV25kLT5od25kU2VsZiwgJnRlbXBSZWN0ICk7CisgICAgICAgICAgICAgICAgIGlmIChQdEluUmVjdDMyKCAmdGVtcFJlY3QsIHB0ICkpIGJyZWFrOwogCSAgICAgfQogCiAJIGlmKHB0clduZCkKQEAgLTIyOTQsNyArMjI5NCw3IEBACiAJICAgOiBTZW5kTWVzc2FnZTE2KCBoUXVlcnlXbmQgLFdNX1FVRVJZRFJPUE9CSkVDVCAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChXUEFSQU0xNil3UGFyYW0gLChMUEFSQU0pIHNwRHJhZ0luZm8gKTsKICBpZiggIWJSZXN1bHQgKSAKLSAgICAgIHB0ckRyYWdJbmZvLT5wdCA9IHB0OworICAgICBDT05WX1BPSU5UMzJUTzE2KCAmcHQsICZwdHJEcmFnSW5mby0+cHQgKTsKIAogIHJldHVybiBiUmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvd2luZG93cy93aW5wb3MuYyBiL3dpbmRvd3Mvd2lucG9zLmMKaW5kZXggM2M0YTQ2OS4uNDcyYjAxMSAxMDA2NDQKLS0tIGEvd2luZG93cy93aW5wb3MuYworKysgYi93aW5kb3dzL3dpbnBvcy5jCkBAIC01Myw5ICs1Myw3IEBACiAvKiAtLS0tLSBleHRlcm5hbCBmdW5jdGlvbnMgLS0tLS0gKi8KIAogZXh0ZXJuIHZvaWQgCUZPQ1VTX1N3aXRjaEZvY3VzKCBIV05EMzIgLCBIV05EMzIgKTsKLWV4dGVybiBIUkdOMzIgCURDRV9HZXRWaXNSZ24oIEhXTkQzMiwgV09SRCApOwogZXh0ZXJuIEhXTkQzMglDQVJFVF9HZXRId25kKCk7Ci1leHRlcm4gQk9PTDMyICAgRENFX0ludmFsaWRhdGVEQ0UoV05EKiwgUkVDVDE2KiApOwogCiAvKiAtLS0tLSBpbnRlcm5hbCB2YXJpYWJsZXMgLS0tLS0gKi8KIApAQCAtMjIxLDcgKzIxOSw3IEBACiAgICAgV05EICogd25kUHRyID0gV0lOX0ZpbmRXbmRQdHIoIGh3bmQgKTsgCiAgICAgaWYgKCF3bmRQdHIpIHJldHVybjsKICAgICAKLSAgICAqcmVjdCA9IHduZFB0ci0+cmVjdFdpbmRvdzsKKyAgICBDT05WX1JFQ1QzMlRPMTYoICZ3bmRQdHItPnJlY3RXaW5kb3csIHJlY3QgKTsKICAgICBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfQ0hJTEQpCiAJTWFwV2luZG93UG9pbnRzMTYoIHduZFB0ci0+cGFyZW50LT5od25kU2VsZiwgMCwgKFBPSU5UMTYgKilyZWN0LCAyICk7CiB9CkBAIC0yMzUsNyArMjMzLDcgQEAKICAgICBXTkQgKiB3bmRQdHIgPSBXSU5fRmluZFduZFB0ciggaHduZCApOyAKICAgICBpZiAoIXduZFB0cikgcmV0dXJuOwogICAgIAotICAgIENPTlZfUkVDVDE2VE8zMiggJnduZFB0ci0+cmVjdFdpbmRvdywgcmVjdCApOworICAgICpyZWN0ID0gd25kUHRyLT5yZWN0V2luZG93OwogICAgIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19DSElMRCkKIAlNYXBXaW5kb3dQb2ludHMzMiggd25kUHRyLT5wYXJlbnQtPmh3bmRTZWxmLCAwLCAoUE9JTlQzMiAqKXJlY3QsIDIgKTsKIH0KQEAgLTQxNiwxMCArNDE0LDIxIEBACiAgKi8KIEhXTkQxNiBDaGlsZFdpbmRvd0Zyb21Qb2ludDE2KCBIV05EMTYgaHduZFBhcmVudCwgUE9JTlQxNiBwdCApCiB7CisgICAgUE9JTlQzMiBwdDMyOworICAgIENPTlZfUE9JTlQxNlRPMzIoICZwdCwgJnB0MzIgKTsKKyAgICByZXR1cm4gKEhXTkQxNilDaGlsZFdpbmRvd0Zyb21Qb2ludDMyKCBod25kUGFyZW50LCBwdDMyICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgQ2hpbGRXaW5kb3dGcm9tUG9pbnQzMiAgIChVU0VSMzIuNDgpCisgKi8KK0hXTkQzMiBDaGlsZFdpbmRvd0Zyb21Qb2ludDMyKCBIV05EMzIgaHduZFBhcmVudCwgUE9JTlQzMiBwdCApCit7CiAgICAgLyogcHQgaXMgaW4gdGhlIGNsaWVudCBjb29yZGluYXRlcyAqLwogCiAgICAgV05EKiB3bmQgPSBXSU5fRmluZFduZFB0cihod25kUGFyZW50KTsKLSAgICBSRUNUMTYgcmVjdDsKKyAgICBSRUNUMzIgcmVjdDsKIAogICAgIGlmKCAhd25kICkgcmV0dXJuIDA7CiAKQEAgLTQyOCwxMiArNDM3LDEyIEBACiAgICAgcmVjdC5yaWdodCA9IHduZC0+cmVjdENsaWVudC5yaWdodCAtIHduZC0+cmVjdENsaWVudC5sZWZ0OwogICAgIHJlY3QuYm90dG9tID0gd25kLT5yZWN0Q2xpZW50LmJvdHRvbSAtIHduZC0+cmVjdENsaWVudC50b3A7CiAKLSAgICBpZiAoIVB0SW5SZWN0MTYoICZyZWN0LCBwdCApKSByZXR1cm4gMDsKKyAgICBpZiAoIVB0SW5SZWN0MzIoICZyZWN0LCBwdCApKSByZXR1cm4gMDsKIAogICAgIHduZCA9IHduZC0+Y2hpbGQ7CiAgICAgd2hpbGUgKCB3bmQgKQogICAgIHsKLSAgICAgICAgaWYgKFB0SW5SZWN0MTYoICZ3bmQtPnJlY3RXaW5kb3csIHB0ICkpIHJldHVybiB3bmQtPmh3bmRTZWxmOworICAgICAgICBpZiAoUHRJblJlY3QzMiggJnduZC0+cmVjdFdpbmRvdywgcHQgKSkgcmV0dXJuIHduZC0+aHduZFNlbGY7CiAgICAgICAgIHduZCA9IHduZC0+bmV4dDsKICAgICB9CiAgICAgcmV0dXJuIGh3bmRQYXJlbnQ7CkBAIC00NDEsMTcgKzQ1MCw2IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgQ2hpbGRXaW5kb3dGcm9tUG9pbnQzMiAgIChVU0VSMzIuKQotICovCi1IV05EMzIgQ2hpbGRXaW5kb3dGcm9tUG9pbnQzMiggSFdORDMyIGh3bmRQYXJlbnQsIFBPSU5UMzIgcHQgKQotewotICAgIFBPSU5UMTYgcHQxNjsKLSAgICBDT05WX1BPSU5UMzJUTzE2KCAmcHQsICZwdDE2ICk7Ci0gICAgcmV0dXJuIChIV05EMzIpQ2hpbGRXaW5kb3dGcm9tUG9pbnQxNiggaHduZFBhcmVudCwgcHQxNiApOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgIFdJTlBPU19HZXRXaW5PZmZzZXQKICAqCiAgKiBDYWxjdWxhdGUgdGhlIG9mZnNldCBiZXR3ZWVuIHRoZSBvcmlnaW4gb2YgdGhlIHR3byB3aW5kb3dzLiBVc2VkCkBAIC02NjAsMTAgKzY1OCwxMSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgV0lOUE9TX0luaXRJbnRlcm5hbFBvcwogICovCi1zdGF0aWMgTFBJTlRFUk5BTFBPUyBXSU5QT1NfSW5pdEludGVybmFsUG9zKCBXTkQqIHduZCwgUE9JTlQxNiBwdCwgCi0JCQkJCSAgICAgTFBSRUNUMTYgcmVzdG9yZVJlY3QgKQorc3RhdGljIExQSU5URVJOQUxQT1MgV0lOUE9TX0luaXRJbnRlcm5hbFBvcyggV05EKiB3bmQsIFBPSU5UMzIgcHQsIAorCQkJCQkgICAgIExQUkVDVDMyIHJlc3RvcmVSZWN0ICkKIHsKLSAgICBMUElOVEVSTkFMUE9TIGxwUG9zID0gKExQSU5URVJOQUxQT1MpIEdldFByb3AzMkEoIHduZC0+aHduZFNlbGYsIGF0b21JbnRlcm5hbFBvcyApOworICAgIExQSU5URVJOQUxQT1MgbHBQb3MgPSAoTFBJTlRFUk5BTFBPUykgR2V0UHJvcDMyQSggd25kLT5od25kU2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21JbnRlcm5hbFBvcyApOwogICAgIGlmKCAhbHBQb3MgKQogICAgIHsKIAkvKiB0aGlzIGhhcHBlbnMgd2hlbiB0aGUgd2luZG93IGlzIG1pbmltaXplZC9tYXhpbWl6ZWQgCkBAIC02NzQsMTYgKzY3MywxNiBAQAogCiAJU2V0UHJvcDMyQSggd25kLT5od25kU2VsZiwgYXRvbUludGVybmFsUG9zLCAoSEFORExFMzIpbHBQb3MgKTsKIAlscFBvcy0+aHduZEljb25UaXRsZSA9IDA7IC8qIGRlZmVyIHVudGlsIG5lZWRzIHRvIGJlIHNob3duICovCi0JbHBQb3MtPnJlY3ROb3JtYWwgPSB3bmQtPnJlY3RXaW5kb3c7CisgICAgICAgIENPTlZfUkVDVDMyVE8xNiggJnduZC0+cmVjdFdpbmRvdywgJmxwUG9zLT5yZWN0Tm9ybWFsICk7CiAJKihVSU5UMzIqKSZscFBvcy0+cHRJY29uUG9zID0gKihVSU5UMzIqKSZscFBvcy0+cHRNYXhQb3MgPSAweEZGRkZGRkZGOwogICAgIH0KIAogICAgIGlmKCB3bmQtPmR3U3R5bGUgJiBXU19NSU5JTUlaRSApIAotCWxwUG9zLT5wdEljb25Qb3MgPSBwdDsKKwlDT05WX1BPSU5UMzJUTzE2KCAmcHQsICZscFBvcy0+cHRJY29uUG9zICk7CiAgICAgZWxzZSBpZiggd25kLT5kd1N0eWxlICYgV1NfTUFYSU1JWkUgKSAKLQlscFBvcy0+cHRNYXhQb3MgPSBwdDsKKwlDT05WX1BPSU5UMzJUTzE2KCAmcHQsICZscFBvcy0+cHRNYXhQb3MgKTsKICAgICBlbHNlIGlmKCByZXN0b3JlUmVjdCApIAotCWxwUG9zLT5yZWN0Tm9ybWFsID0gKnJlc3RvcmVSZWN0OworCUNPTlZfUkVDVDMyVE8xNiggcmVzdG9yZVJlY3QsICZscFBvcy0+cmVjdE5vcm1hbCApOwogCiAgICAgcmV0dXJuIGxwUG9zOwogfQpAQCAtNzI3LDcgKzcyNiw3IEBACiAKIAkgICAgaWYoICEocFduZC0+ZHdTdHlsZSAmIFdTX1ZJU0lCTEUpICkKIAkgICAgewotCQlTZW5kTWVzc2FnZTE2KCBoV25kLCBXTV9TSE9XV0lORE9XLCBUUlVFLCAwICk7CisJCVNlbmRNZXNzYWdlMzJBKCBoV25kLCBXTV9TSE9XV0lORE9XLCBUUlVFLCAwICk7CiAJCVNldFdpbmRvd1BvczMyKCBoV25kLCAwLCAwLCAwLCAwLCAwLCBTV1BfTk9TSVpFIHwgU1dQX05PTU9WRSB8CiAJCQkgICAgICAgIFNXUF9OT0FDVElWQVRFIHwgU1dQX05PWk9SREVSIHwgU1dQX1NIT1dXSU5ET1cgKTsKIAkgICAgfQpAQCAtNzQyLDIzICs3NDEsMjEgQEAKICAqCiAgKiBHZXQgdGhlIG1pbmltaXplZCBhbmQgbWF4aW1pemVkIGluZm9ybWF0aW9uIGZvciBhIHdpbmRvdy4KICAqLwotdm9pZCBXSU5QT1NfR2V0TWluTWF4SW5mbyggV05EICp3bmRQdHIsIFBPSU5UMTYgKm1heFNpemUsIFBPSU5UMTYgKm1heFBvcywKLQkJCSAgIFBPSU5UMTYgKm1pblRyYWNrLCBQT0lOVDE2ICptYXhUcmFjayApCit2b2lkIFdJTlBPU19HZXRNaW5NYXhJbmZvKCBXTkQgKnduZFB0ciwgUE9JTlQzMiAqbWF4U2l6ZSwgUE9JTlQzMiAqbWF4UG9zLAorCQkJICAgUE9JTlQzMiAqbWluVHJhY2ssIFBPSU5UMzIgKm1heFRyYWNrICkKIHsKICAgICBMUElOVEVSTkFMUE9TIGxwUG9zOwotICAgIE1JTk1BWElORk8xNiAqTWluTWF4OwotICAgIHNob3J0IHhpbmMsIHlpbmM7CisgICAgTUlOTUFYSU5GTzMyIE1pbk1heDsKKyAgICBJTlQzMiB4aW5jLCB5aW5jOwogCi0gICAgaWYgKCEoTWluTWF4ID0gU0VHUFRSX05FVyhNSU5NQVhJTkZPMTYpKSkgcmV0dXJuOworICAgIC8qIENvbXB1dGUgZGVmYXVsdCB2YWx1ZXMgKi8KIAotICAgICAgLyogQ29tcHV0ZSBkZWZhdWx0IHZhbHVlcyAqLwotCi0gICAgTWluTWF4LT5wdE1heFNpemUueCA9IFNZU01FVFJJQ1NfQ1hTQ1JFRU47Ci0gICAgTWluTWF4LT5wdE1heFNpemUueSA9IFNZU01FVFJJQ1NfQ1lTQ1JFRU47Ci0gICAgTWluTWF4LT5wdE1pblRyYWNrU2l6ZS54ID0gU1lTTUVUUklDU19DWE1JTlRSQUNLOwotICAgIE1pbk1heC0+cHRNaW5UcmFja1NpemUueSA9IFNZU01FVFJJQ1NfQ1lNSU5UUkFDSzsKLSAgICBNaW5NYXgtPnB0TWF4VHJhY2tTaXplLnggPSBTWVNNRVRSSUNTX0NYU0NSRUVOOwotICAgIE1pbk1heC0+cHRNYXhUcmFja1NpemUueSA9IFNZU01FVFJJQ1NfQ1lTQ1JFRU47CisgICAgTWluTWF4LnB0TWF4U2l6ZS54ID0gU1lTTUVUUklDU19DWFNDUkVFTjsKKyAgICBNaW5NYXgucHRNYXhTaXplLnkgPSBTWVNNRVRSSUNTX0NZU0NSRUVOOworICAgIE1pbk1heC5wdE1pblRyYWNrU2l6ZS54ID0gU1lTTUVUUklDU19DWE1JTlRSQUNLOworICAgIE1pbk1heC5wdE1pblRyYWNrU2l6ZS55ID0gU1lTTUVUUklDU19DWU1JTlRSQUNLOworICAgIE1pbk1heC5wdE1heFRyYWNrU2l6ZS54ID0gU1lTTUVUUklDU19DWFNDUkVFTjsKKyAgICBNaW5NYXgucHRNYXhUcmFja1NpemUueSA9IFNZU01FVFJJQ1NfQ1lTQ1JFRU47CiAKICAgICBpZiAod25kUHRyLT5mbGFncyAmIFdJTl9NQU5BR0VEKSB4aW5jID0geWluYyA9IDA7CiAgICAgZWxzZSBpZiAoSEFTX0RMR0ZSQU1FKCB3bmRQdHItPmR3U3R5bGUsIHduZFB0ci0+ZHdFeFN0eWxlICkpCkBAIC03ODAsMzggKzc3NywzNiBAQAogICAgICAgICAgICAgeWluYyArPSBTWVNNRVRSSUNTX0NZQk9SREVSOwogICAgICAgICB9CiAgICAgfQotICAgIE1pbk1heC0+cHRNYXhTaXplLnggKz0gMiAqIHhpbmM7Ci0gICAgTWluTWF4LT5wdE1heFNpemUueSArPSAyICogeWluYzsKKyAgICBNaW5NYXgucHRNYXhTaXplLnggKz0gMiAqIHhpbmM7CisgICAgTWluTWF4LnB0TWF4U2l6ZS55ICs9IDIgKiB5aW5jOwogCiAgICAgbHBQb3MgPSAoTFBJTlRFUk5BTFBPUylHZXRQcm9wMzJBKCB3bmRQdHItPmh3bmRTZWxmLCBhdG9tSW50ZXJuYWxQb3MgKTsKICAgICBpZiggbHBQb3MgJiYgIUVNUFRZUE9JTlQobHBQb3MtPnB0TWF4UG9zKSApCi0JTWluTWF4LT5wdE1heFBvc2l0aW9uID0gbHBQb3MtPnB0TWF4UG9zOworCUNPTlZfUE9JTlQxNlRPMzIoICZscFBvcy0+cHRNYXhQb3MsICZNaW5NYXgucHRNYXhQb3NpdGlvbiApOwogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIE1pbk1heC0+cHRNYXhQb3NpdGlvbi54ID0gLXhpbmM7Ci0gICAgICAgIE1pbk1heC0+cHRNYXhQb3NpdGlvbi55ID0gLXlpbmM7CisgICAgICAgIE1pbk1heC5wdE1heFBvc2l0aW9uLnggPSAteGluYzsKKyAgICAgICAgTWluTWF4LnB0TWF4UG9zaXRpb24ueSA9IC15aW5jOwogICAgIH0KIAotICAgIFNlbmRNZXNzYWdlMTYoIHduZFB0ci0+aHduZFNlbGYsIFdNX0dFVE1JTk1BWElORk8sIDAsCi0gICAgICAgICAgICAgICAgICAgKExQQVJBTSlTRUdQVFJfR0VUKE1pbk1heCkgKTsKKyAgICBTZW5kTWVzc2FnZTMyQSggd25kUHRyLT5od25kU2VsZiwgV01fR0VUTUlOTUFYSU5GTywgMCwgKExQQVJBTSkmTWluTWF4ICk7CiAKICAgICAgIC8qIFNvbWUgc2FuaXR5IGNoZWNrcyAqLwogCiAgICAgZHByaW50Zl93aW4oc3RkZGViLCJHZXRNaW5NYXhJbmZvOiAlZCAlZCAvICVkICVkIC8gJWQgJWQgLyAlZCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICBNaW5NYXgtPnB0TWF4U2l6ZS54LCBNaW5NYXgtPnB0TWF4U2l6ZS55LAotICAgICAgICAgICAgICAgICAgICAgIE1pbk1heC0+cHRNYXhQb3NpdGlvbi54LCBNaW5NYXgtPnB0TWF4UG9zaXRpb24ueSwKLSAgICAgICAgICAgICAgICAgICAgICBNaW5NYXgtPnB0TWF4VHJhY2tTaXplLngsIE1pbk1heC0+cHRNYXhUcmFja1NpemUueSwKLSAgICAgICAgICAgICAgICAgICAgICBNaW5NYXgtPnB0TWluVHJhY2tTaXplLngsIE1pbk1heC0+cHRNaW5UcmFja1NpemUueSk7Ci0gICAgTWluTWF4LT5wdE1heFRyYWNrU2l6ZS54ID0gTUFYKCBNaW5NYXgtPnB0TWF4VHJhY2tTaXplLngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbk1heC0+cHRNaW5UcmFja1NpemUueCApOwotICAgIE1pbk1heC0+cHRNYXhUcmFja1NpemUueSA9IE1BWCggTWluTWF4LT5wdE1heFRyYWNrU2l6ZS55LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5NYXgtPnB0TWluVHJhY2tTaXplLnkgKTsKKyAgICAgICAgICAgICAgICAgICAgICBNaW5NYXgucHRNYXhTaXplLngsIE1pbk1heC5wdE1heFNpemUueSwKKyAgICAgICAgICAgICAgICAgICAgICBNaW5NYXgucHRNYXhQb3NpdGlvbi54LCBNaW5NYXgucHRNYXhQb3NpdGlvbi55LAorICAgICAgICAgICAgICAgICAgICAgIE1pbk1heC5wdE1heFRyYWNrU2l6ZS54LCBNaW5NYXgucHRNYXhUcmFja1NpemUueSwKKyAgICAgICAgICAgICAgICAgICAgICBNaW5NYXgucHRNaW5UcmFja1NpemUueCwgTWluTWF4LnB0TWluVHJhY2tTaXplLnkpOworICAgIE1pbk1heC5wdE1heFRyYWNrU2l6ZS54ID0gTUFYKCBNaW5NYXgucHRNYXhUcmFja1NpemUueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluTWF4LnB0TWluVHJhY2tTaXplLnggKTsKKyAgICBNaW5NYXgucHRNYXhUcmFja1NpemUueSA9IE1BWCggTWluTWF4LnB0TWF4VHJhY2tTaXplLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbk1heC5wdE1pblRyYWNrU2l6ZS55ICk7CiAKLSAgICBpZiAobWF4U2l6ZSkgKm1heFNpemUgPSBNaW5NYXgtPnB0TWF4U2l6ZTsKLSAgICBpZiAobWF4UG9zKSAqbWF4UG9zID0gTWluTWF4LT5wdE1heFBvc2l0aW9uOwotICAgIGlmIChtaW5UcmFjaykgKm1pblRyYWNrID0gTWluTWF4LT5wdE1pblRyYWNrU2l6ZTsKLSAgICBpZiAobWF4VHJhY2spICptYXhUcmFjayA9IE1pbk1heC0+cHRNYXhUcmFja1NpemU7Ci0gICAgU0VHUFRSX0ZSRUUoTWluTWF4KTsKKyAgICBpZiAobWF4U2l6ZSkgKm1heFNpemUgPSBNaW5NYXgucHRNYXhTaXplOworICAgIGlmIChtYXhQb3MpICptYXhQb3MgPSBNaW5NYXgucHRNYXhQb3NpdGlvbjsKKyAgICBpZiAobWluVHJhY2spICptaW5UcmFjayA9IE1pbk1heC5wdE1pblRyYWNrU2l6ZTsKKyAgICBpZiAobWF4VHJhY2spICptYXhUcmFjayA9IE1pbk1heC5wdE1heFRyYWNrU2l6ZTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04MjMsMTMgKzgxOCwxNSBAQAogICovCiBVSU5UMTYgV0lOUE9TX01pbk1heGltaXplKCBXTkQqIHduZFB0ciwgVUlOVDE2IGNtZCwgTFBSRUNUMTYgbHBSZWN0ICkKIHsKLSAgICBVSU5UMTYJICBzd3BGbGFncyA9IDA7Ci0gICAgUE9JTlQxNgkgIHNpemUgPSB7IHduZFB0ci0+cmVjdFdpbmRvdy5sZWZ0LCB3bmRQdHItPnJlY3RXaW5kb3cudG9wIH07Ci0gICAgTFBJTlRFUk5BTFBPUyBscFBvcyA9IFdJTlBPU19Jbml0SW50ZXJuYWxQb3MoIHduZFB0ciwgc2l6ZSwgJnduZFB0ci0+cmVjdFdpbmRvdyApOworICAgIFVJTlQxNiBzd3BGbGFncyA9IDA7CisgICAgUE9JTlQzMiBwdDsKKyAgICBQT0lOVDMyIHNpemUgPSB7IHduZFB0ci0+cmVjdFdpbmRvdy5sZWZ0LCB3bmRQdHItPnJlY3RXaW5kb3cudG9wIH07CisgICAgTFBJTlRFUk5BTFBPUyBscFBvcyA9IFdJTlBPU19Jbml0SW50ZXJuYWxQb3MoIHduZFB0ciwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnduZFB0ci0+cmVjdFdpbmRvdyApOwogCiAgICAgZHByaW50Zl93aW4oc3RkZGViLCJNaW5NYXhpbWl6ZTogMHglMDR4ICV1XG4iLCB3bmRQdHItPmh3bmRTZWxmLCBjbWQgKTsKIAotICAgIGlmKCBscFBvcyAmJiAhSE9PS19DYWxsSG9va3MxNiggV0hfQ0JULCBIQ0JUX01JTk1BWCwgd25kUHRyLT5od25kU2VsZiwgY21kKSApCisgICAgaWYgKGxwUG9zICYmICFIT09LX0NhbGxIb29rczE2KFdIX0NCVCwgSENCVF9NSU5NQVgsIHduZFB0ci0+aHduZFNlbGYsIGNtZCkpCiAgICAgewogCWlmKCB3bmRQdHItPmR3U3R5bGUgJiBXU19NSU5JTUlaRSApCiAJewpAQCAtODU3LDcgKzg1NCw5IEBACiAJCSBicmVhazsKIAogCSAgICBjYXNlIFNXX01BWElNSVpFOgotCQkgV0lOUE9TX0dldE1pbk1heEluZm8oIHduZFB0ciwgJnNpemUsICZscFBvcy0+cHRNYXhQb3MsIE5VTEwsIE5VTEwgKTsKKyAgICAgICAgICAgICAgICBDT05WX1BPSU5UMTZUTzMyKCAmbHBQb3MtPnB0TWF4UG9zLCAmcHQgKTsKKyAgICAgICAgICAgICAgICBXSU5QT1NfR2V0TWluTWF4SW5mbyggd25kUHRyLCAmc2l6ZSwgJnB0LCBOVUxMLCBOVUxMICk7CisgICAgICAgICAgICAgICAgQ09OVl9QT0lOVDMyVE8xNiggJnB0LCAmbHBQb3MtPnB0TWF4UG9zICk7CiAKIAkJIGlmKCB3bmRQdHItPmR3U3R5bGUgJiBXU19NSU5JTUlaRSApCiAJCSB7CkBAIC04NzgsNyArODc3LDkgQEAKIAkJICAgICBpZiggd25kUHRyLT5mbGFncyAmIFdJTl9SRVNUT1JFX01BWCkKIAkJICAgICB7CiAJCQkgLyogUmVzdG9yZSB0byBtYXhpbWl6ZWQgcG9zaXRpb24gKi8KLQkJCSBXSU5QT1NfR2V0TWluTWF4SW5mbyggd25kUHRyLCAmc2l6ZSwgJmxwUG9zLT5wdE1heFBvcywgTlVMTCwgTlVMTCApOworICAgICAgICAgICAgICAgICAgICAgICAgIENPTlZfUE9JTlQxNlRPMzIoICZscFBvcy0+cHRNYXhQb3MsICZwdCApOworICAgICAgICAgICAgICAgICAgICAgICAgIFdJTlBPU19HZXRNaW5NYXhJbmZvKCB3bmRQdHIsICZzaXplLCAmcHQsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgIENPTlZfUE9JTlQzMlRPMTYoICZwdCwgJmxwUG9zLT5wdE1heFBvcyApOwogCQkJIHduZFB0ci0+ZHdTdHlsZSB8PSBXU19NQVhJTUlaRTsKIAkJICAgICB9CiAJCSB9IApAQCAtOTc0LDcgKzk3NSw3IEBACiAgICAgc2hvd0ZsYWcgPSAoY21kICE9IFNXX0hJREUpOwogICAgIGlmIChzaG93RmxhZyAhPSB3YXNWaXNpYmxlKQogICAgIHsKLSAgICAgICAgU2VuZE1lc3NhZ2UxNiggaHduZCwgV01fU0hPV1dJTkRPVywgc2hvd0ZsYWcsIDAgKTsKKyAgICAgICAgU2VuZE1lc3NhZ2UzMkEoIGh3bmQsIFdNX1NIT1dXSU5ET1csIHNob3dGbGFnLCAwICk7CiAgICAgICAgIGlmICghSXNXaW5kb3czMiggaHduZCApKSByZXR1cm4gd2FzVmlzaWJsZTsKICAgICB9CiAKQEAgLTEwMDQsMTAgKzEwMDUsMTAgQEAKIAl3bmRQdHItPmZsYWdzICY9IH5XSU5fTkVFRF9TSVpFOwogCWlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19NQVhJTUlaRSkgd1BhcmFtID0gU0laRV9NQVhJTUlaRUQ7CiAJZWxzZSBpZiAod25kUHRyLT5kd1N0eWxlICYgV1NfTUlOSU1JWkUpIHdQYXJhbSA9IFNJWkVfTUlOSU1JWkVEOwotCVNlbmRNZXNzYWdlMTYoIGh3bmQsIFdNX1NJWkUsIHdQYXJhbSwKKwlTZW5kTWVzc2FnZTMyQSggaHduZCwgV01fU0laRSwgd1BhcmFtLAogCQkgICAgIE1BS0VMT05HKHduZFB0ci0+cmVjdENsaWVudC5yaWdodC13bmRQdHItPnJlY3RDbGllbnQubGVmdCwKIAkJCSAgICB3bmRQdHItPnJlY3RDbGllbnQuYm90dG9tLXduZFB0ci0+cmVjdENsaWVudC50b3ApKTsKLQlTZW5kTWVzc2FnZTE2KCBod25kLCBXTV9NT1ZFLCAwLAorCVNlbmRNZXNzYWdlMzJBKCBod25kLCBXTV9NT1ZFLCAwLAogCQkgICBNQUtFTE9ORyh3bmRQdHItPnJlY3RDbGllbnQubGVmdCwgd25kUHRyLT5yZWN0Q2xpZW50LnRvcCkgKTsKICAgICB9CiAKQEAgLTEwNTUsNyArMTA1Niw3IEBACiAgICAgaWYoIHBXbmQgKQogICAgIHsKIAlMUElOVEVSTkFMUE9TIGxwUG9zID0gKExQSU5URVJOQUxQT1MpV0lOUE9TX0luaXRJbnRlcm5hbFBvcyggcFduZCwKLQkJCSAgICAgKihMUFBPSU5UMTYpJnBXbmQtPnJlY3RXaW5kb3cubGVmdCwgJnBXbmQtPnJlY3RXaW5kb3cgKTsKKwkJCSAgICAgKihMUFBPSU5UMzIpJnBXbmQtPnJlY3RXaW5kb3cubGVmdCwgJnBXbmQtPnJlY3RXaW5kb3cgKTsKIAl3bmRwbC0+bGVuZ3RoICA9IHNpemVvZigqd25kcGwpOwogCWlmKCBwV25kLT5kd1N0eWxlICYgV1NfTUlOSU1JWkUgKQogCSAgICB3bmRwbC0+c2hvd0NtZCA9IFNXX1NIT1dNQVhJTUlaRUQ7CkBAIC0xMTA5LDcgKzExMTAsNyBAQAogICAgIGlmKCBwV25kICkKICAgICB7CiAJTFBJTlRFUk5BTFBPUyBscFBvcyA9IChMUElOVEVSTkFMUE9TKVdJTlBPU19Jbml0SW50ZXJuYWxQb3MoIHBXbmQsCi0JCQkgICAgICooTFBQT0lOVDE2KSZwV25kLT5yZWN0V2luZG93LmxlZnQsICZwV25kLT5yZWN0V2luZG93ICk7CisJCQkgICAgICooTFBQT0lOVDMyKSZwV25kLT5yZWN0V2luZG93LmxlZnQsICZwV25kLT5yZWN0V2luZG93ICk7CiAKIAlpZiggZmxhZ3MgJiBQTEFDRV9NSU4gKSBscFBvcy0+cHRJY29uUG9zID0gd25kcGwtPnB0TWluUG9zaXRpb247CiAJaWYoIGZsYWdzICYgUExBQ0VfTUFYICkgbHBQb3MtPnB0TWF4UG9zID0gd25kcGwtPnB0TWF4UG9zaXRpb247CkBAIC0xMzA4LDEzICsxMzA5LDEzIEBACiAgICAgLyogc2V0IHByZXYgYWN0aXZlIHduZCB0byBjdXJyZW50IGFjdGl2ZSB3bmQgYW5kIHNlbmQgbm90aWZpY2F0aW9uICovCiAgICAgaWYgKChod25kUHJldkFjdGl2ZSA9IGh3bmRBY3RpdmUpICYmIElzV2luZG93MzIoaHduZFByZXZBY3RpdmUpKQogICAgIHsKLSAgICAgICAgaWYgKCFTZW5kTWVzc2FnZTE2KCBod25kUHJldkFjdGl2ZSwgV01fTkNBQ1RJVkFURSwgRkFMU0UsIDAgKSkKKyAgICAgICAgaWYgKCFTZW5kTWVzc2FnZTMyQSggaHduZFByZXZBY3RpdmUsIFdNX05DQUNUSVZBVEUsIEZBTFNFLCAwICkpCiAgICAgICAgIHsKIAkgICAgaWYgKEdldFN5c01vZGFsV2luZG93MTYoKSAhPSBoV25kKSByZXR1cm4gMDsKIAkgICAgLyogZGlzcmVnYXJkIHJlZnVzYWwgaWYgaFduZCBpcyBzeXNtb2RhbCAqLwogICAgICAgICB9CiAKLSNpZiAwCisjaWYgMQogCVNlbmRNZXNzYWdlMzJBKCBod25kUHJldkFjdGl2ZSwgV01fQUNUSVZBVEUsCiAgICAgICAgICAgICAgICAgICAgICAgICBNQUtFV1BBUkFNKCBXQV9JTkFDVElWRSwgd0ljb25pemVkICksCiAgICAgICAgICAgICAgICAgICAgICAgICAoTFBBUkFNKWhXbmQgKTsKQEAgLTEzOTksOCArMTQwMCw4IEBACiAgICAgICAgIHduZFRlbXAtPmh3bmRMYXN0QWN0aXZlID0gaFduZDsKIAogICAgICAgICB3SWNvbml6ZWQgPSBISVdPUkQod25kVGVtcC0+ZHdTdHlsZSAmIFdTX01JTklNSVpFKTsKLSAgICAgICAgU2VuZE1lc3NhZ2UxNiggaFduZCwgV01fTkNBQ1RJVkFURSwgVFJVRSwgMCApOwotI2lmIDAKKyAgICAgICAgU2VuZE1lc3NhZ2UzMkEoIGhXbmQsIFdNX05DQUNUSVZBVEUsIFRSVUUsIDAgKTsKKyNpZiAxCiAgICAgICAgIFNlbmRNZXNzYWdlMzJBKCBoV25kLCBXTV9BQ1RJVkFURSwKIAkJIE1BS0VXUEFSQU0oIChmTW91c2UpID8gV0FfQ0xJQ0tBQ1RJVkUgOiBXQV9BQ1RJVkUsIHdJY29uaXplZCksCiAJCSAoTFBBUkFNKWh3bmRQcmV2QWN0aXZlICk7CkBAIC0xNDg3LDcgKzE0ODgsNyBAQAogCiAgICAgLyogY2hpbGQgd2luZG93cyBnZXQgV01fQ0hJTERBQ1RJVkFURSBtZXNzYWdlICovCiAgICAgaWYoICh3bmRQdHItPmR3U3R5bGUgJiAoV1NfQ0hJTEQgfCBXU19QT1BVUCkpID09IFdTX0NISUxEICkKLQlyZXR1cm4gU2VuZE1lc3NhZ2UxNihoV25kLCBXTV9DSElMREFDVElWQVRFLCAwLCAwTCk7CisJcmV0dXJuIFNlbmRNZXNzYWdlMzJBKGhXbmQsIFdNX0NISUxEQUNUSVZBVEUsIDAsIDBMKTsKIAogICAgICAgICAvKiBvd25lZCBwb3B1cHMgaW1wbHkgb3duZXIgYWN0aXZhdGlvbiAtIG5vdCBzdXJlICovCiAgICAgaWYgKCh3bmRQdHItPmR3U3R5bGUgJiBXU19QT1BVUCkgJiYgd25kUHRyLT5vd25lciAmJgpAQCAtMTUxOSwyOCArMTUyMCwyNiBAQAogICogd2hlbiBjYWxjVmFsaWRSZWN0IGlzIFRSVUUuCiAgKi8KIExPTkcgV0lOUE9TX1NlbmROQ0NhbGNTaXplKCBIV05EMzIgaHduZCwgQk9PTDMyIGNhbGNWYWxpZFJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVDVDE2ICpuZXdXaW5kb3dSZWN0LCBSRUNUMTYgKm9sZFdpbmRvd1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVDVDE2ICpvbGRDbGllbnRSZWN0LCBTRUdQVFIgd2lucG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ1QxNiAqbmV3Q2xpZW50UmVjdCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVDVDMyICpuZXdXaW5kb3dSZWN0LCBSRUNUMzIgKm9sZFdpbmRvd1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVDVDMyICpvbGRDbGllbnRSZWN0LCBXSU5ET1dQT1MzMiAqd2lucG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQ1QzMiAqbmV3Q2xpZW50UmVjdCApCiB7Ci0gICAgTkNDQUxDU0laRV9QQVJBTVMxNiAqcGFyYW1zOworICAgIE5DQ0FMQ1NJWkVfUEFSQU1TMzIgcGFyYW1zOwogICAgIExPTkcgcmVzdWx0OwogCi0gICAgaWYgKCEocGFyYW1zID0gU0VHUFRSX05FVyhOQ0NBTENTSVpFX1BBUkFNUzE2KSkpIHJldHVybiAwOwotICAgIHBhcmFtcy0+cmdyY1swXSA9ICpuZXdXaW5kb3dSZWN0OworICAgIHBhcmFtcy5yZ3JjWzBdID0gKm5ld1dpbmRvd1JlY3Q7CiAgICAgaWYgKGNhbGNWYWxpZFJlY3QpCiAgICAgewotCXBhcmFtcy0+cmdyY1sxXSA9ICpvbGRXaW5kb3dSZWN0OwotCXBhcmFtcy0+cmdyY1syXSA9ICpvbGRDbGllbnRSZWN0OwotCXBhcmFtcy0+bHBwb3MgPSB3aW5wb3M7CisJcGFyYW1zLnJncmNbMV0gPSAqb2xkV2luZG93UmVjdDsKKwlwYXJhbXMucmdyY1syXSA9ICpvbGRDbGllbnRSZWN0OworCXBhcmFtcy5scHBvcyA9IHdpbnBvczsKICAgICB9Ci0gICAgcmVzdWx0ID0gU2VuZE1lc3NhZ2UxNiggaHduZCwgV01fTkNDQUxDU0laRSwgY2FsY1ZhbGlkUmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKExQQVJBTSlTRUdQVFJfR0VUKCBwYXJhbXMgKSApOworICAgIHJlc3VsdCA9IFNlbmRNZXNzYWdlMzJBKCBod25kLCBXTV9OQ0NBTENTSVpFLCBjYWxjVmFsaWRSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBBUkFNKSZwYXJhbXMgKTsKICAgICBkcHJpbnRmX3dpbiggc3RkZGViLCAiV0lOUE9TX1NlbmROQ0NhbGNTaXplOiAlZCwlZC0lZCwlZFxuIiwKLSAgICAgICAgICAgICAgICAgcGFyYW1zLT5yZ3JjWzBdLmxlZnQsIHBhcmFtcy0+cmdyY1swXS50b3AsCi0gICAgICAgICAgICAgICAgIHBhcmFtcy0+cmdyY1swXS5yaWdodCwgcGFyYW1zLT5yZ3JjWzBdLmJvdHRvbSApOwotICAgICpuZXdDbGllbnRSZWN0ID0gcGFyYW1zLT5yZ3JjWzBdOwotICAgIFNFR1BUUl9GUkVFKHBhcmFtcyk7CisgICAgICAgICAgICAgICAgIHBhcmFtcy5yZ3JjWzBdLmxlZnQsIHBhcmFtcy5yZ3JjWzBdLnRvcCwKKyAgICAgICAgICAgICAgICAgcGFyYW1zLnJncmNbMF0ucmlnaHQsIHBhcmFtcy5yZ3JjWzBdLmJvdHRvbSApOworICAgICpuZXdDbGllbnRSZWN0ID0gcGFyYW1zLnJncmNbMF07CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTU1Miw3ICsxNTUxLDcgQEAKICAqLwogTE9ORyBXSU5QT1NfSGFuZGxlV2luZG93UG9zQ2hhbmdpbmcxNiggV05EICp3bmRQdHIsIFdJTkRPV1BPUzE2ICp3aW5wb3MgKQogewotICAgIFBPSU5UMTYgbWF4U2l6ZTsKKyAgICBQT0lOVDMyIG1heFNpemU7CiAgICAgaWYgKHdpbnBvcy0+ZmxhZ3MgJiBTV1BfTk9TSVpFKSByZXR1cm4gMDsKICAgICBpZiAoKHduZFB0ci0+ZHdTdHlsZSAmIFdTX1RISUNLRlJBTUUpIHx8CiAJKCh3bmRQdHItPmR3U3R5bGUgJiAoV1NfUE9QVVAgfCBXU19DSElMRCkpID09IDApKQpAQCAtMTU3Miw3ICsxNTcxLDcgQEAKICAqLwogTE9ORyBXSU5QT1NfSGFuZGxlV2luZG93UG9zQ2hhbmdpbmczMiggV05EICp3bmRQdHIsIFdJTkRPV1BPUzMyICp3aW5wb3MgKQogewotICAgIFBPSU5UMTYgbWF4U2l6ZTsKKyAgICBQT0lOVDMyIG1heFNpemU7CiAgICAgaWYgKHdpbnBvcy0+ZmxhZ3MgJiBTV1BfTk9TSVpFKSByZXR1cm4gMDsKICAgICBpZiAoKHduZFB0ci0+ZHdTdHlsZSAmIFdTX1RISUNLRlJBTUUpIHx8CiAJKCh3bmRQdHItPmR3U3R5bGUgJiAoV1NfUE9QVVAgfCBXU19DSElMRCkpID09IDApKQpAQCAtMTcyNCw3ICsxNzIzLDkgQEAKICAqIEZJWE1FOiBNb3ZlIHZpc2libGUgYW5kIHVwZGF0ZSByZWdpb25zIHRvIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3lzdGVtCiAgKgkgKGVpdGhlciBwYXJlbnQgY2xpZW50IG9yIHdpbmRvdykuIFRoaXMgaXMgYSBsb3Qgb2Ygd29yayB0aG91Z2guCiAgKi8KLXN0YXRpYyBVSU5UMzIgV0lOUE9TX1NpemVNb3ZlQ2xlYW4oV05EKiBXbmQsIEhSR04zMiBvbGRWaXNSZ24sIExQUkVDVDE2IGxwT2xkV25kUmVjdCwgTFBSRUNUMTYgbHBPbGRDbGllbnRSZWN0LCBVSU5UMzIgdUZsYWdzICkKK3N0YXRpYyBVSU5UMzIgV0lOUE9TX1NpemVNb3ZlQ2xlYW4oIFdORCogV25kLCBIUkdOMzIgb2xkVmlzUmduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBSRUNUMzIgbHBPbGRXbmRSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBSRUNUMzIgbHBPbGRDbGllbnRSZWN0LCBVSU5UMzIgdUZsYWdzICkKIHsKICBIUkdOMzIgbmV3VmlzUmduID0gRENFX0dldFZpc1JnbihXbmQtPmh3bmRTZWxmLERDWF9XSU5ET1cgfCBEQ1hfQ0xJUFNJQkxJTkdTKTsKICBIUkdOMzIgZGlydHlSZ24gPSBDcmVhdGVSZWN0UmduMzIoMCwwLDAsMCk7CkBAIC0xNzMyLDEwICsxNzMzLDE0IEBACiAKICBkcHJpbnRmX3dpbihzdGRkZWIsImNsZWFuaW5nIHVwLi4ubmV3IHduZD0oJWkgJWktJWkgJWkpIG9sZCB3bmQ9KCVpICVpLSVpICVpKVxuXAogXHRcdG5ldyBjbGllbnQ9KCVpICVpLSVpICVpKSBvbGQgY2xpZW50PSglaSAlaS0laSAlaSlcbiIsCi0JCSAgIFduZC0+cmVjdFdpbmRvdy5sZWZ0LCBXbmQtPnJlY3RXaW5kb3cudG9wLCBXbmQtPnJlY3RXaW5kb3cucmlnaHQsIFduZC0+cmVjdFdpbmRvdy5ib3R0b20sCi0JCSAgIGxwT2xkV25kUmVjdC0+bGVmdCwgbHBPbGRXbmRSZWN0LT50b3AsIGxwT2xkV25kUmVjdC0+cmlnaHQsIGxwT2xkV25kUmVjdC0+Ym90dG9tLAotCQkgICBXbmQtPnJlY3RDbGllbnQubGVmdCxXbmQtPnJlY3RDbGllbnQudG9wLFduZC0+cmVjdENsaWVudC5yaWdodCxXbmQtPnJlY3RDbGllbnQuYm90dG9tLAotCQkgICBscE9sZENsaWVudFJlY3QtPmxlZnQsbHBPbGRDbGllbnRSZWN0LT50b3AsbHBPbGRDbGllbnRSZWN0LT5yaWdodCxscE9sZENsaWVudFJlY3QtPmJvdHRvbSk7CisgICAgICAgICAgICAgV25kLT5yZWN0V2luZG93LmxlZnQsIFduZC0+cmVjdFdpbmRvdy50b3AsCisgICAgICAgICAgICAgV25kLT5yZWN0V2luZG93LnJpZ2h0LCBXbmQtPnJlY3RXaW5kb3cuYm90dG9tLAorICAgICAgICAgICAgIGxwT2xkV25kUmVjdC0+bGVmdCwgbHBPbGRXbmRSZWN0LT50b3AsCisgICAgICAgICAgICAgbHBPbGRXbmRSZWN0LT5yaWdodCwgbHBPbGRXbmRSZWN0LT5ib3R0b20sCisgICAgICAgICAgICAgV25kLT5yZWN0Q2xpZW50LmxlZnQsIFduZC0+cmVjdENsaWVudC50b3AsCisgICAgICAgICAgICAgV25kLT5yZWN0Q2xpZW50LnJpZ2h0LCBXbmQtPnJlY3RDbGllbnQuYm90dG9tLAorICAgICAgICAgICAgIGxwT2xkQ2xpZW50UmVjdC0+bGVmdCwgbHBPbGRDbGllbnRSZWN0LT50b3AsCisgICAgICAgICAgICAgbHBPbGRDbGllbnRSZWN0LT5yaWdodCxscE9sZENsaWVudFJlY3QtPmJvdHRvbSApOwogCiAgaWYoIChscE9sZFduZFJlY3QtPnJpZ2h0IC0gbHBPbGRXbmRSZWN0LT5sZWZ0KSAhPSAoV25kLT5yZWN0V2luZG93LnJpZ2h0IC0gV25kLT5yZWN0V2luZG93LmxlZnQpIHx8CiAgICAgIChscE9sZFduZFJlY3QtPmJvdHRvbSAtIGxwT2xkV25kUmVjdC0+dG9wKSAhPSAoV25kLT5yZWN0V2luZG93LmJvdHRvbSAtIFduZC0+cmVjdFdpbmRvdy50b3ApICkKQEAgLTE4NzgsNyArMTg4Myw3IEBACiAgKgogICogU2V0V2luZG93UG9zKCkgZm9yIGFuIFggd2luZG93LiBVc2VkIGJ5IHRoZSByZWFsIFNldFdpbmRvd1BvcygpLgogICovCi1zdGF0aWMgdm9pZCBXSU5QT1NfU2V0WFdpbmRvd1BvcyggV0lORE9XUE9TMTYgKndpbnBvcyApCitzdGF0aWMgdm9pZCBXSU5QT1NfU2V0WFdpbmRvd1BvcyggY29uc3QgV0lORE9XUE9TMzIgKndpbnBvcyApCiB7CiAgICAgWFdpbmRvd0NoYW5nZXMgd2luQ2hhbmdlczsKICAgICBpbnQgY2hhbmdlTWFzayA9IDA7CkBAIC0xOTU4LDkgKzE5NjMsOSBAQAogQk9PTDMyIFNldFdpbmRvd1BvczMyKCBIV05EMzIgaHduZCwgSFdORDMyIGh3bmRJbnNlcnRBZnRlciwgSU5UMzIgeCwgSU5UMzIgeSwKICAgICAgICAgICAgICAgICAgICAgICAgSU5UMzIgY3gsIElOVDMyIGN5LCBXT1JEIGZsYWdzICkKIHsKLSAgICBXSU5ET1dQT1MxNiAqd2lucG9zOworICAgIFdJTkRPV1BPUzMyIHdpbnBvczsKICAgICBXTkQgKgl3bmRQdHI7Ci0gICAgUkVDVDE2IAluZXdXaW5kb3dSZWN0LCBuZXdDbGllbnRSZWN0LCBvbGRXaW5kb3dSZWN0OworICAgIFJFQ1QzMiAJbmV3V2luZG93UmVjdCwgbmV3Q2xpZW50UmVjdCwgb2xkV2luZG93UmVjdDsKICAgICBIUkdOMzIJdmlzUmduID0gMDsKICAgICBIV05EMzIJdGVtcEluc2VydEFmdGVyPSAwOwogICAgIGludCAJcmVzdWx0ID0gMDsKQEAgLTIwMzAsMjAgKzIwMzUsMTggQEAKIAogICAgICAgLyogRmlsbCB0aGUgV0lORE9XUE9TIHN0cnVjdHVyZSAqLwogCi0gICAgaWYgKCEod2lucG9zID0gU0VHUFRSX05FVyhXSU5ET1dQT1MxNikpKSByZXR1cm4gRkFMU0U7Ci0gICAgd2lucG9zLT5od25kID0gaHduZDsKLSAgICB3aW5wb3MtPmh3bmRJbnNlcnRBZnRlciA9IGh3bmRJbnNlcnRBZnRlcjsKLSAgICB3aW5wb3MtPnggPSB4OwotICAgIHdpbnBvcy0+eSA9IHk7Ci0gICAgd2lucG9zLT5jeCA9IGN4OwotICAgIHdpbnBvcy0+Y3kgPSBjeTsKLSAgICB3aW5wb3MtPmZsYWdzID0gZmxhZ3M7CisgICAgd2lucG9zLmh3bmQgPSBod25kOworICAgIHdpbnBvcy5od25kSW5zZXJ0QWZ0ZXIgPSBod25kSW5zZXJ0QWZ0ZXI7CisgICAgd2lucG9zLnggPSB4OworICAgIHdpbnBvcy55ID0geTsKKyAgICB3aW5wb3MuY3ggPSBjeDsKKyAgICB3aW5wb3MuY3kgPSBjeTsKKyAgICB3aW5wb3MuZmxhZ3MgPSBmbGFnczsKICAgICAKICAgICAgIC8qIFNlbmQgV01fV0lORE9XUE9TQ0hBTkdJTkcgbWVzc2FnZSAqLwogCiAgICAgaWYgKCEoZmxhZ3MgJiBTV1BfTk9TRU5EQ0hBTkdJTkcpKQotCVNlbmRNZXNzYWdlMTYoIGh3bmQsIFdNX1dJTkRPV1BPU0NIQU5HSU5HLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAoTFBBUkFNKVNFR1BUUl9HRVQod2lucG9zKSApOworCVNlbmRNZXNzYWdlMzJBKCBod25kLCBXTV9XSU5ET1dQT1NDSEFOR0lORywgMCwgKExQQVJBTSkmd2lucG9zICk7CiAKICAgICAgIC8qIENhbGN1bGF0ZSBuZXcgcG9zaXRpb24gYW5kIHNpemUgKi8KIApAQCAtMjA1MSwyNyArMjA1NCwyNyBAQAogICAgIG5ld0NsaWVudFJlY3QgPSAod25kUHRyLT5kd1N0eWxlICYgV1NfTUlOSU1JWkUpID8gd25kUHRyLT5yZWN0V2luZG93CiAJCQkJCQkgICAgOiB3bmRQdHItPnJlY3RDbGllbnQ7CiAKLSAgICBpZiAoISh3aW5wb3MtPmZsYWdzICYgU1dQX05PU0laRSkpCisgICAgaWYgKCEod2lucG9zLmZsYWdzICYgU1dQX05PU0laRSkpCiAgICAgewotICAgICAgICBuZXdXaW5kb3dSZWN0LnJpZ2h0ICA9IG5ld1dpbmRvd1JlY3QubGVmdCArIHdpbnBvcy0+Y3g7Ci0gICAgICAgIG5ld1dpbmRvd1JlY3QuYm90dG9tID0gbmV3V2luZG93UmVjdC50b3AgKyB3aW5wb3MtPmN5OworICAgICAgICBuZXdXaW5kb3dSZWN0LnJpZ2h0ICA9IG5ld1dpbmRvd1JlY3QubGVmdCArIHdpbnBvcy5jeDsKKyAgICAgICAgbmV3V2luZG93UmVjdC5ib3R0b20gPSBuZXdXaW5kb3dSZWN0LnRvcCArIHdpbnBvcy5jeTsKICAgICB9Ci0gICAgaWYgKCEod2lucG9zLT5mbGFncyAmIFNXUF9OT01PVkUpKQorICAgIGlmICghKHdpbnBvcy5mbGFncyAmIFNXUF9OT01PVkUpKQogICAgIHsKLSAgICAgICAgbmV3V2luZG93UmVjdC5sZWZ0ICAgID0gd2lucG9zLT54OwotICAgICAgICBuZXdXaW5kb3dSZWN0LnRvcCAgICAgPSB3aW5wb3MtPnk7Ci0gICAgICAgIG5ld1dpbmRvd1JlY3QucmlnaHQgICs9IHdpbnBvcy0+eCAtIHduZFB0ci0+cmVjdFdpbmRvdy5sZWZ0OwotICAgICAgICBuZXdXaW5kb3dSZWN0LmJvdHRvbSArPSB3aW5wb3MtPnkgLSB3bmRQdHItPnJlY3RXaW5kb3cudG9wOworICAgICAgICBuZXdXaW5kb3dSZWN0LmxlZnQgICAgPSB3aW5wb3MueDsKKyAgICAgICAgbmV3V2luZG93UmVjdC50b3AgICAgID0gd2lucG9zLnk7CisgICAgICAgIG5ld1dpbmRvd1JlY3QucmlnaHQgICs9IHdpbnBvcy54IC0gd25kUHRyLT5yZWN0V2luZG93LmxlZnQ7CisgICAgICAgIG5ld1dpbmRvd1JlY3QuYm90dG9tICs9IHdpbnBvcy55IC0gd25kUHRyLT5yZWN0V2luZG93LnRvcDsKIAotCU9mZnNldFJlY3QxNiggJm5ld0NsaWVudFJlY3QsIHdpbnBvcy0+eCAtIHduZFB0ci0+cmVjdFdpbmRvdy5sZWZ0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lucG9zLT55IC0gd25kUHRyLT5yZWN0V2luZG93LnRvcCApOworCU9mZnNldFJlY3QzMiggJm5ld0NsaWVudFJlY3QsIHdpbnBvcy54IC0gd25kUHRyLT5yZWN0V2luZG93LmxlZnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5wb3MueSAtIHduZFB0ci0+cmVjdFdpbmRvdy50b3AgKTsKICAgICB9CiAKLSAgICB3aW5wb3MtPmZsYWdzIHw9IFNXUF9OT0NMSUVOVE1PVkUgfCBTV1BfTk9DTElFTlRTSVpFOworICAgIHdpbnBvcy5mbGFncyB8PSBTV1BfTk9DTElFTlRNT1ZFIHwgU1dQX05PQ0xJRU5UU0laRTsKIAogICAgICAgLyogUmVwb3NpdGlvbiB3aW5kb3cgaW4gWiBvcmRlciAqLwogCi0gICAgaWYgKCEod2lucG9zLT5mbGFncyAmIFNXUF9OT1pPUkRFUikpCisgICAgaWYgKCEod2lucG9zLmZsYWdzICYgU1dQX05PWk9SREVSKSkKICAgICB7CiAJLyogcmVvcmRlciBvd25lZCBwb3B1cHMgaWYgaHduZCBpcyB0b3AtbGV2ZWwgd2luZG93IAogICAgICAgICAgKi8KQEAgLTIwODEsMTAgKzIwODQsMTAgQEAKIAogICAgICAgICBpZiAod25kUHRyLT53aW5kb3cpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFdJTl9VbmxpbmtXaW5kb3coIHdpbnBvcy0+aHduZCApOwotICAgICAgICAgICAgV0lOX0xpbmtXaW5kb3coIHdpbnBvcy0+aHduZCwgaHduZEluc2VydEFmdGVyICk7CisgICAgICAgICAgICBXSU5fVW5saW5rV2luZG93KCB3aW5wb3MuaHduZCApOworICAgICAgICAgICAgV0lOX0xpbmtXaW5kb3coIHdpbnBvcy5od25kLCBod25kSW5zZXJ0QWZ0ZXIgKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIFdJTlBPU19Nb3ZlV2luZG93Wk9yZGVyKCB3aW5wb3MtPmh3bmQsIGh3bmRJbnNlcnRBZnRlciApOworICAgICAgICBlbHNlIFdJTlBPU19Nb3ZlV2luZG93Wk9yZGVyKCB3aW5wb3MuaHduZCwgaHduZEluc2VydEFmdGVyICk7CiAgICAgfQogCiAgICAgaWYgKCAhd25kUHRyLT53aW5kb3cgJiYgIShmbGFncyAmIFNXUF9OT1JFRFJBVykgJiYgCkBAIC0yMDk1LDM2ICsyMDk4LDM2IEBACiAgICAgICAvKiBTZW5kIFdNX05DQ0FMQ1NJWkUgbWVzc2FnZSB0byBnZXQgbmV3IGNsaWVudCBhcmVhICovCiAgICAgaWYoIChmbGFncyAmIChTV1BfRlJBTUVDSEFOR0VEIHwgU1dQX05PU0laRSkpICE9IFNXUF9OT1NJWkUgKQogICAgICAgewotICAgICAgICAgcmVzdWx0ID0gV0lOUE9TX1NlbmROQ0NhbGNTaXplKCB3aW5wb3MtPmh3bmQsIFRSVUUsICZuZXdXaW5kb3dSZWN0LAorICAgICAgICAgcmVzdWx0ID0gV0lOUE9TX1NlbmROQ0NhbGNTaXplKCB3aW5wb3MuaHduZCwgVFJVRSwgJm5ld1dpbmRvd1JlY3QsCiAJCQkJICAgICZ3bmRQdHItPnJlY3RXaW5kb3csICZ3bmRQdHItPnJlY3RDbGllbnQsCi0JCQkJICAgIFNFR1BUUl9HRVQod2lucG9zKSwgJm5ld0NsaWVudFJlY3QgKTsKKwkJCQkgICAgJndpbnBvcywgJm5ld0NsaWVudFJlY3QgKTsKIAogICAgICAgICAgLyogRklYTUU6IFdWUl9BTElHTnh4eCAqLwogCiAgICAgICAgICBpZiggbmV3Q2xpZW50UmVjdC5sZWZ0ICE9IHduZFB0ci0+cmVjdENsaWVudC5sZWZ0IHx8CiAgICAgICAgICAgICAgbmV3Q2xpZW50UmVjdC50b3AgIT0gd25kUHRyLT5yZWN0Q2xpZW50LnRvcCApCi0gICAgICAgICAgICAgd2lucG9zLT5mbGFncyAmPSB+U1dQX05PQ0xJRU5UTU9WRTsKKyAgICAgICAgICAgICB3aW5wb3MuZmxhZ3MgJj0gflNXUF9OT0NMSUVOVE1PVkU7CiAKICAgICAgICAgIGlmKCAobmV3Q2xpZW50UmVjdC5yaWdodCAtIG5ld0NsaWVudFJlY3QubGVmdCAhPQogICAgICAgICAgICAgIHduZFB0ci0+cmVjdENsaWVudC5yaWdodCAtIHduZFB0ci0+cmVjdENsaWVudC5sZWZ0KSB8fAogICAJICAgIChuZXdDbGllbnRSZWN0LmJvdHRvbSAtIG5ld0NsaWVudFJlY3QudG9wICE9CiAJICAgICB3bmRQdHItPnJlY3RDbGllbnQuYm90dG9tIC0gd25kUHRyLT5yZWN0Q2xpZW50LnRvcCkgKQotCSAgICAgd2lucG9zLT5mbGFncyAmPSB+U1dQX05PQ0xJRU5UU0laRTsKKwkgICAgIHdpbnBvcy5mbGFncyAmPSB+U1dQX05PQ0xJRU5UU0laRTsKICAgICAgIH0KICAgICBlbHNlCiAgICAgICBpZiggIShmbGFncyAmIFNXUF9OT01PVkUpICYmIChuZXdDbGllbnRSZWN0LmxlZnQgIT0gd25kUHRyLT5yZWN0Q2xpZW50LmxlZnQgfHwKIAkJCQkgICAgbmV3Q2xpZW50UmVjdC50b3AgIT0gd25kUHRyLT5yZWN0Q2xpZW50LnRvcCkgKQotCSAgICB3aW5wb3MtPmZsYWdzICY9IH5TV1BfTk9DTElFTlRNT1ZFOworCSAgICB3aW5wb3MuZmxhZ3MgJj0gflNXUF9OT0NMSUVOVE1PVkU7CiAKICAgICAvKiBVcGRhdGUgYWN0aXZlIERDRXMgKi8KIAogICAgIGlmKCAhKGZsYWdzICYgU1dQX05PWk9SREVSKSB8fCAoZmxhZ3MgJiBTV1BfSElERVdJTkRPVykgfHwgKGZsYWdzICYgU1dQX1NIT1dXSU5ET1cpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtZW1jbXAoJm5ld1dpbmRvd1JlY3QsJnduZFB0ci0+cmVjdFdpbmRvdyxzaXplb2YoUkVDVDE2KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG1lbWNtcCgmbmV3V2luZG93UmVjdCwmd25kUHRyLT5yZWN0V2luZG93LHNpemVvZihuZXdXaW5kb3dSZWN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHduZFB0ci0+ZHdTdHlsZSAmIFdTX1ZJU0lCTEUgKSApCiAgICAgICB7Ci0gICAgICAgIFJFQ1QxNiByZWN0OworICAgICAgICBSRUNUMzIgcmVjdDsKIAotICAgICAgICBVbmlvblJlY3QxNigmcmVjdCwmbmV3V2luZG93UmVjdCwmd25kUHRyLT5yZWN0V2luZG93KTsKKyAgICAgICAgVW5pb25SZWN0MzIoJnJlY3QsJm5ld1dpbmRvd1JlY3QsJnduZFB0ci0+cmVjdFdpbmRvdyk7CiAgICAgICAgIERDRV9JbnZhbGlkYXRlRENFKHduZFB0ci0+cGFyZW50LCAmcmVjdCk7CiAgICAgICB9CiAKQEAgLTIxMzQsMTggKzIxMzcsMTggQEAKIAogICAgIGlmICh3bmRQdHItPndpbmRvdykKICAgICB7Ci0gICAgICAgIFJFQ1QxNiBvbGRDbGllbnRSZWN0ID0gd25kUHRyLT5yZWN0Q2xpZW50OworICAgICAgICBSRUNUMzIgb2xkQ2xpZW50UmVjdCA9IHduZFB0ci0+cmVjdENsaWVudDsKIAotICAgICAgICB0ZW1wSW5zZXJ0QWZ0ZXIgPSB3aW5wb3MtPmh3bmRJbnNlcnRBZnRlcjsKKyAgICAgICAgdGVtcEluc2VydEFmdGVyID0gd2lucG9zLmh3bmRJbnNlcnRBZnRlcjsKIAotICAgICAgICB3aW5wb3MtPmh3bmRJbnNlcnRBZnRlciA9IGh3bmRJbnNlcnRBZnRlcjsKKyAgICAgICAgd2lucG9zLmh3bmRJbnNlcnRBZnRlciA9IGh3bmRJbnNlcnRBZnRlcjsKIAogCS8qIHBvc3Rwb25lIGdlb21ldHJ5IGNoYW5nZSAqLwogCiAJaWYoICEoZmxhZ3MgJiAoU1dQX1NIT1dXSU5ET1cgfCBTV1BfSElERVdJTkRPVykpICkKIAkgIHsKLSAgICAgICAgICAgICAgV0lOUE9TX1NldFhXaW5kb3dQb3MoIHdpbnBvcyApOwotCSAgICAgIHdpbnBvcy0+aHduZEluc2VydEFmdGVyID0gdGVtcEluc2VydEFmdGVyOworICAgICAgICAgICAgICBXSU5QT1NfU2V0WFdpbmRvd1BvcyggJndpbnBvcyApOworCSAgICAgIHdpbnBvcy5od25kSW5zZXJ0QWZ0ZXIgPSB0ZW1wSW5zZXJ0QWZ0ZXI7CiAJICB9CiAJZWxzZSAgdUZsYWdzIHw9IFNNQ19TRVRYUE9TOwogCkBAIC0yMTU2LDEyICsyMTU5LDEzIEBACiAJICBpZiggKG9sZENsaWVudFJlY3QubGVmdCAtIG9sZFdpbmRvd1JlY3QubGVmdCAhPQogCSAgICAgICBuZXdDbGllbnRSZWN0LmxlZnQgLSBuZXdXaW5kb3dSZWN0LmxlZnQpIHx8CiAJICAgICAgKG9sZENsaWVudFJlY3QudG9wIC0gb2xkV2luZG93UmVjdC50b3AgIT0KLQkgICAgICAgbmV3Q2xpZW50UmVjdC50b3AgLSBuZXdXaW5kb3dSZWN0LnRvcCkgfHwgd2lucG9zLT5mbGFncyAmIFNXUF9OT0NPUFlCSVRTICkKKwkgICAgICAgbmV3Q2xpZW50UmVjdC50b3AgLSBuZXdXaW5kb3dSZWN0LnRvcCkgfHwKKyAgICAgICAgICAgICAgd2lucG9zLmZsYWdzICYgU1dQX05PQ09QWUJJVFMgKQogCiAJICAgICAgUEFJTlRfUmVkcmF3V2luZG93KCB3bmRQdHItPmh3bmRTZWxmLCBOVUxMLCAwLCBSRFdfSU5WQUxJREFURSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRFdfQUxMQ0hJTERSRU4gfCBSRFdfRlJBTUUgfCBSRFdfRVJBU0UsIDAgKTsKIAkgIGVsc2UKLQkgICAgICBpZiggd2lucG9zLT5mbGFncyAmIFNXUF9GUkFNRUNIQU5HRUQgKQorCSAgICAgIGlmKCB3aW5wb3MuZmxhZ3MgJiBTV1BfRlJBTUVDSEFOR0VEICkKIAkgICAgICB7CiAJCVdPUkQgd0VyYXNlID0gMDsKIAkJUkVDVDMyIHJlY3Q7CkBAIC0yMTg4LDcgKzIxOTIsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotCVJFQ1QxNiBvbGRDbGllbnRSZWN0ID0gd25kUHRyLT5yZWN0Q2xpZW50OworCVJFQ1QzMiBvbGRDbGllbnRSZWN0ID0gd25kUHRyLT5yZWN0Q2xpZW50OwogCiAgICAgICAgIHduZFB0ci0+cmVjdFdpbmRvdyA9IG5ld1dpbmRvd1JlY3Q7CiAgICAgICAgIHduZFB0ci0+cmVjdENsaWVudCA9IG5ld0NsaWVudFJlY3Q7CkBAIC0yMjAxLDE5ICsyMjA1LDE5IEBACiAKICAgICAgICAgaWYoICEoZmxhZ3MgJiAoU1dQX05PUkVEUkFXIHwgU1dQX0hJREVXSU5ET1cgfCBTV1BfU0hPV1dJTkRPVykpICkKIAkgIHsKLQkgICAgdUZsYWdzIHw9ICAoKHdpbnBvcy0+ZmxhZ3MgJiBTV1BfTk9DT1BZQklUUykgfHwgCisJICAgIHVGbGFncyB8PSAgKCh3aW5wb3MuZmxhZ3MgJiBTV1BfTk9DT1BZQklUUykgfHwgCiAJCQkocmVzdWx0ID49IFdWUl9IUkVEUkFXICYmIHJlc3VsdCA8IFdWUl9WQUxJRFJFQ1RTKSkgPyBTTUNfTk9DT1BZIDogMDsKLQkgICAgdUZsYWdzIHw9ICAod2lucG9zLT5mbGFncyAmIFNXUF9GUkFNRUNIQU5HRUQpID8gU01DX0RSQVdGUkFNRSA6IDA7CisJICAgIHVGbGFncyB8PSAgKHdpbnBvcy5mbGFncyAmIFNXUF9GUkFNRUNIQU5HRUQpID8gU01DX0RSQVdGUkFNRSA6IDA7CiAKLQkgICAgaWYoICh3aW5wb3MtPmZsYWdzICYgU1dQX0FHR19OT0dFT01FVFJZQ0hBTkdFKSAhPSBTV1BfQUdHX05PR0VPTUVUUllDSEFOR0UgKQorCSAgICBpZiggKHdpbnBvcy5mbGFncyAmIFNXUF9BR0dfTk9HRU9NRVRSWUNIQU5HRSkgIT0gU1dQX0FHR19OT0dFT01FVFJZQ0hBTkdFICkKIAkJdUZsYWdzID0gV0lOUE9TX1NpemVNb3ZlQ2xlYW4od25kUHRyLCB2aXNSZ24sICZvbGRXaW5kb3dSZWN0LCAKIAkJCQkJCQkgICAgICAmb2xkQ2xpZW50UmVjdCwgdUZsYWdzKTsKIAkgICAgZWxzZQogCSAgICAgIHsgCiAJCS8qIGFkanVzdCBmcmFtZSBhbmQgZG8gbm90IGVyYXNlIHBhcmVudCAqLwogCi0JCWlmKCB3aW5wb3MtPmZsYWdzICYgU1dQX0ZSQU1FQ0hBTkdFRCApIHduZFB0ci0+ZmxhZ3MgfD0gV0lOX05FRURTX05DUEFJTlQ7Ci0JCWlmKCB3aW5wb3MtPmZsYWdzICYgU1dQX05PWk9SREVSICkgdUZsYWdzIHw9IFNNQ19OT1BBUkVOVEVSQVNFOworCQlpZiggd2lucG9zLmZsYWdzICYgU1dQX0ZSQU1FQ0hBTkdFRCApIHduZFB0ci0+ZmxhZ3MgfD0gV0lOX05FRURTX05DUEFJTlQ7CisJCWlmKCB3aW5wb3MuZmxhZ3MgJiBTV1BfTk9aT1JERVIgKSB1RmxhZ3MgfD0gU01DX05PUEFSRU5URVJBU0U7CiAJICAgICAgfQogCSAgfQogICAgICAgICBEZWxldGVPYmplY3QzMih2aXNSZ24pOwpAQCAtMjIyNiwxNSArMjIzMCwxNSBAQAogICAgICAgICB7CiAJICAgIGlmKCB1RmxhZ3MgJiBTTUNfU0VUWFBPUyApCiAJICAgIHsKLSAgICAgICAgICAgICAgV0lOUE9TX1NldFhXaW5kb3dQb3MoIHdpbnBvcyApOwotICAgICAgICAgICAgICB3aW5wb3MtPmh3bmRJbnNlcnRBZnRlciA9IHRlbXBJbnNlcnRBZnRlcjsKKyAgICAgICAgICAgICAgV0lOUE9TX1NldFhXaW5kb3dQb3MoICZ3aW5wb3MgKTsKKyAgICAgICAgICAgICAgd2lucG9zLmh3bmRJbnNlcnRBZnRlciA9IHRlbXBJbnNlcnRBZnRlcjsKIAkgICAgfQogICAgICAgICAgICAgWE1hcFdpbmRvdyggZGlzcGxheSwgd25kUHRyLT53aW5kb3cgKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghKGZsYWdzICYgU1dQX05PUkVEUkFXKSkKLSAgICAgICAgICAgICAgICBQQUlOVF9SZWRyYXdXaW5kb3coIHdpbnBvcy0+aHduZCwgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICBQQUlOVF9SZWRyYXdXaW5kb3coIHdpbnBvcy5od25kLCBOVUxMLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRFdfSU5WQUxJREFURSB8IFJEV19BTExDSElMRFJFTiB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJEV19GUkFNRSB8IFJEV19FUkFTRU5PVyB8IFJEV19FUkFTRSwgMCApOwogICAgICAgICB9CkBAIC0yMjQ3LDM4ICsyMjUxLDM1IEBACiAgICAgICAgICAgICBYVW5tYXBXaW5kb3coIGRpc3BsYXksIHduZFB0ci0+d2luZG93ICk7CiAJICAgIGlmKCB1RmxhZ3MgJiBTTUNfU0VUWFBPUyApCiAJICAgIHsKLSAgICAgICAgICAgICAgV0lOUE9TX1NldFhXaW5kb3dQb3MoIHdpbnBvcyApOwotICAgICAgICAgICAgICB3aW5wb3MtPmh3bmRJbnNlcnRBZnRlciA9IHRlbXBJbnNlcnRBZnRlcjsKKyAgICAgICAgICAgICAgV0lOUE9TX1NldFhXaW5kb3dQb3MoICZ3aW5wb3MgKTsKKyAgICAgICAgICAgICAgd2lucG9zLmh3bmRJbnNlcnRBZnRlciA9IHRlbXBJbnNlcnRBZnRlcjsKIAkgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBTV1BfTk9SRURSQVcpKQotCSAgICB7Ci0JICAgICAgICBSRUNUMzIgcmVjdCA9IHsgb2xkV2luZG93UmVjdC5sZWZ0LCBvbGRXaW5kb3dSZWN0LnRvcCwKLQkJCQlvbGRXaW5kb3dSZWN0LnJpZ2h0LCBvbGRXaW5kb3dSZWN0LmJvdHRvbSB9OwotICAgICAgICAgICAgICAgIFBBSU5UX1JlZHJhd1dpbmRvdyggd25kUHRyLT5wYXJlbnQtPmh3bmRTZWxmLCAmcmVjdCwgMCwgCi0JCQlSRFdfSU5WQUxJREFURSB8IFJEV19BTExDSElMRFJFTiB8IFJEV19FUkFTRSB8IFJEV19FUkFTRU5PVywgMCk7Ci0JICAgIH0KKyAgICAgICAgICAgICAgICBQQUlOVF9SZWRyYXdXaW5kb3coIHduZFB0ci0+cGFyZW50LT5od25kU2VsZiwgJm9sZFdpbmRvd1JlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBSRFdfSU5WQUxJREFURSB8IFJEV19BTExDSElMRFJFTiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRFdfRVJBU0UgfCBSRFdfRVJBU0VOT1csIDAgKTsKIAkgICAgdUZsYWdzIHw9IFNNQ19OT1BBUkVOVEVSQVNFOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCh3aW5wb3MtPmh3bmQgPT0gR2V0Rm9jdXMzMigpKSB8fAotICAgICAgICAgICAgSXNDaGlsZDMyKCB3aW5wb3MtPmh3bmQsIEdldEZvY3VzMzIoKSkpCisgICAgICAgIGlmICgod2lucG9zLmh3bmQgPT0gR2V0Rm9jdXMzMigpKSB8fAorICAgICAgICAgICAgSXNDaGlsZDMyKCB3aW5wb3MuaHduZCwgR2V0Rm9jdXMzMigpKSkKICAgICAgICAgewogICAgICAgICAgICAgLyogUmV2ZXJ0IGZvY3VzIHRvIHBhcmVudCAqLwotICAgICAgICAgICAgU2V0Rm9jdXMzMiggR2V0UGFyZW50MzIod2lucG9zLT5od25kKSApOworICAgICAgICAgICAgU2V0Rm9jdXMzMiggR2V0UGFyZW50MzIod2lucG9zLmh3bmQpICk7CiAgICAgICAgIH0KIAlpZiAoaHduZCA9PSBDQVJFVF9HZXRId25kKCkpIERlc3Ryb3lDYXJldDMyKCk7CiAKLQlpZiAod2lucG9zLT5od25kID09IGh3bmRBY3RpdmUpCisJaWYgKHdpbnBvcy5od25kID09IGh3bmRBY3RpdmUpCiAJewogCSAgICAgIC8qIEFjdGl2YXRlIHByZXZpb3VzbHkgYWN0aXZlIHdpbmRvdyBpZiBwb3NzaWJsZSAqLwogCSAgICBIV05EMzIgbmV3QWN0aXZlID0gaHduZFByZXZBY3RpdmU7Ci0JICAgIGlmICghSXNXaW5kb3czMihuZXdBY3RpdmUpIHx8IChuZXdBY3RpdmUgPT0gd2lucG9zLT5od25kKSkKKwkgICAgaWYgKCFJc1dpbmRvdzMyKG5ld0FjdGl2ZSkgfHwgKG5ld0FjdGl2ZSA9PSB3aW5wb3MuaHduZCkpCiAJICAgIHsKIAkJbmV3QWN0aXZlID0gR2V0VG9wV2luZG93MzIoIEdldERlc2t0b3BXaW5kb3czMigpICk7Ci0JCWlmIChuZXdBY3RpdmUgPT0gd2lucG9zLT5od25kKQorCQlpZiAobmV3QWN0aXZlID09IHdpbnBvcy5od25kKQogICAgICAgICAgICAgICAgICAgICBuZXdBY3RpdmUgPSB3bmRQdHItPm5leHQgPyB3bmRQdHItPm5leHQtPmh3bmRTZWxmIDogMDsKIAkgICAgfQkgICAgCiAJICAgIFdJTlBPU19DaGFuZ2VBY3RpdmVXaW5kb3coIG5ld0FjdGl2ZSwgRkFMU0UgKTsKQEAgLTIyODgsNyArMjI4OSw3IEBACiAgICAgICAvKiBBY3RpdmF0ZSB0aGUgd2luZG93ICovCiAKICAgICBpZiAoIShmbGFncyAmIFNXUF9OT0FDVElWQVRFKSkKLQkgICAgV0lOUE9TX0NoYW5nZUFjdGl2ZVdpbmRvdyggd2lucG9zLT5od25kLCBGQUxTRSApOworCSAgICBXSU5QT1NfQ2hhbmdlQWN0aXZlV2luZG93KCB3aW5wb3MuaHduZCwgRkFMU0UgKTsKICAgICAKICAgICAgIC8qIFJlcGFpbnQgdGhlIHdpbmRvdyAqLwogCkBAIC0yMjk5LDExICsyMzAwLDEwIEBACiAKICAgICBpZiAoIShmbGFncyAmIFNXUF9ERUZFUkVSQVNFKSAmJiAhKHVGbGFncyAmIFNNQ19OT1BBUkVOVEVSQVNFKSApCiAgICAgewotCVJFQ1QzMglyZWN0OwotCUNPTlZfUkVDVDE2VE8zMiggJm9sZFdpbmRvd1JlY3QsICZyZWN0ICk7Ci0gICAgICAgIFBBSU5UX1JlZHJhd1dpbmRvdyggd25kUHRyLT5wYXJlbnQtPmh3bmRTZWxmLCAod25kUHRyLT5mbGFncyAmIFdJTl9TQVZFVU5ERVJfT1ZFUlJJREUpIAotCQkJICAgID8gJnJlY3QgOiBOVUxMLCAwLCBSRFdfQUxMQ0hJTERSRU4gfCBSRFdfRVJBU0VOT1cgfAotCQkJICAoKHduZFB0ci0+ZmxhZ3MgJiBXSU5fU0FWRVVOREVSX09WRVJSSURFKSA/IFJEV19JTlZBTElEQVRFIDogMCksIDAgKTsKKyAgICAgICAgUEFJTlRfUmVkcmF3V2luZG93KCB3bmRQdHItPnBhcmVudC0+aHduZFNlbGYsCisgICAgICAgICAgICAgICh3bmRQdHItPmZsYWdzICYgV0lOX1NBVkVVTkRFUl9PVkVSUklERSkgPyAmb2xkV2luZG93UmVjdCA6IE5VTEwsCisgICAgICAgICAgICAgIDAsIFJEV19BTExDSElMRFJFTiB8IFJEV19FUkFTRU5PVyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh3bmRQdHItPmZsYWdzICYgV0lOX1NBVkVVTkRFUl9PVkVSUklERSkgPyBSRFdfSU5WQUxJREFURSA6IDApLCAwICk7CiAgICAgICAgIHduZFB0ci0+ZmxhZ3MgJj0gfldJTl9TQVZFVU5ERVJfT1ZFUlJJREU7CiAgICAgfQogICAgIGVsc2UgaWYoIHduZFB0ci0+cGFyZW50ID09IFdJTl9HZXREZXNrdG9wKCkgJiYgd25kUHRyLT5wYXJlbnQtPmZsYWdzICYgV0lOX05FRURTX0VSQVNFQktHTkQgKQpAQCAtMjMxMSwxNCArMjMxMSwxMyBAQAogCiAgICAgICAvKiBBbmQgbGFzdCwgc2VuZCB0aGUgV01fV0lORE9XUE9TQ0hBTkdFRCBtZXNzYWdlICovCiAKLSAgICBkcHJpbnRmX3dpbihzdGRkZWIsIlx0c3RhdHVzIGZsYWdzID0gJTA0eFxuIiwgd2lucG9zLT5mbGFncyAmIFNXUF9BR0dfU1RBVFVTRkxBR1MpOworICAgIGRwcmludGZfd2luKHN0ZGRlYiwiXHRzdGF0dXMgZmxhZ3MgPSAlMDR4XG4iLCB3aW5wb3MuZmxhZ3MgJiBTV1BfQUdHX1NUQVRVU0ZMQUdTKTsKIAotICAgIGlmICggKCh3aW5wb3MtPmZsYWdzICYgU1dQX0FHR19TVEFUVVNGTEFHUykgIT0gU1dQX0FHR19OT1BPU0NIQU5HRSkgJiYgCi0JISh3aW5wb3MtPmZsYWdzICYgU1dQX05PU0VORENIQU5HSU5HKSkKLSAgICAgICAgU2VuZE1lc3NhZ2UxNiggd2lucG9zLT5od25kLCBXTV9XSU5ET1dQT1NDSEFOR0VELAotICAgICAgICAgICAgICAgICAgICAgICAwLCAoTFBBUkFNKVNFR1BUUl9HRVQod2lucG9zKSApOworICAgIGlmICggKCh3aW5wb3MuZmxhZ3MgJiBTV1BfQUdHX1NUQVRVU0ZMQUdTKSAhPSBTV1BfQUdHX05PUE9TQ0hBTkdFKSAmJiAKKwkhKHdpbnBvcy5mbGFncyAmIFNXUF9OT1NFTkRDSEFOR0lORykpCisgICAgICAgIFNlbmRNZXNzYWdlMzJBKCB3aW5wb3MuaHduZCwgV01fV0lORE9XUE9TQ0hBTkdFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsIChMUEFSQU0pJndpbnBvcyApOwogCi0gICAgU0VHUFRSX0ZSRUUod2lucG9zKTsKICAgICByZXR1cm4gVFJVRTsKIH0KIApkaWZmIC0tZ2l0IGEvd2luZG93cy93aW5wcm9jLmMgYi93aW5kb3dzL3dpbnByb2MuYwppbmRleCA5ZTdlM2IzLi4xMDEzOWU2IDEwMDY0NAotLS0gYS93aW5kb3dzL3dpbnByb2MuYworKysgYi93aW5kb3dzL3dpbnByb2MuYwpAQCAtMTg0OCwxMSArMTg0OCwxMiBAQAogewogICAgIExSRVNVTFQgcmVzdWx0OwogICAgIFdORCAqd25kUHRyOworICAgIFdPUkQgZHM7CiAgICAgV0lORE9XUFJPQyAqcHJvYyA9IFdJTlBST0NfR2V0UHRyKCBmdW5jICk7Ci0gICAgV09SRCBkcyA9IENVUlJFTlRfRFM7CiAKICAgICBpZiAoIXByb2MpCiAgICAgeworICAgICAgICBkcyA9IENVUlJFTlRfRFM7CiAgICAgICAgIHduZFB0ciA9IFdJTl9GaW5kV25kUHRyKCBod25kICk7CiAgICAgICAgIGlmICh3bmRQdHIpIENVUlJFTlRfRFMgPSB3bmRQdHItPmhJbnN0YW5jZTsKICAgICAgICAgcmVzdWx0ID0gV0lOUFJPQ19DYWxsV25kUHJvYzE2UHRyKCBmdW5jLCBod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtICk7CkBAIC0xODcyLDYgKzE4NzMsNyBAQAogICAgIHsKICAgICBjYXNlIFdJTl9QUk9DXzE2OgogICAgICAgICBpZiAoIXByb2MtPnRodW5rLnRfZnJvbTMyLnByb2MpIHJldHVybiAwOworICAgICAgICBkcyA9IENVUlJFTlRfRFM7CiAgICAgICAgIHduZFB0ciA9IFdJTl9GaW5kV25kUHRyKCBod25kICk7CiAgICAgICAgIGlmICh3bmRQdHIpIENVUlJFTlRfRFMgPSB3bmRQdHItPmhJbnN0YW5jZTsKICAgICAgICAgcmVzdWx0ID0gV0lOUFJPQ19DYWxsV25kUHJvYzE2UHRyKCBwcm9jLT50aHVuay50X2Zyb20zMi5wcm9jLApkaWZmIC0tZ2l0IGEvd2luZS5tYW4gYi93aW5lLm1hbgppbmRleCAwZjM2ZmRiLi5jNGQyNGViIDEwMDY0NAotLS0gYS93aW5lLm1hbgorKysgYi93aW5lLm1hbgpAQCAtMzMsNyArMzMsNyBAQAogQXQgcHJlc2VudCwgCiAuQiB3aW5lCiB3aWxsIHJ1biB1bmRlciBhbnkgTGludXgga2VybmVsIG1vcmUgcmVjZW50IHRoYW4gMC45OS4xMywgb3IKLXVuZGVyIHJlY2VudCByZWxlYXNlcyBvZiBOZXRCU0QgYW5kIEZyZWVCU0QuCit1bmRlciByZWNlbnQgcmVsZWFzZXMgb2YgTmV0QlNEL2kzODYsIEZyZWVCU0QgYW5kIE9wZW5CU0QvaTM4Ni4KIC5QUAogLkIgWAogbXVzdCBiZSBpbnN0YWxsZWQuCg==